X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/d03ab969116fe715d569304c1c474749b2f64529..3471ebd194145da52d419c6315459237b076e18d:/rand.c diff --git a/rand.c b/rand.c index 036ba4d..9aea479 100644 --- 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--; }