]> granicus.if.org Git - python/commitdiff
[Part of patch #1182394] Move the HMAC blocksize to be a class-level
authorAndrew M. Kuchling <amk@amk.ca>
Wed, 27 Dec 2006 03:25:31 +0000 (03:25 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Wed, 27 Dec 2006 03:25:31 +0000 (03:25 +0000)
constant; this allows changing it in a subclass.  To accommodate this,
copy() now uses __class__.  Also add some text to a comment.

Lib/hmac.py

index df2bffd22911e161096a33756a221f722c3e1fab..ed5afc711ae54fbcd313fbffdbd643d0e3d2deca 100644 (file)
@@ -7,7 +7,7 @@ trans_5C = "".join ([chr (x ^ 0x5C) for x in xrange(256)])
 trans_36 = "".join ([chr (x ^ 0x36) for x in xrange(256)])
 
 # The size of the digests returned by HMAC depends on the underlying
-# hashing module used.
+# hashing module used.  Use digest_size from the instance of HMAC instead.
 digest_size = None
 
 # A unique object passed by HMAC.copy() to the HMAC constructor, in order
@@ -20,6 +20,7 @@ class HMAC:
 
     This supports the API for Cryptographic Hash Functions (PEP 247).
     """
+    blocksize = 64  # 512-bit HMAC; can be changed in subclasses.
 
     def __init__(self, key, msg = None, digestmod = None):
         """Create a new HMAC object.
@@ -47,7 +48,7 @@ class HMAC:
         self.inner = self.digest_cons()
         self.digest_size = self.inner.digest_size
 
-        blocksize = 64
+        blocksize = self.blocksize
         if len(key) > blocksize:
             key = self.digest_cons(key).digest()
 
@@ -70,7 +71,7 @@ class HMAC:
 
         An update to this copy won't affect the original object.
         """
-        other = HMAC(_secret_backdoor_key)
+        other = self.__class__(_secret_backdoor_key)
         other.digest_cons = self.digest_cons
         other.digest_size = self.digest_size
         other.inner = self.inner.copy()