- goto err;
- }
- if (!OBJ_find_sigid_algs(alg_nid, &md_nid, NULL)
- || (alg = EVP_get_digestbynid(md_nid)) == NULL) {
- CRMFerr(CRMF_F_CRMF_POPOSIGNINGKEY_INIT,
- CRMF_R_UNSUPPORTED_ALG_FOR_POPSIGNINGKEY);
- goto err;
- }
- if (!X509_ALGOR_set0(ps->algorithmIdentifier, OBJ_nid2obj(alg_nid),
- V_ASN1_NULL, NULL)
- || (ctx = EVP_MD_CTX_new()) == NULL
- || EVP_DigestSignInit(ctx, NULL, alg, NULL, pkey) <= 0
- || EVP_DigestSignUpdate(ctx, crder, crlen) <= 0
- || EVP_DigestSignFinal(ctx, NULL, &siglen) <= 0) {
- CRMFerr(CRMF_F_CRMF_POPOSIGNINGKEY_INIT, CRMF_R_ERROR);
- goto err;
- }
- if ((sig = OPENSSL_malloc(siglen)) == NULL)
- goto err;
- if (EVP_DigestSignFinal(ctx, sig, &siglen) <= 0
- || !ASN1_BIT_STRING_set(ps->signature, sig, siglen)) {
- CRMFerr(CRMF_F_CRMF_POPOSIGNINGKEY_INIT, CRMF_R_ERROR);
- goto err;