Skip to content

Commit 1375fcc

Browse files
koushirovmx
authored andcommitted
feat: update digest, sha-1, sha2 and sha3 to v0.9
Signed-off-by: koushiro <koushiro.cqx@gmail.com>
1 parent dc0e0f9 commit 1375fcc

File tree

3 files changed

+32
-27
lines changed

3 files changed

+32
-27
lines changed

Cargo.toml

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ edition = "2018"
1313
[dependencies]
1414
blake2b_simd = { version = "0.5.9", default-features = false }
1515
blake2s_simd = { version = "0.5.9", default-features = false }
16-
blake3 = "0.3.5"
17-
digest = { version = "0.8", default-features = false }
18-
sha-1 = { version = "0.8", default-features = false }
19-
sha2 = { version = "0.8", default-features = false }
20-
sha3 = { version = "0.8", default-features = false }
16+
blake3 = { version = "0.3.5", default-features = false }
17+
digest = { version = "0.9", default-features = false }
18+
sha-1 = { version = "0.9", default-features = false }
19+
sha2 = { version = "0.9", default-features = false }
20+
sha3 = { version = "0.9", default-features = false }
2121
unsigned-varint = "0.4"
2222
quickcheck = { version = "0.9.2", optional = true }
2323
rand = { version = "0.7.3", optional = true }

src/digests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ pub trait MultihashDigest<T: TryFrom<u64>> {
435435
/// Panics if the digest length is bigger than 2^32. This only happens for identity hasing.
436436
fn digest(&self, data: &[u8]) -> MultihashGeneric<T>;
437437

438-
/// Digest input data.
438+
/// Digest data, updating the internal state.
439439
///
440440
/// This method can be called repeatedly for use with streaming messages.
441441
///

src/hashes.rs

+26-21
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use std::convert::TryFrom;
22

33
use blake2b_simd::{Params as Blake2bParams, State as Blake2b};
44
use blake2s_simd::{Params as Blake2sParams, State as Blake2s};
5-
use digest::Digest;
65

76
use crate::digests::{wrap, Multihash, MultihashDigest, Multihasher};
87
use crate::errors::DecodeError;
@@ -81,7 +80,7 @@ macro_rules! derive_digest {
8180
/// Hash some input and return the Multihash digest.
8281
#[inline]
8382
pub fn digest(data: &[u8]) -> Multihash {
84-
let digest = <$type>::digest(&data);
83+
let digest = <$type as digest::Digest>::digest(&data);
8584
wrap(Self::CODE, &digest)
8685
}
8786
}
@@ -103,19 +102,19 @@ macro_rules! derive_digest {
103102
}
104103
#[inline]
105104
fn input(&mut self, data: &[u8]) {
106-
self.0.input(data)
105+
<$type as digest::Digest>::update(&mut self.0, data)
107106
}
108107
#[inline]
109108
fn result(self) -> Multihash {
110-
wrap(Self::CODE, self.0.result().as_slice())
109+
wrap(Self::CODE, <$type as digest::Digest>::finalize(self.0).as_slice())
111110
}
112111
#[inline]
113112
fn result_reset(&mut self) -> Multihash {
114-
wrap(Self::CODE, self.0.result_reset().as_slice())
113+
wrap(Self::CODE, <$type as digest::Digest>::finalize_reset(&mut self.0).as_slice())
115114
}
116115
#[inline]
117116
fn reset(&mut self) {
118-
self.0.reset()
117+
<$type as digest::Digest>::reset(&mut self.0)
119118
}
120119
}
121120
impl ::std::io::Write for $name {
@@ -212,7 +211,7 @@ macro_rules! derive_digest {
212211
)*) => {
213212
$(
214213
#[$doc]
215-
#[derive(Clone, Debug)]
214+
#[derive(Clone, Debug, Default)]
216215
pub struct $name($type);
217216
impl $name {
218217
#[doc = $code_doc]
@@ -230,11 +229,6 @@ macro_rules! derive_digest {
230229
Self::digest(data)
231230
}
232231
}
233-
impl Default for $name {
234-
fn default() -> Self {
235-
$name(blake3::Hasher::new())
236-
}
237-
}
238232
impl MultihashDigest<Code> for $name {
239233
#[inline]
240234
fn code(&self) -> Code {
@@ -321,6 +315,17 @@ impl_code! {
321315
/// The Identity hasher.
322316
#[derive(Clone, Debug, Default)]
323317
pub struct Identity(Vec<u8>);
318+
impl Identity {
319+
/// The code of the Identity hasher, 0x00.
320+
pub const CODE: Code = Code::Identity;
321+
/// Hash some input and return the raw binary digest.
322+
pub fn digest(data: &[u8]) -> Multihash {
323+
if (data.len() as u64) >= u64::from(std::u32::MAX) {
324+
panic!("Input data for identity hash is too large, it needs to be less than 2^32.")
325+
}
326+
wrap(Self::CODE, data)
327+
}
328+
}
324329
impl Multihasher<Code> for Identity {
325330
const CODE: Code = Code::Identity;
326331
#[inline]
@@ -359,15 +364,15 @@ impl MultihashDigest<Code> for Identity {
359364
self.0.clear()
360365
}
361366
}
362-
impl Identity {
363-
/// The code of the Identity hasher, 0x00.
364-
pub const CODE: Code = Code::Identity;
365-
/// Hash some input and return the raw binary digest.
366-
pub fn digest(data: &[u8]) -> Multihash {
367-
if (data.len() as u64) >= u64::from(std::u32::MAX) {
368-
panic!("Input data for identity hash is too large, it needs to be less than 2^32.")
369-
}
370-
wrap(Self::CODE, data)
367+
impl ::std::io::Write for Identity {
368+
#[inline]
369+
fn write(&mut self, buf: &[u8]) -> ::std::io::Result<usize> {
370+
<Identity as MultihashDigest<Code>>::input(self, buf);
371+
Ok(buf.len())
372+
}
373+
#[inline]
374+
fn flush(&mut self) -> ::std::io::Result<()> {
375+
Ok(())
371376
}
372377
}
373378

0 commit comments

Comments
 (0)