Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1930e67

Browse files
committed
Add hashlib hasher repr
1 parent a8c9703 commit 1930e67

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

Lib/test/test_hashlib.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,6 @@ def check_blocksize_name(self, name, block_size=0, digest_size=0,
456456
# split for sha3_512 / _sha3.sha3 object
457457
self.assertIn(name.split("_")[0], repr(m))
458458

459-
# TODO: RUSTPYTHON
460-
@unittest.expectedFailure
461459
def test_blocksize_name(self):
462460
self.check_blocksize_name('md5', 64, 16)
463461
self.check_blocksize_name('sha1', 64, 20)
@@ -500,8 +498,6 @@ def test_extra_sha3(self):
500498
self.check_sha3('shake_128', 256, 1344, b'\x1f')
501499
self.check_sha3('shake_256', 512, 1088, b'\x1f')
502500

503-
# TODO: RUSTPYTHON implement all blake2 params
504-
@unittest.expectedFailure
505501
@requires_blake2
506502
def test_blocksize_name_blake2(self):
507503
self.check_blocksize_name('blake2b', 128, 64)

stdlib/src/hashlib.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ pub(crate) use _hashlib::make_module;
66
pub mod _hashlib {
77
use crate::common::lock::PyRwLock;
88
use crate::vm::{
9-
PyObjectRef, PyPayload, PyResult, VirtualMachine,
9+
Py, PyObjectRef, PyPayload, PyResult, VirtualMachine,
1010
builtins::{PyBytes, PyStrRef, PyTypeRef},
1111
convert::ToPyObject,
1212
function::{ArgBytesLike, ArgStrOrBytesLike, FuncArgs, OptionalArg},
1313
protocol::PyBuffer,
14+
types::Representable,
1415
};
1516
use blake2::{Blake2b512, Blake2s256};
1617
use digest::{DynDigest, core_api::BlockSizeUser};
@@ -96,7 +97,7 @@ pub mod _hashlib {
9697
}
9798
}
9899

99-
#[pyclass]
100+
#[pyclass(with(Representable))]
100101
impl PyHasher {
101102
fn new(name: &str, d: HashWrapper) -> Self {
102103
PyHasher {
@@ -146,6 +147,15 @@ pub mod _hashlib {
146147
}
147148
}
148149

150+
impl Representable for PyHasher {
151+
fn repr_str(zelf: &Py<Self>, _vm: &VirtualMachine) -> PyResult<String> {
152+
Ok(format!(
153+
"<{} _hashlib.HASH object @ {:#x}>",
154+
zelf.name, zelf as *const _ as usize
155+
))
156+
}
157+
}
158+
149159
#[pyattr]
150160
#[pyclass(module = "_hashlib", name = "HASHXOF")]
151161
#[derive(PyPayload)]

0 commit comments

Comments
 (0)