Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
def test_b39_fails(dev, pw):

    with pytest.raises(CCProtoError):
        dev.send_recv(CCProtocolPacker.bip39_passphrase(pw), timeout=None)