class OpenSSL::OCSP::Response - Documentation for Ruby 3.3

# class OpenSSL::OCSP::Response

An `OpenSSL::OCSP::Response` contains the status of a certificate check which is created from an `OpenSSL::OCSP::Request`.

### Public Class Methods

OpenSSL::OCSP::Response.create(status, basic_response = nil) → response click to toggle source

Creates an `OpenSSL::OCSP::Response` from status and basic_response.

    static VALUE
    ossl_ocspres_s_create(VALUE klass, VALUE status, VALUE basic_resp)
    {
        OCSP_BASICRESP *bs;
        OCSP_RESPONSE *res;
        VALUE obj;
        int st = NUM2INT(status);

        if(NIL_P(basic_resp)) bs = NULL;
        else GetOCSPBasicRes(basic_resp, bs); /* NO NEED TO DUP */
        obj = NewOCSPRes(klass);
        if(!(res = OCSP_response_create(st, bs)))
            ossl_raise(eOCSPError, NULL);
        SetOCSPRes(obj, res);

        return obj;
    }

OpenSSL::OCSP::Response.new → response click to toggle source
OpenSSL::OCSP::Response.new(response_der) → response

Creates a new `OpenSSL::OCSP::Response`. The response may be created empty or from a response_der string.

    static VALUE
    ossl_ocspres_initialize(int argc, VALUE *argv, VALUE self)
    {
        VALUE arg;
        OCSP_RESPONSE *res, *res_new;
        const unsigned char *p;

        rb_scan_args(argc, argv, "01", &arg);
        if(!NIL_P(arg)){
            GetOCSPRes(self, res);
            arg = ossl_to_der_if_possible(arg);
            StringValue(arg);
            p = (unsigned char *)RSTRING_PTR(arg);
            res_new = d2i_OCSP_RESPONSE(NULL, &p, RSTRING_LEN(arg));
            if (!res_new)
                ossl_raise(eOCSPError, "d2i_OCSP_RESPONSE");
            SetOCSPRes(self, res_new);
            OCSP_RESPONSE_free(res);
        }

        return self;
    }

### Public Instance Methods

basic click to toggle source

Returns a `BasicResponse` for this response

    static VALUE
    ossl_ocspres_get_basic(VALUE self)
    {
        OCSP_RESPONSE *res;
        OCSP_BASICRESP *bs;
        VALUE ret;

        GetOCSPRes(self, res);
        ret = NewOCSPBasicRes(cOCSPBasicRes);
        if(!(bs = OCSP_response_get1_basic(res)))
            return Qnil;
        SetOCSPBasicRes(ret, bs);

        return ret;
    }

initialize_copy(p1) click to toggle source

    static VALUE
    ossl_ocspres_initialize_copy(VALUE self, VALUE other)
    {
        OCSP_RESPONSE *res, *res_old, *res_new;

        rb_check_frozen(self);
        GetOCSPRes(self, res_old);
        GetOCSPRes(other, res);

        res_new = ASN1_item_dup(ASN1_ITEM_rptr(OCSP_RESPONSE), res);
        if (!res_new)
            ossl_raise(eOCSPError, "ASN1_item_dup");

        SetOCSPRes(self, res_new);
        OCSP_RESPONSE_free(res_old);

        return self;
    }

status → Integer click to toggle source

Returns the status of the response.

    static VALUE
    ossl_ocspres_status(VALUE self)
    {
        OCSP_RESPONSE *res;
        int st;

        GetOCSPRes(self, res);
        st = OCSP_response_status(res);

        return INT2NUM(st);
    }

status_string → String click to toggle source

Returns a status string for the response.

    static VALUE
    ossl_ocspres_status_string(VALUE self)
    {
        OCSP_RESPONSE *res;
        int st;

        GetOCSPRes(self, res);
        st = OCSP_response_status(res);

        return rb_str_new2(OCSP_response_status_str(st));
    }

to_der → String click to toggle source

Returns this response as a DER-encoded string.

    static VALUE
    ossl_ocspres_to_der(VALUE self)
    {
        OCSP_RESPONSE *res;
        VALUE str;
        long len;
        unsigned char *p;

        GetOCSPRes(self, res);
        if((len = i2d_OCSP_RESPONSE(res, NULL)) <= 0)
            ossl_raise(eOCSPError, NULL);
        str = rb_str_new(0, len);
        p = (unsigned char *)RSTRING_PTR(str);
        if(i2d_OCSP_RESPONSE(res, &p) <= 0)
            ossl_raise(eOCSPError, NULL);
        ossl_str_adjust(str, p);

        return str;
    }