/Demo/md5test/md5driver.py
http://unladen-swallow.googlecode.com/ · Python · 123 lines · 85 code · 34 blank · 4 comment · 13 complexity · 54214a415b60c3b18c90c5f8f949edc4 MD5 · raw file
- import string
- import md5
- from sys import argv
- def MDPrint(str):
- outstr = ''
- for i in str:
- o = ord(i)
- outstr = (outstr
- + string.hexdigits[(o >> 4) & 0xF]
- + string.hexdigits[o & 0xF])
- print outstr,
- from time import time
- def makestr(start, end):
- result = ''
- for i in range(start, end + 1):
- result = result + chr(i)
- return result
- def MDTimeTrial():
- TEST_BLOCK_SIZE = 1000
- TEST_BLOCKS = 10000
- TEST_BYTES = TEST_BLOCK_SIZE * TEST_BLOCKS
- # initialize test data, need temporary string filler
- filsiz = 1 << 8
- filler = makestr(0, filsiz-1)
- data = filler * (TEST_BLOCK_SIZE // filsiz)
- data = data + filler[:(TEST_BLOCK_SIZE % filsiz)]
- del filsiz, filler
- # start timer
- print 'MD5 time trial. Processing', TEST_BYTES, 'characters...'
- t1 = time()
- mdContext = md5.new()
- for i in range(TEST_BLOCKS):
- mdContext.update(data)
- str = mdContext.digest()
- t2 = time()
- MDPrint(str)
- print 'is digest of test input.'
- print 'Seconds to process test input:', t2 - t1
- print 'Characters processed per second:', TEST_BYTES / (t2 - t1)
- def MDString(str):
- MDPrint(md5.new(str).digest())
- print '"' + str + '"'
- def MDFile(filename):
- f = open(filename, 'rb')
- mdContext = md5.new()
- while 1:
- data = f.read(1024)
- if not data:
- break
- mdContext.update(data)
- MDPrint(mdContext.digest())
- print filename
- import sys
- def MDFilter():
- mdContext = md5.new()
- while 1:
- data = sys.stdin.read(16)
- if not data:
- break
- mdContext.update(data)
- MDPrint(mdContext.digest())
- print
- def MDTestSuite():
- print 'MD5 test suite results:'
- MDString('')
- MDString('a')
- MDString('abc')
- MDString('message digest')
- MDString(makestr(ord('a'), ord('z')))
- MDString(makestr(ord('A'), ord('Z'))
- + makestr(ord('a'), ord('z'))
- + makestr(ord('0'), ord('9')))
- MDString((makestr(ord('1'), ord('9')) + '0') * 8)
- # Contents of file foo are "abc"
- MDFile('foo')
- # I don't wanna use getopt(), since I want to use the same i/f...
- def main():
- if len(argv) == 1:
- MDFilter()
- for arg in argv[1:]:
- if arg[:2] == '-s':
- MDString(arg[2:])
- elif arg == '-t':
- MDTimeTrial()
- elif arg == '-x':
- MDTestSuite()
- else:
- MDFile(arg)
- main()