]> git.phdru.name Git - m_lib.git/blob - m_lib/md5wrapper.py
0c1a5f1e2c03ed8e991dfd642d8edf8fac302a8e
[m_lib.git] / m_lib / md5wrapper.py
1 #! /usr/bin/env python
2 """User wrapper for md5 builtin object"""
3
4 __author__ = "Oleg Broytman <phd@phdru.name>"
5 __copyright__ = "Copyright (C) 1997-2012 PhiloSoft Design"
6 __license__ = "GNU GPL"
7
8 __all__ = ['md5wrapper']
9
10 import sys
11 if sys.version < '2.5':
12     from md5 import md5
13 else:
14     from hashlib import md5
15
16 class md5wrapper:
17    def __init__(self, init=None):
18       if init:
19          self._md5 = md5(init)
20       else:
21          self._md5 = md5()
22
23    def update(self, data):
24       self._md5.update(data)
25
26    def digest(self):
27       return self._md5.digest()
28
29    def __repr__(self):
30       str = self.digest()
31       return "%02x"*len(str) % tuple(map(ord, str))
32          # This nice was suggested by Guido
33
34    def md5file(self, f):
35       if type(f) == type(''): # If f is string - use it as file's name
36          infile = open(f, 'r')
37       else:
38          infile = f           # else assume it is file or file-like object
39
40       try:
41          while 1:
42             buf = infile.read(16*1024)
43             if not buf: break
44             self.update(buf)
45
46       finally:
47          if type(f) == type(''): # If f was opened - close it
48             infile.close()
49
50 if __name__ == "__main__":
51    print "This must print exactly the string"
52    print "Test: 900150983cd24fb0d6963f7d28e17f72"
53    print "Test:", md5wrapper("abc")