projects
/
u
/
mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Standard curves and curve checking.
[u/mdw/catacomb]
/
ec-bin.c
diff --git
a/ec-bin.c
b/ec-bin.c
index
a71ed2d
..
0efb72f
100644
(file)
--- a/
ec-bin.c
+++ b/
ec-bin.c
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-c-*-
*
- * $Id: ec-bin.c,v 1.
4 2004/03/23 15:19:32
mdw Exp $
+ * $Id: ec-bin.c,v 1.
5 2004/03/27 17:54:11
mdw Exp $
*
* Arithmetic for elliptic curves over binary fields
*
*
* Arithmetic for elliptic curves over binary fields
*
@@
-30,6
+30,9
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: ec-bin.c,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: ec-bin.c,v $
+ * Revision 1.5 2004/03/27 17:54:11 mdw
+ * Standard curves and curve checking.
+ *
* Revision 1.4 2004/03/23 15:19:32 mdw
* Test elliptic curves more thoroughly.
*
* Revision 1.4 2004/03/23 15:19:32 mdw
* Test elliptic curves more thoroughly.
*
@@
-56,7
+59,6
@@
typedef struct ecctx {
ec_curve c;
typedef struct ecctx {
ec_curve c;
- mp *a, *b;
mp *bb;
} ecctx;
mp *bb;
} ecctx;
@@
-86,15
+88,14
@@
static ec *ecprojneg(ec_curve *c, ec *d, const ec *p)
static ec *ecfind(ec_curve *c, ec *d, mp *x)
{
field *f = c->f;
static ec *ecfind(ec_curve *c, ec *d, mp *x)
{
field *f = c->f;
- ecctx *cc = (ecctx *)c;
mp *y, *u, *v;
if (F_ZEROP(f, x))
mp *y, *u, *v;
if (F_ZEROP(f, x))
- y = F_SQRT(f, MP_NEW, c
c
->b);
+ y = F_SQRT(f, MP_NEW, c->b);
else {
u = F_SQR(f, MP_NEW, x); /* %$x^2$% */
else {
u = F_SQR(f, MP_NEW, x); /* %$x^2$% */
- y = F_MUL(f, MP_NEW, u, c
c->a);
/* %$a x^2$% */
- y = F_ADD(f, y, y, c
c->b);
/* %$a x^2 + b$% */
+ y = F_MUL(f, MP_NEW, u, c
->a);
/* %$a x^2$% */
+ y = F_ADD(f, y, y, c
->b);
/* %$a x^2 + b$% */
v = F_MUL(f, MP_NEW, u, x); /* %$x^3$% */
y = F_ADD(f, y, y, v); /* %$A = x^3 + a x^2 + b$% */
if (!F_ZEROP(f, y)) {
v = F_MUL(f, MP_NEW, u, x); /* %$x^3$% */
y = F_ADD(f, y, y, v); /* %$A = x^3 + a x^2 + b$% */
if (!F_ZEROP(f, y)) {
@@
-120,7
+121,6
@@
static ec *ecdbl(ec_curve *c, ec *d, const ec *a)
EC_SETINF(d);
else {
field *f = c->f;
EC_SETINF(d);
else {
field *f = c->f;
- ecctx *cc = (ecctx *)c;
mp *lambda;
mp *dx, *dy;
mp *lambda;
mp *dx, *dy;
@@
-130,7
+130,7
@@
static ec *ecdbl(ec_curve *c, ec *d, const ec *a)
dx = F_SQR(f, dx, lambda); /* %$\lambda^2$% */
dx = F_ADD(f, dx, dx, lambda); /* %$\lambda^2 + \lambda$% */
dx = F_SQR(f, dx, lambda); /* %$\lambda^2$% */
dx = F_ADD(f, dx, dx, lambda); /* %$\lambda^2 + \lambda$% */
- dx = F_ADD(f, dx, dx, c
c->a);
/* %$x' = a + \lambda^2 + \lambda$% */
+ dx = F_ADD(f, dx, dx, c
->a);
/* %$x' = a + \lambda^2 + \lambda$% */
dy = F_ADD(f, MP_NEW, a->x, dx); /* %$ x + x' $% */
dy = F_MUL(f, dy, dy, lambda); /* %$ (x + x') \lambda$% */
dy = F_ADD(f, MP_NEW, a->x, dx); /* %$ x + x' $% */
dy = F_MUL(f, dy, dy, lambda); /* %$ (x + x') \lambda$% */
@@
-196,7
+196,6
@@
static ec *ecadd(ec_curve *c, ec *d, const ec *a, const ec *b)
EC_COPY(d, a);
else {
field *f = c->f;
EC_COPY(d, a);
else {
field *f = c->f;
- ecctx *cc = (ecctx *)c;
mp *lambda;
mp *dx, *dy;
mp *lambda;
mp *dx, *dy;
@@
-209,7
+208,7
@@
static ec *ecadd(ec_curve *c, ec *d, const ec *a, const ec *b)
dx = F_SQR(f, dx, lambda); /* %$\lambda^2$% */
dx = F_ADD(f, dx, dx, lambda); /* %$\lambda^2 + \lambda$% */
dx = F_SQR(f, dx, lambda); /* %$\lambda^2$% */
dx = F_ADD(f, dx, dx, lambda); /* %$\lambda^2 + \lambda$% */
- dx = F_ADD(f, dx, dx, c
c->a);
/* %$a + \lambda^2 + \lambda$% */
+ dx = F_ADD(f, dx, dx, c
->a);
/* %$a + \lambda^2 + \lambda$% */
dx = F_ADD(f, dx, dx, a->x); /* %$a + \lambda^2 + \lambda + x_0$% */
dx = F_ADD(f, dx, dx, b->x);
/* %$x' = a + \lambda^2 + \lambda + x_0 + x_1$% */
dx = F_ADD(f, dx, dx, a->x); /* %$a + \lambda^2 + \lambda + x_0$% */
dx = F_ADD(f, dx, dx, b->x);
/* %$x' = a + \lambda^2 + \lambda + x_0 + x_1$% */
@@
-223,7
+222,7
@@
static ec *ecadd(ec_curve *c, ec *d, const ec *a, const ec *b)
dx = F_SQR(f, dx, lambda); /* %$\lambda^2$% */
dx = F_ADD(f, dx, dx, lambda); /* %$\lambda^2 + \lambda$% */
dx = F_SQR(f, dx, lambda); /* %$\lambda^2$% */
dx = F_ADD(f, dx, dx, lambda); /* %$\lambda^2 + \lambda$% */
- dx = F_ADD(f, dx, dx, c
c
->a); /* %$x' = a + \lambda^2 + \lambda$% */
+ dx = F_ADD(f, dx, dx, c->a); /* %$x' = a + \lambda^2 + \lambda$% */
dy = MP_NEW;
}
dy = MP_NEW;
}
@@
-251,7
+250,6
@@
static ec *ecprojadd(ec_curve *c, ec *d, const ec *a, const ec *b)
EC_COPY(d, a);
else {
field *f = c->f;
EC_COPY(d, a);
else {
field *f = c->f;
- ecctx *cc = (ecctx *)c;
mp *dx, *dy, *dz, *u, *uu, *v, *t, *s, *ss, *r, *w, *l;
dz = F_SQR(f, MP_NEW, b->z); /* %$z_1^2$% */
mp *dx, *dy, *dz, *u, *uu, *v, *t, *s, *ss, *r, *w, *l;
dz = F_SQR(f, MP_NEW, b->z); /* %$z_1^2$% */
@@
-293,7
+291,7
@@
static ec *ecprojadd(ec_curve *c, ec *d, const ec *a, const ec *b)
t = F_ADD(f, t, r, dz); /* %$t = r + z'$% */
uu = F_SQR(f, MP_NEW, dz); /* %$z'^2$% */
t = F_ADD(f, t, r, dz); /* %$t = r + z'$% */
uu = F_SQR(f, MP_NEW, dz); /* %$z'^2$% */
- dx = F_MUL(f, MP_NEW, uu, c
c->a);
/* %$a z'^2$% */
+ dx = F_MUL(f, MP_NEW, uu, c
->a);
/* %$a z'^2$% */
uu = F_MUL(f, uu, t, r); /* %$t r$% */
dx = F_ADD(f, dx, dx, uu); /* %$a z'^2 + t r$% */
r = F_SQR(f, r, w); /* %$w^2$% */
uu = F_MUL(f, uu, t, r); /* %$t r$% */
dx = F_ADD(f, dx, dx, uu); /* %$a z'^2 + t r$% */
r = F_SQR(f, r, w); /* %$w^2$% */
@@
-320,16
+318,15
@@
static ec *ecprojadd(ec_curve *c, ec *d, const ec *a, const ec *b)
static int eccheck(ec_curve *c, const ec *p)
{
static int eccheck(ec_curve *c, const ec *p)
{
- ecctx *cc = (ecctx *)c;
field *f = c->f;
int rc;
mp *u, *v;
v = F_SQR(f, MP_NEW, p->x);
u = F_MUL(f, MP_NEW, v, p->x);
field *f = c->f;
int rc;
mp *u, *v;
v = F_SQR(f, MP_NEW, p->x);
u = F_MUL(f, MP_NEW, v, p->x);
- v = F_MUL(f, v, v, c
c
->a);
+ v = F_MUL(f, v, v, c->a);
u = F_ADD(f, u, u, v);
u = F_ADD(f, u, u, v);
- u = F_ADD(f, u, u, c
c
->b);
+ u = F_ADD(f, u, u, c->b);
v = F_MUL(f, v, p->x, p->y);
u = F_ADD(f, u, u, v);
v = F_SQR(f, v, p->y);
v = F_MUL(f, v, p->x, p->y);
u = F_ADD(f, u, u, v);
v = F_SQR(f, v, p->y);
@@
-354,8
+351,8
@@
static int ecprojcheck(ec_curve *c, const ec *p)
static void ecdestroy(ec_curve *c)
{
ecctx *cc = (ecctx *)c;
static void ecdestroy(ec_curve *c)
{
ecctx *cc = (ecctx *)c;
- MP_DROP(cc->a);
- MP_DROP(cc->b);
+ MP_DROP(cc->
c.
a);
+ MP_DROP(cc->
c.
b);
if (cc->bb) MP_DROP(cc->bb);
DESTROY(cc);
}
if (cc->bb) MP_DROP(cc->bb);
DESTROY(cc);
}
@@
-377,8
+374,8
@@
ec_curve *ec_bin(field *f, mp *a, mp *b)
ecctx *cc = CREATE(ecctx);
cc->c.ops = &ec_binops;
cc->c.f = f;
ecctx *cc = CREATE(ecctx);
cc->c.ops = &ec_binops;
cc->c.f = f;
- cc->a = F_IN(f, MP_NEW, a);
- cc->b = F_IN(f, MP_NEW, b);
+ cc->
c.
a = F_IN(f, MP_NEW, a);
+ cc->
c.
b = F_IN(f, MP_NEW, b);
cc->bb = 0;
return (&cc->c);
}
cc->bb = 0;
return (&cc->c);
}
@@
-388,8
+385,8
@@
ec_curve *ec_binproj(field *f, mp *a, mp *b)
ecctx *cc = CREATE(ecctx);
cc->c.ops = &ec_binprojops;
cc->c.f = f;
ecctx *cc = CREATE(ecctx);
cc->c.ops = &ec_binprojops;
cc->c.f = f;
- cc->a = F_IN(f, MP_NEW, a);
- cc->b = F_IN(f, MP_NEW, b);
+ cc->
c.
a = F_IN(f, MP_NEW, a);
+ cc->
c.
b = F_IN(f, MP_NEW, b);
cc->bb = F_SQRT(f, MP_NEW, b);
cc->bb = F_SQRT(f, cc->bb, cc->bb);
return (&cc->c);
cc->bb = F_SQRT(f, MP_NEW, b);
cc->bb = F_SQRT(f, cc->bb, cc->bb);
return (&cc->c);