diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2001-11-02 21:49:20 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2001-11-02 21:49:20 (GMT) |
commit | 1ccdff90bb1beb27ff9592fe7d02f80d32b78373 (patch) | |
tree | 3d3c23f09f329897dcb024956b9df6764b9ecd00 | |
parent | a0b6035a541840ad0dc14bd5e39e8b88139301a3 (diff) | |
download | cpython-1ccdff90bb1beb27ff9592fe7d02f80d32b78373.zip cpython-1ccdff90bb1beb27ff9592fe7d02f80d32b78373.tar.gz cpython-1ccdff90bb1beb27ff9592fe7d02f80d32b78373.tar.bz2 |
[Patch #477336] Make hmac.py match PEP247, and fix the copy method() so that
it works
-rw-r--r-- | Lib/hmac.py | 36 |
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() |