def test_extract_checksum(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         with self.subTest(mnemonic=test_vector[1]):
             entropy = Entropy(unhexlify(test_vector[0]))
             checksum = extract_checksum(test_vector[1])
             # See `TestEntropy.test_checksum`.
             self.assertEqual(entropy.checksum(), checksum)
 def test_checksum(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         with self.subTest(entropy=test_vector[0]):
             # See `TestInternalTestHelpers.test_extract_checksum`.
             checksum_from_mnemonic_phrase = extract_checksum(test_vector[1])
             entropy = Entropy(unhexlify(test_vector[0]))
             self.assertEqual(checksum_from_mnemonic_phrase, entropy.checksum())
    def test___init___invalid_argument(self):
        # noinspection SpellCheckingInspection
        test_cases_type = [None, '', '1234567890abcd', 'NonHexaString_!?', 0, 123, [b'']]
        for test in test_cases_type:
            with self.assertRaises(TypeError):
                # noinspection PyTypeChecker
                Entropy(test)  # type: ignore

        test_cases_value = [b'', b'tooShort', b'Well26BytesIsNotGonnaCutIT', b'Not15neitherLol',
                            b'soLongItHurtsHurDurBlaBlaButAnywayThisShouldFail123456789101112131415',
                            unhexlify(TREZOR_TEST_VECTORS['english'][0][2]) + b'almost_ok']
        for test in test_cases_value:
            with self.assertRaises(ValueError):
                Entropy(test)
 def test_generate(self):
     for i in range(self.SUBTEST_COUNT):
         password = get_random_valid_password()
         entropy_bytes = get_random_valid_entropy_bytes()
         with self.subTest(i=i,
                           entropy_bytes=entropy_bytes,
                           password=password):
             mnemonic_slytherin, seed__slytherin = generate(
                 Entropy(entropy_bytes), password)
             mnemonic_trezor = self.trezor.to_mnemonic(entropy_bytes)
             seed_trezor = self.trezor.to_seed(mnemonic_trezor, password)
             self.assertEqual(mnemonic_trezor, mnemonic_slytherin)
             # `bytes(seed__slytherin)` cant use secure seed compare here hence the conversion to bytes
             self.assertEqual(seed_trezor, bytes(seed__slytherin))
 def test_to_mnemonic(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         entropy = Entropy(unhexlify(test_vector[0]))
         mnemonic_expected = Mnemonic(test_vector[1])
         self.assertEqual(mnemonic_expected, entropy.to_mnemonic())
 def test___init__(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         Entropy(unhexlify(test_vector[0]))
 def test_to_entropy(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         with self.subTest(mnemonic=test_vector[1]):
             mnemonic = Mnemonic(test_vector[1])
             entropy_expected = Entropy(unhexlify(test_vector[0]))
             self.assertEqual(entropy_expected, mnemonic.to_entropy())
 def test_recover(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         entropy, seed = recover(Mnemonic(test_vector[1]), TREZOR_PASSWORD)
         self.assertEqual(Entropy(unhexlify(test_vector[0])), entropy)
         self.assertEqual(Seed(unhexlify(test_vector[2])), seed)
 def test_generate(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         mnemonic, seed = generate(Entropy(unhexlify(test_vector[0])), TREZOR_PASSWORD)
         self.assertEqual(Mnemonic(test_vector[1]), mnemonic)
         self.assertEqual(Seed(unhexlify(test_vector[2])), seed)
def get_random_valid_mnemonic_phrase():
    return str(Entropy(get_random_valid_entropy_bytes()).to_mnemonic())
            "scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump",  # nopep8
            "7b4a10be9d98e6cba265566db7f136718e1398c71cb581e1b2f464cac1ceedf4f3e274dc270003c670ad8d02c4558b2f8e39edea2775c9e232c7cb798b069e88",  # nopep8
            "xprv9s21ZrQH143K4aERa2bq7559eMCCEs2QmmqVjUuzfy5eAeDX4mqZffkYwpzGQRE2YEEeLVRoH4CSHxianrFaVnMN2RYaPUZJhJx8S5j6puX"  # nopep8
        ],
        [
            "f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f",  # nopep8
            "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold",  # nopep8
            "01f5bced59dec48e362f2c45b5de68b9fd6c92c6634f44d6d40aab69056506f0e35524a518034ddc1192e1dacd32c1ed3eaa3c3b131c88ed8e7e54c49a5d0998",  # nopep8
            "xprv9s21ZrQH143K39rnQJknpH1WEPFJrzmAqqasiDcVrNuk926oizzJDDQkdiTvNPr2FYDYzWgiMiC63YmfPAa2oPyNB23r2g7d1yiK6WpqaQS"  # nopep8
        ]
    ]
}

VALID_MNEMONIC_PHRASE_TREZOR = TREZOR_TEST_VECTORS['english'][0][1]
VALID_MNEMONIC_TREZOR = Mnemonic(TREZOR_TEST_VECTORS['english'][0][1])
VALID_ENTROPY_TREZOR = Entropy(unhexlify(TREZOR_TEST_VECTORS['english'][0][0]))
VALID_SEED_TREZOR = Seed(unhexlify(TREZOR_TEST_VECTORS['english'][0][2]))
VALID_SEED_HEX_TREZOR = TREZOR_TEST_VECTORS['english'][0][2]
VALID_PASSWORD_TREZOR = TREZOR_PASSWORD

INVALID_MNEMONIC_PHRASE_INVALID_UTF8 = "mn3\n\udcd6 " * 12
INVALID_PASSWORD_INVALID_UTF8 = "icpa\u202e\U000e0ec1\udcaassword1"

def get_random_valid_mnemonic_phrase():
    return str(Entropy(get_random_valid_entropy_bytes()).to_mnemonic())


def get_random_valid_entropy_bytes():
    return bytes(getrandbits(8) for _ in range(choice(Entropy.VALID_ENTROPY_BYTE_LENGTHS)))