Skip to content

Instantly share code, notes, and snippets.

@altmind
Created March 13, 2012 07:56
Show Gist options
  • Save altmind/2027517 to your computer and use it in GitHub Desktop.
Save altmind/2027517 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
from hashlib import sha1
class HMAC:
def __init__(self, key, msg):
self.outer = sha1()
self.inner = sha1()
self.digest_size = self.inner.digest_size
blocksize = 64
if len(key) > blocksize:
key = sha1(key).digest()
key = key + chr(0) * (blocksize - len(key))
trans_5C = "".join ([chr (x ^ 0x5c) for x in xrange(256)])
trans_36 = "".join ([chr (x ^ 0x36) for x in xrange(256)])
self.outer.update(key.translate(trans_5C))
self.inner.update(key.translate(trans_36))
if msg:
self.inner.update(msg)
self.h = self.outer.copy()
self.h.update(self.inner.digest())
def hexdigest(self):
return self.h.hexdigest()
if __name__=="__main__":
h = HMAC("key","The quick brown fox jumps over the lazy dog")
err = 0
if (h.hexdigest()!="de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9"):
print "ERROR 1"
err=1
h = HMAC("keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykey","The quick brown fox jumps over the lazy dog")
if (h.hexdigest()!="de647975b3a4e8c38481845dea2177b85dc2eea9"):
print "ERROR 2"
err=1
h = HMAC(".",".")
if (h.hexdigest()!="b2abe377fbdea168617388e371adc07834bec21b"):
print "ERROR 3"
err=1
h = HMAC("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111","111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")
if (h.hexdigest()!="e211905a427db58fae8635b725b8e1fd7e628cc4"):
print "ERROR 4"
err=1
h = HMAC("Y9tBh","asd")
print h.hexdigest()
if (h.hexdigest()!="e211905a427db58fae8635b725b8e1fd7e628cc4"):
print "ERROR 4"
err=1
if (err==1):
exit(1)
else:
print "OK"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment