summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pkcs7/pk7_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pkcs7/pk7_lib.c')
-rw-r--r--src/lib/libcrypto/pkcs7/pk7_lib.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/lib/libcrypto/pkcs7/pk7_lib.c b/src/lib/libcrypto/pkcs7/pk7_lib.c
index 45973fe850..c00ed6833a 100644
--- a/src/lib/libcrypto/pkcs7/pk7_lib.c
+++ b/src/lib/libcrypto/pkcs7/pk7_lib.c
@@ -84,7 +84,11 @@ long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg)
84 case PKCS7_OP_GET_DETACHED_SIGNATURE: 84 case PKCS7_OP_GET_DETACHED_SIGNATURE:
85 if (nid == NID_pkcs7_signed) 85 if (nid == NID_pkcs7_signed)
86 { 86 {
87 ret=p7->detached; 87 if(!p7->d.sign || !p7->d.sign->contents->d.ptr)
88 ret = 1;
89 else ret = 0;
90
91 p7->detached = ret;
88 } 92 }
89 else 93 else
90 { 94 {
@@ -144,7 +148,7 @@ int PKCS7_set_type(PKCS7 *p7, int type)
144 { 148 {
145 ASN1_OBJECT *obj; 149 ASN1_OBJECT *obj;
146 150
147 PKCS7_content_free(p7); 151 /*PKCS7_content_free(p7);*/
148 obj=OBJ_nid2obj(type); /* will not fail */ 152 obj=OBJ_nid2obj(type); /* will not fail */
149 153
150 switch (type) 154 switch (type)
@@ -165,18 +169,24 @@ int PKCS7_set_type(PKCS7 *p7, int type)
165 if ((p7->d.signed_and_enveloped=PKCS7_SIGN_ENVELOPE_new()) 169 if ((p7->d.signed_and_enveloped=PKCS7_SIGN_ENVELOPE_new())
166 == NULL) goto err; 170 == NULL) goto err;
167 ASN1_INTEGER_set(p7->d.signed_and_enveloped->version,1); 171 ASN1_INTEGER_set(p7->d.signed_and_enveloped->version,1);
172 p7->d.signed_and_enveloped->enc_data->content_type
173 = OBJ_nid2obj(NID_pkcs7_data);
168 break; 174 break;
169 case NID_pkcs7_enveloped: 175 case NID_pkcs7_enveloped:
170 p7->type=obj; 176 p7->type=obj;
171 if ((p7->d.enveloped=PKCS7_ENVELOPE_new()) 177 if ((p7->d.enveloped=PKCS7_ENVELOPE_new())
172 == NULL) goto err; 178 == NULL) goto err;
173 ASN1_INTEGER_set(p7->d.enveloped->version,0); 179 ASN1_INTEGER_set(p7->d.enveloped->version,0);
180 p7->d.enveloped->enc_data->content_type
181 = OBJ_nid2obj(NID_pkcs7_data);
174 break; 182 break;
175 case NID_pkcs7_encrypted: 183 case NID_pkcs7_encrypted:
176 p7->type=obj; 184 p7->type=obj;
177 if ((p7->d.encrypted=PKCS7_ENCRYPT_new()) 185 if ((p7->d.encrypted=PKCS7_ENCRYPT_new())
178 == NULL) goto err; 186 == NULL) goto err;
179 ASN1_INTEGER_set(p7->d.encrypted->version,0); 187 ASN1_INTEGER_set(p7->d.encrypted->version,0);
188 p7->d.encrypted->enc_data->content_type
189 = OBJ_nid2obj(NID_pkcs7_data);
180 break; 190 break;
181 191
182 case NID_pkcs7_digest: 192 case NID_pkcs7_digest:
@@ -295,7 +305,7 @@ int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl)
295 } 305 }
296 306
297int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, 307int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
298 EVP_MD *dgst) 308 const EVP_MD *dgst)
299 { 309 {
300 char is_dsa; 310 char is_dsa;
301 if (pkey->type == EVP_PKEY_DSA) is_dsa = 1; 311 if (pkey->type == EVP_PKEY_DSA) is_dsa = 1;
@@ -343,7 +353,7 @@ err:
343 } 353 }
344 354
345PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, EVP_PKEY *pkey, 355PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, EVP_PKEY *pkey,
346 EVP_MD *dgst) 356 const EVP_MD *dgst)
347 { 357 {
348 PKCS7_SIGNER_INFO *si; 358 PKCS7_SIGNER_INFO *si;
349 359
@@ -415,9 +425,7 @@ int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509)
415 M_ASN1_INTEGER_dup(X509_get_serialNumber(x509)); 425 M_ASN1_INTEGER_dup(X509_get_serialNumber(x509));
416 426
417 X509_ALGOR_free(p7i->key_enc_algor); 427 X509_ALGOR_free(p7i->key_enc_algor);
418 p7i->key_enc_algor=(X509_ALGOR *)ASN1_dup(i2d_X509_ALGOR, 428 p7i->key_enc_algor= X509_ALGOR_dup(x509->cert_info->key->algor);
419 (char *(*)())d2i_X509_ALGOR,
420 (char *)x509->cert_info->key->algor);
421 429
422 CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509); 430 CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509);
423 p7i->cert=x509; 431 p7i->cert=x509;