new commands: encrypt and decrypt messages
authorThomasV <thomasv@gitorious>
Thu, 30 Jan 2014 13:43:46 +0000 (14:43 +0100)
committerThomasV <thomasv@gitorious>
Thu, 30 Jan 2014 13:43:46 +0000 (14:43 +0100)
lib/bitcoin.py
lib/commands.py

index c5bac60..ff6f555 100644 (file)
@@ -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
 
index f8fa0cf..bc307d2 100644 (file)
@@ -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('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('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]
+