X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/0f00dc4c8eb47e67bc0f148c2dd109f73a451e0a..refs/heads/mdw/cfd-subtree:/pub/bbs-gen.c?ds=sidebyside diff --git a/pub/bbs-gen.c b/pub/bbs-gen.c index e9e6922e..3239674f 100644 --- a/pub/bbs-gen.c +++ b/pub/bbs-gen.c @@ -60,27 +60,21 @@ 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; 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, - rabin_iters(nb), pgen_test, &rb); + bp->p = pgen("p", MP_NEWSEC, x, event, ectx, n, pgen_jump, &j, + PGEN_BAILLIEPSWNTESTS, pgen_bailliepswtest, 0); pfilt_destroy(&jp); - if (!bp->p) { - if (n) - goto fail_p; - goto again; - } + if (!bp->p) goto fail_p; /* --- Generate @q@ --- */ @@ -93,26 +87,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, - rabin_iters(nb), pgen_test, &rb); + bp->q = pgen("q", MP_NEWSEC, x, event, ectx, n, pgen_gcdstep, &g, + PGEN_BAILLIEPSWNTESTS, pgen_bailliepswtest, 0); 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: