Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy
at main 38 lines 1.1 kB view raw
1import base64 2import hashlib 3 4def sign(data, privatekey): 5 import rsa 6 from rsa import pkcs1 7 8 if "BEGIN RSA PRIVATE KEY" not in privatekey: 9 privatekey = "-----BEGIN RSA PRIVATE KEY-----\n%s\n-----END RSA PRIVATE KEY-----" % privatekey 10 11 priv = rsa.PrivateKey.load_pkcs1(privatekey) 12 sign = rsa.pkcs1.sign(data, priv, 'SHA-256') 13 return sign 14 15def verify(data, publickey, sign): 16 import rsa 17 from rsa import pkcs1 18 19 pub = rsa.PublicKey.load_pkcs1(publickey, format="DER") 20 try: 21 valid = rsa.pkcs1.verify(data, sign, pub) 22 except pkcs1.VerificationError: 23 valid = False 24 return valid 25 26def privatekeyToPublickey(privatekey): 27 import rsa 28 from rsa import pkcs1 29 30 if "BEGIN RSA PRIVATE KEY" not in privatekey: 31 privatekey = "-----BEGIN RSA PRIVATE KEY-----\n%s\n-----END RSA PRIVATE KEY-----" % privatekey 32 33 priv = rsa.PrivateKey.load_pkcs1(privatekey) 34 pub = rsa.PublicKey(priv.n, priv.e) 35 return pub.save_pkcs1("DER") 36 37def publickeyToOnion(publickey): 38 return base64.b32encode(hashlib.sha1(publickey).digest()[:10]).lower().decode("ascii")