progs/perftest.c: Use from Glibc syscall numbers.
[catacomb] / math / ec-prime.c
index c2ec288..46b9885 100644 (file)
@@ -328,6 +328,17 @@ static int ecprojcheck(ec_curve *c, const ec *p)
   return (rc);
 }
 
+static int eccompr(ec_curve *c, const ec *p)
+{
+  /* --- Just take the LSB of %$y$% ---
+   *
+   * Since @p@ is odd, either %$y$% or %$-y = p - y$% must be odd, so this
+   * disambiguates.
+   */
+
+  return (MP_ODDP(p->y));
+}
+
 static void ecdestroy(ec_curve *c)
 {
   MP_DROP(c->a);
@@ -378,19 +389,19 @@ extern ec_curve *ec_primeproj(field *f, mp *a, mp *b)
 static const ec_ops ec_primeops = {
   "prime",
   ecdestroy, ec_stdsamep, ec_idin, ec_idout, ec_idfix,
-  ecfind, ecneg, ecadd, ec_stdsub, ecdbl, eccheck
+  ecfind, ecneg, ecadd, ec_stdsub, ecdbl, eccheck, eccompr
 };
 
 static const ec_ops ec_primeprojops = {
   "primeproj",
   ecdestroy, ec_stdsamep, ec_projin, ec_projout, ec_projfix,
-  ecfind, ecneg, ecprojadd, ec_stdsub, ecprojdbl, ecprojcheck
+  ecfind, ecneg, ecprojadd, ec_stdsub, ecprojdbl, ecprojcheck, eccompr
 };
 
 static const ec_ops ec_primeprojxops = {
   "primeproj",
   ecdestroy, ec_stdsamep, ec_projin, ec_projout, ec_projfix,
-  ecfind, ecneg, ecprojadd, ec_stdsub, ecprojxdbl, ecprojcheck
+  ecfind, ecneg, ecprojadd, ec_stdsub, ecprojxdbl, ecprojcheck, eccompr
 };
 
 /*----- Test rig ----------------------------------------------------------*/