Skip to content

Commit 6e3e044

Browse files
committed
cksum: Add SHA3/SHAKE support and --debug flag
Fixes #8933 - Add --debug flag (no-op matching GNU behavior) - Enable SHA3 with --length (224, 256, 384, 512) - Enable SHAKE128/SHAKE256 with --length - Fix error messages to say '--length required' in cksum context - Update help text to document SHA3/SHAKE algorithms - Add French translations Changes: - Relaxed --length restriction to allow sha3/shake algorithms - Added error message remapping for correct context - Updated localization files (en-US, fr-FR)
1 parent 85a7812 commit 6e3e044

3 files changed

Lines changed: 37 additions & 4 deletions

File tree

src/uu/cksum/locales/en-US.ftl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ cksum-after-help = DIGEST determines the digest algorithm and default output for
1414
- sha512: (equivalent to sha512sum)
1515
- blake2b: (equivalent to b2sum)
1616
- sm3: (only available through cksum)
17+
- sha3: (requires --length: 224, 256, 384, or 512)
18+
- shake128: (requires --length)
19+
- shake256: (requires --length)
1720
1821
# Help messages
1922
cksum-help-algorithm = select the digest type to use. See DIGEST below
@@ -29,6 +32,7 @@ cksum-help-status = don't output anything, status code shows success
2932
cksum-help-quiet = don't print OK for each successfully verified file
3033
cksum-help-ignore-missing = don't fail or report status for missing files
3134
cksum-help-zero = end each output line with NUL, not newline, and disable file name escaping
35+
cksum-help-debug = indicate which implementation used
3236
3337
# Error messages
3438
cksum-error-is-directory = { $file }: Is a directory

src/uu/cksum/locales/fr-FR.ftl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ cksum-after-help = DIGEST détermine l'algorithme de condensé et le format de s
1212
- sha256 : (équivalent à sha256sum)
1313
- sha384 : (équivalent à sha384sum)
1414
- sha512 : (équivalent à sha512sum)
15-
- blake2b : (équivalent à b2sum)
16-
- sm3 : (disponible uniquement via cksum)
15+
- blake2b: (équivalent à b2sum)
16+
- sm3: (uniquement disponible via cksum)
17+
- sha3: (nécessite --length: 224, 256, 384, ou 512)
18+
- shake128: (nécessite --length)
19+
- shake256: (nécessite --length)
1720
1821
# Messages d'aide
1922
cksum-help-algorithm = sélectionner le type de condensé à utiliser. Voir DIGEST ci-dessous
@@ -28,7 +31,8 @@ cksum-help-warn = avertir des lignes de somme de contrôle mal formatées
2831
cksum-help-status = ne rien afficher, le code de statut indique le succès
2932
cksum-help-quiet = ne pas afficher OK pour chaque fichier vérifié avec succès
3033
cksum-help-ignore-missing = ne pas échouer ou signaler le statut pour les fichiers manquants
31-
cksum-help-zero = terminer chaque ligne de sortie avec NUL, pas un saut de ligne, et désactiver l'échappement des noms de fichiers
34+
cksum-help-zero = terminer chaque ligne de sortie par NUL, et non par newline, et désactiver l'échappement des noms de fichiers
35+
cksum-help-debug = indiquer quelle implémentation est utilisée
3236
3337
# Messages d'erreur
3438
cksum-error-is-directory = { $file } : Est un répertoire

src/uu/cksum/src/cksum.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ mod options {
201201
pub const IGNORE_MISSING: &str = "ignore-missing";
202202
pub const QUIET: &str = "quiet";
203203
pub const ZERO: &str = "zero";
204+
pub const DEBUG: &str = "debug";
204205
}
205206

206207
/***
@@ -256,6 +257,12 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
256257
Some(length) => {
257258
if algo_name == ALGORITHM_OPTIONS_BLAKE2B {
258259
calculate_blake2b_length(*length)?
260+
} else if algo_name.starts_with("sha3")
261+
|| algo_name == "shake128"
262+
|| algo_name == "shake256"
263+
{
264+
// SHA3 and SHAKE algorithms require --length in bits
265+
Some(*length)
259266
} else {
260267
return Err(ChecksumError::LengthOnlyForBlake2b.into());
261268
}
@@ -308,7 +315,19 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
308315

309316
let (tag, asterisk) = handle_tag_text_binary_flags(std::env::args_os())?;
310317

311-
let algo = detect_algo(algo_name, length)?;
318+
let algo = detect_algo(algo_name, length).map_err(|e| {
319+
// Remap error messages for cksum context (uses --length, not --bits)
320+
let err_msg = e.to_string();
321+
if err_msg.contains("--bits required for SHA3") {
322+
USimpleError::new(1, "--length required for SHA3")
323+
} else if err_msg.contains("--bits required for SHAKE128") {
324+
USimpleError::new(1, "--length required for SHAKE128")
325+
} else if err_msg.contains("--bits required for SHAKE256") {
326+
USimpleError::new(1, "--length required for SHAKE256")
327+
} else {
328+
e
329+
}
330+
})?;
312331
let line_ending = LineEnding::from_zero_flag(matches.get_flag(options::ZERO));
313332

314333
let output_format = if matches.get_flag(options::RAW) {
@@ -462,5 +481,11 @@ pub fn uu_app() -> Command {
462481
.help(translate!("cksum-help-zero"))
463482
.action(ArgAction::SetTrue),
464483
)
484+
.arg(
485+
Arg::new(options::DEBUG)
486+
.long(options::DEBUG)
487+
.help(translate!("cksum-help-debug"))
488+
.action(ArgAction::SetTrue),
489+
)
465490
.after_help(translate!("cksum-after-help"))
466491
}

0 commit comments

Comments
 (0)