Skip to content

Commit d50d2f4

Browse files
committed
Add shorter sig / pubkey tests
1 parent 9941dc2 commit d50d2f4

File tree

1 file changed

+72
-24
lines changed

1 file changed

+72
-24
lines changed

packages/vm/src/imports.rs

Lines changed: 72 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,7 @@ mod tests {
10141014
let mut hash =
10151015
hex::decode("5ae8317d34d1e595e3fa7247db80c0af4320cce1116de187f8f7e2e099c0d8d0")
10161016
.unwrap();
1017+
// extend / break hash
10171018
hash.push(0x00);
10181019
let hash_ptr = write_data(&env, &hash);
10191020
let sig = hex::decode("207082eb2c3dfa0b454e0906051270ba4074ac93760ba9e7110cd9471475111151eb0dbbc9920e72146fb564f99d039802bf6ef2561446eb126ef364d21ee9c4").unwrap();
@@ -1039,6 +1040,7 @@ mod tests {
10391040
let mut hash =
10401041
hex::decode("5ae8317d34d1e595e3fa7247db80c0af4320cce1116de187f8f7e2e099c0d8d0")
10411042
.unwrap();
1043+
// reduce / break hash
10421044
hash.pop();
10431045
let hash_ptr = write_data(&env, &hash);
10441046
let sig = hex::decode("207082eb2c3dfa0b454e0906051270ba4074ac93760ba9e7110cd9471475111151eb0dbbc9920e72146fb564f99d039802bf6ef2561446eb126ef364d21ee9c4").unwrap();
@@ -1081,7 +1083,7 @@ mod tests {
10811083
}
10821084

10831085
#[test]
1084-
fn do_secp256k1_verify_wrong_sig_length_fails() {
1086+
fn do_secp256k1_verify_larger_sig_fails() {
10851087
let api = MockApi::default();
10861088
let (env, mut _instance) = make_instance(api.clone());
10871089

@@ -1106,58 +1108,57 @@ mod tests {
11061108
}
11071109

11081110
#[test]
1109-
fn do_secp256k1_verify_wrong_pubkey_fails() {
1111+
fn do_secp256k1_verify_shorter_sig_fails() {
11101112
let api = MockApi::default();
11111113
let (env, mut _instance) = make_instance(api.clone());
11121114

11131115
let hash = hex::decode("5ae8317d34d1e595e3fa7247db80c0af4320cce1116de187f8f7e2e099c0d8d0")
11141116
.unwrap();
11151117
let hash_ptr = write_data(&env, &hash);
1116-
let sig = hex::decode("207082eb2c3dfa0b454e0906051270ba4074ac93760ba9e7110cd9471475111151eb0dbbc9920e72146fb564f99d039802bf6ef2561446eb126ef364d21ee9c4").unwrap();
1118+
let mut sig = hex::decode("207082eb2c3dfa0b454e0906051270ba4074ac93760ba9e7110cd9471475111151eb0dbbc9920e72146fb564f99d039802bf6ef2561446eb126ef364d21ee9c4").unwrap();
1119+
// reduce / break sig
1120+
sig.pop();
11171121
let sig_ptr = write_data(&env, &sig);
1118-
let mut pubkey = hex::decode("04051c1ee2190ecfb174bfe4f90763f2b4ff7517b70a2aec1876ebcfd644c4633fb03f3cfbd94b1f376e34592d9d41ccaf640bb751b00a1fadeb0c01157769eb73").unwrap();
1119-
// alter pubkey
1120-
pubkey[0] ^= 0x01;
1122+
let pubkey = hex::decode("04051c1ee2190ecfb174bfe4f90763f2b4ff7517b70a2aec1876ebcfd644c4633fb03f3cfbd94b1f376e34592d9d41ccaf640bb751b00a1fadeb0c01157769eb73").unwrap();
11211123
let pubkey_ptr = write_data(&env, &pubkey);
11221124

11231125
let result = do_secp256k1_verify::<MA, MS, MQ>(&env, hash_ptr, sig_ptr, pubkey_ptr);
11241126
match result.unwrap_err() {
1125-
VmError::CryptoErr { source, .. } => match source {
1126-
CryptoError::GenericErr { msg, .. } => {
1127-
assert_eq!(msg, "signature error");
1128-
}
1129-
err => panic!("Incorrect crypto error returned: {:?}", err),
1130-
},
1131-
err => panic!("Incorrect error returned: {:?}", err),
1127+
VmError::CryptoErr {
1128+
source: CryptoError::GenericErr { msg, .. },
1129+
..
1130+
} => assert_eq!(msg, "signature error"),
1131+
e => panic!("Unexpected error: {:?}", e),
11321132
}
11331133
}
11341134

11351135
#[test]
1136-
fn do_secp256k1_verify_wrong_data_fails() {
1136+
fn do_secp256k1_verify_wrong_pubkey_fails() {
11371137
let api = MockApi::default();
11381138
let (env, mut _instance) = make_instance(api.clone());
11391139

1140-
let hash = vec![0x22; MAX_LENGTH_MESSAGE_HASH];
1140+
let hash = hex::decode("5ae8317d34d1e595e3fa7247db80c0af4320cce1116de187f8f7e2e099c0d8d0")
1141+
.unwrap();
11411142
let hash_ptr = write_data(&env, &hash);
1142-
let sig = vec![0x22; MAX_LENGTH_SIGNATURE];
1143+
let sig = hex::decode("207082eb2c3dfa0b454e0906051270ba4074ac93760ba9e7110cd9471475111151eb0dbbc9920e72146fb564f99d039802bf6ef2561446eb126ef364d21ee9c4").unwrap();
11431144
let sig_ptr = write_data(&env, &sig);
1144-
let pubkey = vec![0x22; MAX_LENGTH_PUBKEY];
1145+
let mut pubkey = hex::decode("04051c1ee2190ecfb174bfe4f90763f2b4ff7517b70a2aec1876ebcfd644c4633fb03f3cfbd94b1f376e34592d9d41ccaf640bb751b00a1fadeb0c01157769eb73").unwrap();
1146+
// alter pubkey
1147+
pubkey[0] ^= 0x01;
11451148
let pubkey_ptr = write_data(&env, &pubkey);
11461149

11471150
let result = do_secp256k1_verify::<MA, MS, MQ>(&env, hash_ptr, sig_ptr, pubkey_ptr);
11481151
match result.unwrap_err() {
1149-
VmError::CryptoErr { source, .. } => match source {
1150-
CryptoError::GenericErr { msg, .. } => {
1151-
assert_eq!(msg, "signature error");
1152-
}
1153-
err => panic!("Incorrect crypto error returned: {:?}", err),
1154-
},
1152+
VmError::CryptoErr {
1153+
source: CryptoError::GenericErr { msg, .. },
1154+
..
1155+
} => assert_eq!(msg, "signature error"),
11551156
err => panic!("Incorrect error returned: {:?}", err),
11561157
}
11571158
}
11581159

11591160
#[test]
1160-
fn do_secp256k1_verify_wrong_pubkey_length_fails() {
1161+
fn do_secp256k1_verify_larger_pubkey_fails() {
11611162
let api = MockApi::default();
11621163
let (env, mut _instance) = make_instance(api.clone());
11631164

@@ -1181,6 +1182,53 @@ mod tests {
11811182
}
11821183
}
11831184

1185+
#[test]
1186+
fn do_secp256k1_verify_shorter_pubkey_fails() {
1187+
let api = MockApi::default();
1188+
let (env, mut _instance) = make_instance(api.clone());
1189+
1190+
let hash = hex::decode("5ae8317d34d1e595e3fa7247db80c0af4320cce1116de187f8f7e2e099c0d8d0")
1191+
.unwrap();
1192+
let hash_ptr = write_data(&env, &hash);
1193+
let sig = hex::decode("207082eb2c3dfa0b454e0906051270ba4074ac93760ba9e7110cd9471475111151eb0dbbc9920e72146fb564f99d039802bf6ef2561446eb126ef364d21ee9c4").unwrap();
1194+
let sig_ptr = write_data(&env, &sig);
1195+
let mut pubkey = hex::decode("04051c1ee2190ecfb174bfe4f90763f2b4ff7517b70a2aec1876ebcfd644c4633fb03f3cfbd94b1f376e34592d9d41ccaf640bb751b00a1fadeb0c01157769eb73").unwrap();
1196+
// reduce / break pubkey
1197+
pubkey.pop();
1198+
let pubkey_ptr = write_data(&env, &pubkey);
1199+
1200+
let result = do_secp256k1_verify::<MA, MS, MQ>(&env, hash_ptr, sig_ptr, pubkey_ptr);
1201+
match result.unwrap_err() {
1202+
VmError::CryptoErr {
1203+
source: CryptoError::GenericErr { msg, .. },
1204+
..
1205+
} => assert_eq!(msg, "signature error"),
1206+
err => panic!("Incorrect error returned: {:?}", err),
1207+
}
1208+
}
1209+
1210+
#[test]
1211+
fn do_secp256k1_verify_wrong_data_fails() {
1212+
let api = MockApi::default();
1213+
let (env, mut _instance) = make_instance(api.clone());
1214+
1215+
let hash = vec![0x22; MAX_LENGTH_MESSAGE_HASH];
1216+
let hash_ptr = write_data(&env, &hash);
1217+
let sig = vec![0x22; MAX_LENGTH_SIGNATURE];
1218+
let sig_ptr = write_data(&env, &sig);
1219+
let pubkey = vec![0x22; MAX_LENGTH_PUBKEY];
1220+
let pubkey_ptr = write_data(&env, &pubkey);
1221+
1222+
let result = do_secp256k1_verify::<MA, MS, MQ>(&env, hash_ptr, sig_ptr, pubkey_ptr);
1223+
match result.unwrap_err() {
1224+
VmError::CryptoErr {
1225+
source: CryptoError::GenericErr { msg, .. },
1226+
..
1227+
} => assert_eq!(msg, "signature error"),
1228+
err => panic!("Incorrect error returned: {:?}", err),
1229+
}
1230+
}
1231+
11841232
#[test]
11851233
fn do_query_chain_works() {
11861234
let api = MockApi::default();

0 commit comments

Comments
 (0)