TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX (TS_REQ * req, TS_VERIFY_CTX * ctx) { TS_VERIFY_CTX *ret = ctx; ASN1_OBJECT *policy; TS_MSG_IMPRINT *imprint; X509_ALGOR *md_alg; ASN1_OCTET_STRING *msg; const ASN1_INTEGER *nonce; OPENSSL_assert (req != NULL); if (ret) TS_VERIFY_CTX_cleanup (ret); else if (!(ret = TS_VERIFY_CTX_new ())) return NULL; /* Setting flags. */ ret->flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE); /* Setting policy. */ if ((policy = TS_REQ_get_policy_id (req)) != NULL) { if (!(ret->policy = OBJ_dup (policy))) goto err; } else ret->flags &= ~TS_VFY_POLICY; /* Setting md_alg, imprint and imprint_len. */ imprint = TS_REQ_get_msg_imprint (req); md_alg = TS_MSG_IMPRINT_get_algo (imprint); if (!(ret->md_alg = X509_ALGOR_dup (md_alg))) goto err; msg = TS_MSG_IMPRINT_get_msg (imprint); ret->imprint_len = ASN1_STRING_length (msg); if (!(ret->imprint = OPENSSL_malloc (ret->imprint_len))) goto err; memcpy (ret->imprint, ASN1_STRING_data (msg), ret->imprint_len); /* Setting nonce. */ if ((nonce = TS_REQ_get_nonce (req)) != NULL) { if (!(ret->nonce = ASN1_INTEGER_dup (nonce))) goto err; } else ret->flags &= ~TS_VFY_NONCE; return ret; err: if (ctx) TS_VERIFY_CTX_cleanup (ctx); else TS_VERIFY_CTX_free (ret); return NULL; }
int TS_REQ_print_bio(BIO *bio, TS_REQ *a) { int v; ASN1_OBJECT *policy_id; if (a == NULL) return 0; v = TS_REQ_get_version(a); BIO_printf(bio, "Version: %d\n", v); TS_MSG_IMPRINT_print_bio(bio, a->msg_imprint); BIO_printf(bio, "Policy OID: "); policy_id = TS_REQ_get_policy_id(a); if (policy_id == NULL) BIO_printf(bio, "unspecified\n"); else TS_OBJ_print_bio(bio, policy_id); BIO_printf(bio, "Nonce: "); if (a->nonce == NULL) BIO_printf(bio, "unspecified"); else TS_ASN1_INTEGER_print_bio(bio, a->nonce); BIO_write(bio, "\n", 1); BIO_printf(bio, "Certificate required: %s\n", a->cert_req ? "yes" : "no"); TS_ext_print_bio(bio, a->extensions); return 1; }
static int openssl_ts_req_policy_id(lua_State*L) { TS_REQ* req = CHECK_OBJECT(1, TS_REQ, "openssl.ts_req"); if (lua_isnone(L, 2)) { ASN1_OBJECT* obj = TS_REQ_get_policy_id(req); openssl_push_asn1object(L, obj); ASN1_OBJECT_free(obj); return 1; } else { int nid = openssl_get_nid(L, 2); ASN1_OBJECT* obj; int ret; luaL_argcheck(L, nid != NID_undef, 2, "must be asn1_object object identified"); obj = OBJ_nid2obj(nid); ret = TS_REQ_set_policy_id(req, obj); return openssl_pushresult(L, ret); } }