~mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
key/key-io.c: Add low-level `key_mergeline' and `key_extractline' functions.
[catacomb]
/
pub
/
bbs-gen.c
diff --git
a/pub/bbs-gen.c
b/pub/bbs-gen.c
index
e9e6922
..
6ec65e2
100644
(file)
--- a/
pub/bbs-gen.c
+++ b/
pub/bbs-gen.c
@@
-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;
pgen_jumpctx j;
pgen_gcdstepctx g;
unsigned nb = nbits/2;
- mp *x = MP_NEW;
+ mp *x = MP_NEW
SEC
;
/* --- Generate @p@ --- */
/* --- Generate @p@ --- */
-again:
if ((x = strongprime_setup("p", x, &jp, nb, r, n, event, ectx)) == 0)
goto fail_x;
j.j = &jp;
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_NEW
SEC
, x, event, ectx, n, pgen_jump, &j,
rabin_iters(nb), pgen_test, &rb);
pfilt_destroy(&jp);
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@ --- */
/* --- Generate @q@ --- */
@@
-93,26
+88,24
@@
again:
g.r = mp_lsr(MP_NEW, bp->p, 1);
g.g = MP_NEW;
g.max = MP_ONE;
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_NEW
SEC
, 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);
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);
/* --- 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 --- */
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:
fail_q:
mp_drop(bp->p);
fail_p: