/* -*-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
*
/*----- 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.
*
# 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 {
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}$%
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