diff --git a/.gitignore b/.gitignore index 2bfa335e..e0b53ed0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ build/ dist/ python_trezor.egg-info/ trezor.egg-info/ +keepkey.egg-info/ *.pyc *.bin *.py.cache diff --git a/keepkeyctl b/keepkeyctl index 58715658..b6d105a8 100755 --- a/keepkeyctl +++ b/keepkeyctl @@ -23,6 +23,7 @@ from __future__ import print_function import os +import sys import binascii import argparse import json @@ -275,33 +276,20 @@ class Commands(object): signature = base64.b64decode(args.signature) return self.client.verify_message(args.coin, args.address, signature, args.message) - def encrypt_message(self, args): - pubkey = binascii.unhexlify(args.pubkey) - address_n = self.client.expand_path(args.n) - ret = self.client.encrypt_message(pubkey, args.message, args.display_only, args.coin, address_n) - output = { - 'nonce': binascii.hexlify(ret.nonce), - 'message': binascii.hexlify(ret.message), - 'hmac': binascii.hexlify(ret.hmac), - 'payload': base64.b64encode(ret.nonce + ret.message + ret.hmac), - } - return output - - def decrypt_message(self, args): - address_n = self.client.expand_path(args.n) - payload = base64.b64decode(args.payload) - nonce, message, msg_hmac = payload[:33], payload[33:-8], payload[-8:] - ret = self.client.decrypt_message(address_n, nonce, message, msg_hmac) - return ret - def encrypt_keyvalue(self, args): address_n = self.client.expand_path(args.n) - ret = self.client.encrypt_keyvalue(address_n, args.key, args.value) + if sys.version_info > (3,): + ret = self.client.encrypt_keyvalue(address_n, args.key, bytes(args.value, 'utf-8')) + else: + ret = self.client.encrypt_keyvalue(address_n, args.key, args.value) return binascii.hexlify(ret) def decrypt_keyvalue(self, args): address_n = self.client.expand_path(args.n) - ret = self.client.decrypt_keyvalue(address_n, args.key, args.value.decode("hex")) + if sys.version_info > (3,): + ret = self.client.decrypt_keyvalue(address_n, args.key, bytes.fromhex(args.value)) + else: + ret = self.client.decrypt_keyvalue(address_n, args.key, args.value.decode("hex")) return ret def firmware_update(self, args): @@ -355,8 +343,6 @@ class Commands(object): reset_device.help = 'Perform device setup and generate new seed' sign_message.help = 'Sign message using address of given path' verify_message.help = 'Verify message' - encrypt_message.help = 'Encrypt message' - decrypt_message.help = 'Decrypt message' encrypt_keyvalue.help = 'Encrypt value by given key and path' decrypt_keyvalue.help = 'Decrypt value by given key and path' firmware_update.help = 'Upload new firmware to device (must be in bootloader mode)' @@ -447,19 +433,6 @@ class Commands(object): (('message',), {'type': str}), ) - encrypt_message.arguments = ( - (('pubkey',), {'type': str}), - (('message',), {'type': str}), - (('-d', '--display-only'), {'action': 'store_true', 'default': False}), - (('-c', '--coin'), {'type': str, 'default': 'Bitcoin'}), - (('-n', '-address'), {'type': str}), - ) - - decrypt_message.arguments = ( - (('-n', '-address'), {'type': str}), - (('payload',), {'type': str}), - ) - verify_message.arguments = ( (('-c', '--coin'), {'type': str, 'default': 'Bitcoin'}), (('address',), {'type': str}), diff --git a/keepkeylib/client.py b/keepkeylib/client.py index 0e87d1cf..2c2556de 100644 --- a/keepkeylib/client.py +++ b/keepkeylib/client.py @@ -690,19 +690,6 @@ def verify_message(self, coin_name, address, signature, message): return True return False - @expect(proto.EncryptedMessage) - def encrypt_message(self, pubkey, message, display_only, coin_name, n): - if coin_name and n: - n = self._convert_prime(n) - return self.call(proto.EncryptMessage(pubkey=pubkey, message=message, display_only=display_only, coin_name=coin_name, address_n=n)) - else: - return self.call(proto.EncryptMessage(pubkey=pubkey, message=message, display_only=display_only)) - - @expect(proto.DecryptedMessage) - def decrypt_message(self, n, nonce, message, msg_hmac): - n = self._convert_prime(n) - return self.call(proto.DecryptMessage(address_n=n, nonce=nonce, message=message, hmac=msg_hmac)) - @field('value') @expect(proto.CipheredKeyValue) def encrypt_keyvalue(self, n, key, value, ask_on_encrypt=True, ask_on_decrypt=True, iv=b''):