summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2025-07-31 02:21:01 +0000
committertb <>2025-07-31 02:21:01 +0000
commitd4d855623ac4e27097dd53a8680f199153289005 (patch)
tree71baabcb9f75480e51a2d83ea5b6cc792a155427 /src
parent1fdb89b15519a7cfc1d00165fe8a13d44abc4d31 (diff)
downloadopenbsd-d4d855623ac4e27097dd53a8680f199153289005.tar.gz
openbsd-d4d855623ac4e27097dd53a8680f199153289005.tar.bz2
openbsd-d4d855623ac4e27097dd53a8680f199153289005.zip
Rework PKCS7_add1_attrib_digest()
There's nothing really wrong here (at least when compared to the rest of this file an hour or so ago), but we can make this look somewhat more like code. That there's no bug here is not really related to the fact that it's an add1 function, not an add0 one. In fact, it's kind of surprising that the author had an uncharacteristic moment of lucidity and remembered to free the last argument passed to PKCS7_add_signed_attribute() on failure. ok kenjiro
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/pkcs7/pk7_attr.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/lib/libcrypto/pkcs7/pk7_attr.c b/src/lib/libcrypto/pkcs7/pk7_attr.c
index ceaba9138d..8b6fbf9d23 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.20 2025/07/31 02:10:55 tb Exp $ */ 1/* $OpenBSD: pk7_attr.c,v 1.21 2025/07/31 02:21:01 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 */
@@ -203,19 +203,25 @@ LCRYPTO_ALIAS(PKCS7_add0_attrib_signing_time);
203 203
204int 204int
205PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, const unsigned char *md, 205PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, const unsigned char *md,
206 int mdlen) 206 int md_len)
207{ 207{
208 ASN1_OCTET_STRING *os; 208 ASN1_OCTET_STRING *os;
209 int ret = 0;
209 210
210 os = ASN1_OCTET_STRING_new(); 211 if ((os = ASN1_OCTET_STRING_new()) == NULL)
211 if (!os) 212 goto err;
212 return 0; 213 if (!ASN1_STRING_set(os, md, md_len))
213 if (!ASN1_STRING_set(os, md, mdlen) || 214 goto err;
214 !PKCS7_add_signed_attribute(si, NID_pkcs9_messageDigest, 215 if (!PKCS7_add_signed_attribute(si, NID_pkcs9_messageDigest,
215 V_ASN1_OCTET_STRING, os)) { 216 V_ASN1_OCTET_STRING, os))
216 ASN1_OCTET_STRING_free(os); 217 goto err;
217 return 0; 218 os = NULL;
218 } 219
219 return 1; 220 ret = 1;
221
222 err:
223 ASN1_OCTET_STRING_free(os);
224
225 return ret;
220} 226}
221LCRYPTO_ALIAS(PKCS7_add1_attrib_digest); 227LCRYPTO_ALIAS(PKCS7_add1_attrib_digest);