1use crate::evm_verify;
2evm_verify!("\x19Ethereum Signed Message:\n{}", EthMessageVerify);
3
4#[cfg(test)]
5mod tests {
6 use super::*;
7 use crate::secp256k1::Privkey;
8
9 #[test]
10 fn verify_message_signature_should_pass() {
11 let message =
12 "subject: wallet registration\nchain: 0x3c\nnetwork: 0x1\npub_key: 0x00\nversion: 0x0";
13 let private_str = "74deb7099cbe445d6917da6b5c3a43f03d6eafd3d760ed85d90933771369c0b9";
14 let signature: [u8; 65] = hex::decode("3439d377854015ece4989a6d9e93fe05b37f9f83f7a85dc4a1637d8aa2ec9cfa597a49861eaff6e6acface80889c6fa3510687d861f5a945d30307075d1608e31b")
15 .unwrap()
16 .try_into()
17 .unwrap();
18 let pub_key = Privkey::from_slice(&hex::decode(private_str).unwrap())
19 .pubkey()
20 .unwrap();
21
22 let res = EthMessageVerify::verify(message.as_bytes(), &signature, None::<Vec<u8>>);
23 assert!(res.is_ok());
24 assert_eq!(res.unwrap(), pub_key.serialize(true));
25 }
26
27 #[test]
28 fn verify_wrong_message_signature_should_pass() {
29 let message =
30 "subject: wallet registration\nchain: 0x3c\nnetwork: 0x1\npub_key: 0x00\nversion: 0x0";
31 let wrong_message = message.replace("wallet", "wallets");
32 let private_str = "74deb7099cbe445d6917da6b5c3a43f03d6eafd3d760ed85d90933771369c0b9";
33 let signature: [u8; 65] = hex::decode("3439d377854015ece4989a6d9e93fe05b37f9f83f7a85dc4a1637d8aa2ec9cfa597a49861eaff6e6acface80889c6fa3510687d861f5a945d30307075d1608e31b")
34 .unwrap()
35 .try_into()
36 .unwrap();
37 let pub_key = Privkey::from_slice(&hex::decode(private_str).unwrap())
38 .pubkey()
39 .unwrap();
40
41 let res = EthMessageVerify::verify(wrong_message.as_bytes(), &signature, None::<Vec<u8>>);
42 assert!(res.is_ok());
43 assert_ne!(res.unwrap(), pub_key.serialize(true));
44 }
45}