Move pointMult function to highlevelcrypto

Copy pointMult function from class_addressGenerator.py to highlevelcrypto.py
This commit is contained in:
bmng-dev 2014-05-21 09:59:08 +00:00
parent cc21d629c9
commit ecf78801bf

View File

@ -1,5 +1,5 @@
import pyelliptic import pyelliptic
from pyelliptic import arithmetic as a from pyelliptic import arithmetic as a, OpenSSL
def makeCryptor(privkey): def makeCryptor(privkey):
privkey_bin = '\x02\xca\x00 '+a.changebase(privkey,16,256,minlen=32) privkey_bin = '\x02\xca\x00 '+a.changebase(privkey,16,256,minlen=32)
pubkey = a.changebase(a.privtopub(privkey),16,256,minlen=65)[1:] pubkey = a.changebase(a.privtopub(privkey),16,256,minlen=65)[1:]
@ -31,3 +31,23 @@ def sign(msg,hexPrivkey):
# Verifies with hex public key # Verifies with hex public key
def verify(msg,sig,hexPubkey): def verify(msg,sig,hexPubkey):
return makePubCryptor(hexPubkey).verify(sig,msg) return makePubCryptor(hexPubkey).verify(sig,msg)
# Does an EC point multiplication; turns a private key into a public key.
def pointMult(secret):
k = OpenSSL.EC_KEY_new_by_curve_name(OpenSSL.get_curve('secp256k1'))
priv_key = OpenSSL.BN_bin2bn(secret, 32, None)
group = OpenSSL.EC_KEY_get0_group(k)
pub_key = OpenSSL.EC_POINT_new(group)
OpenSSL.EC_POINT_mul(group, pub_key, priv_key, None, None, None)
OpenSSL.EC_KEY_set_private_key(k, priv_key)
OpenSSL.EC_KEY_set_public_key(k, pub_key)
size = OpenSSL.i2o_ECPublicKey(k, None)
mb = OpenSSL.create_string_buffer(size)
OpenSSL.i2o_ECPublicKey(k, OpenSSL.byref(OpenSSL.pointer(mb)))
OpenSSL.EC_POINT_free(pub_key)
OpenSSL.BN_free(priv_key)
OpenSSL.EC_KEY_free(k)
return mb.raw