mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
test: evp_extra: EC, read affine coordinates
Add a test to read the EC X,Y coordinates. Support legacy keys. Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io> Reviewed-by: Shane Lontis <shane.lontis@oracle.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/20535)
This commit is contained in:
parent
9adbce7493
commit
1ffb6e19ee
@ -1032,6 +1032,65 @@ static int test_EC_priv_pub(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Also test that we can read the EC PUB affine coordinates */
|
||||
static int test_evp_get_ec_pub(void)
|
||||
{
|
||||
OSSL_PARAM_BLD *bld = NULL;
|
||||
OSSL_PARAM *params = NULL;
|
||||
unsigned char *pad = NULL;
|
||||
EVP_PKEY *keypair = NULL;
|
||||
BIGNUM *priv = NULL;
|
||||
BIGNUM *x = NULL;
|
||||
BIGNUM *y = NULL;
|
||||
int ret = 0;
|
||||
|
||||
if (!TEST_ptr(priv = BN_bin2bn(ec_priv, sizeof(ec_priv), NULL)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
|
||||
|| !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
|
||||
OSSL_PKEY_PARAM_GROUP_NAME,
|
||||
"P-256", 0))
|
||||
|| !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
|
||||
OSSL_PKEY_PARAM_PUB_KEY,
|
||||
ec_pub, sizeof(ec_pub)))
|
||||
|| !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY,
|
||||
priv)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
|
||||
|| !TEST_ptr(keypair = make_key_fromdata("EC", params)))
|
||||
goto err;
|
||||
|
||||
if (!test_selection(keypair, EVP_PKEY_KEYPAIR))
|
||||
goto err;
|
||||
|
||||
if (!EVP_PKEY_get_bn_param(keypair, OSSL_PKEY_PARAM_EC_PUB_X, &x)
|
||||
|| !EVP_PKEY_get_bn_param(keypair, OSSL_PKEY_PARAM_EC_PUB_Y, &y))
|
||||
goto err;
|
||||
|
||||
if (!TEST_ptr(pad = OPENSSL_zalloc(sizeof(ec_pub))))
|
||||
goto err;
|
||||
|
||||
pad[0] = ec_pub[0];
|
||||
BN_bn2bin(x, &pad[1]);
|
||||
BN_bn2bin(y, &pad[33]);
|
||||
if (!TEST_true(memcmp(ec_pub, pad, sizeof(ec_pub)) == 0))
|
||||
goto err;
|
||||
|
||||
ret = 1;
|
||||
|
||||
err:
|
||||
OSSL_PARAM_free(params);
|
||||
OSSL_PARAM_BLD_free(bld);
|
||||
EVP_PKEY_free(keypair);
|
||||
OPENSSL_free(pad);
|
||||
BN_free(priv);
|
||||
BN_free(x);
|
||||
BN_free(y);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Test that using a legacy EC key with only a private key in it works */
|
||||
# ifndef OPENSSL_NO_DEPRECATED_3_0
|
||||
static int test_EC_priv_only_legacy(void)
|
||||
@ -1095,6 +1154,76 @@ static int test_EC_priv_only_legacy(void)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int test_evp_get_ec_pub_legacy(void)
|
||||
{
|
||||
OSSL_LIB_CTX *libctx = NULL;
|
||||
unsigned char *pad = NULL;
|
||||
EVP_PKEY *pkey = NULL;
|
||||
EC_KEY *eckey = NULL;
|
||||
BIGNUM *priv = NULL;
|
||||
BIGNUM *x = NULL;
|
||||
BIGNUM *y = NULL;
|
||||
int ret = 0;
|
||||
|
||||
if (!TEST_ptr(libctx = OSSL_LIB_CTX_new()))
|
||||
goto err;
|
||||
|
||||
/* Create the legacy key */
|
||||
if (!TEST_ptr(eckey = EC_KEY_new_by_curve_name_ex(libctx, NULL,
|
||||
NID_X9_62_prime256v1)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_ptr(priv = BN_bin2bn(ec_priv, sizeof(ec_priv), NULL)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_true(EC_KEY_set_private_key(eckey, priv)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_ptr(x = BN_bin2bn(&ec_pub[1], 32, NULL)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_ptr(y = BN_bin2bn(&ec_pub[33], 32, NULL)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_true(EC_KEY_set_public_key_affine_coordinates(eckey, x, y)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_ptr(pkey = EVP_PKEY_new()))
|
||||
goto err;
|
||||
|
||||
/* Transfer the legacy key */
|
||||
if (!TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey)))
|
||||
goto err;
|
||||
eckey = NULL;
|
||||
|
||||
if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_EC_PUB_X, &x))
|
||||
|| !TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_EC_PUB_Y, &y)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_ptr(pad = OPENSSL_zalloc(sizeof(ec_pub))))
|
||||
goto err;
|
||||
|
||||
pad[0] = ec_pub[0];
|
||||
BN_bn2bin(x, &pad[1]);
|
||||
BN_bn2bin(y, &pad[33]);
|
||||
|
||||
if (!TEST_true(memcmp(ec_pub, pad, sizeof(ec_pub)) == 0))
|
||||
goto err;
|
||||
|
||||
ret = 1;
|
||||
|
||||
err:
|
||||
OSSL_LIB_CTX_free(libctx);
|
||||
EVP_PKEY_free(pkey);
|
||||
EC_KEY_free(eckey);
|
||||
OPENSSL_free(pad);
|
||||
BN_free(priv);
|
||||
BN_free(x);
|
||||
BN_free(y);
|
||||
|
||||
return ret;
|
||||
}
|
||||
# endif /* OPENSSL_NO_DEPRECATED_3_0 */
|
||||
#endif /* OPENSSL_NO_EC */
|
||||
|
||||
@ -4865,8 +4994,10 @@ int setup_tests(void)
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_EC
|
||||
ADD_TEST(test_EC_priv_pub);
|
||||
ADD_TEST(test_evp_get_ec_pub);
|
||||
# ifndef OPENSSL_NO_DEPRECATED_3_0
|
||||
ADD_TEST(test_EC_priv_only_legacy);
|
||||
ADD_TEST(test_evp_get_ec_pub_legacy);
|
||||
# endif
|
||||
#endif
|
||||
ADD_ALL_TESTS(test_keygen_with_empty_template, 2);
|
||||
|
Loading…
Reference in New Issue
Block a user