Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy
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")