Skip to content

Commit 8932d69

Browse files
committed
crypto-verify verify secp256r1 integration tests
1 parent a377f84 commit 8932d69

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

contracts/crypto-verify/tests/integration.rs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ const SECP256K1_MESSAGE_HEX: &str = "5c868fedb8026979ebd26f1ba07c27eedf4ff6d1044
3737
const SECP256K1_SIGNATURE_HEX: &str = "207082eb2c3dfa0b454e0906051270ba4074ac93760ba9e7110cd9471475111151eb0dbbc9920e72146fb564f99d039802bf6ef2561446eb126ef364d21ee9c4";
3838
const SECP256K1_PUBLIC_KEY_HEX: &str = "04051c1ee2190ecfb174bfe4f90763f2b4ff7517b70a2aec1876ebcfd644c4633fb03f3cfbd94b1f376e34592d9d41ccaf640bb751b00a1fadeb0c01157769eb73";
3939

40+
const SECP256R1_MESSAGE_HEX: &str =
41+
"4d55c99ef6bd54621662c3d110c3cb627c03d6311393b264ab97b90a4b15214a5593ba2510a53d63fb34be251facb697c973e11b665cb7920f1684b0031b4dd370cb927ca7168b0bf8ad285e05e9e31e34bc24024739fdc10b78586f29eff94412034e3b606ed850ec2c1900e8e68151fc4aee5adebb066eb6da4eaa5681378e";
42+
const SECP256R1_SIGNATURE_HEX: &str = "1cc628533d0004b2b20e7f4baad0b8bb5e0673db159bbccf92491aef61fc9620880e0bbf82a8cf818ed46ba03cf0fc6c898e36fca36cc7fdb1d2db7503634430";
43+
const SECP256R1_PUBLIC_KEY_HEX: &str = "04b8188bd68701fc396dab53125d4d28ea33a91daf6d21485f4770f6ea8c565dde423f058810f277f8fe076f6db56e9285a1bf2c2a1dae145095edd9c04970bc4a";
44+
4045
// TEST 3 test vector from https://tools.ietf.org/html/rfc8032#section-7.1
4146
const ED25519_MESSAGE_HEX: &str = "af82";
4247
const ED25519_SIGNATURE_HEX: &str = "6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a";
@@ -132,6 +137,68 @@ fn cosmos_signature_verify_errors() {
132137
)
133138
}
134139

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+
135202
#[test]
136203
fn ethereum_signature_verify_works() {
137204
let mut deps = setup();
@@ -488,6 +555,7 @@ fn query_works() {
488555
ListVerificationsResponse {
489556
verification_schemes: vec![
490557
"secp256k1".into(),
558+
"secp256r1".into(),
491559
"ed25519".into(),
492560
"ed25519_batch".into()
493561
]

0 commit comments

Comments
 (0)