class OpenSSL::OCSP::CertificateId - Documentation for Ruby 4.0
Description: class OpenSSL::OCSP::CertificateId: CertificateId identifies a certificate to the CA so that a status check can be performed.
Keywords: ruby,class,OpenSSL::OCSP::CertificateId

🔍

No recent searches

# class OpenSSL::OCSP::CertificateId

An `OpenSSL::OCSP::CertificateId` identifies a certificate to the CA so that a status check can be performed.

### Public Class Methods

OpenSSL::OCSP::CertificateId.new(subject, issuer, digest = nil) → certificate_id
OpenSSL::OCSP::CertificateId.new(der_string) → certificate_id
OpenSSL::OCSP::CertificateId.new(obj) → certificate_id
Source

    static VALUE
    ossl_ocspcid_initialize(int argc, VALUE *argv, VALUE self)
    {
        OCSP_CERTID *id, *newid;
        VALUE subject, issuer, digest;

        GetOCSPCertId(self, id);
        if (rb_scan_args(argc, argv, "12", &subject, &issuer, &digest) == 1) {
            VALUE arg;
            const unsigned char *p;

            arg = ossl_to_der_if_possible(subject);
            StringValue(arg);
            p = (unsigned char *)RSTRING_PTR(arg);
            newid = d2i_OCSP_CERTID(NULL, &p, RSTRING_LEN(arg));
            if (!newid)
                ossl_raise(eOCSPError, "d2i_OCSP_CERTID");
        }
        else {
            X509 *x509s, *x509i;
            const EVP_MD *md;
            VALUE md_holder;

            x509s = GetX509CertPtr(subject); /* NO NEED TO DUP */
            x509i = GetX509CertPtr(issuer); /* NO NEED TO DUP */
            md = NIL_P(digest) ? NULL : ossl_evp_md_fetch(digest, &md_holder);

            newid = OCSP_cert_to_id(md, x509s, x509i);
            if (!newid)
                ossl_raise(eOCSPError, "OCSP_cert_to_id");
        }

        SetOCSPCertId(self, newid);
        OCSP_CERTID_free(id);

        return self;
    }

Creates a new `OpenSSL::OCSP::CertificateId` for the given subject and issuer `X509` certificates. The digest is a digest algorithm that is used to compute the hash values. This defaults to SHA-1.

If only one argument is given, decodes it as DER representation of a certificate ID or generates certificate ID from the object that responds to the `to_der` method.

### Public Instance Methods

cmp(other) → true or false
Source

    static VALUE
    ossl_ocspcid_cmp(VALUE self, VALUE other)
    {
        OCSP_CERTID *id, *id2;
        int result;

        GetOCSPCertId(self, id);
        GetOCSPCertId(other, id2);
        result = OCSP_id_cmp(id, id2);

        return (result == 0) ? Qtrue : Qfalse;
    }

Compares this certificate id with other and returns `true` if they are the same.

cmp_issuer(other) → true or false
Source

    static VALUE
    ossl_ocspcid_cmp_issuer(VALUE self, VALUE other)
    {
        OCSP_CERTID *id, *id2;
        int result;

        GetOCSPCertId(self, id);
        GetOCSPCertId(other, id2);
        result = OCSP_id_issuer_cmp(id, id2);

        return (result == 0) ? Qtrue : Qfalse;
    }

Compares this certificate id’s issuer with other and returns `true` if they are the same.

hash_algorithm → String
Source

    static VALUE
    ossl_ocspcid_get_hash_algorithm(VALUE self)
    {
        OCSP_CERTID *id;
        ASN1_OBJECT *oid;

        GetOCSPCertId(self, id);
        OCSP_id_get0_info(NULL, &oid, NULL, NULL, id);
        return ossl_asn1obj_to_string_long_name(oid);
    }

Returns the ln (long name) of the hash algorithm used to generate the issuerNameHash and the issuerKeyHash values.

issuer_key_hash → String
Source

    static VALUE
    ossl_ocspcid_get_issuer_key_hash(VALUE self)
    {
        OCSP_CERTID *id;
        ASN1_OCTET_STRING *key_hash;
        VALUE ret;

        GetOCSPCertId(self, id);
        OCSP_id_get0_info(NULL, NULL, &key_hash, NULL, id);

        ret = rb_str_new(NULL, ASN1_STRING_length(key_hash) * 2);
        ossl_bin2hex(ASN1_STRING_get0_data(key_hash), RSTRING_PTR(ret),
                     ASN1_STRING_length(key_hash));

        return ret;
    }

Returns the issuerKeyHash of this certificate ID, the hash of the issuer’s public key.

issuer_name_hash → String
Source

    static VALUE
    ossl_ocspcid_get_issuer_name_hash(VALUE self)
    {
        OCSP_CERTID *id;
        ASN1_OCTET_STRING *name_hash;
        VALUE ret;

        GetOCSPCertId(self, id);
        OCSP_id_get0_info(&name_hash, NULL, NULL, NULL, id);

        ret = rb_str_new(NULL, ASN1_STRING_length(name_hash) * 2);
        ossl_bin2hex(ASN1_STRING_get0_data(name_hash), RSTRING_PTR(ret),
                     ASN1_STRING_length(name_hash));

        return ret;
    }

Returns the issuerNameHash of this certificate ID, the hash of the issuer’s distinguished name calculated with the hashAlgorithm.

serial → Integer
Source

    static VALUE
    ossl_ocspcid_get_serial(VALUE self)
    {
        OCSP_CERTID *id;
        ASN1_INTEGER *serial;

        GetOCSPCertId(self, id);
        OCSP_id_get0_info(NULL, NULL, NULL, &serial, id);

        return asn1integer_to_num(serial);
    }

Returns the serial number of the certificate for which status is being requested.

to_der → String
Source

    static VALUE
    ossl_ocspcid_to_der(VALUE self)
    {
        OCSP_CERTID *id;
        VALUE str;
        long len;
        unsigned char *p;

        GetOCSPCertId(self, id);
        if ((len = i2d_OCSP_CERTID(id, NULL)) <= 0)
            ossl_raise(eOCSPError, NULL);
        str = rb_str_new(0, len);
        p = (unsigned char *)RSTRING_PTR(str);
        if (i2d_OCSP_CERTID(id, &p) <= 0)
            ossl_raise(eOCSPError, NULL);
        ossl_str_adjust(str, p);

        return str;
    }

Encodes this certificate identifier into a DER-encoded string.