Exemplo n.º 1
0
 def test_make_seed_decode_encode(self):
     iters = 10
     m = Mnemonic('en')
     for _ in range(iters):
         seed = m.make_seed()
         i = m.mnemonic_decode(seed)
         self.assertEqual(m.mnemonic_encode(i), seed)
Exemplo n.º 2
0
 def test_mnemonic_to_seed(self):
     seed = Mnemonic.mnemonic_to_seed(mnemonic=u'foobar',
                                      passphrase=u'torba')
     self.assertEqual(
         hexlify(seed),
         b'475a419db4e991cab14f08bde2d357e52b3e7241f72c6d8a2f92782367feeee9f403dc6a37c26a3f02ab9'
         b'dec7f5063161eb139cea00da64cd77fba2f07c49ddc')
Exemplo n.º 3
0
 def _decrypt_seed(self, password: str) -> str:
     if not self.seed:
         return ""
     seed, self.init_vectors['seed'] = aes_decrypt(password, self.seed)
     if not seed:
         return ""
     try:
         Mnemonic().mnemonic_decode(seed)
     except IndexError:
         # failed to decode the seed, this either means it decrypted and is invalid
         # or that we hit an edge case where an incorrect password gave valid padding
         raise ValueError("Failed to decode seed.")
     return seed
Exemplo n.º 4
0
 def decrypt(self, password: str) -> None:
     assert self.encrypted, "Key is not encrypted."
     try:
         seed, seed_iv = aes_decrypt(password, self.seed)
         pk_string, pk_iv = aes_decrypt(password, self.private_key_string)
     except ValueError:  # failed to remove padding, password is wrong
         return
     try:
         Mnemonic().mnemonic_decode(seed)
     except IndexError:  # failed to decode the seed, this either means it decrypted and is invalid
         # or that we hit an edge case where an incorrect password gave valid padding
         return
     try:
         private_key = from_extended_key_string(self.ledger, pk_string)
     except (TypeError, ValueError):
         return
     self.seed = seed
     self.seed_encryption_init_vector = seed_iv
     self.private_key = private_key
     self.private_key_encryption_init_vector = pk_iv
     self.password = password
     self.encrypted = False