X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/bc985cefafea2e1b02095a2ff2a9982c4c647d17..1ba83484ee5bb486da9aa958576de4bc29ef0c1d:/field.h diff --git a/field.h b/field.h index db27e63..7af9b4f 100644 --- a/field.h +++ b/field.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: field.h,v 1.6 2004/03/23 15:19:32 mdw Exp $ + * $Id: field.h,v 1.8 2004/03/27 17:54:11 mdw Exp $ * * Definitions for field arithmetic * @@ -30,6 +30,12 @@ /*----- Revision history --------------------------------------------------* * * $Log: field.h,v $ + * Revision 1.8 2004/03/27 17:54:11 mdw + * Standard curves and curve checking. + * + * Revision 1.7 2004/03/27 00:04:46 mdw + * Implement efficient reduction for pleasant-looking primes. + * * Revision 1.6 2004/03/23 15:19:32 mdw * Test elliptic curves more thoroughly. * @@ -73,11 +79,18 @@ # include "mp.h" #endif +#ifndef CATACOMB_QDPARSE_H +# include "qdparse.h" +#endif + /*----- Data structures ---------------------------------------------------*/ typedef struct field { const struct field_ops *ops; /* Field operations */ mp *zero, *one; /* Identities in the field */ + mp *m; /* Modulus (prime and binary) */ + unsigned long nbits; /* Length of field element in bits */ + size_t noctets; /* Length of element in octets */ } field; enum { @@ -179,6 +192,18 @@ extern mp *field_id(field */*f*/, mp */*d*/, mp */*x*/); extern field *field_prime(mp */*p*/); +/* --- @field_niceprime@ --- * + * + * Arguments: @mp *p@ = the characteristic of the field + * + * Returns: A pointer to the field. + * + * Use: Creates a field structure for a prime field of size %$p$%, + * using efficient reduction for nice primes. + */ + +extern field *field_niceprime(mp */*p*/); + /* --- @field_binpoly@ --- * * * Arguments: @mp *p@ = an irreducible polynomial over %$\gf{2}$% @@ -191,6 +216,21 @@ extern field *field_prime(mp */*p*/); extern field *field_binpoly(mp */*p*/); +/* --- @field_parse@ --- * + * + * Arguments: @qd_parse *qd@ = parser context + * + * Returns: Field pointer if OK, or null. + * + * Use: Parses a field description, which has the form + * + * * `prime', `niceprime' or `binpoly' + * * an optional `:' + * * the field modulus + */ + +extern field *field_parse(qd_parse */*qd*/); + /*----- That's all, folks -------------------------------------------------*/ #ifdef __cplusplus