@@ -37,6 +37,11 @@ const SECP256K1_MESSAGE_HEX: &str = "5c868fedb8026979ebd26f1ba07c27eedf4ff6d1044
37
37
const SECP256K1_SIGNATURE_HEX : & str = "207082eb2c3dfa0b454e0906051270ba4074ac93760ba9e7110cd9471475111151eb0dbbc9920e72146fb564f99d039802bf6ef2561446eb126ef364d21ee9c4" ;
38
38
const SECP256K1_PUBLIC_KEY_HEX : & str = "04051c1ee2190ecfb174bfe4f90763f2b4ff7517b70a2aec1876ebcfd644c4633fb03f3cfbd94b1f376e34592d9d41ccaf640bb751b00a1fadeb0c01157769eb73" ;
39
39
40
+ const SECP256R1_MESSAGE_HEX : & str =
41
+ "4d55c99ef6bd54621662c3d110c3cb627c03d6311393b264ab97b90a4b15214a5593ba2510a53d63fb34be251facb697c973e11b665cb7920f1684b0031b4dd370cb927ca7168b0bf8ad285e05e9e31e34bc24024739fdc10b78586f29eff94412034e3b606ed850ec2c1900e8e68151fc4aee5adebb066eb6da4eaa5681378e" ;
42
+ const SECP256R1_SIGNATURE_HEX : & str = "1cc628533d0004b2b20e7f4baad0b8bb5e0673db159bbccf92491aef61fc9620880e0bbf82a8cf818ed46ba03cf0fc6c898e36fca36cc7fdb1d2db7503634430" ;
43
+ const SECP256R1_PUBLIC_KEY_HEX : & str = "04b8188bd68701fc396dab53125d4d28ea33a91daf6d21485f4770f6ea8c565dde423f058810f277f8fe076f6db56e9285a1bf2c2a1dae145095edd9c04970bc4a" ;
44
+
40
45
// TEST 3 test vector from https://tools.ietf.org/html/rfc8032#section-7.1
41
46
const ED25519_MESSAGE_HEX : & str = "af82" ;
42
47
const ED25519_SIGNATURE_HEX : & str = "6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a" ;
@@ -132,6 +137,68 @@ fn cosmos_signature_verify_errors() {
132
137
)
133
138
}
134
139
140
+ #[ test]
141
+ fn secp256r1_signature_verify_works ( ) {
142
+ let mut deps = setup ( ) ;
143
+
144
+ let message = hex:: decode ( SECP256R1_MESSAGE_HEX ) . unwrap ( ) ;
145
+ let signature = hex:: decode ( SECP256R1_SIGNATURE_HEX ) . unwrap ( ) ;
146
+ let public_key = hex:: decode ( SECP256R1_PUBLIC_KEY_HEX ) . unwrap ( ) ;
147
+
148
+ let verify_msg = QueryMsg :: VerifySecp256R1Signature {
149
+ message : Binary :: new ( message) ,
150
+ signature : Binary :: new ( signature) ,
151
+ public_key : Binary :: new ( public_key) ,
152
+ } ;
153
+
154
+ let raw = query ( & mut deps, mock_env ( ) , verify_msg) . unwrap ( ) ;
155
+ let res: VerifyResponse = from_slice ( & raw , DESERIALIZATION_LIMIT ) . unwrap ( ) ;
156
+
157
+ assert_eq ! ( res, VerifyResponse { verifies: true } ) ;
158
+ }
159
+
160
+ #[ test]
161
+ fn secp256r1_signature_verify_fails ( ) {
162
+ let mut deps = setup ( ) ;
163
+
164
+ let mut message = hex:: decode ( SECP256R1_MESSAGE_HEX ) . unwrap ( ) ;
165
+ // alter hash
166
+ message[ 0 ] ^= 0x01 ;
167
+ let signature = hex:: decode ( SECP256R1_SIGNATURE_HEX ) . unwrap ( ) ;
168
+ let public_key = hex:: decode ( SECP256R1_PUBLIC_KEY_HEX ) . unwrap ( ) ;
169
+
170
+ let verify_msg = QueryMsg :: VerifySecp256R1Signature {
171
+ message : Binary :: new ( message) ,
172
+ signature : Binary :: new ( signature) ,
173
+ public_key : Binary :: new ( public_key) ,
174
+ } ;
175
+
176
+ let raw = query ( & mut deps, mock_env ( ) , verify_msg) . unwrap ( ) ;
177
+ let res: VerifyResponse = from_slice ( & raw , DESERIALIZATION_LIMIT ) . unwrap ( ) ;
178
+
179
+ assert_eq ! ( res, VerifyResponse { verifies: false } ) ;
180
+ }
181
+
182
+ #[ test]
183
+ fn secp256r1_signature_verify_errors ( ) {
184
+ let mut deps = setup ( ) ;
185
+
186
+ let message = hex:: decode ( SECP256R1_MESSAGE_HEX ) . unwrap ( ) ;
187
+ let signature = hex:: decode ( SECP256R1_SIGNATURE_HEX ) . unwrap ( ) ;
188
+ let public_key = vec ! [ ] ;
189
+
190
+ let verify_msg = QueryMsg :: VerifySecp256R1Signature {
191
+ message : Binary :: new ( message) ,
192
+ signature : Binary :: new ( signature) ,
193
+ public_key : Binary :: new ( public_key) ,
194
+ } ;
195
+ let res = query ( & mut deps, mock_env ( ) , verify_msg) ;
196
+ assert_eq ! (
197
+ res. unwrap_err( ) ,
198
+ "Verification error: Invalid public key format"
199
+ )
200
+ }
201
+
135
202
#[ test]
136
203
fn ethereum_signature_verify_works ( ) {
137
204
let mut deps = setup ( ) ;
@@ -488,6 +555,7 @@ fn query_works() {
488
555
ListVerificationsResponse {
489
556
verification_schemes: vec![
490
557
"secp256k1" . into( ) ,
558
+ "secp256r1" . into( ) ,
491
559
"ed25519" . into( ) ,
492
560
"ed25519_batch" . into( )
493
561
]
0 commit comments