/* -*-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
*
/*----- 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.
*
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--;
}