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// }