X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/a9fcea0e5ef17bab8eaca2236016e109ab62488e..0f3faccdf5f2f0cfa40bd9bec495c4930052a51f:/g-ec.c diff --git a/g-ec.c b/g-ec.c index 91583bb..dcf8a10 100644 --- a/g-ec.c +++ b/g-ec.c @@ -1,6 +1,6 @@ /* -*-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 * @@ -30,6 +30,9 @@ /*----- 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. * @@ -50,6 +53,7 @@ #define ge ec #include "group.h" +#include "ec-raw.h" /*----- Data structures ---------------------------------------------------*/ @@ -182,6 +186,19 @@ static int gfrombuf(group *gg, buf *b, ec *d) { 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 @@ -202,7 +219,7 @@ static const group_ops gops = { 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) @@ -211,7 +228,7 @@ 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;