summaryrefslogtreecommitdiffstats
path: root/Lib/hmac.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/hmac.py')
-rw-r--r--Lib/hmac.py36
1 files changed, 13 insertions, 23 deletions
diff --git a/Lib/hmac.py b/Lib/hmac.py
index 85b1d1d..6af564e 100644
--- a/Lib/hmac.py
+++ b/Lib/hmac.py
@@ -10,10 +10,14 @@ def _strxor(s1, s2):
"""
return "".join(map(lambda x, y: chr(ord(x) ^ ord(y)), s1, s2))
+# The size of the digests returned by HMAC depends on the underlying
+# hashing module used.
+digest_size = None
+
class HMAC:
"""RFC2104 HMAC class.
- This (mostly) supports the API for Cryptographic Hash Functions (PEP 247).
+ This supports the API for Cryptographic Hash Functions (PEP 247).
"""
def __init__(self, key, msg = None, digestmod = None):
@@ -27,9 +31,11 @@ class HMAC:
import md5
digestmod = md5
+ self.digestmod = digestmod
self.outer = digestmod.new()
self.inner = digestmod.new()
-
+ self.digest_size = digestmod.digest_size
+
blocksize = 64
ipad = "\x36" * blocksize
opad = "\x5C" * blocksize
@@ -56,7 +62,11 @@ class HMAC:
An update to this copy won't affect the original object.
"""
- return HMAC(self)
+ other = HMAC("")
+ other.digestmod = self.digestmod
+ other.inner = self.inner.copy()
+ other.outer = self.outer.copy()
+ return other
def digest(self):
"""Return the hash value of this hashing object.
@@ -88,23 +98,3 @@ def new(key, msg = None, digestmod = None):
"""
return HMAC(key, msg, digestmod)
-def test():
- def md5test(key, data, digest):
- h = HMAC(key, data)
- assert(h.hexdigest().upper() == digest.upper())
-
- # Test vectors from the RFC
- md5test(chr(0x0b) * 16,
- "Hi There",
- "9294727A3638BB1C13F48EF8158BFC9D")
-
- md5test("Jefe",
- "what do ya want for nothing?",
- "750c783e6ab0b503eaa86e310a5db738")
-
- md5test(chr(0xAA)*16,
- chr(0xDD)*50,
- "56be34521d144c88dbb8c733f0e8b3f6")
-
-if __name__ == "__main__":
- test()