static ec *ecdbl(ec_curve *c, ec *d, const ec *a)
{
- if (EC_ATINF(a))
+ if (EC_ATINF(a) || F_ZEROP(c->f, a->y))
EC_SETINF(d);
- else if (F_ZEROP(c->f, a->y))
- EC_COPY(d, a);
else {
field *f = c->f;
mp *lambda;
static ec *ecprojdbl(ec_curve *c, ec *d, const ec *a)
{
- if (EC_ATINF(a))
+ if (EC_ATINF(a) || F_ZEROP(c->f, a->y))
EC_SETINF(d);
- else if (F_ZEROP(c->f, a->y))
- EC_COPY(d, a);
else {
field *f = c->f;
mp *p, *q, *m, *s, *dx, *dy, *dz;
static ec *ecprojxdbl(ec_curve *c, ec *d, const ec *a)
{
- if (EC_ATINF(a))
+ if (EC_ATINF(a) || F_ZEROP(c->f, a->y))
EC_SETINF(d);
- else if (F_ZEROP(c->f, a->y))
- EC_COPY(d, a);
else {
field *f = c->f;
mp *p, *q, *m, *s, *dx, *dy, *dz;
-# $Id: ec,v 1.3 2004/03/27 17:54:12 mdw Exp $
+# $Id$
#
# Elliptic curve tests
}
dbl {
+ "prime: 23 prime: 1, 1" "4, 0" inf;
+ "prime: 23 primeproj: 1, 1" "4, 0" inf;
+
"prime: 6277101735386680763835789423207666416083908700390324961279
prime: -3, 0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1"
"0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
}
mul {
+ "prime: 23 prime: 1, 1" "0, 1" 28 inf;
+ "prime: 23 prime: 1, 1" "0, 1" 29 "0, 1";
+ "prime: 23 primeproj: 1, 1" "0, 1" 28 inf;
+ "prime: 23 primeproj: 1, 1" "0, 1" 29 "0, 1";
+
"prime: 6277101735386680763835789423207666416083908700390324961279
prime: -3, 0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1"
"0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,