94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
# (c) Copyright 2018 by Coinkite Inc. This file is part of Coldcard <coldcardwallet.com>
|
|
# and is covered by GPLv3 license found in COPYING.
|
|
#
|
|
# Run tests on the simulator itself, not here... these are basically "unit tests"
|
|
#
|
|
import pytest, glob
|
|
|
|
def test_remote_exec(sim_exec):
|
|
assert sim_exec("RV.write('testing123')") == 'testing123'
|
|
|
|
def test_codecs(sim_execfile):
|
|
assert sim_execfile('devtest/segwit_addr.py') == ''
|
|
|
|
def test_public(sim_execfile):
|
|
"verify contents of public 'dump' file"
|
|
from pycoin.key.BIP32Node import BIP32Node
|
|
from pycoin.contrib.segwit_addr import encode as sw_encode
|
|
from pycoin.contrib.segwit_addr import decode as sw_decode
|
|
from pycoin.encoding import a2b_hashed_base58, hash160
|
|
|
|
pub = sim_execfile('devtest/dump_public.py')
|
|
assert 'Error' not in pub
|
|
|
|
#print(pub)
|
|
|
|
pub, dev = pub.split('#DEBUG#', 1)
|
|
assert 'pub' in pub
|
|
assert 'prv' not in pub
|
|
assert 'prv' in dev
|
|
|
|
lines = [i.strip() for i in pub.split('\n')]
|
|
|
|
for ln in lines:
|
|
if ln[1:4] == 'pub':
|
|
node_pub = BIP32Node.from_wallet_key(ln)
|
|
break
|
|
|
|
node_prv = BIP32Node.from_wallet_key(dev.strip())
|
|
|
|
# pub and private are linked
|
|
assert node_prv.hwif(as_private=False) == node_pub.hwif()
|
|
|
|
# check every path we derived
|
|
count = 0
|
|
for ln in lines:
|
|
if ln[0:1] == 'm' and '=>' in ln:
|
|
subpath, result = ln.split(' => ', 1)
|
|
|
|
sk = node_prv.subkey_for_path(subpath[2:])
|
|
|
|
if result[0:2] in {'tp', 'xp'}:
|
|
expect = BIP32Node.from_wallet_key(result)
|
|
assert sk.hwif(as_private=False) == result
|
|
elif result[0] in '1mn':
|
|
assert result == sk.address(False)
|
|
elif result[0:3] in { 'bc1', 'tb1' }:
|
|
h20 = sk.hash160()
|
|
assert result == sw_encode(result[0:2], 0, h20)
|
|
elif result[0] in '23':
|
|
h20 = hash160(b'\x00\x14' + sk.hash160())
|
|
assert h20 == a2b_hashed_base58(result)[1:]
|
|
else:
|
|
raise ValueError(result)
|
|
|
|
count += 1
|
|
print("OK: %s" % ln)
|
|
|
|
|
|
assert count > 12
|
|
|
|
|
|
def test_nvram(unit_test):
|
|
# exercise nvram simulation
|
|
unit_test('devtest/nvram.py')
|
|
|
|
def test_backups(unit_test):
|
|
# exercise dump of pub data
|
|
# NOTE: previous tests might have wiped default mnemonic-based seed; so it fails.
|
|
unit_test('devtest/backups.py')
|
|
|
|
def test_bip143(unit_test):
|
|
# exercise hash digesting for bip143 signatures
|
|
unit_test('devtest/unit_bip143.py')
|
|
|
|
def test_addr_decode(unit_test):
|
|
# - runs som known examples thru CTxIn and check it categories, and extracts pubkey/pkh right
|
|
unit_test('devtest/unit_addrs.py')
|
|
|
|
def test_clear_seed(unit_test):
|
|
# just testing the test?
|
|
unit_test('devtest/clear_seed.py')
|
|
|
|
# EOF
|