PKI_OCSP_RESP *PKI_OCSP_RESP_new ( void ) { // Crypto Provider's specific data structures PKI_X509_OCSP_RESP_VALUE *r = NULL; OCSP_BASICRESP *bs = NULL; // Return container PKI_OCSP_RESP * ret = NULL; // Allocates the response object if ((r = OCSP_RESPONSE_new()) == NULL) { PKI_ERROR(PKI_ERR_MEMORY_ALLOC, NULL); return NULL; } // Sets the initial state to "Success" if (!(ASN1_ENUMERATED_set(r->responseStatus, PKI_X509_OCSP_RESP_STATUS_SUCCESSFUL))) { PKI_ERROR(PKI_ERR_MEMORY_ALLOC, NULL); if (r) OCSP_RESPONSE_free (r); return NULL; } // Creates the basic response object if ((bs = OCSP_BASICRESP_new()) == NULL) { PKI_ERROR(PKI_ERR_MEMORY_ALLOC, NULL); if( r ) OCSP_RESPONSE_free ( r ); return ( NULL ); } // Let's now create the outer container if(( ret = (PKI_OCSP_RESP *) PKI_Malloc (sizeof(PKI_OCSP_RESP)))==NULL) { PKI_ERROR(PKI_ERR_MEMORY_ALLOC, NULL); if ( bs ) OCSP_BASICRESP_free ( bs ); if ( r ) OCSP_RESPONSE_free ( r ); return NULL; } // Transfer ownership of r and bs to the container ret->resp = r; ret->bs = bs; // Success - object created return ret; }
static VALUE ossl_ocspres_alloc(VALUE klass) { OCSP_RESPONSE *res; VALUE obj; if(!(res = OCSP_RESPONSE_new())) ossl_raise(eOCSPError, NULL); WrapOCSPRes(klass, obj, res); return obj; }
/* Create an OCSP response and encode an optional basic response */ OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs) { OCSP_RESPONSE *rsp = NULL; if (!(rsp = OCSP_RESPONSE_new())) goto err; if (!(ASN1_ENUMERATED_set(rsp->responseStatus, status))) goto err; if (!bs) return rsp; if (!(rsp->responseBytes = OCSP_RESPBYTES_new())) goto err; rsp->responseBytes->responseType = OBJ_nid2obj(NID_id_pkix_OCSP_basic); if (!ASN1_item_pack(bs, ASN1_ITEM_rptr(OCSP_BASICRESP), &rsp->responseBytes->response)) goto err; return rsp; err: if (rsp) OCSP_RESPONSE_free(rsp); return NULL; }