From da15179046fd5df7ac1d7045a2d3b0cf82f30940 Mon Sep 17 00:00:00 2001 From: solipsis Date: Mon, 16 Oct 2017 15:03:29 -0600 Subject: [PATCH 1/3] python2.7-3.6 support for encrypt_keyvalue and decrypt_keyvalue --- .gitignore | 1 + keepkeyctl | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) 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..4523d27c 100755 --- a/keepkeyctl +++ b/keepkeyctl @@ -8,7 +8,7 @@ # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation, either version 3 of the License, or +# the Free Software Foundation, either version 3 of the Lice'0338d78612e990f2eea0c426b5e48a8db70b9d7ed66282b3b26511e0b1c75515a6'nse, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, @@ -23,6 +23,7 @@ from __future__ import print_function import os +import sys import binascii import argparse import json @@ -296,12 +297,18 @@ class Commands(object): 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): From ee39b62ba35949746ed3c99da06c3193df46fc61 Mon Sep 17 00:00:00 2001 From: solipsis Date: Mon, 16 Oct 2017 15:03:29 -0600 Subject: [PATCH 2/3] python2.7-3.6 support for encrypt_keyvalue and decrypt_keyvalue --- .gitignore | 1 + keepkeyctl | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) 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..c5555c12 100755 --- a/keepkeyctl +++ b/keepkeyctl @@ -23,6 +23,7 @@ from __future__ import print_function import os +import sys import binascii import argparse import json @@ -296,12 +297,18 @@ class Commands(object): 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): From 7966c6dd1384cd9ac875079ed59c4647e70cb397 Mon Sep 17 00:00:00 2001 From: solipsis Date: Mon, 16 Oct 2017 15:21:37 -0600 Subject: [PATCH 3/3] remove deprecated encrypt_message and decrypt_message --- keepkeyctl | 34 ---------------------------------- keepkeylib/client.py | 13 ------------- 2 files changed, 47 deletions(-) diff --git a/keepkeyctl b/keepkeyctl index c5555c12..b6d105a8 100755 --- a/keepkeyctl +++ b/keepkeyctl @@ -276,25 +276,6 @@ 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) if sys.version_info > (3,): @@ -362,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)' @@ -454,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''):