]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-142451: correctly copy HMAC attributes in `HMAC.copy()` (GH-142510) (#142701)
authorBénédikt Tran <10796600+picnixz@users.noreply.github.com>
Sun, 14 Dec 2025 09:36:26 +0000 (10:36 +0100)
committerGitHub <noreply@github.com>
Sun, 14 Dec 2025 09:36:26 +0000 (09:36 +0000)
Partially cherry-picked from d3ef5ba34d3068b8178d6ff0f39462db6bbc4ad5
which ensures that the `block_size` attribute exists on the copy.

Lib/hmac.py
Lib/test/test_hmac.py
Misc/NEWS.d/next/Library/2025-12-14-10-00-23.gh-issue-142451._rkf2S.rst [new file with mode: 0644]

index 8b4eb2fe741e6070dacc138179f365d4b95f54dd..a49f2aeb1d619525211ba956fcdbbc2991894bf1 100644 (file)
@@ -127,6 +127,7 @@ class HMAC:
         # 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
index 1502fba9f3e8b8bf974c1caffecddba517af0972..9161ac71607538306311600a69f857ceb9b77759 100644 (file)
@@ -489,6 +489,16 @@ class UpdateTestCase(unittest.TestCase):
 
 class CopyTestCase(unittest.TestCase):
 
+    @hashlib_helper.requires_hashdigest('sha256')
+    def test_copy(self):
+        # Test a generic copy() and the attributes it exposes.
+        # See https://github.com/python/cpython/issues/142451.
+        h1 = hmac.new(b"my secret key", digestmod="sha256")
+        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)
+
     @hashlib_helper.requires_hashdigest('sha256')
     def test_attributes_old(self):
         # Testing if attributes are of same type.
diff --git a/Misc/NEWS.d/next/Library/2025-12-14-10-00-23.gh-issue-142451._rkf2S.rst b/Misc/NEWS.d/next/Library/2025-12-14-10-00-23.gh-issue-142451._rkf2S.rst
new file mode 100644 (file)
index 0000000..cceb572
--- /dev/null
@@ -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.