zeronet/src/Crypt/CryptTor.py
canewsin 5ee928852b v 0.7.6 (4565)
- Sync Plugin Updates
- Clean up tor v3 patch (#115)
    https://github.com/ZeroNetX/ZeroNet/pull/115
- Add More Default Plugins to Repo
- Doubled Site Publish Limits
- Update ZeroNet Repo Urls (#103)
- UI/UX: Increases Size of Notifications Close Button(#106)
- Moved Plugins to Seperate Repo
- Added `access_key` variable in Config, this used to access restrited plugins when multiuser plugin is enabled. When MultiUserPlugin is enabled we cannot access some pages like /Stats, this key will remove such restriction with access key.
- Added `last_connection_id_current_version` to ConnectionServer, helpful to estimate no of connection from current client version.
- Added current version:  connections to /Stats page. see the previous point.
2022-01-12 05:13:17 +05:30

85 lines
2.1 KiB
Python

import base64
import hashlib
def sign(data, privatekey):
import rsa
from rsa import pkcs1
from lib import Ed25519
## Onion Service V3
if len(privatekey) == 88:
prv_key = base64.b64decode(privatekey)
pub_key = Ed25519.publickey_unsafe(prv_key)
sign = Ed25519.signature_unsafe(data, prv_key, pub_key)
return sign
## Onion Service V2
if "BEGIN RSA PRIVATE KEY" not in privatekey:
privatekey = "-----BEGIN RSA PRIVATE KEY-----\n%s\n-----END RSA PRIVATE KEY-----" % privatekey
priv = rsa.PrivateKey.load_pkcs1(privatekey)
sign = rsa.pkcs1.sign(data, priv, 'SHA-256')
return sign
def verify(data, publickey, sign):
import rsa
from rsa import pkcs1
from lib import Ed25519
## Onion Service V3
if len(publickey) == 32:
try:
valid = Ed25519.checkvalid(sign, data, publickey)
valid = 'SHA-256'
except Exception as err:
print(err)
valid = False
return valid
## Onion Service V2
pub = rsa.PublicKey.load_pkcs1(publickey, format="DER")
try:
valid = rsa.pkcs1.verify(data, sign, pub)
except pkcs1.VerificationError:
valid = False
return valid
def privatekeyToPublickey(privatekey):
import rsa
from rsa import pkcs1
from lib import Ed25519
## Onion Service V3
if len(privatekey) == 88:
prv_key = base64.b64decode(privatekey)
pub_key = Ed25519.publickey_unsafe(prv_key)
return pub_key
## Onion Service V2
if "BEGIN RSA PRIVATE KEY" not in privatekey:
privatekey = "-----BEGIN RSA PRIVATE KEY-----\n%s\n-----END RSA PRIVATE KEY-----" % privatekey
priv = rsa.PrivateKey.load_pkcs1(privatekey)
pub = rsa.PublicKey(priv.n, priv.e)
return pub.save_pkcs1("DER")
def publickeyToOnion(publickey):
from lib import Ed25519
## Onion Service V3
if len(publickey) == 32:
addr = Ed25519.publickey_to_onionaddress(publickey)[:-6]
return addr
## Onion Service V2
return base64.b32encode(hashlib.sha1(publickey).digest()[:10]).lower().decode("ascii")