diff options
Diffstat (limited to 'src/lib/libssl/src/crypto/pkcs7/pk7_doit.c')
-rw-r--r-- | src/lib/libssl/src/crypto/pkcs7/pk7_doit.c | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c b/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c index 35c7dcd0b3..4ac29ae14d 100644 --- a/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c +++ b/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c | |||
@@ -239,7 +239,13 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) | |||
239 | OPENSSL_free(tmp); | 239 | OPENSSL_free(tmp); |
240 | goto err; | 240 | goto err; |
241 | } | 241 | } |
242 | M_ASN1_OCTET_STRING_set(ri->enc_key,tmp,jj); | 242 | if (!M_ASN1_OCTET_STRING_set(ri->enc_key,tmp,jj)) |
243 | { | ||
244 | PKCS7err(PKCS7_F_PKCS7_DATAINIT, | ||
245 | ERR_R_MALLOC_FAILURE); | ||
246 | OPENSSL_free(tmp); | ||
247 | goto err; | ||
248 | } | ||
243 | } | 249 | } |
244 | OPENSSL_free(tmp); | 250 | OPENSSL_free(tmp); |
245 | OPENSSL_cleanse(key, keylen); | 251 | OPENSSL_cleanse(key, keylen); |
@@ -257,10 +263,15 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) | |||
257 | bio=BIO_new(BIO_s_null()); | 263 | bio=BIO_new(BIO_s_null()); |
258 | else | 264 | else |
259 | { | 265 | { |
260 | ASN1_OCTET_STRING *os; | 266 | if (PKCS7_type_is_signed(p7)) |
261 | os = PKCS7_get_octet_string(p7->d.sign->contents); | 267 | { |
262 | if (os && os->length > 0) | 268 | ASN1_OCTET_STRING *os; |
263 | bio = BIO_new_mem_buf(os->data, os->length); | 269 | os = PKCS7_get_octet_string( |
270 | p7->d.sign->contents); | ||
271 | if (os && os->length > 0) | ||
272 | bio = BIO_new_mem_buf(os->data, | ||
273 | os->length); | ||
274 | } | ||
264 | if(bio == NULL) | 275 | if(bio == NULL) |
265 | { | 276 | { |
266 | bio=BIO_new(BIO_s_mem()); | 277 | bio=BIO_new(BIO_s_mem()); |
@@ -515,12 +526,20 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) | |||
515 | case NID_pkcs7_signedAndEnveloped: | 526 | case NID_pkcs7_signedAndEnveloped: |
516 | /* XXXXXXXXXXXXXXXX */ | 527 | /* XXXXXXXXXXXXXXXX */ |
517 | si_sk=p7->d.signed_and_enveloped->signer_info; | 528 | si_sk=p7->d.signed_and_enveloped->signer_info; |
518 | os=M_ASN1_OCTET_STRING_new(); | 529 | if (!(os=M_ASN1_OCTET_STRING_new())) |
530 | { | ||
531 | PKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_MALLOC_FAILURE); | ||
532 | goto err; | ||
533 | } | ||
519 | p7->d.signed_and_enveloped->enc_data->enc_data=os; | 534 | p7->d.signed_and_enveloped->enc_data->enc_data=os; |
520 | break; | 535 | break; |
521 | case NID_pkcs7_enveloped: | 536 | case NID_pkcs7_enveloped: |
522 | /* XXXXXXXXXXXXXXXX */ | 537 | /* XXXXXXXXXXXXXXXX */ |
523 | os=M_ASN1_OCTET_STRING_new(); | 538 | if (!(os=M_ASN1_OCTET_STRING_new())) |
539 | { | ||
540 | PKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_MALLOC_FAILURE); | ||
541 | goto err; | ||
542 | } | ||
524 | p7->d.enveloped->enc_data->enc_data=os; | 543 | p7->d.enveloped->enc_data->enc_data=os; |
525 | break; | 544 | break; |
526 | case NID_pkcs7_signed: | 545 | case NID_pkcs7_signed: |
@@ -594,7 +613,12 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) | |||
594 | if (!PKCS7_get_signed_attribute(si, | 613 | if (!PKCS7_get_signed_attribute(si, |
595 | NID_pkcs9_signingTime)) | 614 | NID_pkcs9_signingTime)) |
596 | { | 615 | { |
597 | sign_time=X509_gmtime_adj(NULL,0); | 616 | if (!(sign_time=X509_gmtime_adj(NULL,0))) |
617 | { | ||
618 | PKCS7err(PKCS7_F_PKCS7_DATASIGN, | ||
619 | ERR_R_MALLOC_FAILURE); | ||
620 | goto err; | ||
621 | } | ||
598 | PKCS7_add_signed_attribute(si, | 622 | PKCS7_add_signed_attribute(si, |
599 | NID_pkcs9_signingTime, | 623 | NID_pkcs9_signingTime, |
600 | V_ASN1_UTCTIME,sign_time); | 624 | V_ASN1_UTCTIME,sign_time); |
@@ -603,8 +627,19 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) | |||
603 | /* Add digest */ | 627 | /* Add digest */ |
604 | md_tmp=EVP_MD_CTX_md(&ctx_tmp); | 628 | md_tmp=EVP_MD_CTX_md(&ctx_tmp); |
605 | EVP_DigestFinal_ex(&ctx_tmp,md_data,&md_len); | 629 | EVP_DigestFinal_ex(&ctx_tmp,md_data,&md_len); |
606 | digest=M_ASN1_OCTET_STRING_new(); | 630 | if (!(digest=M_ASN1_OCTET_STRING_new())) |
607 | M_ASN1_OCTET_STRING_set(digest,md_data,md_len); | 631 | { |
632 | PKCS7err(PKCS7_F_PKCS7_DATASIGN, | ||
633 | ERR_R_MALLOC_FAILURE); | ||
634 | goto err; | ||
635 | } | ||
636 | if (!M_ASN1_OCTET_STRING_set(digest,md_data, | ||
637 | md_len)) | ||
638 | { | ||
639 | PKCS7err(PKCS7_F_PKCS7_DATASIGN, | ||
640 | ERR_R_MALLOC_FAILURE); | ||
641 | goto err; | ||
642 | } | ||
608 | PKCS7_add_signed_attribute(si, | 643 | PKCS7_add_signed_attribute(si, |
609 | NID_pkcs9_messageDigest, | 644 | NID_pkcs9_messageDigest, |
610 | V_ASN1_OCTET_STRING,digest); | 645 | V_ASN1_OCTET_STRING,digest); |