use ethereum_types::H256;
use sha3::{Digest, Keccak256};
const PREFIX: &str = "\x19Ethereum Signed Message:\n";
pub fn hash_message<S>(message: S) -> H256
where
S: AsRef<[u8]>,
{
let message = message.as_ref();
let mut eth_message = format!("{}{}", PREFIX, message.len()).into_bytes();
eth_message.extend_from_slice(message);
keccak256(ð_message).into()
}
pub fn keccak256<S>(bytes: S) -> [u8; 32]
where
S: AsRef<[u8]>,
{
let hash = Keccak256::digest(bytes.as_ref());
let hash: [u8; 32] = hash
.as_slice()
.try_into()
.expect("hash is not the correct length");
hash
}