Skip to content

Commit 79c61dc

Browse files
committed
fixup key generation 1/2
1 parent d1cedef commit 79c61dc

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

dsa/src/generate.rs

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ pub use self::keypair::keypair;
1717
fn calculate_bounds(size: u32) -> (BoxedUint, BoxedUint) {
1818
let lower = two().shl(size - 1);
1919
let upper = two().shl(size);
20+
let lower = BoxedUint::one().widen(size + 1).shl(size - 1);
21+
let upper = BoxedUint::one().widen(size + 1).shl(size);
2022

2123
(lower, upper)
2224
}

dsa/src/generate/components.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@ pub fn common(
4141
break 'gen_m m;
4242
}
4343
};
44-
let mr = &m % NonZero::new(two() * &*q).unwrap();
44+
let rem = NonZero::new((two() * &*q).widen(m.bits_precision())).unwrap();
45+
let mr = &m % &rem;
4546
let p = m - mr + BoxedUint::one();
47+
let p = p.shorten(q.bits_precision());
4648
let p = NonZero::new(p).unwrap();
4749

4850
if crypto_primes::is_prime_with_rng(rng, &*p) {
@@ -54,6 +56,7 @@ pub fn common(
5456
// Generate g using the unverifiable method as defined by Appendix A.2.1
5557
let e = (&*p - &BoxedUint::one()) / &q;
5658
let mut h = BoxedUint::one();
59+
let mut h = BoxedUint::one().widen(q.bits_precision());
5760
let g = loop {
5861
let params = BoxedMontyParams::new_vartime(Odd::new((*p).clone()).unwrap());
5962
let form = BoxedMontyForm::new(h.clone(), params);

0 commit comments

Comments
 (0)