def to_dict(self, encrypt_password: str = None, include_channel_keys: bool = True): private_key_string, seed = self.private_key_string, self.seed if not self.encrypted and self.private_key: private_key_string = self.private_key.extended_key_string() if not self.encrypted and encrypt_password: if private_key_string: private_key_string = aes_encrypt( encrypt_password, private_key_string, self.get_init_vector('private_key')) if seed: seed = aes_encrypt(encrypt_password, self.seed, self.get_init_vector('seed')) d = { 'ledger': self.ledger.get_id(), 'name': self.name, 'seed': seed, 'encrypted': bool(self.encrypted or encrypt_password), 'private_key': private_key_string, 'public_key': self.public_key.extended_key_string(), 'address_generator': self.address_generator.to_dict(self.receiving, self.change), 'modified_on': self.modified_on } if include_channel_keys: d['certificates'] = self.channel_keys return d
def encrypt(self, password: str) -> bool: assert not self.encrypted, "Key is already encrypted." if self.seed: self.seed = aes_encrypt(password, self.seed, self.get_init_vector('seed')) if isinstance(self.private_key, PrivateKey): self.private_key_string = aes_encrypt( password, self.private_key.extended_key_string(), self.get_init_vector('private_key') ) self.private_key = None self.encrypted = True return True
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 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 )
def test_encrypt_iv_f(self, _): self.assertEqual( aes_encrypt(self.password, self.message), 'ZGRkZGRkZGRkZGRkZGRkZKBP/4pR+47hLHbHyvDJm9aRKDuoBdTG8SrFvHqfagK6Co1VrHUOd' 'oF+6PGSxru3+VR63ybkXLNM75s/qVw+dnKVAkI8OfoVnJvGRSc49e38' )