From 2817868382c143c6606670d854159f0fd2eec0d2 Mon Sep 17 00:00:00 2001 From: Marshall Pierce Date: Wed, 12 Mar 2025 11:54:59 -0600 Subject: [PATCH] Make SigningKey::from use Self::new() This matches https://github.com/RustCrypto/RSA/pull/472. --- src/pkcs1v15/signing_key.rs | 4 +-- tests/pkcs1v15.rs | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/pkcs1v15/signing_key.rs b/src/pkcs1v15/signing_key.rs index a354acc4..badef88b 100644 --- a/src/pkcs1v15/signing_key.rs +++ b/src/pkcs1v15/signing_key.rs @@ -197,10 +197,10 @@ where impl From for SigningKey where - D: Digest, + D: Digest + AssociatedOid, { fn from(key: RsaPrivateKey) -> Self { - Self::new_unprefixed(key) + Self::new(key) } } diff --git a/tests/pkcs1v15.rs b/tests/pkcs1v15.rs index 2b42ed71..0960c90e 100644 --- a/tests/pkcs1v15.rs +++ b/tests/pkcs1v15.rs @@ -21,3 +21,60 @@ fn signature_stringify() { assert_eq!(format!("{:X}", signature), expected); assert_eq!(signature.to_string(), expected); } + +#[cfg(feature = "pem")] +#[test] +fn signing_key_new_same_as_from() { + use pkcs1::DecodeRsaPrivateKey; + use rsa::RsaPrivateKey; + use signature::{Keypair, Signer, Verifier}; + + // randomly generated key, hardcoded for test repeatability + const PRIV_KEY_PKCS1_PEM: &str = "-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAwQe5brkkpxrwR/5TJ6JXsUyBzYtbEL/w8u8P6NnxQ8sL4KYp +MzzTB6aq1gq7bieYXChg0PIWeTukGaOzZe96KxhT0GbhhYRlukktM/quRrM7nYdm +UmXo7+KWU55kfcNOjWKADL/7qmxn6y/+kPmBg83nHdr1Mq6/pNkeHY/1CeGGECl0 +rg7gfEkssHjZw/uKafA271fX9A/q3LcAeWi7iA01PgmP28BrWb7OQoYVY71kFY11 +e919VlMh8oXsIV0nXCkYu9dR8Pzq6U4gFASK32fFkKX/djRMljEgss3kR0SWPH7t +m5uXX1wRTJ2mRaZh/BmGweIvYCZ5y0+9ESOD1wIDAQABAoIBAAj3NuGxr8YjNi3h +3jLlE3WkvBKz+lLY13QxLmf+V3pyn+abUSaUGKkuUJkIfpQrOqRtK7IIzIps/r5C +ID8H1IDT7HCtlqQA9kikxXi4mAeoo4g5lcMWAK/Dsn/Hx5sfyzI99PyininYRyth +W02YiS96DNYSKXllLHmXrBJrcVI4FqXAz5s7MezU0XYi+jeaVGEP2bd2cHfQJki/ +pLOKBvA5DGT7HbmMV7Z1qg/zcr/4Py+7qAFC5XsbQIILSMTfC45QFgs1lApnUG8H +uIhf5lgZ8m0ouDBb/e1Q04ANtdLLI6EmrR11PwavUmvPvXuedXkv2OvnuAbiJr6g +j0I0VaECgYEAyWf2QZrEoZLzVrInZ+VYtov1+jjgFcxW9lHuCJXtTx8hFla13Bmp +bc8PoxWb+37jPdrOYPW0yv1sk5VeVkxOJbms0Gn8hpyI+0muQZ3jmwlS0A10T6FL +wWECYvrxO8DCaVCQ4V+egLSDb/GMkRgHJF3Dr7g3ep7krXf2eeWILQUCgYEA9VqJ +ijMDKw/KX6swyMe3A1nA0MlLBeseXxrwNIJenwRXCzjG3BH6oHW2MGwH0EV7sSoG +FR6j7LZbp9I9NvRcAYU/s1qiAX3iX3KIsbZYNtEC6tKn/HClaHLZOhyuE8tjshyD +jhK/0rhw7R5VQ1GfJhmuzvwoMFTA0fqZBQpWZCsCgYBA5WO+3dyv50bLT5pM6uR7 +5Xs7xinGPFJlCh812wFdNj2WEhiFNCuYu1hhhyv8jHUyUBehvGol4iSjJUUBb5La +qwpZGV2KDlRBDAu/Dt3w7b8mVL9+jQ144QZA2HT0ePbrsk8Mn5/V/tQ/NMjDU8ex +WxkbvLL7qskqb/YWbvRC9QKBgQDUJYvFpmQ36LhozmIpSZ6yU/oHzfWD0Y/6VhWa +oZtlTeBhwJ8aDKWz9vQonFCJQns4bgjCXDMLa4aG7p+lk9a2LdwtndF1Dr8dHrCZ +UPynsUQffTRpb5FmZd/0gnX2gafbixIpV4brkjV6of7BbaL50702Fgw99hqftVp4 +ZD7c7wKBgD7uIs6rgpaJzKbf7ejjZSjfLOgHlJhtH6Nejp8KoJRsEQI1ofWyIn7D +eMjIuecwLapPwjY2G0/sUW61bqrxgW10wDJHPNllGsZFanzpb7x5o/7eNhzc4qNf +Rmb665iB5fwpqmbE/hYKIn7asYQE+V0dkgt8M3qvlJJ5JJbCrJx3 +-----END RSA PRIVATE KEY-----"; + + let priv_key = RsaPrivateKey::from_pkcs1_pem(PRIV_KEY_PKCS1_PEM).unwrap(); + + let msg = b"1234"; + + let key_via_new = rsa::pkcs1v15::SigningKey::::new(priv_key.clone()); + let key_via_from = rsa::pkcs1v15::SigningKey::::from(priv_key.clone()); + let sig_via_new = key_via_new.sign(msg); + let sig_via_from = key_via_from.sign(msg); + assert_eq!(sig_via_new, sig_via_from); + + // each verifies the other + assert!(key_via_new + .verifying_key() + .verify(msg, &sig_via_from) + .is_ok()); + assert!(key_via_from + .verifying_key() + .verify(msg, &sig_via_new) + .is_ok()); +}