From 41a4c3c43ef82291e301e4da1d26159ba6db69f1 Mon Sep 17 00:00:00 2001 From: oech3 <> Date: Sun, 4 Jan 2026 02:26:25 +0900 Subject: [PATCH] cksum: Back support for -a blake3 and -a shake* --- src/uu/cksum/src/cksum.rs | 9 +++++++-- src/uu/hashsum/locales/en-US.ftl | 3 --- src/uu/hashsum/locales/fr-FR.ftl | 3 --- src/uu/hashsum/src/hashsum.rs | 12 ------------ src/uucore/src/lib/features/checksum/mod.rs | 7 ++++++- tests/by-util/test_hashsum.rs | 3 --- 6 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/uu/cksum/src/cksum.rs b/src/uu/cksum/src/cksum.rs index 3d814ae6f24..6625934c2e2 100644 --- a/src/uu/cksum/src/cksum.rs +++ b/src/uu/cksum/src/cksum.rs @@ -88,9 +88,14 @@ fn maybe_sanitize_length( sanitize_sha2_sha3_length_str(algo, s_len).map(Some) } - // For BLAKE2b, if a length is provided, validate it. + // For BLAKE2b and SHAKE, if a length is provided, validate it. (Some(AlgoKind::Blake2b), Some(len)) => calculate_blake2b_length_str(len), - + (Some(AlgoKind::Shake128 | AlgoKind::Shake256), Some(s_len)) => { + let len = s_len + .parse::() + .map_err(|_| ChecksumError::InvalidLength(s_len.to_string()))?; + Ok(Some(len)) + } // For any other provided algorithm, check if length is 0. // Otherwise, this is an error. (_, Some(len)) if len.parse::() == Ok(0_u32) => Ok(None), diff --git a/src/uu/hashsum/locales/en-US.ftl b/src/uu/hashsum/locales/en-US.ftl index c0a6a556748..b24da93ec59 100644 --- a/src/uu/hashsum/locales/en-US.ftl +++ b/src/uu/hashsum/locales/en-US.ftl @@ -30,10 +30,7 @@ hashsum-help-sha3-224 = work with SHA3-224 hashsum-help-sha3-256 = work with SHA3-256 hashsum-help-sha3-384 = work with SHA3-384 hashsum-help-sha3-512 = work with SHA3-512 -hashsum-help-shake128 = work with SHAKE128 using BITS for the output size -hashsum-help-shake256 = work with SHAKE256 using BITS for the output size hashsum-help-b2sum = work with BLAKE2 -hashsum-help-b3sum = work with BLAKE3 # Error messages hashsum-error-failed-to-read-input = failed to read input diff --git a/src/uu/hashsum/locales/fr-FR.ftl b/src/uu/hashsum/locales/fr-FR.ftl index 26c61fec9d3..f175bf0f6c4 100644 --- a/src/uu/hashsum/locales/fr-FR.ftl +++ b/src/uu/hashsum/locales/fr-FR.ftl @@ -28,10 +28,7 @@ hashsum-help-sha3-224 = travailler avec SHA3-224 hashsum-help-sha3-256 = travailler avec SHA3-256 hashsum-help-sha3-384 = travailler avec SHA3-384 hashsum-help-sha3-512 = travailler avec SHA3-512 -hashsum-help-shake128 = travailler avec SHAKE128 en utilisant BITS pour la taille de sortie -hashsum-help-shake256 = travailler avec SHAKE256 en utilisant BITS pour la taille de sortie hashsum-help-b2sum = travailler avec BLAKE2 -hashsum-help-b3sum = travailler avec BLAKE3 # Messages d'erreur hashsum-error-failed-to-read-input = échec de la lecture de l'entrée diff --git a/src/uu/hashsum/src/hashsum.rs b/src/uu/hashsum/src/hashsum.rs index eea434d9477..ea14af025f3 100644 --- a/src/uu/hashsum/src/hashsum.rs +++ b/src/uu/hashsum/src/hashsum.rs @@ -72,9 +72,6 @@ fn create_algorithm_from_flags(matches: &ArgMatches) -> UResult<(AlgoKind, Optio if matches.get_flag("b2sum") { set_or_err((AlgoKind::Blake2b, None))?; } - if matches.get_flag("b3sum") { - set_or_err((AlgoKind::Blake3, None))?; - } if matches.get_flag("sha3") { match matches.get_one::(options::LENGTH) { Some(len) => set_or_err(( @@ -96,12 +93,6 @@ fn create_algorithm_from_flags(matches: &ArgMatches) -> UResult<(AlgoKind, Optio if matches.get_flag("sha3-512") { set_or_err((AlgoKind::Sha3, Some(512)))?; } - if matches.get_flag("shake128") { - set_or_err((AlgoKind::Shake128, Some(128)))?; - } - if matches.get_flag("shake256") { - set_or_err((AlgoKind::Shake256, Some(256)))?; - } if alg.is_none() { return Err(ChecksumError::NeedAlgorithmToHash.into()); @@ -374,10 +365,7 @@ pub fn uu_app_custom() -> Command { ("sha3-256", translate!("hashsum-help-sha3-256")), ("sha3-384", translate!("hashsum-help-sha3-384")), ("sha3-512", translate!("hashsum-help-sha3-512")), - ("shake128", translate!("hashsum-help-shake128")), - ("shake256", translate!("hashsum-help-shake256")), ("b2sum", translate!("hashsum-help-b2sum")), - ("b3sum", translate!("hashsum-help-b3sum")), ]; for (name, desc) in algorithms { diff --git a/src/uucore/src/lib/features/checksum/mod.rs b/src/uucore/src/lib/features/checksum/mod.rs index 2f3d28b4121..59805ef1257 100644 --- a/src/uucore/src/lib/features/checksum/mod.rs +++ b/src/uucore/src/lib/features/checksum/mod.rs @@ -86,7 +86,7 @@ pub enum AlgoKind { Sha384, Sha512, - // Not available in cksum + // Extension Shake128, Shake256, Blake3, @@ -114,6 +114,11 @@ impl AlgoKind { ALGORITHM_OPTIONS_SHA256 => Sha256, ALGORITHM_OPTIONS_SHA384 => Sha384, ALGORITHM_OPTIONS_SHA512 => Sha512, + + // Extension + ALGORITHM_OPTIONS_BLAKE3 => Blake3, + ALGORITHM_OPTIONS_SHAKE128 => Shake128, + ALGORITHM_OPTIONS_SHAKE256 => Shake256, _ => return Err(ChecksumError::UnknownAlgorithm(algo.as_ref().to_string()).into()), }) } diff --git a/tests/by-util/test_hashsum.rs b/tests/by-util/test_hashsum.rs index 891cb9d4dfd..ce488af0079 100644 --- a/tests/by-util/test_hashsum.rs +++ b/tests/by-util/test_hashsum.rs @@ -203,9 +203,6 @@ macro_rules! test_digest_with_len { test_digest! {md5, md5} test_digest! {sha1, sha1} -test_digest! {b3sum, b3sum} -test_digest! {shake128, shake128} -test_digest! {shake256, shake256} test_digest_with_len! {sha224, sha224, 224} test_digest_with_len! {sha256, sha256, 256}