summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libcrypto/ec/ec_asn1.c34
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}
1090LCRYPTO_ALIAS(i2d_ECPKParameters); 1090LCRYPTO_ALIAS(i2d_ECPKParameters);
1091 1091
1092static int
1093ec_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
1092EC_KEY * 1116EC_KEY *
1093d2i_ECPrivateKey(EC_KEY **out_ec_key, const unsigned char **in, long len) 1117d2i_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(