From 9ff9bccc41c385ec2aa8ee2123f083b52b56b7b4 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Sun, 28 Feb 2016 17:48:48 +0000 Subject: [PATCH] Add default operations to EC_METHOD Reviewed-by: Rich Salz --- crypto/ec/ec2_smpl.c | 13 +++++++++++-- crypto/ec/ec_key.c | 6 +----- crypto/ec/ec_lib.c | 5 +---- crypto/ec/ecdh_ossl.c | 9 ++++----- crypto/ec/ecp_mont.c | 13 +++++++++++-- crypto/ec/ecp_nist.c | 13 +++++++++++-- crypto/ec/ecp_nistp224.c | 13 +++++++++++-- crypto/ec/ecp_nistp256.c | 13 +++++++++++-- crypto/ec/ecp_nistp521.c | 13 +++++++++++-- crypto/ec/ecp_nistz256.c | 13 +++++++++++-- crypto/ec/ecp_smpl.c | 13 +++++++++++-- 11 files changed, 94 insertions(+), 30 deletions(-) diff --git a/crypto/ec/ec2_smpl.c b/crypto/ec/ec2_smpl.c index 4204366435..8d8d85386f 100644 --- a/crypto/ec/ec2_smpl.c +++ b/crypto/ec/ec2_smpl.c @@ -85,7 +85,7 @@ const EC_METHOD *EC_GF2m_simple_method(void) ec_GF2m_simple_group_set_curve, ec_GF2m_simple_group_get_curve, ec_GF2m_simple_group_get_degree, - 0, /* group_order_bits */ + ec_group_simple_order_bits, ec_GF2m_simple_group_check_discriminant, ec_GF2m_simple_point_init, ec_GF2m_simple_point_finish, @@ -118,7 +118,16 @@ const EC_METHOD *EC_GF2m_simple_method(void) ec_GF2m_simple_field_div, 0 /* field_encode */ , 0 /* field_decode */ , - 0 /* field_set_to_one */ + 0, /* field_set_to_one */ + ec_key_simple_priv2oct, + ec_key_simple_oct2priv, + 0, /* set private */ + ec_key_simple_generate_key, + ec_key_simple_check_key, + ec_key_simple_generate_public_key, + 0, /* keycopy */ + 0, /* keyfinish */ + ecdh_simple_compute_key }; return &ret; diff --git a/crypto/ec/ec_key.c b/crypto/ec/ec_key.c index 2ff4449de3..3b02eca5b5 100644 --- a/crypto/ec/ec_key.c +++ b/crypto/ec/ec_key.c @@ -234,11 +234,7 @@ int EC_KEY_generate_key(EC_KEY *eckey) int ossl_ec_key_gen(EC_KEY *eckey) { - if (eckey->group->meth->keygen == NULL) { - ECerr(EC_F_OSSL_EC_KEY_GEN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; - } - + OPENSSL_assert(eckey->group->meth->keygen != NULL); return eckey->group->meth->keygen(eckey); } diff --git a/crypto/ec/ec_lib.c b/crypto/ec/ec_lib.c index 1f487b48a0..67e322fbb3 100644 --- a/crypto/ec/ec_lib.c +++ b/crypto/ec/ec_lib.c @@ -373,10 +373,7 @@ const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group) int EC_GROUP_order_bits(const EC_GROUP *group) { - if (group->meth->group_order_bits == NULL) { - ECerr(EC_F_EC_GROUP_ORDER_BITS, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; - } + OPENSSL_assert(group->meth->group_order_bits != NULL); return group->meth->group_order_bits(group); } diff --git a/crypto/ec/ecdh_ossl.c b/crypto/ec/ecdh_ossl.c index 018e2294b9..27615375ba 100644 --- a/crypto/ec/ecdh_ossl.c +++ b/crypto/ec/ecdh_ossl.c @@ -82,9 +82,8 @@ int ossl_ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, void *(*KDF) (const void *in, size_t inlen, void *out, size_t *outlen)) { - if (ecdh->group->meth->ecdh_compute_key == 0) { - ECerr(EC_F_OSSL_ECDH_COMPUTE_KEY, - ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); + if (ecdh->group->meth->ecdh_compute_key == NULL) { + ECerr(EC_F_OSSL_ECDH_COMPUTE_KEY, EC_R_CURVE_DOES_NOT_SUPPORT_ECDH); return -1; } @@ -113,8 +112,8 @@ int ecdh_simple_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, unsigned char *buf = NULL; if (outlen > INT_MAX) { - ECerr(EC_F_ECDH_SIMPLE_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); /* sort of, - * anyway */ + /* sort of, anyway */ + ECerr(EC_F_ECDH_SIMPLE_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); return -1; } diff --git a/crypto/ec/ecp_mont.c b/crypto/ec/ecp_mont.c index 9217c8f7e1..aa1f451359 100644 --- a/crypto/ec/ecp_mont.c +++ b/crypto/ec/ecp_mont.c @@ -76,7 +76,7 @@ const EC_METHOD *EC_GFp_mont_method(void) ec_GFp_mont_group_set_curve, ec_GFp_simple_group_get_curve, ec_GFp_simple_group_get_degree, - 0, /* group_order_bits */ + ec_group_simple_order_bits, ec_GFp_simple_group_check_discriminant, ec_GFp_simple_point_init, ec_GFp_simple_point_finish, @@ -104,7 +104,16 @@ const EC_METHOD *EC_GFp_mont_method(void) 0 /* field_div */ , ec_GFp_mont_field_encode, ec_GFp_mont_field_decode, - ec_GFp_mont_field_set_to_one + ec_GFp_mont_field_set_to_one, + ec_key_simple_priv2oct, + ec_key_simple_oct2priv, + 0, /* set private */ + ec_key_simple_generate_key, + ec_key_simple_check_key, + ec_key_simple_generate_public_key, + 0, /* keycopy */ + 0, /* keyfinish */ + ecdh_simple_compute_key }; return &ret; diff --git a/crypto/ec/ecp_nist.c b/crypto/ec/ecp_nist.c index cda9a91c91..c4729bf95f 100644 --- a/crypto/ec/ecp_nist.c +++ b/crypto/ec/ecp_nist.c @@ -78,7 +78,7 @@ const EC_METHOD *EC_GFp_nist_method(void) ec_GFp_nist_group_set_curve, ec_GFp_simple_group_get_curve, ec_GFp_simple_group_get_degree, - 0, /* group_order_bits */ + ec_group_simple_order_bits, ec_GFp_simple_group_check_discriminant, ec_GFp_simple_point_init, ec_GFp_simple_point_finish, @@ -106,7 +106,16 @@ const EC_METHOD *EC_GFp_nist_method(void) 0 /* field_div */ , 0 /* field_encode */ , 0 /* field_decode */ , - 0 /* field_set_to_one */ + 0, /* field_set_to_one */ + ec_key_simple_priv2oct, + ec_key_simple_oct2priv, + 0, /* set private */ + ec_key_simple_generate_key, + ec_key_simple_check_key, + ec_key_simple_generate_public_key, + 0, /* keycopy */ + 0, /* keyfinish */ + ecdh_simple_compute_key }; return &ret; diff --git a/crypto/ec/ecp_nistp224.c b/crypto/ec/ecp_nistp224.c index a533fa3cfb..0eea2e005d 100644 --- a/crypto/ec/ecp_nistp224.c +++ b/crypto/ec/ecp_nistp224.c @@ -245,7 +245,7 @@ const EC_METHOD *EC_GFp_nistp224_method(void) ec_GFp_nistp224_group_set_curve, ec_GFp_simple_group_get_curve, ec_GFp_simple_group_get_degree, - 0, /* group_order_bits */ + ec_group_simple_order_bits, ec_GFp_simple_group_check_discriminant, ec_GFp_simple_point_init, ec_GFp_simple_point_finish, @@ -275,7 +275,16 @@ const EC_METHOD *EC_GFp_nistp224_method(void) 0 /* field_div */ , 0 /* field_encode */ , 0 /* field_decode */ , - 0 /* field_set_to_one */ + 0, /* field_set_to_one */ + ec_key_simple_priv2oct, + ec_key_simple_oct2priv, + 0, /* set private */ + ec_key_simple_generate_key, + ec_key_simple_check_key, + ec_key_simple_generate_public_key, + 0, /* keycopy */ + 0, /* keyfinish */ + ecdh_simple_compute_key }; return &ret; diff --git a/crypto/ec/ecp_nistp256.c b/crypto/ec/ecp_nistp256.c index db95a2d673..1549b9c689 100644 --- a/crypto/ec/ecp_nistp256.c +++ b/crypto/ec/ecp_nistp256.c @@ -1774,7 +1774,7 @@ const EC_METHOD *EC_GFp_nistp256_method(void) ec_GFp_nistp256_group_set_curve, ec_GFp_simple_group_get_curve, ec_GFp_simple_group_get_degree, - 0, /* group_order_bits */ + ec_group_simple_order_bits, ec_GFp_simple_group_check_discriminant, ec_GFp_simple_point_init, ec_GFp_simple_point_finish, @@ -1804,7 +1804,16 @@ const EC_METHOD *EC_GFp_nistp256_method(void) 0 /* field_div */ , 0 /* field_encode */ , 0 /* field_decode */ , - 0 /* field_set_to_one */ + 0, /* field_set_to_one */ + ec_key_simple_priv2oct, + ec_key_simple_oct2priv, + 0, /* set private */ + ec_key_simple_generate_key, + ec_key_simple_check_key, + ec_key_simple_generate_public_key, + 0, /* keycopy */ + 0, /* keyfinish */ + ecdh_simple_compute_key }; return &ret; diff --git a/crypto/ec/ecp_nistp521.c b/crypto/ec/ecp_nistp521.c index 3edc21913e..629bf5d7de 100644 --- a/crypto/ec/ecp_nistp521.c +++ b/crypto/ec/ecp_nistp521.c @@ -1603,7 +1603,7 @@ const EC_METHOD *EC_GFp_nistp521_method(void) ec_GFp_nistp521_group_set_curve, ec_GFp_simple_group_get_curve, ec_GFp_simple_group_get_degree, - 0, /* group_order_bits */ + ec_group_simple_order_bits, ec_GFp_simple_group_check_discriminant, ec_GFp_simple_point_init, ec_GFp_simple_point_finish, @@ -1633,7 +1633,16 @@ const EC_METHOD *EC_GFp_nistp521_method(void) 0 /* field_div */ , 0 /* field_encode */ , 0 /* field_decode */ , - 0 /* field_set_to_one */ + 0, /* field_set_to_one */ + ec_key_simple_priv2oct, + ec_key_simple_oct2priv, + 0, /* set private */ + ec_key_simple_generate_key, + ec_key_simple_check_key, + ec_key_simple_generate_public_key, + 0, /* keycopy */ + 0, /* keyfinish */ + ecdh_simple_compute_key }; return &ret; diff --git a/crypto/ec/ecp_nistz256.c b/crypto/ec/ecp_nistz256.c index 8ccf831c95..0f8bd85af6 100644 --- a/crypto/ec/ecp_nistz256.c +++ b/crypto/ec/ecp_nistz256.c @@ -1441,7 +1441,7 @@ const EC_METHOD *EC_GFp_nistz256_method(void) ec_GFp_mont_group_set_curve, ec_GFp_simple_group_get_curve, ec_GFp_simple_group_get_degree, - 0, /* group_order_bits */ + ec_group_simple_order_bits, ec_GFp_simple_group_check_discriminant, ec_GFp_simple_point_init, ec_GFp_simple_point_finish, @@ -1469,7 +1469,16 @@ const EC_METHOD *EC_GFp_nistz256_method(void) 0, /* field_div */ ec_GFp_mont_field_encode, ec_GFp_mont_field_decode, - ec_GFp_mont_field_set_to_one + ec_GFp_mont_field_set_to_one, + ec_key_simple_priv2oct, + ec_key_simple_oct2priv, + 0, /* set private */ + ec_key_simple_generate_key, + ec_key_simple_check_key, + ec_key_simple_generate_public_key, + 0, /* keycopy */ + 0, /* keyfinish */ + ecdh_simple_compute_key }; return &ret; diff --git a/crypto/ec/ecp_smpl.c b/crypto/ec/ecp_smpl.c index 2ba40f40b2..a5f3610378 100644 --- a/crypto/ec/ecp_smpl.c +++ b/crypto/ec/ecp_smpl.c @@ -79,7 +79,7 @@ const EC_METHOD *EC_GFp_simple_method(void) ec_GFp_simple_group_set_curve, ec_GFp_simple_group_get_curve, ec_GFp_simple_group_get_degree, - 0, /* group_order_bits */ + ec_group_simple_order_bits, ec_GFp_simple_group_check_discriminant, ec_GFp_simple_point_init, ec_GFp_simple_point_finish, @@ -107,7 +107,16 @@ const EC_METHOD *EC_GFp_simple_method(void) 0 /* field_div */ , 0 /* field_encode */ , 0 /* field_decode */ , - 0 /* field_set_to_one */ + 0, /* field_set_to_one */ + ec_key_simple_priv2oct, + ec_key_simple_oct2priv, + 0, /* set private */ + ec_key_simple_generate_key, + ec_key_simple_check_key, + ec_key_simple_generate_public_key, + 0, /* keycopy */ + 0, /* keyfinish */ + ecdh_simple_compute_key }; return &ret; -- 2.25.1