X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/1ba83484ee5bb486da9aa958576de4bc29ef0c1d..34e4f738bcba58e6d8c4cabbb0b3232a65b42a9d:/ec.h diff --git a/ec.h b/ec.h index 79e3654..f556193 100644 --- a/ec.h +++ b/ec.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: ec.h,v 1.8 2004/03/27 17:54:11 mdw Exp $ + * $Id: ec.h,v 1.9 2004/04/01 12:50:09 mdw Exp $ * * Elliptic curve definitions * @@ -30,6 +30,13 @@ /*----- Revision history --------------------------------------------------* * * $Log: ec.h,v $ + * Revision 1.9 2004/04/01 12:50:09 mdw + * Add cyclic group abstraction, with test code. Separate off exponentation + * functions for better static linking. Fix a buttload of bugs on the way. + * Generally ensure that negative exponents do inversion correctly. Add + * table of standard prime-field subgroups. (Binary field subgroups are + * currently unimplemented but easy to add if anyone ever finds a good one.) + * * Revision 1.8 2004/03/27 17:54:11 mdw * Standard curves and curve checking. * @@ -126,6 +133,7 @@ typedef struct ec_mulfactor { typedef struct ec_ops { void (*destroy)(ec_curve */*c*/); + int (*samep)(ec_curve */*c*/, ec_curve */*d*/); ec *(*in)(ec_curve */*c*/, ec */*d*/, const ec */*p*/); ec *(*out)(ec_curve */*c*/, ec */*d*/, const ec */*p*/); ec *(*fix)(ec_curve */*c*/, ec */*d*/, const ec */*p*/); @@ -137,6 +145,7 @@ typedef struct ec_ops { int (*check)(ec_curve */*c*/, const ec */*p*/); } ec_ops; +#define EC_SAMEP(c, d) (c)->ops->samep((c), (d)) #define EC_IN(c, d, p) (c)->ops->in((c), (d), (p)) #define EC_OUT(c, d, p) (c)->ops->out((c), (d), (p)) #define EC_FIX(c, d, p) (c)->ops->fix((c), (d), (p)) @@ -278,6 +287,19 @@ extern int ec_eq(const ec *p, const ec *q); /*----- Interesting arithmetic --------------------------------------------*/ +/* --- @ec_samep@ --- * + * + * Arguments: @ec_curve *c, *d@ = two elliptic curves + * + * Returns: Nonzero if the curves are identical (not just isomorphic). + * + * Use: Checks for sameness of curves. This function does the full + * check, not just the curve-type-specific check done by the + * @sampep@ field operation. + */ + +extern int ec_samep(ec_curve */*c*/, ec_curve */*d*/); + /* --- @ec_find@ --- * * * Arguments: @ec_curve *c@ = pointer to an elliptic curve @@ -410,6 +432,17 @@ extern ec *ec_immul(ec_curve */*c*/, ec */*d*/, /*----- Standard curve operations -----------------------------------------*/ +/* --- @ec_stdsamep@ --- * + * + * Arguments: @ec_curve *c, *d@ = two elliptic curves + * + * Returns: Nonzero if the curves are identical (not just isomorphic). + * + * Use: Simple sameness check on @a@ and @b@ curve members. + */ + +extern int ec_stdsamep(ec_curve */*c*/, ec_curve */*d*/); + /* --- @ec_idin@, @ec_idout@, @ec_idfix@ --- * * * Arguments: @ec_curve *c@ = pointer to an elliptic curve @@ -574,6 +607,17 @@ extern int ec_infoparse(qd_parse */*qd*/, ec_info */*ei*/); extern const char *ec_getinfo(ec_info */*ei*/, const char */*p*/); +/* --- @ec_sameinfop@ --- * + * + * Arguments: @ec_info *ei, *ej@ = two elliptic curve parameter sets + * + * Returns: Nonzero if the curves are identical (not just isomorphic). + * + * Use: Checks for sameness of curve parameters. + */ + +extern int ec_sameinfop(ec_info */*ei*/, ec_info */*ej*/); + /* --- @ec_freeinfo@ --- * * * Arguments: @ec_info *ei@ = elliptic curve information block to free