Stack.
[openssl.git] / crypto / pkcs7 / pk7_lib.c
index e8c279dc93b82801f04778894d3f1b0a64a0b26d..e121ebf003f77471b13303608aec15ead5fb90dc 100644 (file)
@@ -191,7 +191,7 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi)
        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)
@@ -213,9 +213,9 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi)
 
        /* 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;
@@ -226,7 +226,7 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi)
                {
                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);
@@ -309,15 +309,20 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
                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:
@@ -417,7 +422,7 @@ X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si)
                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;
@@ -436,7 +441,9 @@ int PKCS7_set_cipher(PKCS7 *p7, EVP_CIPHER *cipher)
                return(0);
                }
 
-       ec->algorithm->algorithm=OBJ_nid2obj(EVP_CIPHER_nid(cipher));
-       return(ec->algorithm->algorithm != NULL);
+       /* Setup cipher OID */
+
+       ec->cipher = cipher;
+       return 1;
        }