From 41e9719d6be4da12b68f4741f3c9c6c9d2c7d7c6 Mon Sep 17 00:00:00 2001 From: Alex Tibbles Date: Mon, 21 Feb 2022 16:51:00 -0500 Subject: [PATCH 1/6] upgrade to RustCrypto Hashes MD5 "MD-5" 0.10.1 --- Cargo.lock | 21 ++++++++++++--------- src/uu/hashsum/Cargo.toml | 2 +- src/uu/hashsum/src/digest.rs | 8 ++++---- src/uu/hashsum/src/hashsum.rs | 2 +- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 12a2c2ffe..869affe8f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -652,11 +652,12 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d6b536309245c849479fba3da410962a43ed8e51c26b729208ec0ac2798d0" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" dependencies = [ "generic-array", + "typenum", ] [[package]] @@ -719,13 +720,12 @@ checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" [[package]] name = "digest" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ "block-buffer", "crypto-common", - "generic-array", "subtle", ] @@ -1128,10 +1128,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] -name = "md5" -version = "0.3.8" +name = "md-5" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79c56d6a0b07f9e19282511c83fc5b086364cbae4ba8c7d5f190c3d9b0425a48" +checksum = "658646b21e0b72f7866c7038ab086d3d5e1cd6271f060fd37defb241949d0582" +dependencies = [ + "digest", +] [[package]] name = "memchr" @@ -2624,7 +2627,7 @@ dependencies = [ "digest", "hex", "libc", - "md5", + "md-5", "memchr 2.4.1", "regex", "regex-syntax", diff --git a/src/uu/hashsum/Cargo.toml b/src/uu/hashsum/Cargo.toml index 49e99c59c..ae4a385a4 100644 --- a/src/uu/hashsum/Cargo.toml +++ b/src/uu/hashsum/Cargo.toml @@ -20,7 +20,7 @@ clap = { version = "3.0", features = ["wrap_help", "cargo"] } hex = "0.4.3" libc = "0.2.42" memchr = "2" -md5 = "0.3.5" +md-5 = "0.10.1" regex = "1.0.1" regex-syntax = "0.6.7" sha1 = "0.10.0" diff --git a/src/uu/hashsum/src/digest.rs b/src/uu/hashsum/src/digest.rs index 719eadcbf..f7cae2047 100644 --- a/src/uu/hashsum/src/digest.rs +++ b/src/uu/hashsum/src/digest.rs @@ -36,17 +36,17 @@ pub trait Digest { } } -impl Digest for md5::Context { +impl Digest for md5::Md5 { fn new() -> Self { - Self::new() + Self::default() } fn input(&mut self, input: &[u8]) { - self.consume(input); + digest::Digest::update(self, input); } fn result(&mut self, out: &mut [u8]) { - out.copy_from_slice(&*self.compute()); + digest::Digest::finalize_into_reset(self, out.into()); } fn reset(&mut self) { diff --git a/src/uu/hashsum/src/hashsum.rs b/src/uu/hashsum/src/hashsum.rs index 46e8ce1b8..d92336702 100644 --- a/src/uu/hashsum/src/hashsum.rs +++ b/src/uu/hashsum/src/hashsum.rs @@ -22,7 +22,7 @@ use self::digest::DigestWriter; use clap::{App, AppSettings, Arg, ArgMatches}; use hex::encode; -use md5::Context as Md5; +use md5::Md5; use regex::Regex; use sha1::Sha1; use sha2::{Sha224, Sha256, Sha384, Sha512}; From 00d3c36e8cf06eda2a3cc8f4b7fba6050c014076 Mon Sep 17 00:00:00 2001 From: Alex Tibbles Date: Mon, 21 Feb 2022 16:55:59 -0500 Subject: [PATCH 2/6] update SHA1, SHA2, SHA3 crates --- Cargo.lock | 12 ++++++------ src/uu/hashsum/Cargo.toml | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 869affe8f..fd064dc76 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1889,9 +1889,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cc229fb94bcb689ffc39bd4ded842f6ff76885efede7c6d1ffb62582878bea" +checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -1900,9 +1900,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99c3bd8169c58782adad9290a9af5939994036b76187f7b4f0e6de91dbbfc0ec" +checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -1911,9 +1911,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f935e31cf406e8c0e96c2815a5516181b7004ae8c5f296293221e9b1e356bd" +checksum = "881bf8156c87b6301fc5ca6b27f11eeb2761224c7081e69b409d5a1951a70c86" dependencies = [ "digest", "keccak", diff --git a/src/uu/hashsum/Cargo.toml b/src/uu/hashsum/Cargo.toml index ae4a385a4..1f8f1b923 100644 --- a/src/uu/hashsum/Cargo.toml +++ b/src/uu/hashsum/Cargo.toml @@ -23,9 +23,9 @@ memchr = "2" md-5 = "0.10.1" regex = "1.0.1" regex-syntax = "0.6.7" -sha1 = "0.10.0" -sha2 = "0.10.1" -sha3 = "0.10.0" +sha1 = "0.10.1" +sha2 = "0.10.2" +sha3 = "0.10.1" blake2b_simd = "0.5.11" blake3 = "1.3.1" uucore = { version=">=0.0.11", package="uucore", path="../../uucore" } From b1c543b4d2abee8bac47e1060942286c1fd148a0 Mon Sep 17 00:00:00 2001 From: Alex Tibbles Date: Mon, 21 Feb 2022 16:58:20 -0500 Subject: [PATCH 3/6] hashsum: re-factor SHA1 implementation into common macro --- src/uu/hashsum/src/digest.rs | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/uu/hashsum/src/digest.rs b/src/uu/hashsum/src/digest.rs index f7cae2047..8cf7f55a0 100644 --- a/src/uu/hashsum/src/digest.rs +++ b/src/uu/hashsum/src/digest.rs @@ -104,28 +104,6 @@ impl Digest for blake3::Hasher { } } -impl Digest for sha1::Sha1 { - fn new() -> Self { - Self::default() - } - - fn input(&mut self, input: &[u8]) { - digest::Digest::update(self, input); - } - - fn result(&mut self, out: &mut [u8]) { - digest::Digest::finalize_into_reset(self, out.into()); - } - - fn reset(&mut self) { - *self = Self::new(); - } - - fn output_bits(&self) -> usize { - 160 - } -} - // Implements the Digest trait for sha2 / sha3 algorithms with fixed output macro_rules! impl_digest_sha { ($type: ty, $size: expr) => { @@ -180,6 +158,7 @@ macro_rules! impl_digest_shake { }; } +impl_digest_sha!(sha1::Sha1, 160); impl_digest_sha!(sha2::Sha224, 224); impl_digest_sha!(sha2::Sha256, 256); impl_digest_sha!(sha2::Sha384, 384); From afd5fea3c8d351ce9abc3eff5006125bd3205e84 Mon Sep 17 00:00:00 2001 From: Alex Tibbles Date: Mon, 21 Feb 2022 17:00:34 -0500 Subject: [PATCH 4/6] hashsum: refactor MD5 to use macro --- src/uu/hashsum/src/digest.rs | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/uu/hashsum/src/digest.rs b/src/uu/hashsum/src/digest.rs index 8cf7f55a0..0dccf03f6 100644 --- a/src/uu/hashsum/src/digest.rs +++ b/src/uu/hashsum/src/digest.rs @@ -36,28 +36,6 @@ pub trait Digest { } } -impl Digest for md5::Md5 { - fn new() -> Self { - Self::default() - } - - fn input(&mut self, input: &[u8]) { - digest::Digest::update(self, input); - } - - fn result(&mut self, out: &mut [u8]) { - digest::Digest::finalize_into_reset(self, out.into()); - } - - fn reset(&mut self) { - *self = Self::new(); - } - - fn output_bits(&self) -> usize { - 128 - } -} - impl Digest for blake2b_simd::State { fn new() -> Self { Self::new() @@ -158,6 +136,7 @@ macro_rules! impl_digest_shake { }; } +impl_digest_sha!(md5::Md5, 128); impl_digest_sha!(sha1::Sha1, 160); impl_digest_sha!(sha2::Sha224, 224); impl_digest_sha!(sha2::Sha256, 256); From 3a0f292510a5f501ac914ab298905d3efcf4a0bb Mon Sep 17 00:00:00 2001 From: Alex Tibbles Date: Mon, 21 Feb 2022 17:04:57 -0500 Subject: [PATCH 5/6] hashsum: refactor macro name --- src/uu/hashsum/src/digest.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/uu/hashsum/src/digest.rs b/src/uu/hashsum/src/digest.rs index 0dccf03f6..ff71ad75d 100644 --- a/src/uu/hashsum/src/digest.rs +++ b/src/uu/hashsum/src/digest.rs @@ -83,7 +83,7 @@ impl Digest for blake3::Hasher { } // Implements the Digest trait for sha2 / sha3 algorithms with fixed output -macro_rules! impl_digest_sha { +macro_rules! impl_digest_rustcryptocommon { ($type: ty, $size: expr) => { impl Digest for $type { fn new() -> Self { @@ -136,17 +136,17 @@ macro_rules! impl_digest_shake { }; } -impl_digest_sha!(md5::Md5, 128); -impl_digest_sha!(sha1::Sha1, 160); -impl_digest_sha!(sha2::Sha224, 224); -impl_digest_sha!(sha2::Sha256, 256); -impl_digest_sha!(sha2::Sha384, 384); -impl_digest_sha!(sha2::Sha512, 512); +impl_digest_rustcryptocommon!(md5::Md5, 128); +impl_digest_rustcryptocommon!(sha1::Sha1, 160); +impl_digest_rustcryptocommon!(sha2::Sha224, 224); +impl_digest_rustcryptocommon!(sha2::Sha256, 256); +impl_digest_rustcryptocommon!(sha2::Sha384, 384); +impl_digest_rustcryptocommon!(sha2::Sha512, 512); -impl_digest_sha!(sha3::Sha3_224, 224); -impl_digest_sha!(sha3::Sha3_256, 256); -impl_digest_sha!(sha3::Sha3_384, 384); -impl_digest_sha!(sha3::Sha3_512, 512); +impl_digest_rustcryptocommon!(sha3::Sha3_224, 224); +impl_digest_rustcryptocommon!(sha3::Sha3_256, 256); +impl_digest_rustcryptocommon!(sha3::Sha3_384, 384); +impl_digest_rustcryptocommon!(sha3::Sha3_512, 512); impl_digest_shake!(sha3::Shake128); impl_digest_shake!(sha3::Shake256); From 163472ff7bd16567ebf2d891f36b75c96f3f7b9b Mon Sep 17 00:00:00 2001 From: Alex Tibbles Date: Mon, 21 Feb 2022 20:43:42 -0500 Subject: [PATCH 6/6] hashsum: pass spell checker --- src/uu/hashsum/src/digest.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/uu/hashsum/src/digest.rs b/src/uu/hashsum/src/digest.rs index ff71ad75d..60275701e 100644 --- a/src/uu/hashsum/src/digest.rs +++ b/src/uu/hashsum/src/digest.rs @@ -83,7 +83,7 @@ impl Digest for blake3::Hasher { } // Implements the Digest trait for sha2 / sha3 algorithms with fixed output -macro_rules! impl_digest_rustcryptocommon { +macro_rules! impl_digest_common { ($type: ty, $size: expr) => { impl Digest for $type { fn new() -> Self { @@ -136,17 +136,17 @@ macro_rules! impl_digest_shake { }; } -impl_digest_rustcryptocommon!(md5::Md5, 128); -impl_digest_rustcryptocommon!(sha1::Sha1, 160); -impl_digest_rustcryptocommon!(sha2::Sha224, 224); -impl_digest_rustcryptocommon!(sha2::Sha256, 256); -impl_digest_rustcryptocommon!(sha2::Sha384, 384); -impl_digest_rustcryptocommon!(sha2::Sha512, 512); +impl_digest_common!(md5::Md5, 128); +impl_digest_common!(sha1::Sha1, 160); +impl_digest_common!(sha2::Sha224, 224); +impl_digest_common!(sha2::Sha256, 256); +impl_digest_common!(sha2::Sha384, 384); +impl_digest_common!(sha2::Sha512, 512); -impl_digest_rustcryptocommon!(sha3::Sha3_224, 224); -impl_digest_rustcryptocommon!(sha3::Sha3_256, 256); -impl_digest_rustcryptocommon!(sha3::Sha3_384, 384); -impl_digest_rustcryptocommon!(sha3::Sha3_512, 512); +impl_digest_common!(sha3::Sha3_224, 224); +impl_digest_common!(sha3::Sha3_256, 256); +impl_digest_common!(sha3::Sha3_384, 384); +impl_digest_common!(sha3::Sha3_512, 512); impl_digest_shake!(sha3::Shake128); impl_digest_shake!(sha3::Shake256);