ZeroNet/src/util/Electrum.py

40 lines
976 B
Python

import hashlib
import struct
# Electrum, the heck?!
def bchr(i):
return struct.pack("B", i)
def encode(val, base, minlen=0):
base, minlen = int(base), int(minlen)
code_string = b"".join([bchr(x) for x in range(256)])
result = b""
while val > 0:
index = val % base
result = code_string[index:index + 1] + result
val //= base
return code_string[0:1] * max(minlen - len(result), 0) + result
def insane_int(x):
x = int(x)
if x < 253:
return bchr(x)
elif x < 65536:
return bchr(253) + encode(x, 256, 2)[::-1]
elif x < 4294967296:
return bchr(254) + encode(x, 256, 4)[::-1]
else:
return bchr(255) + encode(x, 256, 8)[::-1]
def magic(message):
return b"\x18Bitcoin Signed Message:\n" + insane_int(len(message)) + message
def format(message):
return hashlib.sha256(magic(message)).digest()
def dbl_format(message):
return hashlib.sha256(format(message)).digest()