Add default operations to EC_METHOD
Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
parent
77470e989c
commit
9ff9bccc41
@ -85,7 +85,7 @@ const EC_METHOD *EC_GF2m_simple_method(void)
|
|||||||
ec_GF2m_simple_group_set_curve,
|
ec_GF2m_simple_group_set_curve,
|
||||||
ec_GF2m_simple_group_get_curve,
|
ec_GF2m_simple_group_get_curve,
|
||||||
ec_GF2m_simple_group_get_degree,
|
ec_GF2m_simple_group_get_degree,
|
||||||
0, /* group_order_bits */
|
ec_group_simple_order_bits,
|
||||||
ec_GF2m_simple_group_check_discriminant,
|
ec_GF2m_simple_group_check_discriminant,
|
||||||
ec_GF2m_simple_point_init,
|
ec_GF2m_simple_point_init,
|
||||||
ec_GF2m_simple_point_finish,
|
ec_GF2m_simple_point_finish,
|
||||||
@ -118,7 +118,16 @@ const EC_METHOD *EC_GF2m_simple_method(void)
|
|||||||
ec_GF2m_simple_field_div,
|
ec_GF2m_simple_field_div,
|
||||||
0 /* field_encode */ ,
|
0 /* field_encode */ ,
|
||||||
0 /* field_decode */ ,
|
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;
|
return &ret;
|
||||||
|
@ -234,11 +234,7 @@ int EC_KEY_generate_key(EC_KEY *eckey)
|
|||||||
|
|
||||||
int ossl_ec_key_gen(EC_KEY *eckey)
|
int ossl_ec_key_gen(EC_KEY *eckey)
|
||||||
{
|
{
|
||||||
if (eckey->group->meth->keygen == NULL) {
|
OPENSSL_assert(eckey->group->meth->keygen != NULL);
|
||||||
ECerr(EC_F_OSSL_EC_KEY_GEN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return eckey->group->meth->keygen(eckey);
|
return eckey->group->meth->keygen(eckey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,10 +373,7 @@ const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group)
|
|||||||
|
|
||||||
int EC_GROUP_order_bits(const EC_GROUP *group)
|
int EC_GROUP_order_bits(const EC_GROUP *group)
|
||||||
{
|
{
|
||||||
if (group->meth->group_order_bits == NULL) {
|
OPENSSL_assert(group->meth->group_order_bits != NULL);
|
||||||
ECerr(EC_F_EC_GROUP_ORDER_BITS, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return group->meth->group_order_bits(group);
|
return group->meth->group_order_bits(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 *(*KDF) (const void *in, size_t inlen,
|
||||||
void *out, size_t *outlen))
|
void *out, size_t *outlen))
|
||||||
{
|
{
|
||||||
if (ecdh->group->meth->ecdh_compute_key == 0) {
|
if (ecdh->group->meth->ecdh_compute_key == NULL) {
|
||||||
ECerr(EC_F_OSSL_ECDH_COMPUTE_KEY,
|
ECerr(EC_F_OSSL_ECDH_COMPUTE_KEY, EC_R_CURVE_DOES_NOT_SUPPORT_ECDH);
|
||||||
ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
|
||||||
return -1;
|
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;
|
unsigned char *buf = NULL;
|
||||||
|
|
||||||
if (outlen > INT_MAX) {
|
if (outlen > INT_MAX) {
|
||||||
ECerr(EC_F_ECDH_SIMPLE_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); /* sort of,
|
/* sort of, anyway */
|
||||||
* anyway */
|
ECerr(EC_F_ECDH_SIMPLE_COMPUTE_KEY, ERR_R_MALLOC_FAILURE);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ const EC_METHOD *EC_GFp_mont_method(void)
|
|||||||
ec_GFp_mont_group_set_curve,
|
ec_GFp_mont_group_set_curve,
|
||||||
ec_GFp_simple_group_get_curve,
|
ec_GFp_simple_group_get_curve,
|
||||||
ec_GFp_simple_group_get_degree,
|
ec_GFp_simple_group_get_degree,
|
||||||
0, /* group_order_bits */
|
ec_group_simple_order_bits,
|
||||||
ec_GFp_simple_group_check_discriminant,
|
ec_GFp_simple_group_check_discriminant,
|
||||||
ec_GFp_simple_point_init,
|
ec_GFp_simple_point_init,
|
||||||
ec_GFp_simple_point_finish,
|
ec_GFp_simple_point_finish,
|
||||||
@ -104,7 +104,16 @@ const EC_METHOD *EC_GFp_mont_method(void)
|
|||||||
0 /* field_div */ ,
|
0 /* field_div */ ,
|
||||||
ec_GFp_mont_field_encode,
|
ec_GFp_mont_field_encode,
|
||||||
ec_GFp_mont_field_decode,
|
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;
|
return &ret;
|
||||||
|
@ -78,7 +78,7 @@ const EC_METHOD *EC_GFp_nist_method(void)
|
|||||||
ec_GFp_nist_group_set_curve,
|
ec_GFp_nist_group_set_curve,
|
||||||
ec_GFp_simple_group_get_curve,
|
ec_GFp_simple_group_get_curve,
|
||||||
ec_GFp_simple_group_get_degree,
|
ec_GFp_simple_group_get_degree,
|
||||||
0, /* group_order_bits */
|
ec_group_simple_order_bits,
|
||||||
ec_GFp_simple_group_check_discriminant,
|
ec_GFp_simple_group_check_discriminant,
|
||||||
ec_GFp_simple_point_init,
|
ec_GFp_simple_point_init,
|
||||||
ec_GFp_simple_point_finish,
|
ec_GFp_simple_point_finish,
|
||||||
@ -106,7 +106,16 @@ const EC_METHOD *EC_GFp_nist_method(void)
|
|||||||
0 /* field_div */ ,
|
0 /* field_div */ ,
|
||||||
0 /* field_encode */ ,
|
0 /* field_encode */ ,
|
||||||
0 /* field_decode */ ,
|
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;
|
return &ret;
|
||||||
|
@ -245,7 +245,7 @@ const EC_METHOD *EC_GFp_nistp224_method(void)
|
|||||||
ec_GFp_nistp224_group_set_curve,
|
ec_GFp_nistp224_group_set_curve,
|
||||||
ec_GFp_simple_group_get_curve,
|
ec_GFp_simple_group_get_curve,
|
||||||
ec_GFp_simple_group_get_degree,
|
ec_GFp_simple_group_get_degree,
|
||||||
0, /* group_order_bits */
|
ec_group_simple_order_bits,
|
||||||
ec_GFp_simple_group_check_discriminant,
|
ec_GFp_simple_group_check_discriminant,
|
||||||
ec_GFp_simple_point_init,
|
ec_GFp_simple_point_init,
|
||||||
ec_GFp_simple_point_finish,
|
ec_GFp_simple_point_finish,
|
||||||
@ -275,7 +275,16 @@ const EC_METHOD *EC_GFp_nistp224_method(void)
|
|||||||
0 /* field_div */ ,
|
0 /* field_div */ ,
|
||||||
0 /* field_encode */ ,
|
0 /* field_encode */ ,
|
||||||
0 /* field_decode */ ,
|
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;
|
return &ret;
|
||||||
|
@ -1774,7 +1774,7 @@ const EC_METHOD *EC_GFp_nistp256_method(void)
|
|||||||
ec_GFp_nistp256_group_set_curve,
|
ec_GFp_nistp256_group_set_curve,
|
||||||
ec_GFp_simple_group_get_curve,
|
ec_GFp_simple_group_get_curve,
|
||||||
ec_GFp_simple_group_get_degree,
|
ec_GFp_simple_group_get_degree,
|
||||||
0, /* group_order_bits */
|
ec_group_simple_order_bits,
|
||||||
ec_GFp_simple_group_check_discriminant,
|
ec_GFp_simple_group_check_discriminant,
|
||||||
ec_GFp_simple_point_init,
|
ec_GFp_simple_point_init,
|
||||||
ec_GFp_simple_point_finish,
|
ec_GFp_simple_point_finish,
|
||||||
@ -1804,7 +1804,16 @@ const EC_METHOD *EC_GFp_nistp256_method(void)
|
|||||||
0 /* field_div */ ,
|
0 /* field_div */ ,
|
||||||
0 /* field_encode */ ,
|
0 /* field_encode */ ,
|
||||||
0 /* field_decode */ ,
|
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;
|
return &ret;
|
||||||
|
@ -1603,7 +1603,7 @@ const EC_METHOD *EC_GFp_nistp521_method(void)
|
|||||||
ec_GFp_nistp521_group_set_curve,
|
ec_GFp_nistp521_group_set_curve,
|
||||||
ec_GFp_simple_group_get_curve,
|
ec_GFp_simple_group_get_curve,
|
||||||
ec_GFp_simple_group_get_degree,
|
ec_GFp_simple_group_get_degree,
|
||||||
0, /* group_order_bits */
|
ec_group_simple_order_bits,
|
||||||
ec_GFp_simple_group_check_discriminant,
|
ec_GFp_simple_group_check_discriminant,
|
||||||
ec_GFp_simple_point_init,
|
ec_GFp_simple_point_init,
|
||||||
ec_GFp_simple_point_finish,
|
ec_GFp_simple_point_finish,
|
||||||
@ -1633,7 +1633,16 @@ const EC_METHOD *EC_GFp_nistp521_method(void)
|
|||||||
0 /* field_div */ ,
|
0 /* field_div */ ,
|
||||||
0 /* field_encode */ ,
|
0 /* field_encode */ ,
|
||||||
0 /* field_decode */ ,
|
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;
|
return &ret;
|
||||||
|
@ -1441,7 +1441,7 @@ const EC_METHOD *EC_GFp_nistz256_method(void)
|
|||||||
ec_GFp_mont_group_set_curve,
|
ec_GFp_mont_group_set_curve,
|
||||||
ec_GFp_simple_group_get_curve,
|
ec_GFp_simple_group_get_curve,
|
||||||
ec_GFp_simple_group_get_degree,
|
ec_GFp_simple_group_get_degree,
|
||||||
0, /* group_order_bits */
|
ec_group_simple_order_bits,
|
||||||
ec_GFp_simple_group_check_discriminant,
|
ec_GFp_simple_group_check_discriminant,
|
||||||
ec_GFp_simple_point_init,
|
ec_GFp_simple_point_init,
|
||||||
ec_GFp_simple_point_finish,
|
ec_GFp_simple_point_finish,
|
||||||
@ -1469,7 +1469,16 @@ const EC_METHOD *EC_GFp_nistz256_method(void)
|
|||||||
0, /* field_div */
|
0, /* field_div */
|
||||||
ec_GFp_mont_field_encode,
|
ec_GFp_mont_field_encode,
|
||||||
ec_GFp_mont_field_decode,
|
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;
|
return &ret;
|
||||||
|
@ -79,7 +79,7 @@ const EC_METHOD *EC_GFp_simple_method(void)
|
|||||||
ec_GFp_simple_group_set_curve,
|
ec_GFp_simple_group_set_curve,
|
||||||
ec_GFp_simple_group_get_curve,
|
ec_GFp_simple_group_get_curve,
|
||||||
ec_GFp_simple_group_get_degree,
|
ec_GFp_simple_group_get_degree,
|
||||||
0, /* group_order_bits */
|
ec_group_simple_order_bits,
|
||||||
ec_GFp_simple_group_check_discriminant,
|
ec_GFp_simple_group_check_discriminant,
|
||||||
ec_GFp_simple_point_init,
|
ec_GFp_simple_point_init,
|
||||||
ec_GFp_simple_point_finish,
|
ec_GFp_simple_point_finish,
|
||||||
@ -107,7 +107,16 @@ const EC_METHOD *EC_GFp_simple_method(void)
|
|||||||
0 /* field_div */ ,
|
0 /* field_div */ ,
|
||||||
0 /* field_encode */ ,
|
0 /* field_encode */ ,
|
||||||
0 /* field_decode */ ,
|
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;
|
return &ret;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user