/* -*-c-*-
*
- * $Id: ec.h,v 1.6 2004/03/22 02:19:10 mdw Exp $
+ * $Id: ec.h,v 1.7 2004/03/23 15:19:32 mdw Exp $
*
* Elliptic curve definitions
*
/*----- Revision history --------------------------------------------------*
*
* $Log: ec.h,v $
+ * Revision 1.7 2004/03/23 15:19:32 mdw
+ * Test elliptic curves more thoroughly.
+ *
* Revision 1.6 2004/03/22 02:19:10 mdw
* Rationalise the sliding-window threshold. Drop guarantee that right
* arguments to EC @add@ are canonical, and fix up projective implementations
extern ec *ec_copy(ec */*d*/, const ec */*p*/);
+/* --- @ec_eq@ --- *
+ *
+ * Arguments: @const ec *p, *q@ = two points
+ *
+ * Returns: Nonzero if the points are equal. Compares external-format
+ * points.
+ */
+
+#define EC_EQ(p, q) \
+ ((EC_ATINF(p) && EC_ATINF(q)) || \
+ (!EC_ATINF(p) && !EC_ATINF(q) && \
+ MP_EQ((p)->x, (q)->x) && \
+ MP_EQ((p)->y, (q)->y)))
+
+extern int ec_eq(const ec *p, const ec *q);
+
/*----- Interesting arithmetic --------------------------------------------*/
/* --- @ec_find@ --- *
extern ec *ec_find(ec_curve */*c*/, ec */*d*/, mp */*x*/);
+/* --- @ec_rand@ --- *
+ *
+ * Arguments: @ec_curve *c@ = pointer to an elliptic curve
+ * @ec *d@ = pointer to the destination point
+ * @grand *r@ = random number source
+ *
+ * Returns: The destination @d@.
+ *
+ * Use: Finds a random point on the given curve.
+ */
+
+extern ec *ec_rand(ec_curve */*c*/, ec */*d*/, grand */*r*/);
+
/* --- @ec_neg@ --- *
*
* Arguments: @ec_curve *c@ = pointer to an elliptic curve