new commands: encrypt and decrypt messages
This commit is contained in:
parent
ae3cb372c8
commit
631c967df9
|
@ -230,8 +230,7 @@ def regenerate_key(sec):
|
||||||
if not b:
|
if not b:
|
||||||
return False
|
return False
|
||||||
b = b[0:32]
|
b = b[0:32]
|
||||||
secret = int('0x' + b.encode('hex'), 16)
|
return EC_KEY(b)
|
||||||
return EC_KEY(secret)
|
|
||||||
|
|
||||||
def GetPubKey(pubkey, compressed=False):
|
def GetPubKey(pubkey, compressed=False):
|
||||||
return i2o_ECPublicKey(pubkey, compressed)
|
return i2o_ECPublicKey(pubkey, compressed)
|
||||||
|
@ -368,7 +367,8 @@ def ser_to_point(Aser):
|
||||||
|
|
||||||
|
|
||||||
class EC_KEY(object):
|
class EC_KEY(object):
|
||||||
def __init__( self, secret ):
|
def __init__( self, k ):
|
||||||
|
secret = string_to_number(k)
|
||||||
self.pubkey = ecdsa.ecdsa.Public_key( generator_secp256k1, generator_secp256k1 * secret )
|
self.pubkey = ecdsa.ecdsa.Public_key( generator_secp256k1, generator_secp256k1 * secret )
|
||||||
self.privkey = ecdsa.ecdsa.Private_key( self.pubkey, secret )
|
self.privkey = ecdsa.ecdsa.Private_key( self.pubkey, secret )
|
||||||
self.secret = secret
|
self.secret = secret
|
||||||
|
@ -557,7 +557,7 @@ def CKD(k, c, n):
|
||||||
import hmac
|
import hmac
|
||||||
from ecdsa.util import string_to_number, number_to_string
|
from ecdsa.util import string_to_number, number_to_string
|
||||||
order = generator_secp256k1.order()
|
order = generator_secp256k1.order()
|
||||||
keypair = EC_KEY(string_to_number(k))
|
keypair = EC_KEY(k)
|
||||||
K = GetPubKey(keypair.pubkey,True)
|
K = GetPubKey(keypair.pubkey,True)
|
||||||
|
|
||||||
if n & BIP32_PRIME: # We want to make a "secret" address that can't be determined from K
|
if n & BIP32_PRIME: # We want to make a "secret" address that can't be determined from K
|
||||||
|
@ -698,7 +698,7 @@ def test_crypto():
|
||||||
|
|
||||||
message = "Chancellor on brink of second bailout for banks"
|
message = "Chancellor on brink of second bailout for banks"
|
||||||
enc = EC_KEY.encrypt_message(message,pubkey_c)
|
enc = EC_KEY.encrypt_message(message,pubkey_c)
|
||||||
eck = EC_KEY(pvk)
|
eck = EC_KEY(number_to_string(pvk,_r))
|
||||||
dec = eck.decrypt_message(enc)
|
dec = eck.decrypt_message(enc)
|
||||||
print "decrypted", dec
|
print "decrypted", dec
|
||||||
|
|
||||||
|
|
|
@ -95,6 +95,8 @@ register_command('signmessage', 2,-1, False, True, True, 'Sign a mess
|
||||||
register_command('unfreeze', 1, 1, False, True, False, 'Unfreeze the funds at one of your wallet\'s address', 'unfreeze <address>')
|
register_command('unfreeze', 1, 1, False, True, False, 'Unfreeze the funds at one of your wallet\'s address', 'unfreeze <address>')
|
||||||
register_command('validateaddress', 1, 1, False, False, False, 'Check that the address is valid', 'validateaddress <address>')
|
register_command('validateaddress', 1, 1, False, False, False, 'Check that the address is valid', 'validateaddress <address>')
|
||||||
register_command('verifymessage', 3,-1, False, False, False, 'Verifies a signature', verifymessage_syntax)
|
register_command('verifymessage', 3,-1, False, False, False, 'Verifies a signature', verifymessage_syntax)
|
||||||
|
register_command('encrypt', 2,-1, False, False, False, 'encrypt a message with pubkey')
|
||||||
|
register_command('decrypt', 2,-1, False, False, False, 'decrypt a message with privkey')
|
||||||
|
|
||||||
register_command('daemon', 1, 1, True, False, False, 'start/stop daemon')
|
register_command('daemon', 1, 1, True, False, False, 'start/stop daemon')
|
||||||
register_command('getproof', 1, 1, True, False, False, 'start/stop daemon')
|
register_command('getproof', 1, 1, True, False, False, 'start/stop daemon')
|
||||||
|
@ -390,5 +392,13 @@ class Commands:
|
||||||
else:
|
else:
|
||||||
return "unknown transaction"
|
return "unknown transaction"
|
||||||
|
|
||||||
|
def encrypt(self, pubkey, message):
|
||||||
|
return EC_KEY.encrypt_message(message, pubkey.decode('hex'))
|
||||||
|
|
||||||
|
def decrypt(self, private_key, message):
|
||||||
|
eck = EC_KEY(private_key.decode('hex'))
|
||||||
|
decrypted = eck.decrypt_message(message)
|
||||||
|
return decrypted[0]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue