summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pkcs7
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pkcs7')
-rw-r--r--src/lib/libcrypto/pkcs7/pk7_attr.c38
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 @@
69int 69int
70PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, STACK_OF(X509_ALGOR) *cap) 70PKCS7_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}
82LCRYPTO_ALIAS(PKCS7_add_attrib_smimecap); 104LCRYPTO_ALIAS(PKCS7_add_attrib_smimecap);
83 105