diff --git a/Cargo.lock b/Cargo.lock index 3b56b548..de4dae71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -70,12 +70,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "cbc" version = "0.1.2" @@ -255,11 +249,10 @@ checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "num-bigint-dig" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" dependencies = [ - "byteorder", "lazy_static", "libm", "num-integer", diff --git a/Cargo.toml b/Cargo.toml index 41974491..28ecdaac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ readme = "README.md" rust-version = "1.65" [dependencies] -num-bigint = { version = "0.8.2", features = ["i128", "prime", "zeroize"], default-features = false, package = "num-bigint-dig" } +num-bigint = { version = "0.8.6", features = ["i128", "prime", "zeroize"], default-features = false, package = "num-bigint-dig" } num-traits = { version= "0.2.9", default-features = false, features = ["libm"] } num-integer = { version = "0.1.39", default-features = false } rand_core = { version = "0.6.4", default-features = false } diff --git a/src/key.rs b/src/key.rs index c5982f32..2818943f 100644 --- a/src/key.rs +++ b/src/key.rs @@ -391,7 +391,7 @@ impl RsaPrivateKey { let mut m = BigUint::one(); for prime in &self.primes { // Any primes ≤ 1 will cause divide-by-zero panics later. - if *prime < BigUint::one() { + if *prime <= BigUint::one() { return Err(Error::InvalidPrime); } m *= prime; @@ -538,7 +538,7 @@ mod tests { use crate::algorithms::rsa::{rsa_decrypt_and_check, rsa_encrypt}; use hex_literal::hex; - use num_traits::{FromPrimitive, ToPrimitive}; + use num_traits::{FromPrimitive, ToPrimitive, Zero}; use pkcs8::DecodePrivateKey; use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng}; @@ -841,4 +841,19 @@ mod tests { assert_eq!(key.d(), ref_key.d()); } + + #[test] + fn test_key_invalid_primes() { + let e = RsaPrivateKey::from_components( + BigUint::from_u64(239).unwrap(), + BigUint::from_u64(185).unwrap(), + BigUint::zero(), + vec![ + BigUint::from_u64(1).unwrap(), + BigUint::from_u64(239).unwrap(), + ], + ) + .unwrap_err(); + assert_eq!(e, Error::InvalidPrime); + } }