int i,j,nid;
X509_ALGOR *alg;
STACK *signer_sk;
- STACK *md_sk;
+ STACK_OF(X509_ALGOR) *md_sk;
i=OBJ_obj2nid(p7->type);
switch (i)
/* If the digest is not currently listed, add it */
j=0;
- for (i=0; i<sk_num(md_sk); i++)
+ for (i=0; i<sk_X509_ALGOR_num(md_sk); i++)
{
- alg=(X509_ALGOR *)sk_value(md_sk,i);
+ alg=sk_X509_ALGOR_value(md_sk,i);
if (OBJ_obj2nid(alg->algorithm) == nid)
{
j=1;
{
alg=X509_ALGOR_new();
alg->algorithm=OBJ_nid2obj(nid);
- sk_push(md_sk,(char *)alg);
+ sk_X509_ALGOR_push(md_sk,alg);
}
sk_push(signer_sk,(char *)psi);
p7i->digest_alg->algorithm=OBJ_nid2obj(NID_sha1);
else
p7i->digest_alg->algorithm=OBJ_nid2obj(EVP_MD_type(dgst));
- p7i->digest_enc_alg->algorithm=OBJ_nid2obj(EVP_MD_pkey_type(dgst));
-#if 1
+ if (p7i->digest_alg->parameter != NULL)
+ ASN1_TYPE_free(p7i->digest_alg->parameter);
+ if ((p7i->digest_alg->parameter=ASN1_TYPE_new()) == NULL)
+ goto err;
+ p7i->digest_alg->parameter->type=V_ASN1_NULL;
+
+ p7i->digest_enc_alg->algorithm=OBJ_nid2obj(EVP_PKEY_type(pkey->type));
+
if (p7i->digest_enc_alg->parameter != NULL)
ASN1_TYPE_free(p7i->digest_enc_alg->parameter);
if ((p7i->digest_enc_alg->parameter=ASN1_TYPE_new()) == NULL)
goto err;
p7i->digest_enc_alg->parameter->type=V_ASN1_NULL;
-#endif
return(1);
err:
return(NULL);
}
-int PKCS7_set_cipher(PKCS7 *p7, EVP_CIPHER *cipher)
+int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher)
{
int i;
PKCS7_ENC_CONTENT *ec;
return(0);
}
- ec->algorithm->algorithm=OBJ_nid2obj(EVP_CIPHER_nid(cipher));
- return(ec->algorithm->algorithm != NULL);
+ /* Setup cipher OID */
+
+ ec->cipher = cipher;
+ return 1;
}