34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
|
import pyelliptic
|
||
|
import arithmetic as a
|
||
|
def makeCryptor(privkey):
|
||
|
privkey_bin = '\x02\xca\x00 '+a.changebase(privkey,16,256,minlen=32)
|
||
|
pubkey = a.changebase(a.privtopub(privkey),16,256,minlen=65)[1:]
|
||
|
pubkey_bin = '\x02\xca\x00 '+pubkey[:32]+'\x00 '+pubkey[32:]
|
||
|
cryptor = pyelliptic.ECC(curve='secp256k1',privkey=privkey_bin,pubkey=pubkey_bin)
|
||
|
return cryptor
|
||
|
def hexToPubkey(pubkey):
|
||
|
pubkey_raw = a.changebase(pubkey[2:],16,256,minlen=64)
|
||
|
pubkey_bin = '\x02\xca\x00 '+pubkey_raw[:32]+'\x00 '+pubkey_raw[32:]
|
||
|
return pubkey_bin
|
||
|
def makePubCryptor(pubkey):
|
||
|
pubkey_bin = hexToPubkey(pubkey)
|
||
|
return pyelliptic.ECC(curve='secp256k1',pubkey=pubkey_bin)
|
||
|
# Converts hex private key into hex public key
|
||
|
def privToPub(privkey):
|
||
|
return a.privtopub(privkey)
|
||
|
# Encrypts message with hex public key
|
||
|
def encrypt(msg,hexPubkey):
|
||
|
return pyelliptic.ECC(curve='secp256k1').encrypt(msg,hexToPubkey(hexPubkey))
|
||
|
# Decrypts message with hex private key
|
||
|
def decrypt(msg,hexPrivkey):
|
||
|
return makeCryptor(hexPrivkey).decrypt(msg)
|
||
|
# Decrypts message with an existing pyelliptic.ecc.ECC object
|
||
|
def decryptFast(msg,cryptor):
|
||
|
return cryptor.decrypt(msg)
|
||
|
# Signs with hex private key
|
||
|
def sign(msg,hexPrivkey):
|
||
|
return makeCryptor(hexPrivkey).sign(msg)
|
||
|
# Verifies with hex public key
|
||
|
def verify(msg,sig,hexPubkey):
|
||
|
return makePubCryptor(hexPubkey).verify(sig,msg)
|