You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
python-trezor/tests/test_ecies.py

90 lines
4.4 KiB
Python

import unittest
import common
import binascii
import base64
from trezorlib.client import CallException
# as described here: http://memwallet.info/btcmssgs.html
class TestEcies(common.TrezorTest):
# index: m/1
# address: 1CK7SJdcb8z9HuvVft3D91HLpLC6KSsGb
# pubkey: 0338d78612e990f2eea0c426b5e48a8db70b9d7ed66282b3b26511e0b1c75515a6
# privkey: L5X3rf5hJfRt9ZjQzFopvSBGkpnSotn4jKGLL6ECJxcuT2JgGh65
# index: m/5
# address: 1Csf6LVPkv24FBs6bpj4ELPszE6mGf6jeV
# pubkey: 0234716c01c2dd03fa7ee302705e2b8fbd1311895d94b1dca15e62eedea9b0968f
# privkey: L4uKPRgaZqL9iGmge3UBSLGTQC7gDFrLRhC1vM4LmGyrzNUBb1Zs
def test_ecies(self):
self.setup_mnemonic_nopin_nopassphrase()
pubkey = binascii.unhexlify('0338d78612e990f2eea0c426b5e48a8db70b9d7ed66282b3b26511e0b1c75515a6')
# encrypt without signature
enc = self.client.encrypt_message(pubkey, 'testing message!', display_only=False, coin_name='Bitcoin', n=[])
print 'base64:', base64.b64encode(enc.nonce + enc.message + enc.hmac)
dec = self.client.decrypt_message([1], enc.nonce, enc.message, enc.hmac)
self.assertEqual(dec.message, 'testing message!')
self.assertEqual(dec.address, '')
# encrypt with signature
enc = self.client.encrypt_message(pubkey, 'testing message!', display_only=False, coin_name='Bitcoin', n=[5])
print 'base64:', base64.b64encode(enc.nonce + enc.message + enc.hmac)
dec = self.client.decrypt_message([1], enc.nonce, enc.message, enc.hmac)
self.assertEqual(dec.message, 'testing message!')
self.assertEqual(dec.address, '1Csf6LVPkv24FBs6bpj4ELPszE6mGf6jeV')
# encrypt without signature, show only on display
enc = self.client.encrypt_message(pubkey, 'testing message!', display_only=True, coin_name='Bitcoin', n=[])
dec = self.client.decrypt_message([1], enc.nonce, enc.message, enc.hmac)
self.assertEqual(dec.message, '')
self.assertEqual(dec.address, '')
# encrypt with signature, show only on display
enc = self.client.encrypt_message(pubkey, 'testing message!', display_only=True, coin_name='Bitcoin', n=[5])
dec = self.client.decrypt_message([1], enc.nonce, enc.message, enc.hmac)
self.assertEqual(dec.message, '')
self.assertEqual(dec.address, '')
def test_ecies_crosscheck(self):
self.setup_mnemonic_nopin_nopassphrase()
# decrypt message without signature
payload = 'AhA1yCZStrmtuGSgliJ7K02eD8xWRoyRU1ryPu9kBloODFv9hATpqukL0YSzISfrQGygYVai5OirxU0='
payload = base64.b64decode(payload)
nonce, msg, hmac = payload[:33], payload[33:-8], payload[-8:]
dec = self.client.decrypt_message([1], nonce, msg, hmac)
self.assertEqual(dec.message, 'testing message!')
self.assertEqual(dec.address, '')
# decrypt message without signature (same message, different nonce)
payload = 'A9ragu6UTXisBWw6bTCcM/SeR7fmlQp6Qzg9mpJ5qKBv9BIgWX/v/u+OhdlKLZTx6C0Xooz5aIvWrqw='
payload = base64.b64decode(payload)
nonce, msg, hmac = payload[:33], payload[33:-8], payload[-8:]
dec = self.client.decrypt_message([1], nonce, msg, hmac)
self.assertEqual(dec.message, 'testing message!')
self.assertEqual(dec.address, '')
# decrypt message with signature
payload = 'A90Awe+vrQvmzFvm0hh8Ver7jcBbqiCxV4RGU9knKf6F3vvG1N45Q3kc+N1sd4inzXZnW/5KH74CXaCPGAKr/a0n4BUhADVfS2Ic9Luwcs6/cuYHSzJKKLSPUYC6N4hu1K0q1vR/02BJ+iZ0pfvChoGDmpOOO7NaIEoyiKAnZFNsHr6Ffplg3YVGJAAG7GgfSQ=='
payload = base64.b64decode(payload)
nonce, msg, hmac = payload[:33], payload[33:-8], payload[-8:]
dec = self.client.decrypt_message([1], nonce, msg, hmac)
self.assertEqual(dec.message, 'testing message!')
self.assertEqual(dec.address, '1Csf6LVPkv24FBs6bpj4ELPszE6mGf6jeV')
# decrypt message with signature (same message, different nonce)
payload = 'AyeglkkBSc3VLNrXETiNtiS+t2nIKeEVGMVfF7KlVM+plBuX3yc+2kf+Yo6L1NKoqEjSlRXn71OTOEWfB2zmtasIX9dQBfyGluEivbeUfqbwneepEzv9/i0XI3ywfSa2HSdic8B68nZ3D6Mms4qOpzk6AEPt/yI7fl8aUsN0lxT8nVBfMmmg10oydvH/86cWYA=='
payload = base64.b64decode(payload)
nonce, msg, hmac = payload[:33], payload[33:-8], payload[-8:]
dec = self.client.decrypt_message([1], nonce, msg, hmac)
self.assertEqual(dec.message, 'testing message!')
self.assertEqual(dec.address, '1Csf6LVPkv24FBs6bpj4ELPszE6mGf6jeV')
if __name__ == '__main__':
unittest.main()