diff --git a/.github/workflows/workspace.yml b/.github/workflows/workspace.yml new file mode 100644 index 00000000..1b882608 --- /dev/null +++ b/.github/workflows/workspace.yml @@ -0,0 +1,37 @@ +name: Workspace + +on: + pull_request: + paths-ignore: + - README.md + push: + branches: master + paths-ignore: + - README.md + +jobs: + clippy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: RustCrypto/actions/cargo-cache@master + - uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.79.0 + components: clippy + - run: cargo clippy --all -- -D warnings + + rustfmt: + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Install stable toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable + components: rustfmt + + - name: Run cargo fmt + run: cargo fmt --all -- --check diff --git a/benches/key.rs b/benches/key.rs index 39260388..bc1e4bca 100644 --- a/benches/key.rs +++ b/benches/key.rs @@ -10,19 +10,67 @@ use rsa::{Pkcs1v15Encrypt, Pkcs1v15Sign, RsaPrivateKey}; use sha2::{Digest, Sha256}; use test::Bencher; -const DECRYPT_VAL: &'static str = - "XW4qfrpQDarEMBfPyIYE9UvuOFkbBi0tiGYbIOJPLMNe/LWuPD0BQ7ceqlOlPPcKLinYz0DlnqW3It/V7ae59zw9afA3YIWdq0Ut2BnYL+aJixnqaP+PjsQNcHg6axCF11iNQ4jpXrZDiQcI+q9EEzZDTMsiMxtjfgBQUd8LHT87YoQXDWaFPCVpliACMc8aUk442kH1tc4jEuXwjEjFErvAM/J7VizCdU/dnKrlq2mBDzvZ6hxY9TYHFB/zY6DZPJAgEMUxYWCR9xPJ7X256DV1Kt0Ht33DWoFcgh/pPLM1q9pK0HVxCdclXfZOeCqlrLgZ5Gxv5DM4BtV7Z4m85w=="; +const DECRYPT_VAL: &str = "\ + XW4qfrpQDarEMBfPyIYE9UvuOFkbBi0tiGYbIOJPLMNe/LWuPD0BQ7ceqlOlPPcK\ + LinYz0DlnqW3It/V7ae59zw9afA3YIWdq0Ut2BnYL+aJixnqaP+PjsQNcHg6axCF\ + 11iNQ4jpXrZDiQcI+q9EEzZDTMsiMxtjfgBQUd8LHT87YoQXDWaFPCVpliACMc8a\ + Uk442kH1tc4jEuXwjEjFErvAM/J7VizCdU/dnKrlq2mBDzvZ6hxY9TYHFB/zY6DZ\ + PJAgEMUxYWCR9xPJ7X256DV1Kt0Ht33DWoFcgh/pPLM1q9pK0HVxCdclXfZOeCql\ + rLgZ5Gxv5DM4BtV7Z4m85w=="; fn get_key() -> RsaPrivateKey { RsaPrivateKey::from_components( - BigUint::from_str_radix("14314132931241006650998084889274020608918049032671858325988396851334124245188214251956198731333464217832226406088020736932173064754214329009979944037640912127943488972644697423190955557435910767690712778463524983667852819010259499695177313115447116110358524558307947613422897787329221478860907963827160223559690523660574329011927531289655711860504630573766609239332569210831325633840174683944553667352219670930408593321661375473885147973879086994006440025257225431977751512374815915392249179976902953721486040787792801849818254465486633791826766873076617116727073077821584676715609985777563958286637185868165868520557", 10).unwrap(), + BigUint::from_str_radix( + "1431413293124100665099808488927402060891804903267185832598839685\ + 1334124245188214251956198731333464217832226406088020736932173064\ + 7542143290099799440376409121279434889726446974231909555574359107\ + 6769071277846352498366785281901025949969517731311544711611035852\ + 4558307947613422897787329221478860907963827160223559690523660574\ + 3290119275312896557118605046305737666092393325692108313256338401\ + 7468394455366735221967093040859332166137547388514797387908699400\ + 6440025257225431977751512374815915392249179976902953721486040787\ + 7928018498182544654866337918267668730766171167270730778215846767\ + 15609985777563958286637185868165868520557", + 10, + ) + .unwrap(), BigUint::from_u32(3).unwrap(), - BigUint::from_str_radix("9542755287494004433998723259516013739278699355114572217325597900889416163458809501304132487555642811888150937392013824621448709836142886006653296025093941418628992648429798282127303704957273845127141852309016655778568546006839666463451542076964744073572349705538631742281931858219480985907271975884773482372966847639853897890615456605598071088189838676728836833012254065983259638538107719766738032720239892094196108713378822882383694456030043492571063441943847195939549773271694647657549658603365629458610273821292232646334717612674519997533901052790334279661754176490593041941863932308687197618671528035670452762731", 10).unwrap(), + BigUint::from_str_radix( + "9542755287494004433998723259516013739278699355114572217325597900\ + 8894161634588095013041324875556428118881509373920138246214487098\ + 3614288600665329602509394141862899264842979828212730370495727384\ + 5127141852309016655778568546006839666463451542076964744073572349\ + 7055386317422819318582194809859072719758847734823729668476398538\ + 9789061545660559807108818983867672883683301225406598325963853810\ + 7719766738032720239892094196108713378822882383694456030043492571\ + 0634419438471959395497732716946476575496586033656294586102738212\ + 9223264633471761267451999753390105279033427966175417649059304194\ + 1863932308687197618671528035670452762731", + 10, + ) + .unwrap(), vec![ - BigUint::from_str_radix("130903255182996722426771613606077755295583329135067340152947172868415809027537376306193179624298874215608270802054347609836776473930072411958753044562214537013874103802006369634761074377213995983876788718033850153719421695468704276694983032644416930879093914927146648402139231293035971427838068945045019075433",10).unwrap(), - BigUint::from_str_radix("109348945610485453577574767652527472924289229538286649661240938988020367005475727988253438647560958573506159449538793540472829815903949343191091817779240101054552748665267574271163617694640513549693841337820602726596756351006149518830932261246698766355347898158548465400674856021497190430791824869615170301029", 10).unwrap() + BigUint::from_str_radix( + "1309032551829967224267716136060777552955833291350673401529471728\ + 6841580902753737630619317962429887421560827080205434760983677647\ + 3930072411958753044562214537013874103802006369634761074377213995\ + 9838767887180338501537194216954687042766949830326444169308790939\ + 14927146648402139231293035971427838068945045019075433", + 10, + ) + .unwrap(), + BigUint::from_str_radix( + "1093489456104854535775747676525274729242892295382866496612409389\ + 8802036700547572798825343864756095857350615944953879354047282981\ + 5903949343191091817779240101054552748665267574271163617694640513\ + 5496938413378206027265967563510061495188309322612466987663553478\ + 98158548465400674856021497190430791824869615170301029", + 10, + ) + .unwrap(), ], - ).unwrap() + ) + .unwrap() } #[bench] diff --git a/src/algorithms/mgf.rs b/src/algorithms/mgf.rs index 5dc6eff9..009a5030 100644 --- a/src/algorithms/mgf.rs +++ b/src/algorithms/mgf.rs @@ -9,7 +9,7 @@ pub(crate) fn mgf1_xor(out: &mut [u8], digest: &mut dyn DynDigest, seed: &[u8]) let mut counter = [0u8; 4]; let mut i = 0; - const MAX_LEN: u64 = core::u32::MAX as u64 + 1; + const MAX_LEN: u64 = u32::MAX as u64 + 1; assert!(out.len() as u64 <= MAX_LEN); while i < out.len() { @@ -43,7 +43,7 @@ where let mut counter = [0u8; 4]; let mut i = 0; - const MAX_LEN: u64 = core::u32::MAX as u64 + 1; + const MAX_LEN: u64 = u32::MAX as u64 + 1; assert!(out.len() as u64 <= MAX_LEN); while i < out.len() { diff --git a/src/encoding.rs b/src/encoding.rs index 3151791d..51d5032d 100644 --- a/src/encoding.rs +++ b/src/encoding.rs @@ -17,7 +17,9 @@ use zeroize::Zeroizing; pub const ID_RSASSA_PSS: ObjectIdentifier = ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.10"); /// Verify that the `AlgorithmIdentifier` for a key is correct. -pub(crate) fn verify_algorithm_id(algorithm: &pkcs8::AlgorithmIdentifierRef) -> pkcs8::spki::Result<()> { +pub(crate) fn verify_algorithm_id( + algorithm: &pkcs8::AlgorithmIdentifierRef, +) -> pkcs8::spki::Result<()> { match algorithm.oid { pkcs1::ALGORITHM_OID => { if algorithm.parameters_any()? != pkcs8::der::asn1::Null.into() { @@ -25,7 +27,7 @@ pub(crate) fn verify_algorithm_id(algorithm: &pkcs8::AlgorithmIdentifierRef) -> } } ID_RSASSA_PSS => { - if !algorithm.parameters.is_none() { + if algorithm.parameters.is_some() { return Err(pkcs8::spki::Error::KeyMalformed); } } diff --git a/src/key.rs b/src/key.rs index 03931dab..b7747d6f 100644 --- a/src/key.rs +++ b/src/key.rs @@ -9,9 +9,9 @@ use rand_core::CryptoRngCore; use zeroize::{Zeroize, ZeroizeOnDrop}; #[cfg(feature = "serde")] use { + pkcs8::{DecodePrivateKey, EncodePrivateKey}, serdect::serde::{de, ser, Deserialize, Serialize}, - spki::{EncodePublicKey, DecodePublicKey}, - pkcs8::{EncodePrivateKey, DecodePrivateKey} + spki::{DecodePublicKey, EncodePublicKey}, }; use crate::algorithms::generate::generate_multi_prime_key_with_exp; @@ -690,9 +690,11 @@ mod tests { let mut rng = ChaCha8Rng::from_seed([42; 32]); let priv_key = RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key"); - let priv_tokens = [ - Token::Str("3054020100300d06092a864886f70d01010105000440303e020100020900cc6c6130e35b46bf0203010001020863de1ac858580019020500f65cff5d020500d46b68cb02046d9a09f102047b4e3a4f020500f45065cc") - ]; + let priv_tokens = [Token::Str( + "3054020100300d06092a864886f70d01010105000440303e020100020900cc6c\ + 6130e35b46bf0203010001020863de1ac858580019020500f65cff5d020500d4\ + 6b68cb02046d9a09f102047b4e3a4f020500f45065cc", + )]; assert_tokens(&priv_key.clone().readable(), &priv_tokens); let priv_tokens = [Token::Str( @@ -708,15 +710,81 @@ mod tests { fn invalid_coeff_private_key_regression() { use base64ct::{Base64, Encoding}; - let n = Base64::decode_vec("wC8GyQvTCZOK+iiBR5fGQCmzRCTWX9TQ3aRG5gGFk0wB6EFoLMAyEEqeG3gS8xhAm2rSWYx9kKufvNat3iWlbSRVqkcbpVAYlj2vTrpqDpJl+6u+zxFYoUEBevlJJkAhl8EuCccOA30fVpcfRvXPTtvRd3yFT9E9EwZljtgSI02w7gZwg7VIxaGeajh5Euz6ZVQZ+qNRKgXrRC7gPRqVyI6Dt0Jc+Su5KBGNn0QcPDzOahWha1ieaeMkFisZ9mdpsJoZ4tw5eicLaUomKzALHXQVt+/rcZSrCd6/7uUo11B/CYBM4UfSpwXaL88J9AE6A5++no9hmJzaF2LLp+Qwx4yY3j9TDutxSAjsraxxJOGZ3XyA9nG++Ybt3cxZ5fP7ROjxCfROBmVv5dYn0O9OBIqYeCH6QraNpZMadlLNIhyMv8Y+P3r5l/PaK4VJaEi5pPosnEPawp0W0yZDzmjk2z1LthaRx0aZVrAjlH0Rb/6goLUQ9qu1xsDtQVVpN4A89ZUmtTWORnnJr0+595eHHxssd2gpzqf4bPjNITdAEuOCCtpvyi4ls23zwuzryUYjcUOEnsXNQ+DrZpLKxdtsD/qNV/j1hfeyBoPllC3cV+6bcGOFcVGbjYqb+Kw1b0+jL69RSKQqgmS+qYqr8c48nDRxyq3QXhR8qtzUwBFSLVk=").unwrap(); + let n = Base64::decode_vec( + "wC8GyQvTCZOK+iiBR5fGQCmzRCTWX9TQ3aRG5gGFk0wB6EFoLMAyEEqeG3gS8xhA\ + m2rSWYx9kKufvNat3iWlbSRVqkcbpVAYlj2vTrpqDpJl+6u+zxFYoUEBevlJJkAh\ + l8EuCccOA30fVpcfRvXPTtvRd3yFT9E9EwZljtgSI02w7gZwg7VIxaGeajh5Euz6\ + ZVQZ+qNRKgXrRC7gPRqVyI6Dt0Jc+Su5KBGNn0QcPDzOahWha1ieaeMkFisZ9mdp\ + sJoZ4tw5eicLaUomKzALHXQVt+/rcZSrCd6/7uUo11B/CYBM4UfSpwXaL88J9AE6\ + A5++no9hmJzaF2LLp+Qwx4yY3j9TDutxSAjsraxxJOGZ3XyA9nG++Ybt3cxZ5fP7\ + ROjxCfROBmVv5dYn0O9OBIqYeCH6QraNpZMadlLNIhyMv8Y+P3r5l/PaK4VJaEi5\ + pPosnEPawp0W0yZDzmjk2z1LthaRx0aZVrAjlH0Rb/6goLUQ9qu1xsDtQVVpN4A8\ + 9ZUmtTWORnnJr0+595eHHxssd2gpzqf4bPjNITdAEuOCCtpvyi4ls23zwuzryUYj\ + cUOEnsXNQ+DrZpLKxdtsD/qNV/j1hfeyBoPllC3cV+6bcGOFcVGbjYqb+Kw1b0+j\ + L69RSKQqgmS+qYqr8c48nDRxyq3QXhR8qtzUwBFSLVk=", + ) + .unwrap(); let e = Base64::decode_vec("AQAB").unwrap(); - let d = Base64::decode_vec("qQazSQ+FRN7nVK1bRsROMRB8AmsDwLVEHivlz1V3Td2Dr+oW3YUMgxedhztML1IdQJPq/ad6qErJ6yRFNySVIjDaxzBTOEoB1eHa1btOnBJWb8rVvvjaorixvJ6Tn3i4EuhsvVy9DoR1k4rGj3qSIiFjUVvLRDAbLyhpGgEfsr0Z577yJmTC5E8JLRMOKX8Tmxsk3jPVpsgd65Hu1s8S/ZmabwuHCf9SkdMeY/1bd/9i7BqqJeeDLE4B5x1xcC3z3scqDUTzqGO+vZPhjgprPDRlBamVwgenhr7KwCn8iaLamFinRVwOAag8BeBqOJj7lURiOsKQa9FIX1kdFUS1QMQxgtPycLjkbvCJjriqT7zWKsmJ7l8YLs6Wmm9/+QJRwNCEVdMTXKfCP1cJjudaiskEQThfUldtgu8gUDNYbQ/Filb2eKfiX4h1TiMxZqUZHVZyb9nShbQoXJ3vj/MGVF0QM8TxhXM8r2Lv9gDYU5t9nQlUMLhs0jVjai48jHABbFNyH3sEcOmJOIwJrCXw1dzG7AotwyaEVUHOmL04TffmwCFfnyrLjbFgnyOeoyIIBYjcY7QFRm/9nupXMTH5hZ2qrHfCJIp0KK4tNBdQqmnHapFl5l6Le1s4qBS5bEIzjitobLvAFm9abPlDGfxmY6mlrMK4+nytwF9Ct7wc1AE=").unwrap(); - let primes = vec![ - Base64::decode_vec("9kQWEAzsbzOcdPa+s5wFfw4XDd7bB1q9foZ31b1+TNjGNxbSBCFlDF1q98vwpV6nM8bWDh/wtbNoETSQDgpEnYOQ26LWEw6YY1+q1Q2GGEFceYUf+Myk8/vTc8TN6Zw0bKZBWy10Qo8h7xk4JpzuI7NcxvjJYTkS9aErFxi3vVH0aiZC0tmfaCqr8a2rJxyVwqreRpOjwAWrotMsf2wGsF4ofx5ScoFy5GB5fJkkdOrW1LyTvZAUCX3cstPr19+TNC5zZOk7WzZatnCkN5H5WzalWtZuu0oVL205KPOa3R8V2yv5e6fm0v5fTmqSuvjmaMJLXCN4QJkmIzojO99ckQ==").unwrap(), - Base64::decode_vec("x8exdMjVA2CiI+Thx7loHtVcevoeE2sZ7btRVAvmBqo+lkHwxb7FHRnWvuj6eJSlD2f0T50EewIhhiW3R9BmktCk7hXjbSCnC1u9Oxc1IAUm/7azRqyfCMx43XhLxpD+xkBCpWkKDLxGczsRwTuaP3lKS3bSdBrNlGmdblubvVBIq4YZ2vXVlnYtza0cS+dgCK7BGTqUsrCUd/ZbIvwcwZkZtpkhj1KQfto9X/0OMurBzAqbkeq1cyRHXHkOfN/qbUIIRqr9Ii7Eswf9Vk8xp2O1Nt8nzcYS9PFD12M5eyaeFEkEYfpNMNGuTzp/31oqVjbpoCxS6vuWAZyADxhISQ==").unwrap(), - Base64::decode_vec("is7d0LY4HoXszlC2NO7gejkq7XqL4p1W6hZJPYTNx+r37t1CC2n3Vvzg6kNdpRixDhIpXVTLjN9O7UO/XuqSumYKJIKoP52eb4Tg+a3hw5Iz2Zsb5lUTNSLgkQSBPAf71LHxbL82JL4g1nBUog8ae60BwnVArThKY4EwlJguGNw09BAU4lwf6csDl/nX2vfVwiAloYpeZkHL+L8m+bueGZM5KE2jEz+7ztZCI+T+E5i69rZEYDjx0lfLKlEhQlCW3HbCPELqXgNJJkRfi6MP9kXa9lSfnZmoT081RMvqonB/FUa4HOcKyCrw9XZEtnbNCIdbitfDVEX+pSSD7596wQ==").unwrap(), - Base64::decode_vec("GPs0injugfycacaeIP5jMa/WX55VEnKLDHom4k6WlfDF4L4gIGoJdekcPEUfxOI5faKvHyFwRP1wObkPoRBDM0qZxRfBl4zEtpvjHrd5MibSyJkM8+J0BIKk/nSjbRIGeb3hV5O56PvGB3S0dKhCUnuVObiC+ne7izplsD4OTG70l1Yud33UFntyoMxrxGYLUSqhBMmZfHquJg4NOWOzKNY/K+EcHDLj1Kjvkcgv9Vf7ocsVxvpFdD9uGPceQ6kwRDdEl6mb+6FDgWuXVyqR9+904oanEIkbJ7vfkthagLbEf57dyG6nJlqh5FBZWxGIR72YGypPuAh7qnnqXXjY2Q==").unwrap(), - Base64::decode_vec("CUWC+hRWOT421kwRllgVjy6FYv6jQUcgDNHeAiYZnf5HjS9iK2ki7v8G5dL/0f+Yf+NhE/4q8w4m8go51hACrVpP1p8GJDjiT09+RsOzITsHwl+ceEKoe56ZW6iDHBLlrNw5/MtcYhKpjNU9KJ2udm5J/c9iislcjgckrZG2IB8ADgXHMEByZ5DgaMl4AKZ1Gx8/q6KftTvmOT5rNTMLi76VN5KWQcDWK/DqXiOiZHM7Nr4dX4me3XeRgABJyNR8Fqxj3N1+HrYLe/zs7LOaK0++F9Ul3tLelhrhsvLxei3oCZkF9A/foD3on3luYA+1cRcxWpSY3h2J4/22+yo4+Q==").unwrap(), + let d = Base64::decode_vec( + "qQazSQ+FRN7nVK1bRsROMRB8AmsDwLVEHivlz1V3Td2Dr+oW3YUMgxedhztML1Id\ + QJPq/ad6qErJ6yRFNySVIjDaxzBTOEoB1eHa1btOnBJWb8rVvvjaorixvJ6Tn3i4\ + EuhsvVy9DoR1k4rGj3qSIiFjUVvLRDAbLyhpGgEfsr0Z577yJmTC5E8JLRMOKX8T\ + mxsk3jPVpsgd65Hu1s8S/ZmabwuHCf9SkdMeY/1bd/9i7BqqJeeDLE4B5x1xcC3z\ + 3scqDUTzqGO+vZPhjgprPDRlBamVwgenhr7KwCn8iaLamFinRVwOAag8BeBqOJj7\ + lURiOsKQa9FIX1kdFUS1QMQxgtPycLjkbvCJjriqT7zWKsmJ7l8YLs6Wmm9/+QJR\ + wNCEVdMTXKfCP1cJjudaiskEQThfUldtgu8gUDNYbQ/Filb2eKfiX4h1TiMxZqUZ\ + HVZyb9nShbQoXJ3vj/MGVF0QM8TxhXM8r2Lv9gDYU5t9nQlUMLhs0jVjai48jHAB\ + bFNyH3sEcOmJOIwJrCXw1dzG7AotwyaEVUHOmL04TffmwCFfnyrLjbFgnyOeoyII\ + BYjcY7QFRm/9nupXMTH5hZ2qrHfCJIp0KK4tNBdQqmnHapFl5l6Le1s4qBS5bEIz\ + jitobLvAFm9abPlDGfxmY6mlrMK4+nytwF9Ct7wc1AE=", + ) + .unwrap(); + let primes = [ + Base64::decode_vec( + "9kQWEAzsbzOcdPa+s5wFfw4XDd7bB1q9foZ31b1+TNjGNxbSBCFlDF1q98vwpV6n\ + M8bWDh/wtbNoETSQDgpEnYOQ26LWEw6YY1+q1Q2GGEFceYUf+Myk8/vTc8TN6Zw0\ + bKZBWy10Qo8h7xk4JpzuI7NcxvjJYTkS9aErFxi3vVH0aiZC0tmfaCqr8a2rJxyV\ + wqreRpOjwAWrotMsf2wGsF4ofx5ScoFy5GB5fJkkdOrW1LyTvZAUCX3cstPr19+T\ + NC5zZOk7WzZatnCkN5H5WzalWtZuu0oVL205KPOa3R8V2yv5e6fm0v5fTmqSuvjm\ + aMJLXCN4QJkmIzojO99ckQ==", + ) + .unwrap(), + Base64::decode_vec( + "x8exdMjVA2CiI+Thx7loHtVcevoeE2sZ7btRVAvmBqo+lkHwxb7FHRnWvuj6eJSl\ + D2f0T50EewIhhiW3R9BmktCk7hXjbSCnC1u9Oxc1IAUm/7azRqyfCMx43XhLxpD+\ + xkBCpWkKDLxGczsRwTuaP3lKS3bSdBrNlGmdblubvVBIq4YZ2vXVlnYtza0cS+dg\ + CK7BGTqUsrCUd/ZbIvwcwZkZtpkhj1KQfto9X/0OMurBzAqbkeq1cyRHXHkOfN/q\ + bUIIRqr9Ii7Eswf9Vk8xp2O1Nt8nzcYS9PFD12M5eyaeFEkEYfpNMNGuTzp/31oq\ + VjbpoCxS6vuWAZyADxhISQ==", + ) + .unwrap(), + Base64::decode_vec( + "is7d0LY4HoXszlC2NO7gejkq7XqL4p1W6hZJPYTNx+r37t1CC2n3Vvzg6kNdpRix\ + DhIpXVTLjN9O7UO/XuqSumYKJIKoP52eb4Tg+a3hw5Iz2Zsb5lUTNSLgkQSBPAf7\ + 1LHxbL82JL4g1nBUog8ae60BwnVArThKY4EwlJguGNw09BAU4lwf6csDl/nX2vfV\ + wiAloYpeZkHL+L8m+bueGZM5KE2jEz+7ztZCI+T+E5i69rZEYDjx0lfLKlEhQlCW\ + 3HbCPELqXgNJJkRfi6MP9kXa9lSfnZmoT081RMvqonB/FUa4HOcKyCrw9XZEtnbN\ + CIdbitfDVEX+pSSD7596wQ==", + ) + .unwrap(), + Base64::decode_vec( + "GPs0injugfycacaeIP5jMa/WX55VEnKLDHom4k6WlfDF4L4gIGoJdekcPEUfxOI5\ + faKvHyFwRP1wObkPoRBDM0qZxRfBl4zEtpvjHrd5MibSyJkM8+J0BIKk/nSjbRIG\ + eb3hV5O56PvGB3S0dKhCUnuVObiC+ne7izplsD4OTG70l1Yud33UFntyoMxrxGYL\ + USqhBMmZfHquJg4NOWOzKNY/K+EcHDLj1Kjvkcgv9Vf7ocsVxvpFdD9uGPceQ6kw\ + RDdEl6mb+6FDgWuXVyqR9+904oanEIkbJ7vfkthagLbEf57dyG6nJlqh5FBZWxGI\ + R72YGypPuAh7qnnqXXjY2Q==", + ) + .unwrap(), + Base64::decode_vec( + "CUWC+hRWOT421kwRllgVjy6FYv6jQUcgDNHeAiYZnf5HjS9iK2ki7v8G5dL/0f+Y\ + f+NhE/4q8w4m8go51hACrVpP1p8GJDjiT09+RsOzITsHwl+ceEKoe56ZW6iDHBLl\ + rNw5/MtcYhKpjNU9KJ2udm5J/c9iislcjgckrZG2IB8ADgXHMEByZ5DgaMl4AKZ1\ + Gx8/q6KftTvmOT5rNTMLi76VN5KWQcDWK/DqXiOiZHM7Nr4dX4me3XeRgABJyNR8\ + Fqxj3N1+HrYLe/zs7LOaK0++F9Ul3tLelhrhsvLxei3oCZkF9A/foD3on3luYA+1\ + cRcxWpSY3h2J4/22+yo4+Q==", + ) + .unwrap(), ]; RsaPrivateKey::from_components( @@ -757,39 +825,38 @@ mod tests { // -----END PUBLIC KEY----- let n = BigUint::from_bytes_be(&hex!( - " - 90c06207caac3555c0b0947a5e8b681f5af6aed665ff1cd42b6b487f2f7d68f1 - 38f3dbbee6d2f10908507fe6bcf75e7cbd20e9af6ff1c202bcc3dbb45e9bb69b - b5d12a354c4b463a50820d16879373ceeb5574fdd9272be3b90d55c1a64855de - cf80520e94be2caa56c1737ed0042ef9c99c7ddb6cc76f3ada211ba90beae0fc - 0a19024e74e474ca5747f0ee327892bf6eebc83974478dbfbebed40d0ffc626c - 518071df5626abda386eed72585b676efb99b3ba111fb2f4b8fb0323bccb0c9b - 5aa35e1da54f1cccac3e14fb1d4588d7b9b9f62d4ea6e570c049efcc34101147 - fd7798549a42d86f9a90cee7fa0dd9f1ff4e10242280824872afd09782757abc - 46773cab6989c08747193b7aa4c49a0065830a87e6f7e54455758b2c10317267 - b9187358e41a5e5fef6fcbf81c8bc5e136ad1192aa7f3a5bc9270b22261b3c40 - 211d729d64c776cd8f219126e27227de3c0a40666b8da40c71243673a6187baf - 8943eadf0c3d3fd150076dad97e286a68185db8523a61e548cba7a6834e4ce98 - 5af954c9eafb9d819a3d14b526a0f8d2fef13ad99ee48f10c3a00f8853d7853a - 812b7a1c72bed38066f75779690bc12af9eb0d1eb8e2f7c4757c84e415725629 - d15c4d68c18213f18a86d4ccc08552b3c80c97165de073ac0440af253e8578c4 - 8857f396e5eba6cd01ed1250feb2c32d77939f8be8bd47874151daed87e8c963 - 32f697ea7950bee7a2c12bb484200bcbd08de5aeae6f22ff9922e38075b56026 - 2472f039de08e9362cfdd19c0f0cd0749ebd85bddc3882fb887f9789ed8e388e - 7e2eb2455399f166d5c9767ff378f8ebea465a0be2d2e3326fe6ed80e5e3050b - fb6c6a9dc8731ce4baa4e5b17b131113c79d6f290318095e37e7571a4ba697ab - 5ea56190131e06d300310064776ba0330907e1cc41acdef4eeaa53964ef30c71 - 023c3cf71af2d1d9e83900ffc80e07ec2442a3dbd50e957686a22f1d8f512364 - fb71e936f24990a4abcdbef2bea2f98cd77f1d1ca5625942c79347c146dee6e3 - 043eb622f63e627f4ebf20d6056133a4bd0f55dd13dcf429e0e73830969f543c - b31d86d9a878ca79d841444359cc0e31c0283fa6dd27b702b7ee05dad12c30f7 - f84bf1309678efb8da108efcedc423da8587bd127ca082d417c8726f7889fb80 - 326c3fa6fddd507ac7841b2f2e5c8780d486a0d68229ee2957a8ec24e00e4ab4 - de3fc811a4b5047c2b7920d071e9f2f9b61638dc15fb84cca46cad28e1ef539d - bcf249876f2647757b9a5e4f0b2ea6e7aabdf47dae826e9e259428bdb07e5a2a - 68b98f141f5537be7a590cb3ba15b0bb15824652e8da8f70eb847240058a336a - 1b6db7f88268aaf89f0b33b905d72c25338b13e61a51873c2d427021a3f29207 - 179ad32f423793f0c090dda025ce41df0e94afbc80ab5eda9b1a268aa2553a99" + "90c06207caac3555c0b0947a5e8b681f5af6aed665ff1cd42b6b487f2f7d68f1" + "38f3dbbee6d2f10908507fe6bcf75e7cbd20e9af6ff1c202bcc3dbb45e9bb69b" + "b5d12a354c4b463a50820d16879373ceeb5574fdd9272be3b90d55c1a64855de" + "cf80520e94be2caa56c1737ed0042ef9c99c7ddb6cc76f3ada211ba90beae0fc" + "0a19024e74e474ca5747f0ee327892bf6eebc83974478dbfbebed40d0ffc626c" + "518071df5626abda386eed72585b676efb99b3ba111fb2f4b8fb0323bccb0c9b" + "5aa35e1da54f1cccac3e14fb1d4588d7b9b9f62d4ea6e570c049efcc34101147" + "fd7798549a42d86f9a90cee7fa0dd9f1ff4e10242280824872afd09782757abc" + "46773cab6989c08747193b7aa4c49a0065830a87e6f7e54455758b2c10317267" + "b9187358e41a5e5fef6fcbf81c8bc5e136ad1192aa7f3a5bc9270b22261b3c40" + "211d729d64c776cd8f219126e27227de3c0a40666b8da40c71243673a6187baf" + "8943eadf0c3d3fd150076dad97e286a68185db8523a61e548cba7a6834e4ce98" + "5af954c9eafb9d819a3d14b526a0f8d2fef13ad99ee48f10c3a00f8853d7853a" + "812b7a1c72bed38066f75779690bc12af9eb0d1eb8e2f7c4757c84e415725629" + "d15c4d68c18213f18a86d4ccc08552b3c80c97165de073ac0440af253e8578c4" + "8857f396e5eba6cd01ed1250feb2c32d77939f8be8bd47874151daed87e8c963" + "32f697ea7950bee7a2c12bb484200bcbd08de5aeae6f22ff9922e38075b56026" + "2472f039de08e9362cfdd19c0f0cd0749ebd85bddc3882fb887f9789ed8e388e" + "7e2eb2455399f166d5c9767ff378f8ebea465a0be2d2e3326fe6ed80e5e3050b" + "fb6c6a9dc8731ce4baa4e5b17b131113c79d6f290318095e37e7571a4ba697ab" + "5ea56190131e06d300310064776ba0330907e1cc41acdef4eeaa53964ef30c71" + "023c3cf71af2d1d9e83900ffc80e07ec2442a3dbd50e957686a22f1d8f512364" + "fb71e936f24990a4abcdbef2bea2f98cd77f1d1ca5625942c79347c146dee6e3" + "043eb622f63e627f4ebf20d6056133a4bd0f55dd13dcf429e0e73830969f543c" + "b31d86d9a878ca79d841444359cc0e31c0283fa6dd27b702b7ee05dad12c30f7" + "f84bf1309678efb8da108efcedc423da8587bd127ca082d417c8726f7889fb80" + "326c3fa6fddd507ac7841b2f2e5c8780d486a0d68229ee2957a8ec24e00e4ab4" + "de3fc811a4b5047c2b7920d071e9f2f9b61638dc15fb84cca46cad28e1ef539d" + "bcf249876f2647757b9a5e4f0b2ea6e7aabdf47dae826e9e259428bdb07e5a2a" + "68b98f141f5537be7a590cb3ba15b0bb15824652e8da8f70eb847240058a336a" + "1b6db7f88268aaf89f0b33b905d72c25338b13e61a51873c2d427021a3f29207" + "179ad32f423793f0c090dda025ce41df0e94afbc80ab5eda9b1a268aa2553a99" )); let e = BigUint::from_u64(65537).unwrap(); diff --git a/src/oaep/encrypting_key.rs b/src/oaep/encrypting_key.rs index 1565e467..9a9ae290 100644 --- a/src/oaep/encrypting_key.rs +++ b/src/oaep/encrypting_key.rs @@ -102,9 +102,13 @@ mod tests { Token::Str("label"), Token::None, Token::Str("phantom"), - Token::UnitStruct { name: "PhantomData", }, + Token::UnitStruct { + name: "PhantomData", + }, Token::Str("mg_phantom"), - Token::UnitStruct { name: "PhantomData", }, + Token::UnitStruct { + name: "PhantomData", + }, Token::StructEnd, ]; assert_tokens(&encrypting_key.readable(), &tokens); diff --git a/src/pkcs1v15/encrypting_key.rs b/src/pkcs1v15/encrypting_key.rs index f1ff3fd3..2850f79d 100644 --- a/src/pkcs1v15/encrypting_key.rs +++ b/src/pkcs1v15/encrypting_key.rs @@ -1,9 +1,9 @@ use super::encrypt; use crate::{traits::RandomizedEncryptor, Result, RsaPublicKey}; use alloc::vec::Vec; +use rand_core::CryptoRngCore; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; -use rand_core::CryptoRngCore; /// Encryption key for PKCS#1 v1.5 encryption as described in [RFC8017 ยง 7.2]. /// @@ -45,11 +45,16 @@ mod tests { let encrypting_key = EncryptingKey::new(priv_key.to_public_key()); let tokens = [ - Token::Struct { name: "EncryptingKey", len: 1 }, + Token::Struct { + name: "EncryptingKey", + len: 1, + }, Token::Str("inner"), - Token::Str("3024300d06092a864886f70d01010105000313003010020900cc6c6130e35b46bf0203010001"), + Token::Str( + "3024300d06092a864886f70d01010105000313003010020900cc6c6130e35b46bf0203010001", + ), Token::StructEnd, ]; assert_tokens(&encrypting_key.clone().readable(), &tokens); } -} \ No newline at end of file +} diff --git a/src/pkcs1v15/signature.rs b/src/pkcs1v15/signature.rs index d8fd2708..679911fc 100644 --- a/src/pkcs1v15/signature.rs +++ b/src/pkcs1v15/signature.rs @@ -3,10 +3,10 @@ use crate::algorithms::pad::uint_to_be_pad; use ::signature::SignatureEncoding; use alloc::{boxed::Box, string::ToString}; -#[cfg(feature = "serde")] -use serdect::serde::{de, Deserialize, Serialize}; use core::fmt::{Debug, Display, Formatter, LowerHex, UpperHex}; use num_bigint::BigUint; +#[cfg(feature = "serde")] +use serdect::serde::{de, Deserialize, Serialize}; use spki::{ der::{asn1::BitString, Result as DerResult}, SignatureBitStringEncoding, @@ -98,7 +98,10 @@ impl<'de> Deserialize<'de> for Signature { where D: serdect::serde::Deserializer<'de>, { - serdect::slice::deserialize_hex_or_bin_vec(deserializer)?.as_slice().try_into().map_err(de::Error::custom) + serdect::slice::deserialize_hex_or_bin_vec(deserializer)? + .as_slice() + .try_into() + .map_err(de::Error::custom) } } @@ -114,9 +117,7 @@ mod tests { len: 1, }; - let tokens = [ - Token::Str("2a"), - ]; + let tokens = [Token::Str("2a")]; assert_tokens(&signature.readable(), &tokens); } -} \ No newline at end of file +} diff --git a/src/pkcs1v15/signing_key.rs b/src/pkcs1v15/signing_key.rs index ac6fa3e7..8914479d 100644 --- a/src/pkcs1v15/signing_key.rs +++ b/src/pkcs1v15/signing_key.rs @@ -7,7 +7,8 @@ use pkcs8::{ spki::{ der::AnyRef, AlgorithmIdentifierRef, AssociatedAlgorithmIdentifier, SignatureAlgorithmIdentifier, - }, AssociatedOid, EncodePrivateKey, SecretDocument + }, + AssociatedOid, EncodePrivateKey, SecretDocument, }; use rand_core::CryptoRngCore; #[cfg(feature = "serde")] @@ -262,7 +263,10 @@ where impl ZeroizeOnDrop for SigningKey where D: Digest {} -impl PartialEq for SigningKey where D: Digest { +impl PartialEq for SigningKey +where + D: Digest, +{ fn eq(&self, other: &Self) -> bool { self.inner == other.inner && self.prefix == other.prefix } @@ -316,4 +320,4 @@ mod tests { assert_tokens(&signing_key.readable(), &tokens); } -} \ No newline at end of file +} diff --git a/src/pkcs1v15/verifying_key.rs b/src/pkcs1v15/verifying_key.rs index baa77c98..fa23e8f7 100644 --- a/src/pkcs1v15/verifying_key.rs +++ b/src/pkcs1v15/verifying_key.rs @@ -264,9 +264,9 @@ mod tests { let pub_key = priv_key.to_public_key(); let verifying_key = VerifyingKey::::new(pub_key); - let tokens = [ - Token::Str("3024300d06092a864886f70d01010105000313003010020900cc6c6130e35b46bf0203010001") - ]; + let tokens = [Token::Str( + "3024300d06092a864886f70d01010105000313003010020900cc6c6130e35b46bf0203010001", + )]; assert_tokens(&verifying_key.readable(), &tokens); } diff --git a/src/pss.rs b/src/pss.rs index 6d4fae8c..5661bf2f 100644 --- a/src/pss.rs +++ b/src/pss.rs @@ -565,10 +565,10 @@ mod test { for test in &tests { let sig = signing_key - .sign_prehash_with_rng(&mut rng, &test) + .sign_prehash_with_rng(&mut rng, test) .expect("failed to sign"); verifying_key - .verify_prehash(&test, &sig) + .verify_prehash(test, &sig) .expect("failed to verify"); } } @@ -584,10 +584,10 @@ mod test { for test in &tests { let sig = signing_key - .sign_prehash_with_rng(&mut rng, &test) + .sign_prehash_with_rng(&mut rng, test) .expect("failed to sign"); verifying_key - .verify_prehash(&test, &sig) + .verify_prehash(test, &sig) .expect("failed to verify"); } } diff --git a/src/pss/blinded_signing_key.rs b/src/pss/blinded_signing_key.rs index 5d46d5a8..9f990125 100644 --- a/src/pss/blinded_signing_key.rs +++ b/src/pss/blinded_signing_key.rs @@ -17,8 +17,8 @@ use signature::{ use zeroize::ZeroizeOnDrop; #[cfg(feature = "serde")] use { - serdect::serde::{de, ser, Deserialize, Serialize}, pkcs8::DecodePrivateKey, + serdect::serde::{de, ser, Deserialize, Serialize}, }; /// Signing key for producing "blinded" RSASSA-PSS signatures as described in /// [draft-irtf-cfrg-rsa-blind-signatures](https://datatracker.ietf.org/doc/draft-irtf-cfrg-rsa-blind-signatures/). diff --git a/src/pss/signature.rs b/src/pss/signature.rs index d7d32ae8..ea3d1ce9 100644 --- a/src/pss/signature.rs +++ b/src/pss/signature.rs @@ -111,9 +111,7 @@ mod tests { len: 1, }; - let tokens = [ - Token::Str("2a"), - ]; + let tokens = [Token::Str("2a")]; assert_tokens(&signature.readable(), &tokens); } -} \ No newline at end of file +} diff --git a/src/pss/verifying_key.rs b/src/pss/verifying_key.rs index b1ea02e6..2fd62d37 100644 --- a/src/pss/verifying_key.rs +++ b/src/pss/verifying_key.rs @@ -170,7 +170,7 @@ where type Error = pkcs8::spki::Error; fn try_from(spki: pkcs8::SubjectPublicKeyInfoRef<'_>) -> pkcs8::spki::Result { - match spki.algorithm.oid { + match spki.algorithm.oid { ID_RSASSA_PSS | pkcs1::ALGORITHM_OID => (), _ => { return Err(spki::Error::OidUnknown { @@ -235,9 +235,9 @@ mod tests { let pub_key = priv_key.to_public_key(); let verifying_key = VerifyingKey::::new(pub_key); - let tokens = [ - Token::Str("3024300d06092a864886f70d01010105000313003010020900cc6c6130e35b46bf0203010001") - ]; + let tokens = [Token::Str( + "3024300d06092a864886f70d01010105000313003010020900cc6c6130e35b46bf0203010001", + )]; assert_tokens(&verifying_key.readable(), &tokens); }