Skip to content

Commit bc62e1f

Browse files
committed
format w/ file fix
1 parent 95cedf4 commit bc62e1f

File tree

2 files changed

+349
-143
lines changed

2 files changed

+349
-143
lines changed

src/ugenpy/md5.py

+173-41
Original file line numberDiff line numberDiff line change
@@ -17,68 +17,200 @@
1717
adapted for MicroPython
1818
"""
1919

20-
rotate_amounts = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
21-
5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
22-
4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
23-
6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]
24-
25-
#constants = [int(abs(math.sin(i+1)) * 2**32) & 0xFFFFFFFF for i in range(64)] # precision is not enough
26-
constants = [3614090360, 3905402710, 606105819, 3250441966, 4118548399, 1200080426, 2821735955, 4249261313,
27-
1770035416, 2336552879, 4294925233, 2304563134, 1804603682, 4254626195, 2792965006, 1236535329,
28-
4129170786, 3225465664, 643717713, 3921069994, 3593408605, 38016083, 3634488961, 3889429448,
29-
568446438, 3275163606, 4107603335, 1163531501, 2850285829, 4243563512, 1735328473, 2368359562,
30-
4294588738, 2272392833, 1839030562, 4259657740, 2763975236, 1272893353, 4139469664, 3200236656,
31-
681279174, 3936430074, 3572445317, 76029189, 3654602809, 3873151461, 530742520, 3299628645,
32-
4096336452, 1126891415, 2878612391, 4237533241, 1700485571, 2399980690, 4293915773, 2240044497,
33-
1873313359, 4264355552, 2734768916, 1309151649, 4149444226, 3174756917, 718787259, 3951481745]
34-
35-
init_values = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]
36-
37-
functions = 16*[lambda b, c, d: (b & c) | (~b & d)] + \
38-
16*[lambda b, c, d: (d & b) | (~d & c)] + \
39-
16*[lambda b, c, d: b ^ c ^ d] + \
40-
16*[lambda b, c, d: c ^ (b | ~d)]
41-
42-
index_functions = 16*[lambda i: i] + \
43-
16*[lambda i: (5*i + 1)%16] + \
44-
16*[lambda i: (3*i + 5)%16] + \
45-
16*[lambda i: (7*i)%16]
20+
rotate_amounts = [
21+
7,
22+
12,
23+
17,
24+
22,
25+
7,
26+
12,
27+
17,
28+
22,
29+
7,
30+
12,
31+
17,
32+
22,
33+
7,
34+
12,
35+
17,
36+
22,
37+
5,
38+
9,
39+
14,
40+
20,
41+
5,
42+
9,
43+
14,
44+
20,
45+
5,
46+
9,
47+
14,
48+
20,
49+
5,
50+
9,
51+
14,
52+
20,
53+
4,
54+
11,
55+
16,
56+
23,
57+
4,
58+
11,
59+
16,
60+
23,
61+
4,
62+
11,
63+
16,
64+
23,
65+
4,
66+
11,
67+
16,
68+
23,
69+
6,
70+
10,
71+
15,
72+
21,
73+
6,
74+
10,
75+
15,
76+
21,
77+
6,
78+
10,
79+
15,
80+
21,
81+
6,
82+
10,
83+
15,
84+
21,
85+
]
86+
87+
# constants = [int(abs(math.sin(i+1)) * 2**32) & 0xFFFFFFFF for i in range(64)] # precision is not enough
88+
constants = [
89+
3614090360,
90+
3905402710,
91+
606105819,
92+
3250441966,
93+
4118548399,
94+
1200080426,
95+
2821735955,
96+
4249261313,
97+
1770035416,
98+
2336552879,
99+
4294925233,
100+
2304563134,
101+
1804603682,
102+
4254626195,
103+
2792965006,
104+
1236535329,
105+
4129170786,
106+
3225465664,
107+
643717713,
108+
3921069994,
109+
3593408605,
110+
38016083,
111+
3634488961,
112+
3889429448,
113+
568446438,
114+
3275163606,
115+
4107603335,
116+
1163531501,
117+
2850285829,
118+
4243563512,
119+
1735328473,
120+
2368359562,
121+
4294588738,
122+
2272392833,
123+
1839030562,
124+
4259657740,
125+
2763975236,
126+
1272893353,
127+
4139469664,
128+
3200236656,
129+
681279174,
130+
3936430074,
131+
3572445317,
132+
76029189,
133+
3654602809,
134+
3873151461,
135+
530742520,
136+
3299628645,
137+
4096336452,
138+
1126891415,
139+
2878612391,
140+
4237533241,
141+
1700485571,
142+
2399980690,
143+
4293915773,
144+
2240044497,
145+
1873313359,
146+
4264355552,
147+
2734768916,
148+
1309151649,
149+
4149444226,
150+
3174756917,
151+
718787259,
152+
3951481745,
153+
]
154+
155+
init_values = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476]
156+
157+
functions = (
158+
16 * [lambda b, c, d: (b & c) | (~b & d)]
159+
+ 16 * [lambda b, c, d: (d & b) | (~d & c)]
160+
+ 16 * [lambda b, c, d: b ^ c ^ d]
161+
+ 16 * [lambda b, c, d: c ^ (b | ~d)]
162+
)
163+
164+
index_functions = (
165+
16 * [lambda i: i]
166+
+ 16 * [lambda i: (5 * i + 1) % 16]
167+
+ 16 * [lambda i: (3 * i + 5) % 16]
168+
+ 16 * [lambda i: (7 * i) % 16]
169+
)
170+
46171

47172
def left_rotate(x, amount):
48173
x &= 0xFFFFFFFF
49-
return ((x<<amount) | (x>>(32-amount))) & 0xFFFFFFFF
174+
return ((x << amount) | (x >> (32 - amount))) & 0xFFFFFFFF
175+
50176

51177
def md5(message):
52-
message = bytearray(message) #copy our input into a mutable buffer
53-
orig_len_in_bits = (8 * len(message)) & 0xffffffffffffffff
178+
message = bytearray(message) # copy our input into a mutable buffer
179+
orig_len_in_bits = (8 * len(message)) & 0xFFFFFFFFFFFFFFFF
54180
message.append(0x80)
55-
while len(message)%64 != 56:
181+
while len(message) % 64 != 56:
56182
message.append(0)
57-
message += orig_len_in_bits.to_bytes(8, 'little')
58-
#print (message)
183+
message += orig_len_in_bits.to_bytes(8, "little")
184+
# print (message)
59185

60186
hash_pieces = init_values[:]
61187

62188
for chunk_ofst in range(0, len(message), 64):
63189
a, b, c, d = hash_pieces
64-
chunk = message[chunk_ofst:chunk_ofst+64]
65-
#print(a, b, c, d)
190+
chunk = message[chunk_ofst : chunk_ofst + 64]
191+
# print(a, b, c, d)
66192
for i in range(64):
67193
f = functions[i](b, c, d)
68194
g = index_functions[i](i)
69-
#print(constants[i])
70-
to_rotate = a + f + constants[i] + int.from_bytes(chunk[4*g:4*g+4], 'little')
195+
# print(constants[i])
196+
to_rotate = (
197+
a
198+
+ f
199+
+ constants[i]
200+
+ int.from_bytes(chunk[4 * g : 4 * g + 4], "little")
201+
)
71202
new_b = (b + left_rotate(to_rotate, rotate_amounts[i])) & 0xFFFFFFFF
72203
a, b, c, d = d, new_b, b, c
73-
#print(to_rotate)
204+
# print(to_rotate)
74205

75206
for i, val in enumerate([a, b, c, d]):
76207
hash_pieces[i] += val
77208
hash_pieces[i] &= 0xFFFFFFFF
78-
return sum(x<<(32*i) for i, x in enumerate(hash_pieces))
209+
return sum(x << (32 * i) for i, x in enumerate(hash_pieces))
210+
79211

80212
def digest(message):
81213
digest = md5(message)
82-
raw = digest.to_bytes(16, 'little')
83-
return '{:032x}'.format(int.from_bytes(raw, 'big'))
84-
#return raw
214+
raw = digest.to_bytes(16, "little")
215+
return "{:032x}".format(int.from_bytes(raw, "big"))
216+
# return raw

0 commit comments

Comments
 (0)