home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2230 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  2.8 KB  |  68 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __revision__ = '$Id: HMAC.py,v 1.5 2002/07/25 17:19:02 z3p Exp $'
  5. import string
  6.  
  7. def _strxor(s1, s2):
  8.     return ''.join(map((lambda x, y: chr(ord(x) ^ ord(y))), s1, s2))
  9.  
  10. digest_size = None
  11.  
  12. class HMAC:
  13.     
  14.     def __init__(self, key, msg = None, digestmod = None):
  15.         if digestmod == None:
  16.             import md5
  17.             digestmod = md5
  18.         
  19.         self.digestmod = digestmod
  20.         self.outer = digestmod.new()
  21.         self.inner = digestmod.new()
  22.         
  23.         try:
  24.             self.digest_size = digestmod.digest_size
  25.         except AttributeError:
  26.             self.digest_size = len(self.outer.digest())
  27.  
  28.         blocksize = 64
  29.         ipad = '6' * blocksize
  30.         opad = '\\' * blocksize
  31.         if len(key) > blocksize:
  32.             key = digestmod.new(key).digest()
  33.         
  34.         key = key + chr(0) * (blocksize - len(key))
  35.         self.outer.update(_strxor(key, opad))
  36.         self.inner.update(_strxor(key, ipad))
  37.         if msg:
  38.             self.update(msg)
  39.         
  40.  
  41.     
  42.     def update(self, msg):
  43.         self.inner.update(msg)
  44.  
  45.     
  46.     def copy(self):
  47.         other = HMAC('')
  48.         other.digestmod = self.digestmod
  49.         other.inner = self.inner.copy()
  50.         other.outer = self.outer.copy()
  51.         return other
  52.  
  53.     
  54.     def digest(self):
  55.         h = self.outer.copy()
  56.         h.update(self.inner.digest())
  57.         return h.digest()
  58.  
  59.     
  60.     def hexdigest(self):
  61.         return []([ string.zfill(hex(ord(x))[2:], 2) for x in tuple(self.digest()) ])
  62.  
  63.  
  64.  
  65. def new(key, msg = None, digestmod = None):
  66.     return HMAC(key, msg, digestmod)
  67.  
  68.