X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/a9fcea0e5ef17bab8eaca2236016e109ab62488e..0f3faccdf5f2f0cfa40bd9bec495c4930052a51f:/g-prime.c diff --git a/g-prime.c b/g-prime.c index 03cce55..97f455f 100644 --- a/g-prime.c +++ b/g-prime.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: g-prime.c,v 1.2 2004/04/03 03:32:05 mdw Exp $ + * $Id: g-prime.c,v 1.3 2004/04/04 19:04:11 mdw Exp $ * * Abstraction for prime groups * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: g-prime.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. * @@ -149,6 +152,20 @@ static int gfrombuf(group *gg, buf *b, mp **d) { *d = mpmont_mul(&g->mm, x, x, g->mm.r2); return(0); } +static int gtoraw(group *gg, buf *b, mp **x) { + gctx *g = (gctx *)gg; octet *q; mp *t = mpmont_reduce(&g->mm, MP_NEW, *x); + if ((q = buf_get(b, g->g.noctets)) == 0) { MP_DROP(t); return (-1); } + mp_storeb(t, q, g->g.noctets); MP_DROP(t); return (0); +} + +static int gfromraw(group *gg, buf *b, mp **d) { + gctx * g = (gctx *)gg; mp *x; octet *q; + if ((q = buf_get(b, g->g.noctets)) == 0) return (-1); + x = mp_loadb(MP_NEW, q, g->g.noctets); + mp_div(0, &x, x, g->mm.m); mp_drop(*d); + *d = mpmont_mul(&g->mm, x, x, g->mm.r2); return(0); +} + /* --- @group_prime@ --- * * * Arguments: @const gprime_param *gp@ = group parameters @@ -166,7 +183,8 @@ static const group_ops gops = { gcheck, gmul, gsqr, ginv, group_stddiv, gexp, gmexp, gread, gwrite, - gtoint, gfromint, group_stdtoec, group_stdfromec, gtobuf, gfrombuf + gtoint, gfromint, group_stdtoec, group_stdfromec, gtobuf, gfrombuf, + gtoraw, gfromraw }; group *group_prime(const gprime_param *gp)