]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-142451: correctly copy HMAC attributes in `HMAC.copy()` (GH-142510) (#142698)
authorBénédikt Tran <10796600+picnixz@users.noreply.github.com>
Sun, 14 Dec 2025 09:27:03 +0000 (10:27 +0100)
committerGitHub <noreply@github.com>
Sun, 14 Dec 2025 09:27:03 +0000 (09:27 +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 16022c9ceb54398335ebe59acbdf2fff3ea1ff58..2d6016cda11c0e5791ef361a80795d44126acaf4 100644 (file)
@@ -159,6 +159,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 344c6ddf28afcfe3448e0d90260b12ef49133d6a..1d270b2a43c1845d8e3f3d0d75736fdaf9ace28e 100644 (file)
@@ -1076,6 +1076,15 @@ class SanityTestCaseMixin(CreatorMixin):
         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
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.