Skip to content

Commit a9fcf22

Browse files
Make SigningKey::from use Self::new() (#498)
This matches #472.
1 parent f86ac44 commit a9fcf22

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

src/pkcs1v15/signing_key.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,10 @@ where
197197

198198
impl<D> From<RsaPrivateKey> for SigningKey<D>
199199
where
200-
D: Digest,
200+
D: Digest + AssociatedOid,
201201
{
202202
fn from(key: RsaPrivateKey) -> Self {
203-
Self::new_unprefixed(key)
203+
Self::new(key)
204204
}
205205
}
206206

tests/pkcs1v15.rs

+57
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,60 @@ fn signature_stringify() {
2121
assert_eq!(format!("{:X}", signature), expected);
2222
assert_eq!(signature.to_string(), expected);
2323
}
24+
25+
#[cfg(feature = "pem")]
26+
#[test]
27+
fn signing_key_new_same_as_from() {
28+
use pkcs1::DecodeRsaPrivateKey;
29+
use rsa::RsaPrivateKey;
30+
use signature::{Keypair, Signer, Verifier};
31+
32+
// randomly generated key, hardcoded for test repeatability
33+
const PRIV_KEY_PKCS1_PEM: &str = "-----BEGIN RSA PRIVATE KEY-----
34+
MIIEowIBAAKCAQEAwQe5brkkpxrwR/5TJ6JXsUyBzYtbEL/w8u8P6NnxQ8sL4KYp
35+
MzzTB6aq1gq7bieYXChg0PIWeTukGaOzZe96KxhT0GbhhYRlukktM/quRrM7nYdm
36+
UmXo7+KWU55kfcNOjWKADL/7qmxn6y/+kPmBg83nHdr1Mq6/pNkeHY/1CeGGECl0
37+
rg7gfEkssHjZw/uKafA271fX9A/q3LcAeWi7iA01PgmP28BrWb7OQoYVY71kFY11
38+
e919VlMh8oXsIV0nXCkYu9dR8Pzq6U4gFASK32fFkKX/djRMljEgss3kR0SWPH7t
39+
m5uXX1wRTJ2mRaZh/BmGweIvYCZ5y0+9ESOD1wIDAQABAoIBAAj3NuGxr8YjNi3h
40+
3jLlE3WkvBKz+lLY13QxLmf+V3pyn+abUSaUGKkuUJkIfpQrOqRtK7IIzIps/r5C
41+
ID8H1IDT7HCtlqQA9kikxXi4mAeoo4g5lcMWAK/Dsn/Hx5sfyzI99PyininYRyth
42+
W02YiS96DNYSKXllLHmXrBJrcVI4FqXAz5s7MezU0XYi+jeaVGEP2bd2cHfQJki/
43+
pLOKBvA5DGT7HbmMV7Z1qg/zcr/4Py+7qAFC5XsbQIILSMTfC45QFgs1lApnUG8H
44+
uIhf5lgZ8m0ouDBb/e1Q04ANtdLLI6EmrR11PwavUmvPvXuedXkv2OvnuAbiJr6g
45+
j0I0VaECgYEAyWf2QZrEoZLzVrInZ+VYtov1+jjgFcxW9lHuCJXtTx8hFla13Bmp
46+
bc8PoxWb+37jPdrOYPW0yv1sk5VeVkxOJbms0Gn8hpyI+0muQZ3jmwlS0A10T6FL
47+
wWECYvrxO8DCaVCQ4V+egLSDb/GMkRgHJF3Dr7g3ep7krXf2eeWILQUCgYEA9VqJ
48+
ijMDKw/KX6swyMe3A1nA0MlLBeseXxrwNIJenwRXCzjG3BH6oHW2MGwH0EV7sSoG
49+
FR6j7LZbp9I9NvRcAYU/s1qiAX3iX3KIsbZYNtEC6tKn/HClaHLZOhyuE8tjshyD
50+
jhK/0rhw7R5VQ1GfJhmuzvwoMFTA0fqZBQpWZCsCgYBA5WO+3dyv50bLT5pM6uR7
51+
5Xs7xinGPFJlCh812wFdNj2WEhiFNCuYu1hhhyv8jHUyUBehvGol4iSjJUUBb5La
52+
qwpZGV2KDlRBDAu/Dt3w7b8mVL9+jQ144QZA2HT0ePbrsk8Mn5/V/tQ/NMjDU8ex
53+
WxkbvLL7qskqb/YWbvRC9QKBgQDUJYvFpmQ36LhozmIpSZ6yU/oHzfWD0Y/6VhWa
54+
oZtlTeBhwJ8aDKWz9vQonFCJQns4bgjCXDMLa4aG7p+lk9a2LdwtndF1Dr8dHrCZ
55+
UPynsUQffTRpb5FmZd/0gnX2gafbixIpV4brkjV6of7BbaL50702Fgw99hqftVp4
56+
ZD7c7wKBgD7uIs6rgpaJzKbf7ejjZSjfLOgHlJhtH6Nejp8KoJRsEQI1ofWyIn7D
57+
eMjIuecwLapPwjY2G0/sUW61bqrxgW10wDJHPNllGsZFanzpb7x5o/7eNhzc4qNf
58+
Rmb665iB5fwpqmbE/hYKIn7asYQE+V0dkgt8M3qvlJJ5JJbCrJx3
59+
-----END RSA PRIVATE KEY-----";
60+
61+
let priv_key = RsaPrivateKey::from_pkcs1_pem(PRIV_KEY_PKCS1_PEM).unwrap();
62+
63+
let msg = b"1234";
64+
65+
let key_via_new = rsa::pkcs1v15::SigningKey::<sha2::Sha256>::new(priv_key.clone());
66+
let key_via_from = rsa::pkcs1v15::SigningKey::<sha2::Sha256>::from(priv_key.clone());
67+
let sig_via_new = key_via_new.sign(msg);
68+
let sig_via_from = key_via_from.sign(msg);
69+
assert_eq!(sig_via_new, sig_via_from);
70+
71+
// each verifies the other
72+
assert!(key_via_new
73+
.verifying_key()
74+
.verify(msg, &sig_via_from)
75+
.is_ok());
76+
assert!(key_via_from
77+
.verifying_key()
78+
.verify(msg, &sig_via_new)
79+
.is_ok());
80+
}

0 commit comments

Comments
 (0)