Skip to content

Commit cf5bf41

Browse files
committed
initial commit
1 parent 5920b38 commit cf5bf41

15 files changed

+488
-0
lines changed

SHA-256/sha256.py

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
def rot_r(a: int, n: int) -> int:
2+
return ((a >> n) | (a << (32 - n))) & 0xffffffff
3+
4+
5+
def ch(x: int, y: int, z: int) -> int:
6+
return z ^ (x & (y ^ z))
7+
8+
9+
def maj(x: int, y: int, z: int) -> int:
10+
return (x & y) ^ (x & z) ^ (y & z)
11+
12+
13+
def sigma0(x: int) -> int:
14+
return rot_r(x, 2) ^ rot_r(x, 13) ^ rot_r(x, 22)
15+
16+
17+
def sigma1(x: int) -> int:
18+
return rot_r(x, 6) ^ rot_r(x, 11) ^ rot_r(x, 25)
19+
20+
21+
def gamma0(x: int) -> int:
22+
return rot_r(x, 7) ^ rot_r(x, 18) ^ (x >> 3)
23+
24+
25+
def gamma1(x: int) -> int:
26+
return rot_r(x, 17) ^ rot_r(x, 19) ^ (x >> 10)
27+
28+
29+
K = [
30+
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
31+
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
32+
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
33+
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
34+
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
35+
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
36+
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37+
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
38+
]
39+
40+
41+
def sha256(data: bytes) -> bytes:
42+
H = [
43+
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
44+
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
45+
]
46+
message = data + b'\x80'
47+
message += b'\x00' * ((56 - len(message) % 64) % 64)
48+
message += (len(data) * 8).to_bytes(8, 'big')
49+
for i_ in range(len(message) // 64):
50+
block = message[i_ * 64:(i_ + 1) * 64]
51+
w = [int.from_bytes(block[i * 4:(i + 1) * 4], 'big') for i in range(16)]
52+
for i in range(48):
53+
w.append((gamma1(w[-2]) + w[-7] + gamma0(w[-15]) + w[-16]) & 0xffffffff)
54+
g = H.copy()
55+
for i in range(64):
56+
t1 = (g[7] + sigma1(g[4]) + ch(g[4], g[5], g[6]) + K[i] + w[i]) & 0xffffffff
57+
t2 = (sigma0(g[0]) + maj(g[0], g[1], g[2])) & 0xffffffff
58+
g = (t1 + t2) & 0xffffffff, g[0], g[1], g[2], (g[3] + t1) & 0xffffffff, g[4], g[5], g[6]
59+
H = [(x + y) & 0xffffffff for x, y in zip(H, g)]
60+
return b''.join([x.to_bytes(4, 'big') for x in H])

SHA-256/sha256_lambda.py

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
sha256 = lambda data: [
2+
([
3+
[
4+
[
5+
[
6+
([
7+
w.append((gamma1(w[-2]) + w[-7] + gamma0(w[-15]) + w[-16]) & 0xffffffff)
8+
for _ in range(48)
9+
] and False) or [
10+
([
11+
[
12+
[
13+
[
14+
g.__setitem__(j, values[j])
15+
for j in range(8)
16+
]
17+
for values in [[
18+
(t1 + t2) & 0xffffffff,
19+
g[0],
20+
g[1],
21+
g[2],
22+
(g[3] + t1) & 0xffffffff,
23+
g[4],
24+
g[5],
25+
g[6]
26+
]]
27+
]
28+
for t1, t2 in [(
29+
(g[7] + sigma1(g[4]) + ch(g[4], g[5], g[6]) + K[i] + w[i]) & 0xffffffff,
30+
(sigma0(g[0]) + maj(g[0], g[1], g[2])) & 0xffffffff
31+
)]
32+
]
33+
for i in range(64)
34+
] and False) or [
35+
H.__setitem__(i, (H[i] + g[i]) & 0xffffffff)
36+
for i in range(8)
37+
]
38+
for g in [H.copy()]
39+
]
40+
for w in [[int.from_bytes(msg[i_ * 64:(i_ + 1) * 64][i * 4:(i + 1) * 4], 'big') for i in range(16)]]
41+
]
42+
for i_ in range(len(msg) // 64)
43+
]
44+
for sigma0, sigma1, gamma0, gamma1 in [(
45+
lambda x: rot_r(x, 2) ^ rot_r(x, 13) ^ rot_r(x, 22),
46+
lambda x: rot_r(x, 6) ^ rot_r(x, 11) ^ rot_r(x, 25),
47+
lambda x: rot_r(x, 7) ^ rot_r(x, 18) ^ (x >> 3),
48+
lambda x: rot_r(x, 17) ^ rot_r(x, 19) ^ (x >> 10),
49+
)]
50+
]
51+
] and False) or b''.join([x.to_bytes(4, 'big') for x in H])
52+
for msg, rot_r, ch, maj, K, H in [(
53+
data + b'\x80' + b'\x00' * ((56 - (len(data) + 1) % 64) % 64) + (len(data) * 8).to_bytes(8, 'big'),
54+
lambda a, n: ((a >> n) | (a << (32 - n))) & 0xffffffff,
55+
lambda x, y, z: z ^ (x & (y ^ z)),
56+
lambda x, y, z: (x & y) ^ (x & z) ^ (y & z),
57+
[
58+
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
59+
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
60+
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
61+
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
62+
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
63+
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
64+
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
65+
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
66+
],
67+
[0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]
68+
)]
69+
][0]

SHA-256/sha256_one_line.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sha256 = lambda data: [([[[[([w.append((gamma1(w[-2]) + w[-7] + gamma0(w[-15]) + w[-16]) & 0xffffffff) for _ in range(48)] and False) or [([[[[g.__setitem__(j, values[j]) for j in range(8)] for values in [[(t1 + t2) & 0xffffffff, g[0], g[1], g[2], (g[3] + t1) & 0xffffffff, g[4], g[5], g[6]]]] for t1, t2 in [((g[7] + sigma1(g[4]) + ch(g[4], g[5], g[6]) + K[i] + w[i]) & 0xffffffff, (sigma0(g[0]) + maj(g[0], g[1], g[2])) & 0xffffffff)]] for i in range(64)] and False) or [H.__setitem__(i, (H[i] + g[i]) & 0xffffffff) for i in range(8)] for g in [H.copy()]] for w in [[int.from_bytes(msg[i_ * 64:(i_ + 1) * 64][i * 4:(i + 1) * 4], 'big') for i in range(16)]]] for i_ in range(len(msg) // 64)] for sigma0, sigma1, gamma0, gamma1 in [(lambda x: rot_r(x, 2) ^ rot_r(x, 13) ^ rot_r(x, 22), lambda x: rot_r(x, 6) ^ rot_r(x, 11) ^ rot_r(x, 25), lambda x: rot_r(x, 7) ^ rot_r(x, 18) ^ (x >> 3), lambda x: rot_r(x, 17) ^ rot_r(x, 19) ^ (x >> 10))]]] and False) or b''.join([x.to_bytes(4, 'big') for x in H]) for msg, rot_r, ch, maj, K, H in [(data + b'\x80' + b'\x00' * ((56 - (len(data) + 1) % 64) % 64) + (len(data) * 8).to_bytes(8, 'big'), lambda a, n: ((a >> n) | (a << (32 - n))) & 0xffffffff, lambda x, y, z: z ^ (x & (y ^ z)), lambda x, y, z: (x & y) ^ (x & z) ^ (y & z), [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2], [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19])]][0]

SHA1/sha1.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
def left_rotate(n: int, b: int) -> int:
2+
return ((n << b) | (n >> (32 - b))) & 0xffffffff
3+
4+
5+
def sha1(data: bytes) -> bytes:
6+
h = [
7+
0x67452301,
8+
0xEFCDAB89,
9+
0x98BADCFE,
10+
0x10325476,
11+
0xC3D2E1F0
12+
]
13+
message = data + b'\x80'
14+
message += b'\x00' * ((56 - len(message) % 64) % 64)
15+
message += (len(data) * 8).to_bytes(8, 'big')
16+
for i_ in range(len(message) // 64):
17+
chunk = message[i_ * 64:(i_ + 1) * 64]
18+
w = [int.from_bytes(chunk[i * 4:(i + 1) * 4], 'big') for i in range(16)]
19+
for i in range(64):
20+
w.append(left_rotate(w[-3] ^ w[-8] ^ w[-14] ^ w[-16], 1))
21+
a, b, c, d, e = h
22+
for i in range(80):
23+
if i < 20:
24+
f = d ^ (b & (c ^ d))
25+
k = 0x5A827999
26+
elif i < 40:
27+
f = b ^ c ^ d
28+
k = 0x6ED9EBA1
29+
elif i < 60:
30+
f = (b & c) | (b & d) | (c & d)
31+
k = 0x8F1BBCDC
32+
else:
33+
f = b ^ c ^ d
34+
k = 0xCA62C1D6
35+
a, b, c, d, e = (left_rotate(a, 5) + f + e + k + w[i]) & 0xffffffff, a, left_rotate(b, 30), c, d
36+
h = [(x + y) & 0xffffffff for x, y in zip(h, [a, b, c, d, e])]
37+
return b''.join([x.to_bytes(4, 'big') for x in h])

SHA1/sha1_lambda.py

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
sha1 = lambda data: [
2+
([
3+
[
4+
([
5+
w.append(rotate(w[-3] ^ w[-8] ^ w[-14] ^ w[-16], 1))
6+
for _ in range(64)
7+
] and False) or [
8+
([
9+
[
10+
[
11+
g.__setitem__(j, values[j])
12+
for j in range(5)
13+
]
14+
for values in [[
15+
(rotate(g[0], 5) + [
16+
g[3] ^ (g[1] & (g[2] ^ g[3])),
17+
g[1] ^ g[2] ^ g[3],
18+
(g[1] & g[2]) | (g[1] & g[3]) | (g[2] & g[3]),
19+
g[1] ^ g[2] ^ g[3]
20+
][i // 20] + g[4] + [
21+
0x5A827999,
22+
0x6ED9EBA1,
23+
0x8F1BBCDC,
24+
0xCA62C1D6
25+
][i // 20] + w[i]) & 0xffffffff,
26+
g[0],
27+
rotate(g[1], 30),
28+
g[2],
29+
g[3]
30+
]]
31+
]
32+
for i in range(80)
33+
] and False) or [
34+
h.__setitem__(i, (h[i] + g[i]) & 0xffffffff)
35+
for i in range(5)
36+
]
37+
for g in [[_ for _ in h]]
38+
]
39+
for w in [[int.from_bytes(msg[i_ * 64:(i_ + 1) * 64][i * 4:(i + 1) * 4], 'big') for i in range(16)]]
40+
]
41+
for i_ in range(len(msg) // 64)
42+
] and False) or b''.join([x.to_bytes(4, 'big') for x in h])
43+
for msg, rotate, h in [(
44+
data + b'\x80' + b'\x00' * ((56 - (len(data) + 1) % 64) % 64) + (len(data) * 8).to_bytes(8, 'big'),
45+
lambda n, b: ((n << b) | (n >> (32 - b))) & 0xffffffff,
46+
[
47+
0x67452301,
48+
0xEFCDAB89,
49+
0x98BADCFE,
50+
0x10325476,
51+
0xC3D2E1F0
52+
]
53+
)]
54+
][0]

SHA1/sha1_one_line.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sha1 = lambda data: [([[([w.append(rotate(w[-3] ^ w[-8] ^ w[-14] ^ w[-16], 1)) for _ in range(64)] and False) or [([[[g.__setitem__(j, values[j]) for j in range(5)] for values in [[(rotate(g[0], 5) + [g[3] ^ (g[1] & (g[2] ^ g[3])),g[1] ^ g[2] ^ g[3],(g[1] & g[2]) | (g[1] & g[3]) | (g[2] & g[3]),g[1] ^ g[2] ^ g[3]][i // 20] + g[4] + [0x5A827999,0x6ED9EBA1,0x8F1BBCDC,0xCA62C1D6][i // 20] + w[i]) & 0xffffffff,g[0],rotate(g[1], 30),g[2],g[3]]]] for i in range(80)] and False) or [h.__setitem__(i, (h[i] + g[i]) & 0xffffffff) for i in range(5)] for g in [[_ for _ in h]]] for w in [[int.from_bytes(msg[i_ * 64:(i_ + 1) * 64][i * 4:(i + 1) * 4], 'big') for i in range(16)]]] for i_ in range(len(msg) // 64)] and False) or b''.join([x.to_bytes(4, 'big') for x in h]) for msg, rotate, h in [(data + b'\x80' + b'\x00' * ((56 - (len(data) + 1) % 64) % 64) + (len(data) * 8).to_bytes(8, 'big'),lambda n, b: ((n << b) | (n >> (32 - b))) & 0xffffffff,[0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476,0xC3D2E1F0])]][0]

TOTP/pybase64.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import base64
2+
import os
3+
import string
4+
5+
charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + "+/"
6+
7+
8+
def base64encode(data: bytes) -> str:
9+
bits = "".join([bin(c)[2:].rjust(8, '0') for c in data]) + "0" * ((3 - len(data)) % 3 * 2)
10+
chunks = [bits[i * 6:(i + 1) * 6] for i in range(len(bits) // 6)]
11+
return "".join([charset[int(c, 2)] for c in chunks]) + "=" * ((3 - len(data)) % 3)
12+
13+
14+
def base64decode(data: str) -> bytes:
15+
padding = data.count("=")
16+
data = data.strip("=")
17+
bits = "".join([bin(charset.index(c))[2:].rjust(6, '0') for c in data])
18+
if padding:
19+
bits = bits[:-padding * 2]
20+
return bytes([int(bits[i * 8:(i + 1) * 8], 2) for i in range(len(bits) // 8)])
21+
22+
23+
def test(inp: bytes, enc: callable, enc2: callable, dec: callable):
24+
print("Input:", inp)
25+
my = enc(inp)
26+
print("My Output:", my)
27+
correct = enc2(inp).decode()
28+
print("Correct Output:", correct)
29+
if my == correct:
30+
dec = dec(my)
31+
print("Decoded:", dec)
32+
print(dec == inp)
33+
else:
34+
print(False)
35+
36+
37+
test(os.urandom(385), base64encode, base64.b64encode, base64decode)

TOTP/pyhmac.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def hmac(key: bytes, msg: bytes, hasher: callable) -> bytes:
2+
if len(key) > 64:
3+
key = hasher(key)
4+
key += bytes(64 - len(key))
5+
opad = bytes(0x5c ^ i for i in range(256))
6+
ipad = bytes(0x36 ^ i for i in range(256))
7+
return hasher(key.translate(opad) + hasher(key.translate(ipad) + msg))

TOTP/sha1_hmac_one_line.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sha1_hmac = lambda key, msg: [[sha1(key.translate(bytes(0x5c ^ i for i in range(256))) + sha1(key.translate(bytes(0x36 ^ i for i in range(256))) + msg)) for key in [(key if len(key) <= 64 else sha1(key)).ljust(64, b'\x00')]][0] for sha1 in [lambda data: [([[([w.append(rotate(w[-3] ^ w[-8] ^ w[-14] ^ w[-16], 1)) for _ in range(64)] and False) or [([[[g.__setitem__(j, values[j]) for j in range(5)] for values in [[(rotate(g[0], 5) + [g[3] ^ (g[1] & (g[2] ^ g[3])),g[1] ^ g[2] ^ g[3],(g[1] & g[2]) | (g[1] & g[3]) | (g[2] & g[3]),g[1] ^ g[2] ^ g[3]][i // 20] + g[4] + [0x5A827999,0x6ED9EBA1,0x8F1BBCDC,0xCA62C1D6][i // 20] + w[i]) & 0xffffffff,g[0],rotate(g[1], 30),g[2],g[3]]]] for i in range(80)] and False) or [h.__setitem__(i, (h[i] + g[i]) & 0xffffffff) for i in range(5)] for g in [[_ for _ in h]]] for w in [[int.from_bytes(msg[i_ * 64:(i_ + 1) * 64][i * 4:(i + 1) * 4], 'big') for i in range(16)]]] for i_ in range(len(msg) // 64)] and False) or b''.join([x.to_bytes(4, 'big') for x in h]) for msg, rotate, h in [(data + b'\x80' + b'\x00' * ((56 - (len(data) + 1) % 64) % 64) + (len(data) * 8).to_bytes(8, 'big'),lambda n, b: ((n << b) | (n >> (32 - b))) & 0xffffffff,[0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476,0xC3D2E1F0])]][0]]][0]

TOTP/totp.py

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import base64
2+
import hashlib
3+
import hmac
4+
import random
5+
import time
6+
7+
8+
class TOTP:
9+
def __init__(self, secret: str):
10+
self.secret = secret
11+
12+
def now(self) -> str:
13+
return self.at(int(time.time() / 30))
14+
15+
def at(self, for_time: int) -> str:
16+
secret = base64.b32decode(self.secret)
17+
hmac_hash = hmac.HMAC(secret, for_time.to_bytes(8, 'big'), hashlib.sha1).digest()
18+
offset = hmac_hash[-1] & 0xf
19+
code = ((hmac_hash[offset] & 0x7f) << 24 |
20+
(hmac_hash[offset + 1] & 0xff) << 16 |
21+
(hmac_hash[offset + 2] & 0xff) << 8 |
22+
(hmac_hash[offset + 3] & 0xff))
23+
out = str(code % 10 ** 6)
24+
return "0" * (6 - len(out)) + out
25+
26+
def verify(self, code: str, valid_window: int = 0) -> bool:
27+
for_time = int(time.time() / 30)
28+
for i in range(-valid_window, valid_window + 1):
29+
if self.at(for_time + i) == code.replace(" ", ""):
30+
return True
31+
return False
32+
33+
def generate_uri(self, user: str, issuer: str) -> str:
34+
return "otpauth://totp/%s?secret=%s&issuer=%s" % (user, self.secret.lower(), issuer)
35+
36+
@staticmethod
37+
def generate_random():
38+
return TOTP("".join([random.choice("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567") for _ in range(16)]))

TOTP/totp_lambda.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
totp = lambda secret: [
2+
[
3+
[
4+
str(((hmac_hash[offset] & 0x7f) << 24 |
5+
(hmac_hash[offset + 1] & 0xff) << 16 |
6+
(hmac_hash[offset + 2] & 0xff) << 8 |
7+
(hmac_hash[offset + 3] & 0xff)) % 10 ** 6).rjust(6, '0')
8+
for offset in [hmac_hash[-1] & 0xf]
9+
][0]
10+
for hmac_hash in [sha1_hmac(base32decode(secret.replace(" ", "").upper()), int(time / 30).to_bytes(8, 'big'))]
11+
][0]
12+
for base32decode, sha1_hmac, time in [(
13+
lambda data: [bytes([int(bits[i * 8:(i + 1) * 8], 2) for i in range(len(bits) // 8)]) for bits in [("".join([bin("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".index(c))[2:].rjust(5, '0') for c in data.strip("=")]))]][0],
14+
lambda key, msg: [[sha1(key.translate(bytes(0x5c ^ i for i in range(256))) + sha1(key.translate(bytes(0x36 ^ i for i in range(256))) + msg)) for key in [(key if len(key) <= 64 else sha1(key)).ljust(64, b'\x00')]][0] for sha1 in [lambda data: [([[([w.append(rotate(w[-3] ^ w[-8] ^ w[-14] ^ w[-16], 1)) for _ in range(64)] and False) or [([[[g.__setitem__(j, values[j]) for j in range(5)] for values in [[(rotate(g[0], 5) + [g[3] ^ (g[1] & (g[2] ^ g[3])),g[1] ^ g[2] ^ g[3],(g[1] & g[2]) | (g[1] & g[3]) | (g[2] & g[3]),g[1] ^ g[2] ^ g[3]][i // 20] + g[4] + [0x5A827999,0x6ED9EBA1,0x8F1BBCDC,0xCA62C1D6][i // 20] + w[i]) & 0xffffffff,g[0],rotate(g[1], 30),g[2],g[3]]]] for i in range(80)] and False) or [h.__setitem__(i, (h[i] + g[i]) & 0xffffffff) for i in range(5)] for g in [[_ for _ in h]]] for w in [[int.from_bytes(msg[i_ * 64:(i_ + 1) * 64][i * 4:(i + 1) * 4], 'big') for i in range(16)]]] for i_ in range(len(msg) // 64)] and False) or b''.join([x.to_bytes(4, 'big') for x in h]) for msg, rotate, h in [(data + b'\x80' + b'\x00' * ((56 - (len(data) + 1) % 64) % 64) + (len(data) * 8).to_bytes(8, 'big'),lambda n, b: ((n << b) | (n >> (32 - b))) & 0xffffffff,[0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476,0xC3D2E1F0])]][0]]][0],
15+
__import__("time").time()
16+
)]
17+
][0]

0 commit comments

Comments
 (0)