def test_edge_case_invalid_password_valid_padding_invalid_unicode(self): with self.assertRaises(InvalidPasswordError): aes_decrypt( 'notbubblegum', 'gy3/mNq3FWB/xAXirOQnlAqQLuvhLGXZaeGBUIg1w6yY4PDLDT7BU83XOfBsJol' 'uWU5zEU4+upOFH35HDqyV8EMQhcKSufN9WkT1izEbFtweBUTK8nTSkV7NBppE1Jaz' )
def test_encrypt_iv_d(self, _): self.assertEqual( aes_encrypt(self.password, self.message), 'ZmZmZmZmZmZmZmZmZmZmZjlrKptoKD+MFwDxcg3XtCD9qz8UWhEhq/TVJT5+Mtp2a8sE' 'CaO6WQj7fYsWGu2Hvbc0qYqxdN0HeTsiO+cZRo3eJISgr3F+rXFYi5oSBlD2') self.assertTupleEqual(aes_decrypt(self.password, self.expected), (self.message, b'f' * 16))
def _decrypt_private_key_string(self, password: str) -> Optional[PrivateKey]: if not self.private_key_string: return None private_key_string, self.init_vectors['private_key'] = aes_decrypt( password, self.private_key_string) if not private_key_string: return None return from_extended_key_string(self.ledger, private_key_string)
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
def test_decrypt_error(self): with self.assertRaises(InvalidPasswordError): aes_decrypt('notbubblegum', aes_encrypt('bubblegum', self.message))
def test_encrypt_decrypt(self): self.assertEqual( aes_decrypt('bubblegum', aes_encrypt('bubblegum', self.message))[0], self.message )