From: ThomasV Date: Thu, 30 Jan 2014 13:43:46 +0000 (+0100) Subject: new commands: encrypt and decrypt messages X-Git-Url: https://git.novaco.in/?a=commitdiff_plain;h=631c967df9c7d574266fa13a02e2e6435f2b7798;p=electrum-nvc.git new commands: encrypt and decrypt messages --- diff --git a/lib/bitcoin.py b/lib/bitcoin.py index c5bac60..ff6f555 100644 --- a/lib/bitcoin.py +++ b/lib/bitcoin.py @@ -230,8 +230,7 @@ def regenerate_key(sec): if not b: return False b = b[0:32] - secret = int('0x' + b.encode('hex'), 16) - return EC_KEY(secret) + return EC_KEY(b) def GetPubKey(pubkey, compressed=False): return i2o_ECPublicKey(pubkey, compressed) @@ -368,7 +367,8 @@ def ser_to_point(Aser): 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.privkey = ecdsa.ecdsa.Private_key( self.pubkey, secret ) self.secret = secret @@ -557,7 +557,7 @@ def CKD(k, c, n): import hmac from ecdsa.util import string_to_number, number_to_string order = generator_secp256k1.order() - keypair = EC_KEY(string_to_number(k)) + keypair = EC_KEY(k) K = GetPubKey(keypair.pubkey,True) 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" 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) print "decrypted", dec diff --git a/lib/commands.py b/lib/commands.py index f8fa0cf..bc307d2 100644 --- a/lib/commands.py +++ b/lib/commands.py @@ -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
') register_command('validateaddress', 1, 1, False, False, False, 'Check that the address is valid', 'validateaddress
') 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('getproof', 1, 1, True, False, False, 'start/stop daemon') @@ -390,5 +392,13 @@ class Commands: else: 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] +