Skip to content

Commit 9a945bb

Browse files
authored
feat: add support for blake2b256 and blake2s128 (#44)
Adds support for blake2b256 and blake2s128.
1 parent a8ab622 commit 9a945bb

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

src/hashes.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ pub enum Hash {
2727
Keccak384,
2828
/// Keccak-512 (64-byte hash size)
2929
Keccak512,
30-
/// Encoding unsupported
30+
/// BLAKE2b-256 (32-byte hash size)
3131
Blake2b256,
3232
/// BLAKE2b-512 (64-byte hash size)
3333
Blake2b512,
34-
/// Encoding unsupported
34+
/// BLAKE2s-128 (16-byte hash size)
3535
Blake2s128,
3636
/// BLAKE2s-256 (32-byte hash size)
3737
Blake2s256,

src/lib.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ mod hashes;
1111

1212
use std::convert::TryFrom;
1313

14-
use blake2b_simd::blake2b;
15-
use blake2s_simd::blake2s;
14+
use blake2b_simd::{blake2b, Params as Blake2bVariable};
15+
use blake2s_simd::{blake2s, Params as Blake2sVariable};
1616
use bytes::{BufMut, Bytes, BytesMut};
1717
use sha2::Digest;
1818
use tiny_keccak::Keccak;
@@ -42,6 +42,22 @@ macro_rules! encode {
4242
let hash = $algorithm($input);
4343
$output.copy_from_slice(hash.as_ref());
4444
}};
45+
(blake2_256, $constructor:ident, $input:expr, $output:expr) => {{
46+
let hash = $constructor::new()
47+
.hash_length(32)
48+
.to_state()
49+
.update($input)
50+
.finalize();
51+
$output.copy_from_slice(hash.as_ref());
52+
}};
53+
(blake2_128, $constructor:ident, $input:expr, $output:expr) => {{
54+
let hash = $constructor::new()
55+
.hash_length(16)
56+
.to_state()
57+
.update($input)
58+
.finalize();
59+
$output.copy_from_slice(hash.as_ref());
60+
}};
4561
}
4662

4763
// And another one to keep the matching DRY
@@ -113,7 +129,9 @@ pub fn encode(hash: Hash, input: &[u8]) -> Result<Multihash, EncodeError> {
113129
Keccak384 => tiny::new_keccak384,
114130
Keccak512 => tiny::new_keccak512,
115131
Blake2b512 => blake2::blake2b,
132+
Blake2b256 => blake2_256::Blake2bVariable,
116133
Blake2s256 => blake2::blake2s,
134+
Blake2s128 => blake2_128::Blake2sVariable,
117135
});
118136

119137
Ok(Multihash {

tests/lib.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ fn multihash_encode() {
4141
Keccak512, b"hello world", "1D403ee2b40047b8060f68c67242175660f4174d0af5c01d47168ec20ed619b0b7c42181f40aa1046f39e2ef9efc6910782a998e0013d172458957957fac9405b67d";
4242
Blake2b512, b"hello world", "c0e40240021ced8799296ceca557832ab941a50b4a11f83478cf141f51f933f653ab9fbcc05a037cddbed06e309bf334942c4e58cdf1a46e237911ccd7fcf9787cbc7fd0";
4343
Blake2s256, b"hello world", "e0e402209aec6806794561107e594b1f6a8a6b0c92a0cba9acf5e5e93cca06f781813b0b";
44+
Blake2b256, b"hello world", "a0e40220256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610";
45+
Blake2s128, b"hello world", "d0e4021037deae0226c30da2ab424a7b8ee14e83";
4446
}
4547
}
4648

@@ -75,6 +77,8 @@ fn assert_decode() {
7577
Keccak512, "1D403ee2b40047b8060f68c67242175660f4174d0af5c01d47168ec20ed619b0b7c42181f40aa1046f39e2ef9efc6910782a998e0013d172458957957fac9405b67d";
7678
Blake2b512, "c0e40240021ced8799296ceca557832ab941a50b4a11f83478cf141f51f933f653ab9fbcc05a037cddbed06e309bf334942c4e58cdf1a46e237911ccd7fcf9787cbc7fd0";
7779
Blake2s256, "e0e402209aec6806794561107e594b1f6a8a6b0c92a0cba9acf5e5e93cca06f781813b0b";
80+
Blake2b256, "a0e40220256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610";
81+
Blake2s128, "d0e4021037deae0226c30da2ab424a7b8ee14e83";
7882
}
7983
}
8084

@@ -209,6 +213,16 @@ fn multihash_methods() {
209213
"e0e40220",
210214
"9aec6806794561107e594b1f6a8a6b0c92a0cba9acf5e5e93cca06f781813b0b",
211215
);
216+
test_methods(
217+
Hash::Blake2b256,
218+
"a0e40220",
219+
"256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610",
220+
);
221+
test_methods(
222+
Hash::Blake2s128,
223+
"d0e40210",
224+
"37deae0226c30da2ab424a7b8ee14e83",
225+
);
212226
}
213227

214228
#[test]

0 commit comments

Comments
 (0)