/* -*-c-*-
*
- * $Id: buf.h,v 1.1 2003/10/11 21:02:33 mdw Exp $
+ * $Id: buf.h,v 1.3 2004/04/01 12:50:09 mdw Exp $
+ *
+ * Reading and writing packet buffers
*
- * [Reading and writing packet buffers *
* (c) 2001 Straylight/Edgeware
*/
/*----- Revision history --------------------------------------------------*
*
* $Log: buf.h,v $
+ * Revision 1.3 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.2 2003/11/10 22:18:30 mdw
+ * Build fixes.
+ *
* Revision 1.1 2003/10/11 21:02:33 mdw
* Import buf stuff from tripe.
*
*
*/
-#ifndef BUF_H
-#define BUF_H
+#ifndef CATACOMB_BUF_H
+#define CATACOMB_BUF_H
#ifdef __cplusplus
extern "C" {
#include <mLib/bits.h>
-#include <catacomb/mp.h>
+#ifndef CATACOMB_MP_H
+# include "mp.h"
+#endif
+
+#ifndef CATACOMB_EC_H
+# include "ec.h"
+#endif
/*----- Data structures ---------------------------------------------------*/
extern int buf_putmp(buf */*b*/, mp */*m*/);
+/* --- @buf_getec@ --- *
+ *
+ * Arguments: @buf *b@ = pointer to a buffer block
+ * @ec *p@ = where to put the point
+ *
+ * Returns: Zero if it worked, nonzero if it failed.
+ *
+ * Use: Gets a multiprecision integer from a buffer. The point must
+ * be initialized.
+ */
+
+extern int buf_getec(buf */*b*/, ec */*p*/);
+
+/* --- @buf_putec@ --- *
+ *
+ * Arguments: @buf *b@ = pointer to a buffer block
+ * @ec *p@ = an elliptic curve point
+ *
+ * Returns: Zero if it worked, nonzero if there wasn't enough space.
+ *
+ * Use: Puts an elliptic curve point to a buffer.
+ */
+
+extern int buf_putec(buf */*b*/, ec */*p*/);
+
/*----- That's all, folks -------------------------------------------------*/
#ifdef __cplusplus