use sha3::{Digest, Keccak256};
use secp256k1::{self, PublicKey};
use bigint::{H256, H512};
pub fn keccak256(data: &[u8]) -> H256 {
let mut hasher = Keccak256::new();
hasher.input(data);
let out = hasher.result();
H256::from(out.as_ref())
}
pub fn pk2id(pk: &PublicKey) -> H512 {
let v = pk.serialize();
debug_assert!(v.len() == 65);
H512::from(&v[1..])
}
pub fn id2pk(id: H512) -> Result<PublicKey, secp256k1::Error> {
let s: [u8; 64] = id.into();
let mut sp = [0u8; 65];
sp[0] = 0x04;
for i in 0..64 {
sp[i + 1] = s[i];
}
PublicKey::parse(&sp)
}