Make tables of standard encryption schemes etc.
[u/mdw/catacomb] / rabin.h
diff --git a/rabin.h b/rabin.h
index fca099d..d5ee9d3 100644 (file)
--- a/rabin.h
+++ b/rabin.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: rabin.h,v 1.3 1999/12/22 15:50:29 mdw Exp $
+ * $Id: rabin.h,v 1.6 2002/01/13 13:42:53 mdw Exp $
  *
  * Miller-Rabin primality test
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: rabin.h,v $
+ * Revision 1.6  2002/01/13 13:42:53  mdw
+ * More efficient Rabin-Miller test: with random witnesses, skip redundant
+ * Montgomerization.  (Being bijective, it can't affect the distribution.)
+ *
+ * Revision 1.5  2000/07/09 21:32:16  mdw
+ * rabin_test: Correct error in comment.
+ *
+ * Revision 1.4  2000/06/17 11:52:48  mdw
+ * Typesetting fix.
+ *
  * Revision 1.3  1999/12/22 15:50:29  mdw
  * Reworking for new prime-search system.  Add function for working out how
  * many iterations to use for a particular number.
@@ -69,7 +79,7 @@ typedef struct rabin {
   mpmont mm;                           /* Montgomery arithmetic context */
   size_t s;                            /* %$m = 2^s r + 1$% */
   mp *r;                               /* %$m = 2^s r + 1$% */
-  mp *m1;                              /* %$(m - 1)R \bmod m */
+  mp *m1;                              /* %$(m - 1)R \bmod m$% */
 } rabin;
 
 /*----- Functions provided ------------------------------------------------*/
@@ -99,18 +109,20 @@ extern void rabin_create(rabin */*r*/, mp */*m*/);
 
 extern void rabin_destroy(rabin */*r*/);
 
-/* --- @rabin_test@ --- *
+/* --- @rabin_test@, @rabin_rtest@ --- *
  *
  * Arguments:  @rabin *r@ = pointer to Rabin-Miller context
  *             @mp *g@ = base to test the number against
  *
- * Returns:    Either @PGEN_FAIL@ if the test failed, or @PGEN_TRY@
+ * Returns:    Either @PGEN_FAIL@ if the test failed, or @PGEN_PASS@
  *             if it succeeded.
  *
  * Use:                Performs a single iteration of the Rabin-Miller primality
- *             test.
+ *             test.  The @rtest@ variant assumes that %$g$% is either
+ *             already in Montgomery representation, or you don't care.
  */
 
+extern int rabin_rtest(rabin */*r*/, mp */*g*/);
 extern int rabin_test(rabin */*r*/, mp */*g*/);
 
 /* --- @rabin_iters@ --- *