Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 82268e0

Browse files
committed
initial checkin
1 parent 00d5974 commit 82268e0

3 files changed

Lines changed: 136 additions & 0 deletions

File tree

Demo/md5test/README

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
This is the Python version of the MD5 test program from the MD5
2+
Internet Draft (Rivest and Dusse, The MD5 Message-Digest Algorithm, 10
3+
July 1991). The file "foo" contains the string "abc" with no trailing
4+
newline.
5+
6+
When called without arguments, it acts as a filter. When called with
7+
"-x", it executes a self-test, and the output should literally match
8+
the output given in the RFC.
9+
10+
Code by Jan-Hein B\"uhrman after the original in C.

Demo/md5test/foo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
abc

Demo/md5test/md5driver.py

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
import string
2+
3+
def MDPrint(str):
4+
outstr = ''
5+
for i in str:
6+
o = ord(i)
7+
outstr = outstr \
8+
+ string.hexdigits[(o >> 4) & 0xF] \
9+
+ string.hexdigits[o & 0xF]
10+
print outstr,
11+
12+
13+
from time import time
14+
15+
def makestr(start, end):
16+
result = ''
17+
for i in range(start, end + 1):
18+
result = result + chr(i)
19+
20+
return result
21+
22+
23+
from md5 import md5
24+
25+
def MDTimeTrial():
26+
TEST_BLOCK_SIZE = 1000
27+
TEST_BLOCKS = 10000
28+
29+
TEST_BYTES = TEST_BLOCK_SIZE * TEST_BLOCKS
30+
31+
# initialize test data, need temporary string filler
32+
33+
filsiz = 1 << 8
34+
filler = makestr(0, filsiz-1)
35+
data = filler * (TEST_BLOCK_SIZE / filsiz);
36+
data = data + filler[:(TEST_BLOCK_SIZE % filsiz)]
37+
38+
del filsiz, filler
39+
40+
41+
# start timer
42+
print 'MD5 time trial. Processing', TEST_BYTES, 'characters...'
43+
t1 = time()
44+
45+
mdContext = md5()
46+
47+
for i in range(TEST_BLOCKS):
48+
mdContext.update(data)
49+
50+
str = mdContext.digest()
51+
t2 = time()
52+
53+
MDPrint(str)
54+
print 'is digest of test input.'
55+
print 'Seconds to process test input:', t2 - t1
56+
print 'Characters processed per second:', TEST_BYTES / (t2 - t1)
57+
58+
59+
def MDString(str):
60+
MDPrint(md5(str).digest())
61+
print '"' + str + '"'
62+
63+
64+
def MDFile(filename):
65+
f = open(filename, 'rb');
66+
mdContext = md5()
67+
68+
while 1:
69+
data = f.read(1024)
70+
if not data:
71+
break
72+
mdContext.update(data)
73+
74+
MDPrint(mdContext.digest())
75+
print filename
76+
77+
78+
import sys
79+
80+
def MDFilter():
81+
mdContext = md5()
82+
83+
while 1:
84+
data = sys.stdin.read(16)
85+
if not data:
86+
break
87+
mdContext.update(data)
88+
89+
MDPrint(mdContext.digest())
90+
print
91+
92+
93+
def MDTestSuite():
94+
print 'MD5 test suite results:'
95+
MDString('')
96+
MDString('a')
97+
MDString('abc')
98+
MDString('message digest')
99+
MDString(makestr(ord('a'), ord('z')))
100+
MDString(makestr(ord('A'), ord('Z')) \
101+
+ makestr(ord('a'), ord('z')) \
102+
+ makestr(ord('0'), ord('9')))
103+
MDString((makestr(ord('1'), ord('9')) + '0') * 8)
104+
105+
# Contents of file foo are "abc"
106+
MDFile('foo')
107+
108+
109+
from sys import argv
110+
111+
# I don't wanna use getopt(), since I want to use the same i/f...
112+
def main():
113+
if len(argv) == 1:
114+
MDFilter()
115+
for arg in argv[1:]:
116+
if arg[:2] == '-s':
117+
MDString(arg[2:])
118+
elif arg == '-t':
119+
MDTimeTrial()
120+
elif arg == '-x':
121+
MDTestSuite()
122+
else:
123+
MDFile(arg)
124+
125+
main()

0 commit comments

Comments
 (0)