From 4ab1268f3ec850a115a68966325aced4f08ec603 Mon Sep 17 00:00:00 2001 From: mdw Date: Mon, 13 Dec 1999 15:34:01 +0000 Subject: [PATCH] Add support for seeding from a generic pseudorandom source. --- bbs-rand.c | 13 ++++++++++++- lcrand.c | 12 +++++++++++- ofb-def.h | 14 +++++++++++++- rc4.c | 15 ++++++++++++++- 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/bbs-rand.c b/bbs-rand.c index 054a158..006bc07 100644 --- a/bbs-rand.c +++ b/bbs-rand.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: bbs-rand.c,v 1.1 1999/12/10 23:14:59 mdw Exp $ + * $Id: bbs-rand.c,v 1.2 1999/12/13 15:34:01 mdw Exp $ * * Blum-Blum-Shub secure random number generator * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: bbs-rand.c,v $ + * Revision 1.2 1999/12/13 15:34:01 mdw + * Add support for seeding from a generic pseudorandom source. + * * Revision 1.1 1999/12/10 23:14:59 mdw * Blum-Blum-Shub generator, and Blum-Goldwasser encryption. * @@ -49,6 +52,7 @@ #include "mp.h" #include "mpbarrett.h" #include "mpint.h" +#include "mprand.h" /*----- Main code ---------------------------------------------------------*/ @@ -245,6 +249,7 @@ static int gmisc(grand *r, unsigned op, ...) case GRAND_SEEDINT: case GRAND_SEEDUINT32: case GRAND_SEEDMP: + case GRAND_SEEDRAND: case BBS_SET: rc = 1; break; @@ -266,6 +271,12 @@ static int gmisc(grand *r, unsigned op, ...) case GRAND_SEEDMP: bbs_seed(&g->b, va_arg(ap, mp *)); break; + case GRAND_SEEDRAND: { + grand *rr = va_arg(ap, grand *); + mp *m = mprand(MP_NEW, mp_bits(g->b.mb.m) - 1, rr, 0); + bbs_seed(&g->b, m); + mp_drop(m); + } break; case BBS_SET: bbs_set(&g->b, va_arg(ap, mp *)); break; diff --git a/lcrand.c b/lcrand.c index 3686e17..88e9591 100644 --- a/lcrand.c +++ b/lcrand.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: lcrand.c,v 1.1 1999/12/10 23:15:27 mdw Exp $ + * $Id: lcrand.c,v 1.2 1999/12/13 15:34:01 mdw Exp $ * * Simple linear congruential generator * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: lcrand.c,v $ + * Revision 1.2 1999/12/13 15:34:01 mdw + * Add support for seeding from a generic pseudorandom source. + * * Revision 1.1 1999/12/10 23:15:27 mdw * Noncryptographic random number generator. * @@ -201,6 +204,7 @@ static int gmisc(grand *r, unsigned op, ...) case GRAND_CHECK: case GRAND_SEEDINT: case GRAND_SEEDUINT32: + case GRAND_SEEDRAND: rc = 1; break; default: @@ -214,6 +218,12 @@ static int gmisc(grand *r, unsigned op, ...) case GRAND_SEEDUINT32: g->x = va_arg(ap, uint32); break; + case GRAND_SEEDRAND: { + grand *rr = va_arg(ap, grand *); + uint32 x; + do x = rr->ops->word(rr); while (x >= P || x == LCRAND_FIXEDPT); + g->x = x; + } break; default: GRAND_BADOP; break; diff --git a/ofb-def.h b/ofb-def.h index 2d0fc94..20be645 100644 --- a/ofb-def.h +++ b/ofb-def.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: ofb-def.h,v 1.1 1999/12/10 23:16:40 mdw Exp $ + * $Id: ofb-def.h,v 1.2 1999/12/13 15:34:01 mdw Exp $ * * Definitions for output feedback mode * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: ofb-def.h,v $ + * Revision 1.2 1999/12/13 15:34:01 mdw + * Add support for seeding from a generic pseudorandom source. + * * Revision 1.1 1999/12/10 23:16:40 mdw * Split mode macros into interface and implementation. * @@ -344,6 +347,7 @@ static int grmisc(grand *r, unsigned op, ...) \ case GRAND_SEEDINT: \ case GRAND_SEEDUINT32: \ case GRAND_SEEDBLOCK: \ + case GRAND_SEEDRAND: \ rc = 1; \ break; \ default: \ @@ -371,6 +375,14 @@ static int grmisc(grand *r, unsigned op, ...) \ } \ pre##_ofbsetiv(&g->k, p); \ } break; \ + case GRAND_SEEDRAND: { \ + grand *rr = va_arg(ap, grand *); \ + rr->ops->fill(rr, buf, sizeof(buf)); \ + pre##_ofbsetiv(&g->k, buf); \ + } break; \ + default: \ + GRAND_BADOP; \ + break; \ } \ \ va_end(ap); \ diff --git a/rc4.c b/rc4.c index b1e9d67..a4e595f 100644 --- a/rc4.c +++ b/rc4.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: rc4.c,v 1.2 1999/12/10 23:27:35 mdw Exp $ + * $Id: rc4.c,v 1.3 1999/12/13 15:34:01 mdw Exp $ * * The alleged RC4 stream cipher * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: rc4.c,v $ + * Revision 1.3 1999/12/13 15:34:01 mdw + * Add support for seeding from a generic pseudorandom source. + * * Revision 1.2 1999/12/10 23:27:35 mdw * Generic cipher and RNG interfaces. * @@ -184,6 +187,7 @@ static int grmisc(grand *r, unsigned op, ...) case GRAND_SEEDINT: case GRAND_SEEDUINT32: case GRAND_SEEDBLOCK: + case GRAND_SEEDRAND: rc = 1; break; default: @@ -204,6 +208,15 @@ static int grmisc(grand *r, unsigned op, ...) size_t sz = va_arg(ap, size_t); rc4_init(&g->rc4, p, sz); } break; + case GRAND_SEEDRAND: { + grand *rr = va_arg(ap, grand *); + octet buf[16]; + rr->ops->fill(rr, buf, sizeof(buf)); + rc4_init(&g->rc4, buf, sizeof(buf)); + } break; + default: + GRAND_BADOP; + break; } va_end(ap); -- 2.11.0