Latest update (add quic)
This commit is contained in:
@@ -504,6 +504,20 @@ int ec_get_params(void *key, OSSL_PARAM params[])
|
||||
if (!OSSL_PARAM_set_int(p, ecdh_cofactor_mode))
|
||||
return 0;
|
||||
}
|
||||
if ((p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_TLS_ENCODED_PT)) != NULL) {
|
||||
BN_CTX *ctx = BN_CTX_new_ex(ec_key_get_libctx(key));
|
||||
|
||||
if (ctx == NULL)
|
||||
return 0;
|
||||
p->return_size = EC_POINT_point2oct(EC_KEY_get0_group(key),
|
||||
EC_KEY_get0_public_key(key),
|
||||
POINT_CONVERSION_UNCOMPRESSED,
|
||||
p->data, p->return_size, ctx);
|
||||
BN_CTX_free(ctx);
|
||||
if (p->return_size == 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = domparams_to_params(eck, NULL, params)
|
||||
&& key_to_params(eck, NULL, params, 1, &pub_key)
|
||||
&& otherparams_to_params(eck, NULL, params);
|
||||
@@ -515,6 +529,7 @@ static const OSSL_PARAM ec_known_gettable_params[] = {
|
||||
OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL),
|
||||
OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL),
|
||||
OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL),
|
||||
OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_TLS_ENCODED_PT, NULL, 0),
|
||||
EC_IMEXPORTABLE_DOM_PARAMETERS,
|
||||
EC_IMEXPORTABLE_PUBLIC_KEY,
|
||||
EC_IMEXPORTABLE_PRIVATE_KEY,
|
||||
@@ -530,6 +545,7 @@ const OSSL_PARAM *ec_gettable_params(void)
|
||||
|
||||
static const OSSL_PARAM ec_known_settable_params[] = {
|
||||
OSSL_PARAM_int(OSSL_PKEY_PARAM_USE_COFACTOR_ECDH, NULL),
|
||||
OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_TLS_ENCODED_PT, NULL, 0),
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
|
||||
@@ -545,11 +561,21 @@ int ec_set_params(void *key, const OSSL_PARAM params[])
|
||||
EC_KEY *eck = key;
|
||||
const OSSL_PARAM *p;
|
||||
|
||||
p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_USE_COFACTOR_ECDH);
|
||||
if (p != NULL && !ec_set_param_ecdh_cofactor_mode(eck, p))
|
||||
return 0;
|
||||
p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_TLS_ENCODED_PT);
|
||||
if (p != NULL) {
|
||||
BN_CTX *ctx = BN_CTX_new_ex(ec_key_get_libctx(key));
|
||||
int ret = 1;
|
||||
|
||||
return 1;
|
||||
if (ctx == NULL
|
||||
|| p->data_type != OSSL_PARAM_OCTET_STRING
|
||||
|| !EC_KEY_oct2key(key, p->data, p->data_size, ctx))
|
||||
ret = 0;
|
||||
BN_CTX_free(ctx);
|
||||
if (!ret)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ec_key_otherparams_fromdata(eck, params);
|
||||
}
|
||||
|
||||
static
|
||||
@@ -583,9 +609,9 @@ int ec_validate(void *keydata, int selection)
|
||||
|
||||
struct ec_gen_ctx {
|
||||
OPENSSL_CTX *libctx;
|
||||
|
||||
EC_GROUP *gen_group;
|
||||
int selection;
|
||||
int ecdh_mode;
|
||||
};
|
||||
|
||||
static void *ec_gen_init(void *provctx, int selection)
|
||||
@@ -600,6 +626,7 @@ static void *ec_gen_init(void *provctx, int selection)
|
||||
gctx->libctx = libctx;
|
||||
gctx->gen_group = NULL;
|
||||
gctx->selection = selection;
|
||||
gctx->ecdh_mode = 0;
|
||||
}
|
||||
return gctx;
|
||||
}
|
||||
@@ -636,6 +663,11 @@ static int ec_gen_set_params(void *genctx, const OSSL_PARAM params[])
|
||||
struct ec_gen_ctx *gctx = genctx;
|
||||
const OSSL_PARAM *p;
|
||||
|
||||
if ((p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_USE_COFACTOR_ECDH))
|
||||
!= NULL) {
|
||||
if (!OSSL_PARAM_get_int(p, &gctx->ecdh_mode))
|
||||
return 0;
|
||||
}
|
||||
if ((p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_EC_NAME))
|
||||
!= NULL) {
|
||||
const char *curve_name = NULL;
|
||||
@@ -670,7 +702,8 @@ static int ec_gen_set_params(void *genctx, const OSSL_PARAM params[])
|
||||
static const OSSL_PARAM *ec_gen_settable_params(void *provctx)
|
||||
{
|
||||
static OSSL_PARAM settable[] = {
|
||||
{ OSSL_PKEY_PARAM_EC_NAME, OSSL_PARAM_UTF8_STRING, NULL, 0, 0 },
|
||||
OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_EC_NAME, NULL, 0),
|
||||
OSSL_PARAM_int(OSSL_PKEY_PARAM_USE_COFACTOR_ECDH, NULL),
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
|
||||
@@ -705,6 +738,9 @@ static void *ec_gen(void *genctx, OSSL_CALLBACK *osslcb, void *cbarg)
|
||||
if ((gctx->selection & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0)
|
||||
ret = ret && EC_KEY_generate_key(ec);
|
||||
|
||||
if (gctx->ecdh_mode != -1)
|
||||
ret = ret && ec_set_ecdh_cofactor_mode(ec, gctx->ecdh_mode);
|
||||
|
||||
if (ret)
|
||||
return ec;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user