Uprating of the passphrase pixie.
[u/mdw/catacomb] / bbs-rand.c
index 3d2563a..90669a7 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: bbs-rand.c,v 1.5 2004/04/08 01:36:15 mdw Exp $
+ * $Id$
  *
  * Blum-Blum-Shub secure random number generator
  *
@@ -242,6 +242,16 @@ static int gmisc(grand *r, unsigned op, ...)
         case GRAND_SEEDMP:
        case GRAND_SEEDRAND:
        case BBS_SET:
+       case BBS_STEP:
+       case BBS_STEPSZ:
+       case BBS_BITS:
+       case BBS_WRAP:
+       case BBS_FF:
+       case BBS_FFN:
+       case BBS_REW:
+       case BBS_REWN:
+       case BBS_MOD:
+       case BBS_STATE:
           rc = 1;
           break;
         default:
@@ -271,6 +281,50 @@ static int gmisc(grand *r, unsigned op, ...)
     case BBS_SET:
       bbs_set(&g->b, va_arg(ap, mp *));
       break;
+    case BBS_STEP:
+      bbs_step(&g->b);
+      break;
+    case BBS_STEPSZ:
+      rc = g->b.k;
+      break;
+    case BBS_BITS: {
+      unsigned nb = va_arg(ap, unsigned);
+      uint32 *w = va_arg(ap, uint32 *);
+      *w = bbs_bits(&g->b, nb);
+    } break;
+    case BBS_WRAP:
+      bbs_wrap(&g->b);
+      break;
+    case BBS_FF: {
+      const bbs_priv *bp = va_arg(ap, const bbs_priv *);
+      mp *n = va_arg(ap, mp *);
+      bbs_ff(&g->b, bp, n);
+    } break;
+    case BBS_FFN: {
+      const bbs_priv *bp = va_arg(ap, const bbs_priv *);
+      unsigned long n = va_arg(ap, unsigned long);
+      bbs_ffn(&g->b, bp, n);
+    } break;
+    case BBS_REW: {
+      const bbs_priv *bp = va_arg(ap, const bbs_priv *);
+      mp *n = va_arg(ap, mp *);
+      bbs_rew(&g->b, bp, n);
+    } break;
+    case BBS_REWN: {
+      const bbs_priv *bp = va_arg(ap, const bbs_priv *);
+      unsigned long n = va_arg(ap, unsigned long);
+      bbs_rewn(&g->b, bp, n);
+    } break;
+    case BBS_MOD: {
+      mp **n = va_arg(ap, mp **);
+      if (*n) MP_DROP(*n);
+      *n = MP_COPY(g->b.mb.m);
+    } break;
+    case BBS_STATE: {
+      mp **n = va_arg(ap, mp **);
+      if (*n) MP_DROP(*n);
+      *n = MP_COPY(g->b.x);
+    } break;
     default:
       GRAND_BADOP;
       break;