Bring V2 support back
This commit is contained in:
parent
a0ae8897d7
commit
9deee251d0
1 changed files with 63 additions and 16 deletions
|
@ -2,17 +2,34 @@ import base64
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
def sign(data, privatekey):
|
def sign(data, privatekey):
|
||||||
|
import rsa
|
||||||
|
from rsa import pkcs1
|
||||||
from lib import Ed25519
|
from lib import Ed25519
|
||||||
|
|
||||||
|
## Onion Service V3
|
||||||
|
if len(privatekey) == 88:
|
||||||
prv_key = base64.b64decode(privatekey)
|
prv_key = base64.b64decode(privatekey)
|
||||||
pub_key = Ed25519.publickey_unsafe(prv_key)
|
pub_key = Ed25519.publickey_unsafe(prv_key)
|
||||||
sign = Ed25519.signature_unsafe(data, prv_key, pub_key)
|
sign = Ed25519.signature_unsafe(data, prv_key, pub_key)
|
||||||
|
|
||||||
return sign
|
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):
|
def verify(data, publickey, sign):
|
||||||
|
import rsa
|
||||||
|
from rsa import pkcs1
|
||||||
from lib import Ed25519
|
from lib import Ed25519
|
||||||
|
|
||||||
|
## Onion Service V3
|
||||||
|
if len(publickey) == 32:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
valid = Ed25519.checkvalid(sign, data, publickey)
|
valid = Ed25519.checkvalid(sign, data, publickey)
|
||||||
valid = 'SHA-256'
|
valid = 'SHA-256'
|
||||||
|
@ -23,16 +40,46 @@ def verify(data, publickey, sign):
|
||||||
|
|
||||||
return valid
|
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):
|
def privatekeyToPublickey(privatekey):
|
||||||
|
import rsa
|
||||||
|
from rsa import pkcs1
|
||||||
from lib import Ed25519
|
from lib import Ed25519
|
||||||
|
|
||||||
|
## Onion Service V3
|
||||||
|
if len(privatekey) == 88:
|
||||||
prv_key = base64.b64decode(privatekey)
|
prv_key = base64.b64decode(privatekey)
|
||||||
pub_key = Ed25519.publickey_unsafe(prv_key)
|
pub_key = Ed25519.publickey_unsafe(prv_key)
|
||||||
|
|
||||||
return pub_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):
|
def publickeyToOnion(publickey):
|
||||||
from lib import Ed25519
|
from lib import Ed25519
|
||||||
|
|
||||||
|
## Onion Service V3
|
||||||
|
if len(publickey) == 32:
|
||||||
addr = Ed25519.publickey_to_onionaddress(publickey)[:-6]
|
addr = Ed25519.publickey_to_onionaddress(publickey)[:-6]
|
||||||
|
|
||||||
return addr
|
return addr
|
||||||
|
|
||||||
|
## Onion Service V2
|
||||||
|
return base64.b32encode(hashlib.sha1(publickey).digest()[:10]).lower().decode("ascii")
|
||||||
|
|
Loading…
Reference in a new issue