[Patch #477336] Make hmac.py match PEP247, and fix the copy method() so that

it works
This commit is contained in:
Andrew M. Kuchling 2001-11-02 21:49:20 +00:00
parent a0b6035a54
commit 1ccdff90bb

View File

@ -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()