/* -*-c-*-
*
- * $Id: ec-test.c,v 1.3 2004/03/27 17:54:11 mdw Exp $
+ * $Id$
*
* Code for testing elliptic-curve stuff
*
* (c) 2004 Straylight/Edgeware
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of Catacomb.
*
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
- *
+ *
* Catacomb is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Library General Public
* License along with Catacomb; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: ec-test.c,v $
- * Revision 1.3 2004/03/27 17:54:11 mdw
- * Standard curves and curve checking.
- *
- * Revision 1.2 2004/03/27 00:04:46 mdw
- * Implement efficient reduction for pleasant-looking primes.
- *
- * Revision 1.1 2004/03/23 15:19:32 mdw
- * Test elliptic curves more thoroughly.
- *
- */
-
/*----- Header files ------------------------------------------------------*/
#include <assert.h>
return (EC_CHECK(c->real, p));
}
-static ec_ops ecops = {
- ecDESTROY, ecIN, ecOUT, ecFIX,
+static int ecSAMEP(ec_curve *cc, ec_curve *dd)
+{
+ ecctx *c = (ecctx *)cc, *d = (ecctx *)dd;
+ return (ec_samep(c->real, d->real));
+}
+
+static const ec_ops ecops = {
+ "cardboard",
+ ecDESTROY, ecSAMEP, ecIN, ecOUT, ecFIX,
ecFIND, ecNEG, ecADD, ecSUB, ecDBL, ecCHECK
};
ecctx *c = CREATE(ecctx);
c->c.f = real->f;
c->c.ops = &ecops;
+ c->c.a = real->a;
+ c->c.b = real->b;
c->magic = MAGIC;
c->name = xstrdup(name);
c->real = real;
fprintf(fp, "%s", ec_name(v));
}
-test_type type_ecurve = { ecvcvt, ecvdump };
+const test_type type_ecurve = { ecvcvt, ecvdump };
static void eccvt(const char *p, dstr *d)
{
if (EC_ATINF(a))
fputs("inf", fp);
else {
- fputs("0x", fp);
+ fputs("0x", fp);
mp_writefile(a->x, fp, 16);
fputs(", 0x", fp);
mp_writefile(a->y, fp, 16);
ecdodump(a, fp);
}
-test_type type_ec = { eccvt, ecdump };
+const test_type type_ec = { eccvt, ecdump };
/*----- Testing elliptic curve functionality ------------------------------*/
if (r != c) {
fprintf(stderr, "check failed");
fprintf(stderr, "\ncurve = "); type_ecurve.dump(v, stderr);
- fprintf(stderr, "\n a = "); ecdodump(a, stderr);
- fprintf(stderr, "\n r = %d", r);
- fprintf(stderr, "\n c = %d", c);
+ fprintf(stderr, "\n a = "); ecdodump(a, stderr);
+ fprintf(stderr, "\n r = %d", r);
+ fprintf(stderr, "\n c = %d", c);
fprintf(stderr, "\n");
ok = 0;
}
if (!EC_EQ(r, &c)) {
fprintf(stderr, "mul failed");
fprintf(stderr, "\ncurve = "); type_ecurve.dump(v, stderr);
- fprintf(stderr, "\n a = "); ecdodump(a, stderr);
- fprintf(stderr, "\n n = "); mp_writefile(n, stderr, 10);
- fprintf(stderr, "\n r = "); ecdodump(r, stderr);
- fprintf(stderr, "\n c = "); ecdodump(&c, stderr);
+ fprintf(stderr, "\n a = "); ecdodump(a, stderr);
+ fprintf(stderr, "\n n = "); mp_writefile(n, stderr, 10);
+ fprintf(stderr, "\n r = "); ecdodump(r, stderr);
+ fprintf(stderr, "\n c = "); ecdodump(&c, stderr);
fprintf(stderr, "\n");
ok = 0;
}
if (!EC_EQ(r, &c)) {
fprintf(stderr, "find failed");
fprintf(stderr, "\ncurve = "); type_ecurve.dump(v, stderr);
- fprintf(stderr, "\n x = "); mp_writefile(x, stderr, 16);
- fprintf(stderr, "\n r = "); ecdodump(r, stderr);
- fprintf(stderr, "\n c = "); ecdodump(&c, stderr);
+ fprintf(stderr, "\n x = "); mp_writefile(x, stderr, 16);
+ fprintf(stderr, "\n r = "); ecdodump(r, stderr);
+ fprintf(stderr, "\n c = "); ecdodump(&c, stderr);
fprintf(stderr, "\n");
ok = 0;
}