from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import sys
import hashlib
import struct
import base64
TEST_INPUT = b"Hello World"
if sys.version_info < (3, 6):
import sha3
m = sha3.sha3_256(TEST_INPUT)
else:
m = hashlib.sha3_256(TEST_INPUT)
TEST_VALUE = "e167f68d6563d75bb25f3aa49c29ef612d41352dc00606de7cbd630bb2665f51"
if TEST_VALUE != m.hexdigest():
print("pysha3 version is < 1.0. Please install from:")
print("https://github.com/tiran/pysha3")
sys.exit(1)
PREFIX = ".onion checksum".encode()
PUBKEY_STRING = "d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a"
if sys.version_info < (3, 0):
PUBKEY = PUBKEY_STRING.decode('hex')
else:
PUBKEY = bytes.fromhex(PUBKEY_STRING)
VERSION = 3
data = struct.pack('15s32sb', PREFIX, PUBKEY, VERSION)
checksum = hashlib.sha3_256(data).digest()
address = struct.pack('!32s2sb', PUBKEY, checksum, VERSION)
onion_addr = base64.b32encode(address).decode().lower()
print("%s" % (onion_addr))