@@ -21,3 +21,60 @@ fn signature_stringify() {
21
21
assert_eq ! ( format!( "{:X}" , signature) , expected) ;
22
22
assert_eq ! ( signature. to_string( ) , expected) ;
23
23
}
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