diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/rsa/rsa_ameth.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_ameth.c b/src/lib/libcrypto/rsa/rsa_ameth.c index 825a9f4447..737bba7366 100644 --- a/src/lib/libcrypto/rsa/rsa_ameth.c +++ b/src/lib/libcrypto/rsa/rsa_ameth.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: rsa_ameth.c,v 1.30 2023/07/07 06:59:18 tb Exp $ */ | 1 | /* $OpenBSD: rsa_ameth.c,v 1.31 2023/08/10 09:36:37 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 2006. | 3 | * project 2006. |
| 4 | */ | 4 | */ |
| @@ -212,29 +212,33 @@ old_rsa_priv_encode(const EVP_PKEY *pkey, unsigned char **pder) | |||
| 212 | static int | 212 | static int |
| 213 | rsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) | 213 | rsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) |
| 214 | { | 214 | { |
| 215 | unsigned char *rk = NULL; | 215 | ASN1_STRING *str = NULL; |
| 216 | int rklen; | 216 | ASN1_OBJECT *aobj; |
| 217 | ASN1_STRING *str; | ||
| 218 | int strtype; | 217 | int strtype; |
| 218 | unsigned char *rk = NULL; | ||
| 219 | int rklen = 0; | ||
| 219 | 220 | ||
| 220 | if (!rsa_param_encode(pkey, &str, &strtype)) | 221 | if (!rsa_param_encode(pkey, &str, &strtype)) |
| 221 | return 0; | 222 | goto err; |
| 222 | 223 | if ((rklen = i2d_RSAPrivateKey(pkey->pkey.rsa, &rk)) <= 0) { | |
| 223 | rklen = i2d_RSAPrivateKey(pkey->pkey.rsa, &rk); | ||
| 224 | if (rklen <= 0) { | ||
| 225 | RSAerror(ERR_R_MALLOC_FAILURE); | 224 | RSAerror(ERR_R_MALLOC_FAILURE); |
| 226 | ASN1_STRING_free(str); | 225 | rklen = 0; |
| 227 | return 0; | 226 | goto err; |
| 228 | } | 227 | } |
| 229 | 228 | if ((aobj = OBJ_nid2obj(pkey->ameth->pkey_id)) == NULL) | |
| 230 | if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(pkey->ameth->pkey_id), 0, | 229 | goto err; |
| 231 | strtype, str, rk, rklen)) { | 230 | if (!PKCS8_pkey_set0(p8, aobj, 0, strtype, str, rk, rklen)) { |
| 232 | RSAerror(ERR_R_MALLOC_FAILURE); | 231 | RSAerror(ERR_R_MALLOC_FAILURE); |
| 233 | ASN1_STRING_free(str); | 232 | goto err; |
| 234 | return 0; | ||
| 235 | } | 233 | } |
| 236 | 234 | ||
| 237 | return 1; | 235 | return 1; |
| 236 | |||
| 237 | err: | ||
| 238 | ASN1_STRING_free(str); | ||
| 239 | freezero(rk, rklen); | ||
| 240 | |||
| 241 | return 0; | ||
| 238 | } | 242 | } |
| 239 | 243 | ||
| 240 | static int | 244 | static int |
