int bbs_gen(bbs_priv *bp, unsigned nbits, grand *r, unsigned n,
pgen_proc *event, void *ectx)
{
- rabin rb;
pfilt jp;
pgen_jumpctx j;
pgen_gcdstepctx g;
goto fail_x;
j.j = &jp;
bp->p = pgen("p", MP_NEWSEC, x, event, ectx, n, pgen_jump, &j,
- rabin_iters(nb), pgen_test, &rb);
+ PGEN_BAILLIEPSWNTESTS, pgen_bailliepswtest, 0);
pfilt_destroy(&jp);
if (!bp->p) goto fail_p;
g.g = MP_NEW;
g.max = MP_ONE;
bp->q = pgen("q", MP_NEWSEC, x, event, ectx, n, pgen_gcdstep, &g,
- rabin_iters(nb), pgen_test, &rb);
+ PGEN_BAILLIEPSWNTESTS, pgen_bailliepswtest, 0);
pfilt_destroy(&g.jp);
mp_drop(g.r);
mp_drop(g.g);
/* --- 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: