Beispiel #1
0
def test_rsa():
    bip85 = BIP85()
    test = bip85.bip39_mnemonic_to_entropy("m/83696968'/0'/0'", MNEMONIC)
    drng_reader = BIP85DRNG.new(test)
    rsa = RSA.generate(bits=2048, randfunc=drng_reader.read, e=65537)
    key = rsa.export_key(format='PEM', pkcs=1)
    key_hash = hashlib.sha256(key).hexdigest()
    expected = '64ff572798a6534c76eda9fd2d7e906a737a1bad893dec31ae3d0488e3f19ed9'
    assert key_hash == expected

    test = bip85.bip32_xprv_to_entropy("m/83696968'/0'/1'", XPRV)
    drng_reader = BIP85DRNG.new(test)
    rsa = RSA.generate(bits=2048, randfunc=drng_reader.read, e=65537)
    key = rsa.export_key(format='PEM', pkcs=1)
    key_hash = hashlib.sha256(key).hexdigest()
    expected = '54196fdcbb0cb55c56b14a7068ea633dc784dde21cbe4e7f30f857ec88f9ac36'
    assert key_hash == expected

    test = bip85.bip32_xprv_to_entropy("m/83696968'/0'/2'", XPRV)
    drng_reader = BIP85DRNG.new(test)
    rsa = RSA.generate(bits=4096, randfunc=drng_reader.read, e=65537)
    key = rsa.export_key(format='PEM', pkcs=1)
    key_hash = hashlib.sha256(key).hexdigest()
    expected = 'c03f358f4aad4a0216881ec258ed6923201d174f52069bc9bcd341bb611696d5'
    assert key_hash == expected
Beispiel #2
0
def bip39(xprv_string, language, words, index):
    # 83696968'/39'/language'/words'/index'
    lang_code = LANGUAGE_LOOKUP[language]
    bip85 = BIP85()
    path = f"83696968p/39p/{lang_code}p/{words}p/{index}p"

    entropy = bip85.bip32_xprv_to_entropy(path, xprv_string)
    return bip85.entropy_to_bip39(entropy, words, language)
Beispiel #3
0
def test_mnemonic_pwd():
    bip85 = BIP85()
    mnemonic = 'install scatter logic circle pencil average fall shoe quantum disease suspect usage'
    # with password
    test = bip85.bip39_mnemonic_to_entropy("m/83696968'/0'/0'", mnemonic,
                                           'TREZOR')
    expected = 'd24cee04c61c4a47751658d078ae9b0cc9550fe43eee643d5c10ac2e3f5edbca757b2bd74d55ff5bcc2b1608d567053660d9c7447ae1eb84b6619282fd391844'
    assert test.hex() == expected
Beispiel #4
0
def test_entropy_to_mnemonic():
    bip85 = BIP85()
    entropy = bip85.bip32_xprv_to_entropy("m/83696968'/0'/0'", XPRV)

    words12 = 'useful guitar veteran zone perfect october explain grant clarify december flight recycle'
    assert bip85.entropy_to_bip39(entropy, 12) == words12

    words15 = 'useful guitar veteran zone perfect october explain grant clarify december flight raw banana estate uncle'
    assert bip85.entropy_to_bip39(entropy, 15) == words15

    words24 = 'useful guitar veteran zone perfect october explain grant clarify december flight raw banana estate unfair grow search witness echo market primary alley forward boring'
    assert bip85.entropy_to_bip39(entropy, 24) == words24
Beispiel #5
0
def test_lengths():
    bip85 = BIP85()
    test = bip85.bip32_xprv_to_entropy("m/83696968'/0'/0'", XPRV)
    drng = BIP85DRNG.new(test)

    assert len(drng.read(1)) == 1
    assert len(drng.read(10)) == 10
    assert len(drng.read(100)) == 100
    assert len(drng.read(1000)) == 1000
    assert len(drng.read(10000)) == 10000
    assert len(drng.read(100000)) == 100000
    assert len(drng.read(10000001)) == 10000001
Beispiel #6
0
def test_determinism():
    bip85 = BIP85()
    test = bip85.bip39_mnemonic_to_entropy("m/83696968'/0'/0'", MNEMONIC)
    drng1 = BIP85DRNG.new(test)
    drng2 = BIP85DRNG.new(test)
    drng3 = BIP85DRNG.new(test)

    result1 = drng1.read(10).hex() + drng1.read(20).hex() + drng1.read(
        30).hex() + drng1.read(40).hex()
    result2 = drng2.read(40).hex() + drng2.read(30).hex() + drng2.read(
        20).hex() + drng2.read(10).hex()
    result3 = drng3.read(100).hex()

    assert result1 == result2
    assert result2 == result3
Beispiel #7
0
def test_mnemonic():
    bip85 = BIP85()
    entropy = bip85.bip32_xprv_to_entropy("m/83696968'/39'/0'/12'/0'", XPRV)
    assert entropy[:16].hex() == '6250b68daf746d12a24d58b4787a714b'
    assert bip85.entropy_to_bip39(entropy, 12) == \
                     'girl mad pet galaxy egg matter matrix prison refuse sense ordinary nose'

    entropy = bip85.bip32_xprv_to_entropy("m/83696968'/39'/0'/18'/0'", XPRV)
    assert entropy[:24].hex(
    ) == '938033ed8b12698449d4bbca3c853c66b293ea1b1ce9d9dc'
    assert bip85.entropy_to_bip39(entropy, 18) == \
                     'near account window bike charge season chef number sketch tomorrow excuse sniff circle vital hockey outdoor supply token'

    entropy = bip85.bip32_xprv_to_entropy("m/83696968'/39'/0'/24'/0'", XPRV)
    assert entropy[:32].hex(
    ) == 'ae131e2312cdc61331542efe0d1077bac5ea803adf24b313a4f0e48e9c51f37f'
    assert bip85.entropy_to_bip39(entropy, 24) == \
                     'puppy ocean match cereal symbol another shed magic wrap hammer bulb intact gadget divorce twin tonight reason outdoor destroy simple truth cigar social volcano'
Beispiel #8
0
def test_drng_exceptions():
    bip85 = BIP85()
    test = bip85.bip39_mnemonic_to_entropy("m/83696968'/0'/1'", MNEMONIC)
    for i in range(64):
        with pytest.raises(
                ValueError,
                match="BIP85DRNG input entropy must be exactly 512 bits."):
            BIP85DRNG.new(test[:i])

    for i in [
            True,
            False,
            None,
        [],
        {},
        (),
            '1234567890123456789012345678901234567890123456789012345678901234',
            int(123456789),
    ]:
        with pytest.raises(TypeError,
                           match="BIP85DRNG input entropy must be bytes."):
            BIP85DRNG.new(i)
Beispiel #9
0
def test_drng():
    bip85 = BIP85()
    test = bip85.bip39_mnemonic_to_entropy("m/83696968'/0'/0'", MNEMONIC)
    drng = BIP85DRNG.new(test)
    expected = 'b78b1ee6b345eae6836c2d53d33c64cdaf9a696487be81b03e822dc84b3f1cd883d7559e53d175f243e4c349e822a957bbff'
    assert drng.read(50).hex() == expected
    expected = '9224bc5dde9492ef54e8a439f6bc8c7355b87a925a37ee405a7502991111cd2dddaf1883f4e962abf4fb4b31cd28d5cf6b14f6ddcc9c19fd56d7f960a4b27f1d423a55dda4865aa6ddd6b4c26f18d400bb0a593e6c785d6d7e28c9c64608624318eddc01'
    assert drng.read(100).hex() == expected
    expected = '23750caa2a271f35faa6a3ca292b4be357404eca6842c69a3717dc3e41f7b38c67be492395b32221470aa08a2c489018c635a175f731245330e1f47091dbfb26f2923d10bd2e09280bffd1d94eb2a88f964aeb1774da04aad3bb1fdde0f77cd5ca79617ae317375417a51339523057bebef434c4400303890332e458425242f56a4293dad4f632b82713467b18ed6e1dab633220523d'
    assert drng.read(150).hex() == expected

    test = bip85.bip32_xprv_to_entropy("m/83696968'/0'/0'", XPRV)
    drng = BIP85DRNG.new(test)
    expected = 'b78b1ee6b345eae6836c2d53d33c64cdaf9a696487be81b03e822dc84b3f1cd883d7559e53d175f243e4c349e822a957bbff9224bc5dde9492ef54e8a439f6bc8c7355b87a925a37ee405a7502991111'
    assert drng.read(80).hex() == expected
    expected = 'cd2dddaf1883f4e962abf4fb4b31cd28d5cf6b14f6ddcc9c19'
    assert drng.read(25).hex() == expected

    test = bip85.bip32_xprv_to_entropy("m/83696968'/0'/0'", XPRV)
    drng = BIP85DRNG.new(test)
    expected = 'b78b1ee6b345eae6836c2d53d33c64cdaf9a6964'
    assert drng.read(20).hex() == expected
    expected = '87be81b03e822dc84b3f1cd883d7559e53d175f243e4c349e8'
    assert drng.read(25).hex() == expected
Beispiel #10
0
def test_xprv():
    bip85 = BIP85()
    result = bip85.bip32_xprv_to_xprv("83696968'/32'/0'", XPRV)
    assert result == 'xprv9s21ZrQH143K2srSbCSg4m4kLvPMzcWydgmKEnMmoZUurYuBuYG46c6P71UGXMzmriLzCCBvKQWBUv3vPB3m1SATMhp3uEjXHJ42jFg7myX'
Beispiel #11
0
def test_wif_from_entropy():
    bip85 = BIP85()
    entropy = bip85.bip32_xprv_to_entropy("m/83696968'/2'/0'", XPRV)
    entropy = entropy[:32]
    assert bip85.entropy_to_wif(
        entropy) == 'Kzyv4uF39d4Jrw2W7UryTHwZr1zQVNk4dAFyqE6BuMrMh1Za7uhp'
Beispiel #12
0
def test_xprv_to_entropy():
    bip85 = BIP85()
    test = bip85.bip32_xprv_to_entropy("m/83696968'/0'/0'", XPRV)
    expected = 'efecfbccffea313214232d29e71563d941229afb4338c21f9517c41aaa0d16f00b83d2a09ef747e7a64e8e2bd5a14869e693da66ce94ac2da570ab7ee48618f7'
    assert test.hex() == expected
Beispiel #13
0
def test_mnemonic():
    bip85 = BIP85()
    mnemonic = 'install scatter logic circle pencil average fall shoe quantum disease suspect usage'
    test = bip85.bip39_mnemonic_to_entropy("m/83696968'/0'/0'", mnemonic)
    expected = 'efecfbccffea313214232d29e71563d941229afb4338c21f9517c41aaa0d16f00b83d2a09ef747e7a64e8e2bd5a14869e693da66ce94ac2da570ab7ee48618f7'
    assert test.hex() == expected
Beispiel #14
0
def test_hex(path, width, expect):
    bip85 = BIP85()
    assert bip85.bip32_xprv_to_hex(path, width, XPRV) == expect
Beispiel #15
0
def wif(xprv_string, index):
    # m/83696968'/2'/index'
    bip85 = BIP85()
    path = f"83696968p/2p/{index}p"
    return bip85.entropy_to_wif(bip85.bip32_xprv_to_entropy(path, xprv_string))
Beispiel #16
0
def xprv(xprv_string, index):
    # 83696968'/32'/index'
    bip85 = BIP85()
    path = f"83696968p/32p/{index}p"
    return bip85.bip32_xprv_to_xprv(path, xprv_string)
Beispiel #17
0
def hex(xprv_string, index, width):
    # m/83696968'/128169p'/index'
    bip85 = BIP85()
    path = f"83696968p/128169p/{width}p/{index}p"
    return bip85.bip32_xprv_to_hex(path, width, xprv_string)