@@ -23,8 +23,10 @@ import (
23
23
"crypto/sha256"
24
24
"crypto/x509"
25
25
"encoding/asn1"
26
+ "strings"
26
27
"testing"
27
28
29
+ "github.com/hyperledger/fabric/bccsp/mocks"
28
30
"github.com/stretchr/testify/assert"
29
31
)
30
32
@@ -92,11 +94,15 @@ func TestRSAPublicKey(t *testing.T) {
92
94
93
95
func TestRSASignerSign (t * testing.T ) {
94
96
signer := & rsaSigner {}
97
+ verifierPrivateKey := & rsaPrivateKeyVerifier {}
98
+ verifierPublicKey := & rsaPublicKeyKeyVerifier {}
95
99
96
100
// Generate a key
97
101
lowLevelKey , err := rsa .GenerateKey (rand .Reader , 1024 )
98
102
assert .NoError (t , err )
99
103
k := & rsaPrivateKey {lowLevelKey }
104
+ pk , err := k .PublicKey ()
105
+ assert .NoError (t , err )
100
106
101
107
// Sign
102
108
msg := []byte ("Hello World!!!" )
@@ -114,12 +120,49 @@ func TestRSASignerSign(t *testing.T) {
114
120
sigma , err := signer .Sign (k , digest , & rsa.PSSOptions {SaltLength : rsa .PSSSaltLengthEqualsHash , Hash : crypto .SHA256 })
115
121
assert .NoError (t , err )
116
122
123
+ opts := & rsa.PSSOptions {SaltLength : rsa .PSSSaltLengthEqualsHash , Hash : crypto .SHA256 }
117
124
// Verify against msg, must fail
118
- err = rsa .VerifyPSS (& lowLevelKey .PublicKey , crypto .SHA256 , msg , sigma , & rsa. PSSOptions { SaltLength : rsa . PSSSaltLengthEqualsHash , Hash : crypto . SHA256 } )
125
+ err = rsa .VerifyPSS (& lowLevelKey .PublicKey , crypto .SHA256 , msg , sigma , opts )
119
126
assert .Error (t , err )
120
127
assert .Contains (t , err .Error (), "crypto/rsa: verification error" )
121
128
122
129
// Verify against digest, must succeed
123
- err = rsa .VerifyPSS (& lowLevelKey .PublicKey , crypto .SHA256 , digest , sigma , & rsa.PSSOptions {SaltLength : rsa .PSSSaltLengthEqualsHash , Hash : crypto .SHA256 })
130
+ err = rsa .VerifyPSS (& lowLevelKey .PublicKey , crypto .SHA256 , digest , sigma , opts )
131
+ assert .NoError (t , err )
132
+
133
+ valid , err := verifierPrivateKey .Verify (k , sigma , msg , opts )
134
+ assert .Error (t , err )
135
+ assert .True (t , strings .Contains (err .Error (), "crypto/rsa: verification error" ))
136
+
137
+ valid , err = verifierPrivateKey .Verify (k , sigma , digest , opts )
138
+ assert .NoError (t , err )
139
+ assert .True (t , valid )
140
+
141
+ valid , err = verifierPublicKey .Verify (pk , sigma , msg , opts )
142
+ assert .Error (t , err )
143
+ assert .True (t , strings .Contains (err .Error (), "crypto/rsa: verification error" ))
144
+
145
+ valid , err = verifierPublicKey .Verify (pk , sigma , digest , opts )
124
146
assert .NoError (t , err )
147
+ assert .True (t , valid )
148
+ }
149
+
150
+ func TestRSAVerifiersInvalidInputs (t * testing.T ) {
151
+ verifierPrivate := & rsaPrivateKeyVerifier {}
152
+ _ , err := verifierPrivate .Verify (nil , nil , nil , nil )
153
+ assert .Error (t , err )
154
+ assert .True (t , strings .Contains (err .Error (), "Invalid options. It must not be nil." ))
155
+
156
+ _ , err = verifierPrivate .Verify (nil , nil , nil , & mocks.SignerOpts {})
157
+ assert .Error (t , err )
158
+ assert .True (t , strings .Contains (err .Error (), "Opts type not recognized [" ))
159
+
160
+ verifierPublic := & rsaPublicKeyKeyVerifier {}
161
+ _ , err = verifierPublic .Verify (nil , nil , nil , nil )
162
+ assert .Error (t , err )
163
+ assert .True (t , strings .Contains (err .Error (), "Invalid options. It must not be nil." ))
164
+
165
+ _ , err = verifierPublic .Verify (nil , nil , nil , & mocks.SignerOpts {})
166
+ assert .Error (t , err )
167
+ assert .True (t , strings .Contains (err .Error (), "Opts type not recognized [" ))
125
168
}
0 commit comments