def test_b9p_vectors(dev, set_seed_words, need_keypress, vector, pw='RoZert'[::-1].upper()): # Test all BIP39 vectors. Slow. _, words, cooked, xprv = vector seed = Mnemonic.to_seed(words, passphrase=pw) assert seed == a2b_hex(cooked) set_seed_words(words) dev.send_recv(CCProtocolPacker.bip39_passphrase(pw), timeout=None) need_keypress('y') xpub = None while xpub == None: time.sleep(0.050) xpub = dev.send_recv(CCProtocolPacker.get_passphrase_done(), timeout=None) # check our math (ignore testnet vs. mainnet) got = BIP32Node.from_wallet_key(xpub) exp = BIP32Node.from_wallet_key(xprv) assert got.public_pair() == exp.public_pair()
def test_b39p_refused(dev, need_keypress, pw='testing 123'): # user can refuse the passphrase (cancel) dev.send_recv(CCProtocolPacker.bip39_passphrase(pw), timeout=None) need_keypress('x') with pytest.raises(CCUserRefused): done = None while done == None: time.sleep(0.050) done = dev.send_recv(CCProtocolPacker.get_passphrase_done(), timeout=None)
def doit(pw): # reset from previous runs words = reset_seed_words() # optimization if pw == '': return simulator_fixed_xfp print(f"Setting BIP39 pw: {pw}") dev.send_recv(CCProtocolPacker.bip39_passphrase(pw), timeout=None) if pw: time.sleep(0.050) title, body = cap_story() assert pw not in body # verify display of passphrase need_keypress('2') time.sleep(0.050) title, body = cap_story() assert pw in body need_keypress('y') done = None while done == None: time.sleep(0.050) done = dev.send_recv(CCProtocolPacker.get_passphrase_done(), timeout=None) xpub = done assert xpub[1:4] == 'pub' got = BIP32Node.from_wallet_key(xpub) # what it should be seed = Mnemonic.to_seed(words, passphrase=pw) expect = BIP32Node.from_master_secret(seed) assert got.public_pair() == expect.public_pair() xfp, = struct.unpack('I', expect.fingerprint()) return xfp
def test_b9p_basic(dev, need_keypress, pw, reset_seed_words, cap_story): # reset from previous runs words = reset_seed_words() dev.send_recv(CCProtocolPacker.bip39_passphrase(pw), timeout=None) if pw: time.sleep(0.050) title, body = cap_story() assert pw not in body # verify display of passphrase need_keypress('2') time.sleep(0.050) title, body = cap_story() assert pw in body need_keypress('y') done = None while done == None: time.sleep(0.050) done = dev.send_recv(CCProtocolPacker.get_passphrase_done(), timeout=None) xpub = done assert xpub[1:4] == 'pub' got = BIP32Node.from_wallet_key(xpub) # what it should be seed = Mnemonic.to_seed(words, passphrase=pw) expect = BIP32Node.from_master_secret(seed) assert got.public_pair() == expect.public_pair()
def test_b39_fails(dev, pw): with pytest.raises(CCProtoError): dev.send_recv(CCProtocolPacker.bip39_passphrase(pw), timeout=None)