Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@ build/
dist/
python_trezor.egg-info/
trezor.egg-info/
keepkey.egg-info/
*.pyc
*.bin
*.py.cache
Expand Down
45 changes: 9 additions & 36 deletions keepkeyctl
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@

from __future__ import print_function
import os
import sys
import binascii
import argparse
import json
Expand DownExpand Up@@ -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):
Expand DownExpand Up@@ -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)'
Expand DownExpand Up@@ -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}),
Expand Down
13 changes: 0 additions & 13 deletions keepkeylib/client.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -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''):
Expand Down