mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
The flag "decoded-from-explicit" must be imp/exportable
Otherwise the information that the EC group was imported from explicit parameters is lost when the key is moved across providers. Fixes #18600 Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com> (Merged from https://github.com/openssl/openssl/pull/18609)
This commit is contained in:
parent
5ad3e76c23
commit
95a6fbdf0d
@ -318,6 +318,11 @@ int ossl_ec_group_todata(const EC_GROUP *group, OSSL_PARAM_BLD *tmpl,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!ossl_param_build_set_int(tmpl, params,
|
||||
OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS,
|
||||
group->decoded_from_explicit_params))
|
||||
return 0;
|
||||
|
||||
curve_nid = EC_GROUP_get_curve_name(group);
|
||||
|
||||
/*
|
||||
|
@ -1556,13 +1556,23 @@ EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[],
|
||||
/* This is the simple named group case */
|
||||
ptmp = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_GROUP_NAME);
|
||||
if (ptmp != NULL) {
|
||||
group = group_new_from_name(ptmp, libctx, propq);
|
||||
if (group != NULL) {
|
||||
if (!ossl_ec_group_set_params(group, params)) {
|
||||
EC_GROUP_free(group);
|
||||
group = NULL;
|
||||
}
|
||||
int decoded = 0;
|
||||
|
||||
if ((group = group_new_from_name(ptmp, libctx, propq)) == NULL)
|
||||
return NULL;
|
||||
if (!ossl_ec_group_set_params(group, params)) {
|
||||
EC_GROUP_free(group);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ptmp = OSSL_PARAM_locate_const(params,
|
||||
OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS);
|
||||
if (ptmp != NULL && !OSSL_PARAM_get_int(ptmp, &decoded)) {
|
||||
ERR_raise(ERR_LIB_EC, EC_R_WRONG_CURVE_PARAMETERS);
|
||||
EC_GROUP_free(group);
|
||||
return NULL;
|
||||
}
|
||||
group->decoded_from_explicit_params = decoded > 0;
|
||||
return group;
|
||||
}
|
||||
#ifdef FIPS_MODULE
|
||||
@ -1733,6 +1743,8 @@ EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[],
|
||||
EC_GROUP_free(group);
|
||||
group = named_group;
|
||||
}
|
||||
/* We've imported the group from explicit parameters, set it so. */
|
||||
group->decoded_from_explicit_params = 1;
|
||||
ok = 1;
|
||||
err:
|
||||
if (!ok) {
|
||||
|
@ -525,7 +525,8 @@ end:
|
||||
OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_EC_GENERATOR, NULL, 0), \
|
||||
OSSL_PARAM_BN(OSSL_PKEY_PARAM_EC_ORDER, NULL, 0), \
|
||||
OSSL_PARAM_BN(OSSL_PKEY_PARAM_EC_COFACTOR, NULL, 0), \
|
||||
OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_EC_SEED, NULL, 0)
|
||||
OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_EC_SEED, NULL, 0), \
|
||||
OSSL_PARAM_int(OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS, NULL)
|
||||
|
||||
# define EC_IMEXPORTABLE_PUBLIC_KEY \
|
||||
OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0)
|
||||
|
Loading…
Reference in New Issue
Block a user