/* -*-c-*-
*
- * $Id: g-ec.c,v 1.2 2004/04/03 03:32:05 mdw Exp $
+ * $Id: g-ec.c,v 1.3 2004/04/04 19:04:11 mdw Exp $
*
* Abstraction for elliptic curve groups
*
/*----- Revision history --------------------------------------------------*
*
* $Log: g-ec.c,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.
*
#define ge ec
#include "group.h"
+#include "ec-raw.h"
/*----- Data structures ---------------------------------------------------*/
if (!rc) EC_COPY(d, &t); EC_DESTROY(&t); return (rc);
}
+static int gtoraw(group *gg, buf *b, ec *x) {
+ gctx *g = (gctx *)gg; ec t = EC_INIT; int rc;
+ EC_OUT(g->ei.c, &t, x); rc = ec_putraw(g->ei.c, b, &t);
+ EC_DESTROY(&t); return (rc);
+}
+
+static int gfromraw(group *gg, buf *b, ec *d) {
+ gctx *g = (gctx *)gg; ec t = EC_INIT; int rc;
+ if (ec_getraw(g->ei.c, b, &t)) return (-1);
+ EC_IN(g->ei.c, &t, &t); rc = EC_CHECK(g->ei.c, &t);
+ if (!rc) EC_COPY(d, &t); EC_DESTROY(&t); return (rc);
+}
+
/* --- @group_ec@ --- *
*
* Arguments: @const ec_info *ei@ = elliptic curve parameters
gcheck,
gmul, gsqr, ginv, gdiv, gexp, gmexp,
gread, gwrite,
- gtoint, gfromint, gtoec, gfromec, gtobuf, gfrombuf
+ gtoint, gfromint, gtoec, gfromec, gtobuf, gfrombuf, gtoraw, gfromraw
};
group *group_ec(const ec_info *ei)
g->g.ops = &gops;
g->g.nbits = ei->c->f->nbits * 2;
- g->g.noctets = ei->c->f->noctets * 2;
+ g->g.noctets = ei->c->f->noctets * 2 + 1;
g->ei = *ei;
EC_CREATE(&g->id);
g->g.i = &g->id;