base/asm-common.h (x86), and knock-on: Add macros for full-size regs.
[catacomb] / pub / bbs-gen.c
index e9e6922..6ec65e2 100644 (file)
@@ -65,22 +65,17 @@ int bbs_gen(bbs_priv *bp, unsigned nbits, grand *r, unsigned n,
   pgen_jumpctx j;
   pgen_gcdstepctx g;
   unsigned nb = nbits/2;
-  mp *x = MP_NEW;
+  mp *x = MP_NEWSEC;
 
   /* --- Generate @p@ --- */
 
-again:
   if ((x = strongprime_setup("p", x, &jp, nb, r, n, event, ectx)) == 0)
     goto fail_x;
   j.j = &jp;
-  bp->p = pgen("p", MP_NEW, x, event, ectx, n, pgen_jump, &j,
+  bp->p = pgen("p", MP_NEWSEC, x, event, ectx, n, pgen_jump, &j,
               rabin_iters(nb), pgen_test, &rb);
   pfilt_destroy(&jp);
-  if (!bp->p) {
-    if (n)
-      goto fail_p;
-    goto again;
-  }
+  if (!bp->p) goto fail_p;
 
   /* --- Generate @q@ --- */
 
@@ -93,26 +88,24 @@ again:
   g.r = mp_lsr(MP_NEW, bp->p, 1);
   g.g = MP_NEW;
   g.max = MP_ONE;
-  bp->q = pgen("q", MP_NEW, x, event, ectx, n, pgen_gcdstep, &g,
+  bp->q = pgen("q", MP_NEWSEC, x, event, ectx, n, pgen_gcdstep, &g,
               rabin_iters(nb), pgen_test, &rb);
   pfilt_destroy(&g.jp);
   mp_drop(g.r);
   mp_drop(g.g);
-  if (!bp->q) {
-    if (n)
-      goto fail_q;
-    mp_drop(bp->p);
-    goto again;
-  }
+  if (!bp->q) goto fail_q;
 
   /* --- Compute @n@ --- */
 
   bp->n = mp_mul(MP_NEW, bp->p, bp->q);
+  if (mp_bits(bp->n) != nbits) goto fail_n;
   mp_drop(x);
   return (PGEN_DONE);
 
   /* --- Tidy up if things went wrong --- */
 
+fail_n:
+  mp_drop(bp->n);
 fail_q:
   mp_drop(bp->p);
 fail_p: