From ea47a7770562c745f25c4a75b64f2a96413135b7 Mon Sep 17 00:00:00 2001 From: Lee Dogeon Date: Sat, 14 Feb 2026 19:50:13 +0900 Subject: [PATCH 1/2] Include SHAKE algorithm names in HASHXOF repr --- Lib/test/test_hashlib.py | 1 - crates/stdlib/src/hashlib.rs | 11 ++++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index 9c4c1c7b0e8..5c38813f3f5 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -557,7 +557,6 @@ def test_blocksize_and_name(self): self.check_blocksize_name('sha384', 128, 48) self.check_blocksize_name('sha512', 128, 64) - @unittest.expectedFailure # TODO: RUSTPYTHON; AssertionError: 'shake' not found in '<_hashlib.hashxof object at 0xc68a2c800>' @requires_sha3 def test_blocksize_name_sha3(self): self.check_blocksize_name('sha3_224', 144, 28) diff --git a/crates/stdlib/src/hashlib.rs b/crates/stdlib/src/hashlib.rs index 5a2a55b93a7..5a869a4b451 100644 --- a/crates/stdlib/src/hashlib.rs +++ b/crates/stdlib/src/hashlib.rs @@ -371,7 +371,7 @@ pub mod _hashlib { } } - #[pyclass(flags(IMMUTABLETYPE))] + #[pyclass(with(Representable), flags(IMMUTABLETYPE))] impl PyHasherXof { fn new(name: &str, d: HashXofWrapper) -> Self { Self { @@ -447,6 +447,15 @@ pub mod _hashlib { } } + impl Representable for PyHasherXof { + fn repr_str(zelf: &Py, _vm: &VirtualMachine) -> PyResult { + Ok(format!( + "<{} _hashlib.HASHXOF object @ {:#x}>", + zelf.name, zelf as *const _ as usize + )) + } + } + #[pyfunction(name = "new")] fn hashlib_new(args: NewHashArgs, vm: &VirtualMachine) -> PyResult { let data = resolve_data(args.data, args.string, vm)?; From 602d6253c025d2f212375745b2e5255b79200f08 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 14 Feb 2026 13:13:28 +0000 Subject: [PATCH 2/2] Auto-format: cargo fmt --all --- crates/stdlib/src/hashlib.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/stdlib/src/hashlib.rs b/crates/stdlib/src/hashlib.rs index 5a869a4b451..c66e4a8cd28 100644 --- a/crates/stdlib/src/hashlib.rs +++ b/crates/stdlib/src/hashlib.rs @@ -710,9 +710,8 @@ pub mod _hashlib { if len < 1 { return Err(vm.new_value_error("key length must be greater than 0.".to_owned())); } - usize::try_from(len).map_err(|_| { - vm.new_overflow_error("key length is too great.".to_owned()) - })? + usize::try_from(len) + .map_err(|_| vm.new_overflow_error("key length is too great.".to_owned()))? } None => hash_digest_size(&name).ok_or_else(|| unsupported_hash(&name, vm))?, };