diff options
Diffstat (limited to 'lib/libcrypto/ec/ec_local.h')
-rw-r--r-- | lib/libcrypto/ec/ec_local.h | 125 |
1 files changed, 40 insertions, 85 deletions
diff --git a/lib/libcrypto/ec/ec_local.h b/lib/libcrypto/ec/ec_local.h index 0d734351de3..afa8b0307f0 100644 --- a/lib/libcrypto/ec/ec_local.h +++ b/lib/libcrypto/ec/ec_local.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ec_local.h,v 1.46 2025/01/05 16:07:08 tb Exp $ */ +/* $OpenBSD: ec_local.h,v 1.62 2025/01/11 20:57:03 tb Exp $ */ /* * Originally written by Bodo Moeller for the OpenSSL project. */ @@ -79,50 +79,32 @@ __BEGIN_HIDDEN_DECLS -#if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) -# endif -#endif - struct ec_method_st { int field_type; - int (*group_copy)(EC_GROUP *, const EC_GROUP *); - int (*group_set_curve)(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *); int (*group_get_curve)(const EC_GROUP *, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *); - int (*group_get_degree)(const EC_GROUP *); - int (*group_order_bits)(const EC_GROUP *); - int (*group_check_discriminant)(const EC_GROUP *, BN_CTX *); + int (*point_is_on_curve)(const EC_GROUP *, const EC_POINT *, BN_CTX *); + int (*point_cmp)(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, + BN_CTX *); - int (*point_set_Jprojective_coordinates)(const EC_GROUP *, EC_POINT *, - const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *); - int (*point_get_Jprojective_coordinates)(const EC_GROUP *, - const EC_POINT *, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *); int (*point_set_affine_coordinates)(const EC_GROUP *, EC_POINT *, const BIGNUM *x, const BIGNUM *y, BN_CTX *); int (*point_get_affine_coordinates)(const EC_GROUP *, const EC_POINT *, BIGNUM *x, BIGNUM *y, BN_CTX *); - int (*point_set_compressed_coordinates)(const EC_GROUP *, EC_POINT *, - const BIGNUM *x, int y_bit, BN_CTX *); + + /* Only used by the wNAF code. */ + int (*points_make_affine)(const EC_GROUP *, size_t num, EC_POINT **, + BN_CTX *); int (*add)(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *); int (*dbl)(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, BN_CTX *); int (*invert)(const EC_GROUP *, EC_POINT *, BN_CTX *); - int (*is_on_curve)(const EC_GROUP *, const EC_POINT *, BN_CTX *); - int (*point_cmp)(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, - BN_CTX *); - - int (*make_affine)(const EC_GROUP *, EC_POINT *, BN_CTX *); - int (*points_make_affine)(const EC_GROUP *, size_t num, EC_POINT *[], - BN_CTX *); - int (*mul_generator_ct)(const EC_GROUP *, EC_POINT *r, const BIGNUM *scalar, BN_CTX *); int (*mul_single_ct)(const EC_GROUP *group, EC_POINT *r, @@ -146,17 +128,9 @@ struct ec_method_st { BN_CTX *); int (*field_decode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); - - int (*field_set_to_one)(const EC_GROUP *, BIGNUM *r, BN_CTX *); - int (*blind_coordinates)(const EC_GROUP *group, EC_POINT *p, - BN_CTX *ctx); } /* EC_METHOD */; struct ec_group_st { - /* - * Methods and members exposed via the public API. - */ - const EC_METHOD *meth; EC_POINT *generator; /* Optional */ @@ -174,11 +148,6 @@ struct ec_group_st { size_t seed_len; /* - * Internal methods and members. Handled by the method functions, even - * if they appear to be generic. - */ - - /* * Coefficients of the Weierstrass equation y^2 = x^3 + a*x + b (mod p). */ BIGNUM *p; @@ -188,30 +157,10 @@ struct ec_group_st { /* Enables optimized point arithmetics for special case. */ int a_is_minus3; - /* Montgomery context and values used by EC_GFp_mont_method. */ + /* Montgomery context used by EC_GFp_mont_method. */ BN_MONT_CTX *mont_ctx; - BIGNUM *mont_one; } /* EC_GROUP */; -struct ec_key_st { - const EC_KEY_METHOD *meth; - - int version; - - EC_GROUP *group; - - EC_POINT *pub_key; - BIGNUM *priv_key; - - unsigned int enc_flag; - point_conversion_form_t conv_form; - - int references; - int flags; - - CRYPTO_EX_DATA ex_data; -} /* EC_KEY */; - struct ec_point_st { const EC_METHOD *meth; @@ -229,10 +178,20 @@ struct ec_point_st { int ec_wnaf_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m, const EC_POINT *point, const BIGNUM *n, BN_CTX *ctx); -int ec_group_simple_order_bits(const EC_GROUP *group); -int ec_point_blind_coordinates(const EC_GROUP *group, EC_POINT *p, BN_CTX *ctx); +int ec_group_is_builtin_curve(const EC_GROUP *group, int *out_nid); +int ec_group_get_field_type(const EC_GROUP *group); + +/* + * Wrappers around the unergonomic EC_POINT_{oct2point,point2oct}(). + */ +int ec_point_from_octets(const EC_GROUP *group, const unsigned char *buf, + size_t buf_len, EC_POINT **out_point, uint8_t *out_form, BN_CTX *ctx_in); +int ec_point_to_octets(const EC_GROUP *group, const EC_POINT *point, int form, + unsigned char **out_buf, size_t *len, BN_CTX *ctx_in); -/* EC_METHOD definitions */ +/* Public API in OpenSSL */ +const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); +const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); struct ec_key_method_st { const char *name; @@ -260,10 +219,26 @@ struct ec_key_method_st { const ECDSA_SIG *sig, EC_KEY *eckey); } /* EC_KEY_METHOD */; -#define EC_KEY_METHOD_DYNAMIC 1 +struct ec_key_st { + const EC_KEY_METHOD *meth; + + int version; + + EC_GROUP *group; + + EC_POINT *pub_key; + BIGNUM *priv_key; + + unsigned int enc_flag; + point_conversion_form_t conv_form; + + int references; + int flags; + + CRYPTO_EX_DATA ex_data; +} /* EC_KEY */; int eckey_compute_pubkey(EC_KEY *eckey); -int ec_key_gen(EC_KEY *eckey); int ecdh_compute_key(unsigned char **out, size_t *out_len, const EC_POINT *pub_key, const EC_KEY *ecdh); int ecdsa_verify(int type, const unsigned char *dgst, int dgst_len, @@ -277,24 +252,4 @@ int ecdsa_verify_sig(const unsigned char *dgst, int dgst_len, int ecdh_KDF_X9_63(unsigned char *out, size_t outlen, const unsigned char *Z, size_t Zlen, const unsigned char *sinfo, size_t sinfolen, const EVP_MD *md); -int EC_POINT_set_Jprojective_coordinates(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx); -int EC_POINT_get_Jprojective_coordinates(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); - -int ec_group_is_builtin_curve(const EC_GROUP *group, int *out_nid); -int ec_group_get_field_type(const EC_GROUP *group); - -/* - * Wrappers around the unergonomic EC_POINT_{oct2point,point2oct}(). - */ -int ec_point_from_octets(const EC_GROUP *group, const unsigned char *buf, - size_t buf_len, EC_POINT **out_point, uint8_t *out_form, BN_CTX *ctx_in); -int ec_point_to_octets(const EC_GROUP *group, const EC_POINT *point, int form, - unsigned char **out_buf, size_t *len, BN_CTX *ctx_in); - -/* Public API in OpenSSL */ -const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); -const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); - __END_HIDDEN_DECLS |