dpt 0.3.1

Ethereum's Distributed Peer Table implementation in Rust.
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)
}