diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/ec/ec_asn1.c | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/lib/libcrypto/ec/ec_asn1.c b/src/lib/libcrypto/ec/ec_asn1.c index 842089f813..1ba1e36435 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.89 2024/10/28 17:40:46 tb Exp $ */ | 1 | /* $OpenBSD: ec_asn1.c,v 1.90 2024/10/28 17:58:18 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Written by Nils Larsch for the OpenSSL project. | 3 | * Written by Nils Larsch for the OpenSSL project. |
| 4 | */ | 4 | */ |
| @@ -1089,6 +1089,30 @@ i2d_ECPKParameters(const EC_GROUP *group, unsigned char **out_der) | |||
| 1089 | } | 1089 | } |
| 1090 | LCRYPTO_ALIAS(i2d_ECPKParameters); | 1090 | LCRYPTO_ALIAS(i2d_ECPKParameters); |
| 1091 | 1091 | ||
| 1092 | static int | ||
| 1093 | ec_key_set_group_from_parameters(EC_KEY *ec_key, const ECPKPARAMETERS *params) | ||
| 1094 | { | ||
| 1095 | EC_GROUP *group = NULL; | ||
| 1096 | int ret = 0; | ||
| 1097 | |||
| 1098 | /* Use group in parameters, if any. Fall back to existing group. */ | ||
| 1099 | if (params != NULL) { | ||
| 1100 | if ((group = ec_asn1_pkparameters2group(params)) == NULL) | ||
| 1101 | goto err; | ||
| 1102 | if (!EC_KEY_set_group(ec_key, group)) | ||
| 1103 | goto err; | ||
| 1104 | } | ||
| 1105 | if (ec_key->group == NULL) | ||
| 1106 | goto err; | ||
| 1107 | |||
| 1108 | ret = 1; | ||
| 1109 | |||
| 1110 | err: | ||
| 1111 | EC_GROUP_free(group); | ||
| 1112 | |||
| 1113 | return ret; | ||
| 1114 | } | ||
| 1115 | |||
| 1092 | EC_KEY * | 1116 | EC_KEY * |
| 1093 | d2i_ECPrivateKey(EC_KEY **out_ec_key, const unsigned char **in, long len) | 1117 | d2i_ECPrivateKey(EC_KEY **out_ec_key, const unsigned char **in, long len) |
| 1094 | { | 1118 | { |
| @@ -1106,14 +1130,8 @@ d2i_ECPrivateKey(EC_KEY **out_ec_key, const unsigned char **in, long len) | |||
| 1106 | } | 1130 | } |
| 1107 | 1131 | ||
| 1108 | ec_key->version = ec_privatekey->version; | 1132 | ec_key->version = ec_privatekey->version; |
| 1109 | if (ec_privatekey->parameters) { | 1133 | if (!ec_key_set_group_from_parameters(ec_key, ec_privatekey->parameters)) |
| 1110 | EC_GROUP_free(ec_key->group); | ||
| 1111 | ec_key->group = ec_asn1_pkparameters2group(ec_privatekey->parameters); | ||
| 1112 | } | ||
| 1113 | if (ec_key->group == NULL) { | ||
| 1114 | ECerror(ERR_R_EC_LIB); | ||
| 1115 | goto err; | 1134 | goto err; |
| 1116 | } | ||
| 1117 | 1135 | ||
| 1118 | if (ec_privatekey->privateKey) { | 1136 | if (ec_privatekey->privateKey) { |
| 1119 | ec_key->priv_key = BN_bin2bn( | 1137 | ec_key->priv_key = BN_bin2bn( |
