New multiprecision integer arithmetic suite.
[u/mdw/catacomb] / rand.c
diff --git a/rand.c b/rand.c
index 036ba4d..9aea479 100644 (file)
--- a/rand.c
+++ b/rand.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: rand.c,v 1.1 1999/09/03 08:41:12 mdw Exp $
+ * $Id: rand.c,v 1.2 1999/10/12 21:00:15 mdw Exp $
  *
  * Secure random number generator
  *
@@ -30,6 +30,9 @@
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: rand.c,v $
+ * Revision 1.2  1999/10/12 21:00:15  mdw
+ * Make pool and buffer sizes more sensible.
+ *
  * Revision 1.1  1999/09/03 08:41:12  mdw
  * Initial import.
  *
@@ -151,23 +154,24 @@ void rand_key(rand_pool *r, const void *k, size_t sz)
 void rand_add(rand_pool *r, const void *p, size_t sz, unsigned goodbits)
 {
   const octet *c = p;
-  int i, rot, mid;
+  int i, rot;
 
-#if RAND_POOLSZ != 1279
+#if RAND_POOLSZ != 128
 #  error Polynomial in rand_add is out of date.  Fix it.
 #endif
 
   RAND_RESOLVE(r);
 
-  i = r->i; rot = r->irot; mid = i + 418;
-  if (mid >= RAND_POOLSZ) mid -= RAND_POOLSZ;
+  i = r->i; rot = r->irot;
 
   while (sz) {
     octet o = *c++;
-    r->pool[i] ^= (ROL8(o, rot) ^ r->pool[mid]);
+    r->pool[i] ^= (ROL8(o, rot) ^
+                  r->pool[(i + 1) % RAND_POOLSZ] ^
+                  r->pool[(i + 2) % RAND_POOLSZ] ^
+                  r->pool[(i + 7) % RAND_POOLSZ]);
     rot = (rot + 5) & 7;
     i++; if (i >= RAND_POOLSZ) i -= RAND_POOLSZ;
-    mid++; if (mid >= RAND_POOLSZ) mid -= RAND_POOLSZ;
     sz--;
   }