ex3_crypto/verify/
eth.rs

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}