Merge branch 'py3-internal' into zeronet-enhanced

This commit is contained in:
canewsin 2022-01-06 12:39:44 +05:30
commit b39a1a5f1b
5 changed files with 42 additions and 20 deletions

@ -1 +1 @@
Subproject commit 5c22d54984363d425d9f7b6aabbf1a871e7e60a1
Subproject commit 7bb1715ce030352ff46ddd43ad58b7ab90ef978b

View file

@ -4,14 +4,17 @@ import hashlib
def sign(data, privatekey):
import rsa
from rsa import pkcs1
from Crypt import CryptEd25519
## v3 = 88
from lib import Ed25519
## Onion Service V3
if len(privatekey) == 88:
prv_key = base64.b64decode(privatekey)
pub_key = CryptEd25519.publickey_unsafe(prv_key)
sign = CryptEd25519.signature_unsafe(data, prv_key, pub_key)
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
@ -22,44 +25,61 @@ def sign(data, privatekey):
def verify(data, publickey, sign):
import rsa
from rsa import pkcs1
from Crypt import CryptEd25519
from lib import Ed25519
## Onion Service V3
if len(publickey) == 32:
try:
valid = CryptEd25519.checkvalid(sign, data, publickey)
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):
from Crypt import CryptEd25519
import rsa
from rsa import pkcs1
from lib import Ed25519
## Onion Service V3
if len(privatekey) == 88:
prv_key = base64.b64decode(privatekey)
pub_key = CryptEd25519.publickey_unsafe(prv_key)
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 Crypt import CryptEd25519
from lib import Ed25519
## Onion Service V3
if len(publickey) == 32:
addr = CryptEd25519.publickey_to_onionaddress(publickey)[:-6]
addr = Ed25519.publickey_to_onionaddress(publickey)[:-6]
return addr
## Onion Service V2
return base64.b32encode(hashlib.sha1(publickey).digest()[:10]).lower().decode("ascii")

View file

@ -4,7 +4,7 @@ import pytest
import mock
from File import FileServer
from Crypt import CryptRsa
from Crypt import CryptTor
from Config import config
@pytest.mark.usefixtures("resetSettings")
@ -34,17 +34,17 @@ class TestTor:
address = tor_manager.addOnion()
# Sign
sign = CryptRsa.sign(b"hello", tor_manager.getPrivatekey(address))
sign = CryptTor.sign(b"hello", tor_manager.getPrivatekey(address))
assert len(sign) == 128
# Verify
publickey = CryptRsa.privatekeyToPublickey(tor_manager.getPrivatekey(address))
publickey = CryptTor.privatekeyToPublickey(tor_manager.getPrivatekey(address))
assert len(publickey) == 140
assert CryptRsa.verify(b"hello", publickey, sign)
assert not CryptRsa.verify(b"not hello", publickey, sign)
assert CryptTor.verify(b"hello", publickey, sign)
assert not CryptTor.verify(b"not hello", publickey, sign)
# Pub to address
assert CryptRsa.publickeyToOnion(publickey) == address
assert CryptTor.publickeyToOnion(publickey) == address
# Delete
tor_manager.delOnion(address)

View file

@ -12,8 +12,10 @@ import atexit
import gevent
from Config import config
from Crypt import CryptEd25519
from Crypt import CryptRsa
from lib import Ed25519
from Crypt import CryptTor
from Site import SiteManager
import socks
from gevent.lock import RLock
@ -272,7 +274,7 @@ class TorManager(object):
return self.privatekeys[address]
def getPublickey(self, address):
return CryptRsa.privatekeyToPublickey(self.privatekeys[address])
return CryptTor.privatekeyToPublickey(self.privatekeys[address])
def getOnion(self, site_address):
if not self.enabled: