11use {
22 super :: CacaoError ,
3- alloy_primitives:: { Address , FixedBytes } ,
3+ alloy_primitives:: { Address , Signature } ,
44} ;
55
66pub const EIP191 : & str = "eip191" ;
77
8- pub fn eip191_bytes ( message : & str ) -> Vec < u8 > {
9- format ! (
10- "\u{0019} Ethereum Signed Message:\n {}{}" ,
11- message. as_bytes( ) . len( ) ,
12- message
13- )
14- . into ( )
15- }
16-
178pub fn verify_eip191 (
189 signature : & [ u8 ] ,
1910 address : & Address ,
20- hash : FixedBytes < 32 > ,
11+ message : & [ u8 ] ,
2112) -> Result < ( ) , CacaoError > {
22- use k256:: ecdsa:: { RecoveryId , Signature as Sig , VerifyingKey } ;
23-
24- let sig = Sig :: try_from ( signature. get ( ..64 ) . ok_or ( CacaoError :: Verification ) ?)
25- . map_err ( |_| CacaoError :: Verification ) ?;
26- let recovery_id = RecoveryId :: try_from ( signature. get ( 64 ) . ok_or ( CacaoError :: Verification ) ? % 27 )
13+ let signature = Signature :: try_from ( signature) . map_err ( |_| CacaoError :: Verification ) ?;
14+ let add = signature
15+ . recover_address_from_msg ( message)
2716 . map_err ( |_| CacaoError :: Verification ) ?;
2817
29- let recovered_key = VerifyingKey :: recover_from_prehash ( hash. as_slice ( ) , & sig, recovery_id)
30- . map_err ( |_| CacaoError :: Verification ) ?;
31-
32- let add = Address :: from_public_key ( & recovered_key) ;
33-
3418 if & add == address {
3519 Ok ( ( ) )
3620 } else {
@@ -61,7 +45,7 @@ mod tests {
6145 let message = "xxx" ;
6246 let signature = sign_message ( message, & private_key) ;
6347 let address = Address :: from_private_key ( & private_key) ;
64- verify_eip191 ( & signature, & address, eip191_hash_message ( message) ) . unwrap ( ) ;
48+ verify_eip191 ( & signature, & address, message. as_bytes ( ) ) . unwrap ( ) ;
6549 }
6650
6751 #[ test]
@@ -71,7 +55,7 @@ mod tests {
7155 let mut signature = sign_message ( message, & private_key) ;
7256 * signature. first_mut ( ) . unwrap ( ) = signature. first ( ) . unwrap ( ) . wrapping_add ( 1 ) ;
7357 let address = Address :: from_private_key ( & private_key) ;
74- assert ! ( verify_eip191( & signature, & address, eip191_hash_message ( message) ) . is_err( ) ) ;
58+ assert ! ( verify_eip191( & signature, & address, message. as_bytes ( ) ) . is_err( ) ) ;
7559 }
7660
7761 #[ test]
@@ -81,7 +65,7 @@ mod tests {
8165 let signature = sign_message ( message, & private_key) ;
8266 let mut address = Address :: from_private_key ( & private_key) ;
8367 * address. 0 . first_mut ( ) . unwrap ( ) = address. 0 . first ( ) . unwrap ( ) . wrapping_add ( 1 ) ;
84- assert ! ( verify_eip191( & signature, & address, eip191_hash_message ( message) ) . is_err( ) ) ;
68+ assert ! ( verify_eip191( & signature, & address, message. as_bytes ( ) ) . is_err( ) ) ;
8569 }
8670
8771 #[ test]
@@ -91,6 +75,6 @@ mod tests {
9175 let signature = sign_message ( message, & private_key) ;
9276 let address = Address :: from_private_key ( & private_key) ;
9377 let message2 = "yyy" ;
94- assert ! ( verify_eip191( & signature, & address, eip191_hash_message ( message2) ) . is_err( ) ) ;
78+ assert ! ( verify_eip191( & signature, & address, message2. as_bytes ( ) ) . is_err( ) ) ;
9579 }
9680}
0 commit comments