anychain_core/utilities/
crypto.rs

1use ripemd::Ripemd160;
2use sha2::{Digest, Sha256, Sha512};
3use sha3::Keccak256;
4
5#[inline]
6pub fn sha256(input: &[u8]) -> [u8; 32] {
7    let mut hasher = Sha256::new();
8    hasher.update(input);
9    hasher.finalize().into()
10}
11
12#[inline]
13pub fn sha512(input: &[u8]) -> [u8; 64] {
14    let mut hasher = Sha512::new();
15    hasher.update(input);
16    hasher.finalize().into()
17}
18
19#[inline]
20pub fn keccak256(input: &[u8]) -> [u8; 32] {
21    let mut hasher = Keccak256::new();
22    hasher.update(input);
23    hasher.finalize().into()
24}
25
26/// Hash length of payload for addresses of filecoin.
27// pub const PAYLOAD_HASH_LEN: usize = 20;
28
29/// Returns a 20-byte address hash for given public key
30// #[inline]
31// pub fn blake2b_160(input: &[u8]) -> [u8; 20] {
32//     let digest = blake2b_simd::Params::new()
33//         .hash_length(PAYLOAD_HASH_LEN)
34//         .to_state()
35//         .update(input)
36//         .finalize();
37//
38//     let mut hash = [0u8; 20];
39//     hash.copy_from_slice(digest.as_bytes());
40//     hash
41// }
42//
43// /// Returns a 32-byte hash for given data
44// #[inline]
45// pub fn blake2b_256(ingest: &[u8]) -> [u8; 32] {
46//     let digest = blake2b_simd::Params::new()
47//         .hash_length(32)
48//         .to_state()
49//         .update(ingest)
50//         .finalize();
51//
52//     let mut hash = [0u8; 32];
53//     hash.clone_from_slice(digest.as_bytes());
54//     hash
55// }
56
57pub fn checksum(data: &[u8]) -> Vec<u8> {
58    Sha256::digest(Sha256::digest(data)).to_vec()
59}
60
61pub fn hash160(bytes: &[u8]) -> Vec<u8> {
62    Ripemd160::digest(Sha256::digest(bytes)).to_vec()
63}
64
65// Length of the checksum hash for string encodings.
66// pub const CHECKSUM_HASH_LEN: usize = 4;
67//
68// /// Checksum calculates the 4 byte checksum hash
69// pub fn blake2b_checksum(ingest: &[u8]) -> Vec<u8> {
70//     blake2b_simd::Params::new()
71//         .hash_length(CHECKSUM_HASH_LEN)
72//         .to_state()
73//         .update(ingest)
74//         .finalize()
75//         .as_bytes()
76//         .to_vec()
77// }