Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy
1import hashlib
2import struct
3
4
5# Electrum, the heck?!
6
7def bchr(i):
8 return struct.pack("B", i)
9
10def encode(val, base, minlen=0):
11 base, minlen = int(base), int(minlen)
12 code_string = b"".join([bchr(x) for x in range(256)])
13 result = b""
14 while val > 0:
15 index = val % base
16 result = code_string[index:index + 1] + result
17 val //= base
18 return code_string[0:1] * max(minlen - len(result), 0) + result
19
20def insane_int(x):
21 x = int(x)
22 if x < 253:
23 return bchr(x)
24 elif x < 65536:
25 return bchr(253) + encode(x, 256, 2)[::-1]
26 elif x < 4294967296:
27 return bchr(254) + encode(x, 256, 4)[::-1]
28 else:
29 return bchr(255) + encode(x, 256, 8)[::-1]
30
31
32def magic(message):
33 return b"\x18Bitcoin Signed Message:\n" + insane_int(len(message)) + message
34
35def format(message):
36 return hashlib.sha256(magic(message)).digest()
37
38def dbl_format(message):
39 return hashlib.sha256(format(message)).digest()