diff options
author | tb <> | 2024-10-26 14:35:32 +0000 |
---|---|---|
committer | tb <> | 2024-10-26 14:35:32 +0000 |
commit | 1d743dd75a5e3fae927a867b33fb3a2f33394364 (patch) | |
tree | 7827134a3db78728b88fee634282bc36bbb51ccb /src | |
parent | b70bdeed51794636632e093b9c645f44b6938f66 (diff) | |
download | openbsd-1d743dd75a5e3fae927a867b33fb3a2f33394364.tar.gz openbsd-1d743dd75a5e3fae927a867b33fb3a2f33394364.tar.bz2 openbsd-1d743dd75a5e3fae927a867b33fb3a2f33394364.zip |
d2i_ECPrivateKey: minor cleanup for entry and exit path
Reduces an upcoming diff which is hard enough to review without these
distractions.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/ec/ec_asn1.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/lib/libcrypto/ec/ec_asn1.c b/src/lib/libcrypto/ec/ec_asn1.c index 5c2e19a35a..18e2e050f2 100644 --- a/src/lib/libcrypto/ec/ec_asn1.c +++ b/src/lib/libcrypto/ec/ec_asn1.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_asn1.c,v 1.81 2024/10/26 14:33:59 tb Exp $ */ | 1 | /* $OpenBSD: ec_asn1.c,v 1.82 2024/10/26 14:35:32 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Nils Larsch for the OpenSSL project. | 3 | * Written by Nils Larsch for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -1095,17 +1095,15 @@ d2i_ECPrivateKey(EC_KEY **out_ec_key, const unsigned char **in, long len) | |||
1095 | EC_KEY *ec_key = NULL; | 1095 | EC_KEY *ec_key = NULL; |
1096 | EC_PRIVATEKEY *ec_privatekey = NULL; | 1096 | EC_PRIVATEKEY *ec_privatekey = NULL; |
1097 | 1097 | ||
1098 | if (out_ec_key == NULL || (ec_key = *out_ec_key) == NULL) | ||
1099 | ec_key = EC_KEY_new(); | ||
1100 | if (ec_key == NULL) | ||
1101 | goto err; | ||
1102 | |||
1098 | if ((ec_privatekey = d2i_EC_PRIVATEKEY(NULL, in, len)) == NULL) { | 1103 | if ((ec_privatekey = d2i_EC_PRIVATEKEY(NULL, in, len)) == NULL) { |
1099 | ECerror(ERR_R_EC_LIB); | 1104 | ECerror(ERR_R_EC_LIB); |
1100 | return NULL; | 1105 | goto err; |
1101 | } | 1106 | } |
1102 | if (out_ec_key == NULL || *out_ec_key == NULL) { | ||
1103 | if ((ec_key = EC_KEY_new()) == NULL) { | ||
1104 | ECerror(ERR_R_MALLOC_FAILURE); | ||
1105 | goto err; | ||
1106 | } | ||
1107 | } else | ||
1108 | ec_key = *out_ec_key; | ||
1109 | 1107 | ||
1110 | if (ec_privatekey->parameters) { | 1108 | if (ec_privatekey->parameters) { |
1111 | EC_GROUP_free(ec_key->group); | 1109 | EC_GROUP_free(ec_key->group); |
@@ -1168,17 +1166,19 @@ d2i_ECPrivateKey(EC_KEY **out_ec_key, const unsigned char **in, long len) | |||
1168 | } | 1166 | } |
1169 | 1167 | ||
1170 | EC_PRIVATEKEY_free(ec_privatekey); | 1168 | EC_PRIVATEKEY_free(ec_privatekey); |
1169 | ec_privatekey = NULL; | ||
1170 | |||
1171 | if (out_ec_key != NULL) | 1171 | if (out_ec_key != NULL) |
1172 | *out_ec_key = ec_key; | 1172 | *out_ec_key = ec_key; |
1173 | return (ec_key); | 1173 | |
1174 | return ec_key; | ||
1174 | 1175 | ||
1175 | err: | 1176 | err: |
1176 | if (out_ec_key == NULL || *out_ec_key != ec_key) | 1177 | if (out_ec_key == NULL || *out_ec_key != ec_key) |
1177 | EC_KEY_free(ec_key); | 1178 | EC_KEY_free(ec_key); |
1178 | if (ec_privatekey) | 1179 | EC_PRIVATEKEY_free(ec_privatekey); |
1179 | EC_PRIVATEKEY_free(ec_privatekey); | ||
1180 | 1180 | ||
1181 | return (NULL); | 1181 | return NULL; |
1182 | } | 1182 | } |
1183 | LCRYPTO_ALIAS(d2i_ECPrivateKey); | 1183 | LCRYPTO_ALIAS(d2i_ECPrivateKey); |
1184 | 1184 | ||