Make tables of standard encryption schemes etc.
[u/mdw/catacomb] / group.h
diff --git a/group.h b/group.h
index 383bc82..0e32de6 100644 (file)
--- a/group.h
+++ b/group.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: group.h,v 1.1 2004/04/01 12:50:09 mdw Exp $
+ * $Id: group.h,v 1.3 2004/04/04 19:04:11 mdw Exp $
  *
  * General cyclic group abstraction
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: group.h,v $
+ * Revision 1.3  2004/04/04 19:04:11  mdw
+ * Raw I/O of elliptic curve points and group elements.
+ *
+ * Revision 1.2  2004/04/03 03:32:05  mdw
+ * General robustification.
+ *
  * Revision 1.1  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.
   typedef struct ge ge;                        /* Group element (abstract type) */
 #endif
 
-typedef struct group {
+typedef struct group_ {
   const struct group_ops *ops;         /* Operations table */
   size_t nbits;                                /* Size of an element in bits */
-  size_t noctets;                      /* Size of an element in octets */
+  size_t noctets;                      /* Size of raw element in octets */
   ge *i;                               /* Identity element */
   ge *g;                               /* Generator element */
   mp *r;                               /* Order of the generator */
@@ -137,6 +143,8 @@ typedef struct group_ops {
   int (*fromec)(group */*g*/, ge */*d*/, ec */*p*/);
   int (*tobuf)(group */*h*/, buf */*b*/, ge */*x*/);
   int (*frombuf)(group */*h*/, buf */*b*/, ge */*d*/);
+  int (*toraw)(group */*h*/, buf */*b*/, ge */*x*/);
+  int (*fromraw)(group */*h*/, buf */*b*/, ge */*d*/);
 
 } group_ops;
 
@@ -174,6 +182,8 @@ enum {
 #define G_FROMEC(g, d, p)      (g)->ops->fromec((g), (d), (p))
 #define G_TOBUF(g, b, x)       (g)->ops->tobuf((g), (b), (x))
 #define G_FROMBUF(g, b, d)     (g)->ops->frombuf((g), (b), (d))
+#define G_TORAW(g, b, x)       (g)->ops->toraw((g), (b), (x))
+#define G_FROMRAW(g, b, d)     (g)->ops->fromraw((g), (b), (d))
 
 /*----- Handy functions ---------------------------------------------------*/
 
@@ -334,7 +344,7 @@ typedef struct gprime_param {
  *
  * Arguments:  @const gprime_param *gp@ = group parameters
  *
- * Returns:    A pointer to the group.
+ * Returns:    A pointer to the group, or null.
  *
  * Use:                Constructs an abstract group interface for a subgroup of a
  *             prime field.  Group elements are @mp *@ pointers.
@@ -348,7 +358,7 @@ group *group_prime(const gprime_param */*gp*/);
  *
  * Arguments:  @const ec_info *ei@ = elliptic curve parameters
  *
- * Returns:    A pointer to the group.
+ * Returns:    A pointer to the group, or null.
  *
  * Use:                Constructs an abstract group interface for an elliptic curve
  *             group.  Group elements are @ec@ structures.  The contents of