From 2fa877347c8dd2fb4d897d9e4e8df7680bef2594 Mon Sep 17 00:00:00 2001 From: liushuai <770722922@qq.com> Date: Wed, 9 Oct 2024 17:56:06 +0800 Subject: [PATCH] feat: add uncheck_modulus_size feature --- Cargo.toml | 1 + src/key.rs | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e7fa5ea0..58ba07e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,6 +58,7 @@ pem = ["pkcs1/pem", "pkcs8/pem"] pkcs5 = ["pkcs8/encryption"] u64_digit = ["num-bigint/u64_digit"] std = ["digest/std", "pkcs1/std", "pkcs8/std", "rand_core/std", "signature/std"] +uncheck_modulus_size = [] [package.metadata.docs.rs] features = ["std", "pem", "serde", "hazmat", "sha2"] diff --git a/src/key.rs b/src/key.rs index b7747d6f..c3f36fb0 100644 --- a/src/key.rs +++ b/src/key.rs @@ -504,6 +504,7 @@ pub fn check_public(public_key: &impl PublicKeyParts) -> Result<()> { /// Check that the public key is well formed and has an exponent within acceptable bounds. #[inline] fn check_public_with_max_size(public_key: &impl PublicKeyParts, max_size: usize) -> Result<()> { + #[cfg(not(feature = "uncheck_modulus_size"))] if public_key.n().bits() > max_size { return Err(Error::ModulusTooLarge); } @@ -674,7 +675,7 @@ mod tests { BigUint::from_bytes_le(&[235, 65, 160, 134, 32, 136, 6, 241]), ], ) - .unwrap(); + .unwrap(); for _ in 0..1000 { test_key_basics(&private_key); @@ -723,7 +724,7 @@ mod tests { cUOEnsXNQ+DrZpLKxdtsD/qNV/j1hfeyBoPllC3cV+6bcGOFcVGbjYqb+Kw1b0+j\ L69RSKQqgmS+qYqr8c48nDRxyq3QXhR8qtzUwBFSLVk=", ) - .unwrap(); + .unwrap(); let e = Base64::decode_vec("AQAB").unwrap(); let d = Base64::decode_vec( "qQazSQ+FRN7nVK1bRsROMRB8AmsDwLVEHivlz1V3Td2Dr+oW3YUMgxedhztML1Id\ @@ -738,7 +739,7 @@ mod tests { BYjcY7QFRm/9nupXMTH5hZ2qrHfCJIp0KK4tNBdQqmnHapFl5l6Le1s4qBS5bEIz\ jitobLvAFm9abPlDGfxmY6mlrMK4+nytwF9Ct7wc1AE=", ) - .unwrap(); + .unwrap(); let primes = [ Base64::decode_vec( "9kQWEAzsbzOcdPa+s5wFfw4XDd7bB1q9foZ31b1+TNjGNxbSBCFlDF1q98vwpV6n\ @@ -748,7 +749,7 @@ mod tests { NC5zZOk7WzZatnCkN5H5WzalWtZuu0oVL205KPOa3R8V2yv5e6fm0v5fTmqSuvjm\ aMJLXCN4QJkmIzojO99ckQ==", ) - .unwrap(), + .unwrap(), Base64::decode_vec( "x8exdMjVA2CiI+Thx7loHtVcevoeE2sZ7btRVAvmBqo+lkHwxb7FHRnWvuj6eJSl\ D2f0T50EewIhhiW3R9BmktCk7hXjbSCnC1u9Oxc1IAUm/7azRqyfCMx43XhLxpD+\ @@ -757,7 +758,7 @@ mod tests { bUIIRqr9Ii7Eswf9Vk8xp2O1Nt8nzcYS9PFD12M5eyaeFEkEYfpNMNGuTzp/31oq\ VjbpoCxS6vuWAZyADxhISQ==", ) - .unwrap(), + .unwrap(), Base64::decode_vec( "is7d0LY4HoXszlC2NO7gejkq7XqL4p1W6hZJPYTNx+r37t1CC2n3Vvzg6kNdpRix\ DhIpXVTLjN9O7UO/XuqSumYKJIKoP52eb4Tg+a3hw5Iz2Zsb5lUTNSLgkQSBPAf7\ @@ -766,7 +767,7 @@ mod tests { 3HbCPELqXgNJJkRfi6MP9kXa9lSfnZmoT081RMvqonB/FUa4HOcKyCrw9XZEtnbN\ CIdbitfDVEX+pSSD7596wQ==", ) - .unwrap(), + .unwrap(), Base64::decode_vec( "GPs0injugfycacaeIP5jMa/WX55VEnKLDHom4k6WlfDF4L4gIGoJdekcPEUfxOI5\ faKvHyFwRP1wObkPoRBDM0qZxRfBl4zEtpvjHrd5MibSyJkM8+J0BIKk/nSjbRIG\ @@ -775,7 +776,7 @@ mod tests { RDdEl6mb+6FDgWuXVyqR9+904oanEIkbJ7vfkthagLbEf57dyG6nJlqh5FBZWxGI\ R72YGypPuAh7qnnqXXjY2Q==", ) - .unwrap(), + .unwrap(), Base64::decode_vec( "CUWC+hRWOT421kwRllgVjy6FYv6jQUcgDNHeAiYZnf5HjS9iK2ki7v8G5dL/0f+Y\ f+NhE/4q8w4m8go51hACrVpP1p8GJDjiT09+RsOzITsHwl+ceEKoe56ZW6iDHBLl\ @@ -784,7 +785,7 @@ mod tests { Fqxj3N1+HrYLe/zs7LOaK0++F9Ul3tLelhrhsvLxei3oCZkF9A/foD3on3luYA+1\ cRcxWpSY3h2J4/22+yo4+Q==", ) - .unwrap(), + .unwrap(), ]; RsaPrivateKey::from_components( @@ -793,7 +794,7 @@ mod tests { BigUint::from_bytes_be(&d), primes.iter().map(|p| BigUint::from_bytes_be(p)).collect(), ) - .unwrap(); + .unwrap(); } #[test]