mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
[3.14] gh-142451: correctly copy HMAC attributes in HMAC.copy() (GH-142510) (#142698)
Partially cherry-picked from d3ef5ba34d
which ensures that the `block_size` attribute exists on the copy.
This commit is contained in:
parent
aef4552d04
commit
77ad3d59c2
3 changed files with 13 additions and 0 deletions
|
|
@ -159,6 +159,7 @@ def copy(self):
|
|||
# Call __new__ directly to avoid the expensive __init__.
|
||||
other = self.__class__.__new__(self.__class__)
|
||||
other.digest_size = self.digest_size
|
||||
other.block_size = self.block_size
|
||||
if self._hmac:
|
||||
other._hmac = self._hmac.copy()
|
||||
other._inner = other._outer = None
|
||||
|
|
|
|||
|
|
@ -1076,6 +1076,15 @@ def test_properties(self):
|
|||
self.assertEqual(h.digest_size, self.digest_size)
|
||||
self.assertEqual(h.block_size, self.block_size)
|
||||
|
||||
def test_copy(self):
|
||||
# Test a generic copy() and the attributes it exposes.
|
||||
# See https://github.com/python/cpython/issues/142451.
|
||||
h1 = self.hmac_new(b"my secret key", digestmod=self.digestname)
|
||||
h2 = h1.copy()
|
||||
self.assertEqual(h1.name, h2.name)
|
||||
self.assertEqual(h1.digest_size, h2.digest_size)
|
||||
self.assertEqual(h1.block_size, h2.block_size)
|
||||
|
||||
def test_repr(self):
|
||||
# HMAC object representation may differ across implementations
|
||||
raise NotImplementedError
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
:mod:`hmac`: Ensure that the :attr:`HMAC.block_size <hmac.HMAC.block_size>`
|
||||
attribute is correctly copied by :meth:`HMAC.copy <hmac.HMAC.copy>`. Patch
|
||||
by Bénédikt Tran.
|
||||
Loading…
Add table
Add a link
Reference in a new issue