diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index da62486e0b..5055c4c7f7 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -456,8 +456,6 @@ def check_blocksize_name(self, name, block_size=0, digest_size=0, # split for sha3_512 / _sha3.sha3 object self.assertIn(name.split("_")[0], repr(m)) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_blocksize_name(self): self.check_blocksize_name('md5', 64, 16) self.check_blocksize_name('sha1', 64, 20) @@ -500,8 +498,6 @@ def test_extra_sha3(self): self.check_sha3('shake_128', 256, 1344, b'\x1f') self.check_sha3('shake_256', 512, 1088, b'\x1f') - # TODO: RUSTPYTHON implement all blake2 params - @unittest.expectedFailure @requires_blake2 def test_blocksize_name_blake2(self): self.check_blocksize_name('blake2b', 128, 64) diff --git a/stdlib/src/hashlib.rs b/stdlib/src/hashlib.rs index 586d825b2c..2ad841e893 100644 --- a/stdlib/src/hashlib.rs +++ b/stdlib/src/hashlib.rs @@ -6,11 +6,12 @@ pub(crate) use _hashlib::make_module; pub mod _hashlib { use crate::common::lock::PyRwLock; use crate::vm::{ - PyObjectRef, PyPayload, PyResult, VirtualMachine, + Py, PyObjectRef, PyPayload, PyResult, VirtualMachine, builtins::{PyBytes, PyStrRef, PyTypeRef}, convert::ToPyObject, function::{ArgBytesLike, ArgStrOrBytesLike, FuncArgs, OptionalArg}, protocol::PyBuffer, + types::Representable, }; use blake2::{Blake2b512, Blake2s256}; use digest::{DynDigest, core_api::BlockSizeUser}; @@ -96,7 +97,7 @@ pub mod _hashlib { } } - #[pyclass] + #[pyclass(with(Representable))] impl PyHasher { fn new(name: &str, d: HashWrapper) -> Self { PyHasher { @@ -146,6 +147,15 @@ pub mod _hashlib { } } + impl Representable for PyHasher { + fn repr_str(zelf: &Py, _vm: &VirtualMachine) -> PyResult { + Ok(format!( + "<{} _hashlib.HASH object @ {:#x}>", + zelf.name, zelf as *const _ as usize + )) + } + } + #[pyattr] #[pyclass(module = "_hashlib", name = "HASHXOF")] #[derive(PyPayload)]