@@ -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