summaryrefslogtreecommitdiff
path: root/lib/libcrypto/ec/ec_local.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libcrypto/ec/ec_local.h')
-rw-r--r--lib/libcrypto/ec/ec_local.h125
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