+ gctx_prime * g = (gctx_prime *)gg; mp *x;
+ if ((x = buf_getmp(b)) == 0) return (-1);
+ mp_div(0, &x, x, g->mm.m); mp_drop(*d);
+ *d = mpmont_mul(&g->mm, x, x, g->mm.r2); return(0);
+}
+
+static int gtoraw(group *gg, buf *b, mp **x) {
+ gctx_prime *g = (gctx_prime *)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_prime * g = (gctx_prime *)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);