diff options
Diffstat (limited to 'src/lib/libcrypto/pkcs7')
| -rw-r--r-- | src/lib/libcrypto/pkcs7/pk7_attr.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/src/lib/libcrypto/pkcs7/pk7_attr.c b/src/lib/libcrypto/pkcs7/pk7_attr.c index bf775735d9..9a822eaecd 100644 --- a/src/lib/libcrypto/pkcs7/pk7_attr.c +++ b/src/lib/libcrypto/pkcs7/pk7_attr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: pk7_attr.c,v 1.18 2025/07/28 04:29:00 tb Exp $ */ | 1 | /* $OpenBSD: pk7_attr.c,v 1.19 2025/07/31 02:02:35 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2001. | 3 | * project 2001. |
| 4 | */ | 4 | */ |
| @@ -69,15 +69,37 @@ | |||
| 69 | int | 69 | int |
| 70 | PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, STACK_OF(X509_ALGOR) *cap) | 70 | PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, STACK_OF(X509_ALGOR) *cap) |
| 71 | { | 71 | { |
| 72 | ASN1_STRING *seq; | 72 | ASN1_STRING *seq = NULL; |
| 73 | if (!(seq = ASN1_STRING_new())) { | 73 | unsigned char *data = NULL; |
| 74 | int len = 0; | ||
| 75 | int ret = 0; | ||
| 76 | |||
| 77 | if ((len = i2d_X509_ALGORS(cap, &data)) <= 0) { | ||
| 78 | len = 0; | ||
| 79 | goto err; | ||
| 80 | } | ||
| 81 | |||
| 82 | if ((seq = ASN1_STRING_new()) == NULL) { | ||
| 74 | PKCS7error(ERR_R_MALLOC_FAILURE); | 83 | PKCS7error(ERR_R_MALLOC_FAILURE); |
| 75 | return 0; | 84 | goto err; |
| 76 | } | 85 | } |
| 77 | seq->length = ASN1_item_i2d((ASN1_VALUE *)cap, &seq->data, | 86 | |
| 78 | &X509_ALGORS_it); | 87 | ASN1_STRING_set0(seq, data, len); |
| 79 | return PKCS7_add_signed_attribute(si, NID_SMIMECapabilities, | 88 | data = NULL; |
| 80 | V_ASN1_SEQUENCE, seq); | 89 | len = 0; |
| 90 | |||
| 91 | if (!PKCS7_add_signed_attribute(si, NID_SMIMECapabilities, | ||
| 92 | V_ASN1_SEQUENCE, seq)) | ||
| 93 | goto err; | ||
| 94 | seq = NULL; | ||
| 95 | |||
| 96 | ret = 1; | ||
| 97 | |||
| 98 | err: | ||
| 99 | ASN1_STRING_free(seq); | ||
| 100 | freezero(data, len); | ||
| 101 | |||
| 102 | return ret; | ||
| 81 | } | 103 | } |
| 82 | LCRYPTO_ALIAS(PKCS7_add_attrib_smimecap); | 104 | LCRYPTO_ALIAS(PKCS7_add_attrib_smimecap); |
| 83 | 105 | ||
