def test_errors(self): encrypt(None, get_random_bytes(32)) with self.assertRaises(Exception): decrypt("", None) invalid = base64.b64encode(get_random_bytes(45)) with self.assertRaises(Exception): decrypt(invalid, None)
def write_private(inp): priv = inp[0] salt = inp[1] priv_encoded = yaml.dump(priv, Dumper=SafeDumper) key = crypto.kdf(global_password, salt) ciphertext = crypto.encrypt(priv_encoded, key) towrite = {'salt': salt, 'priv': ciphertext} with os.fdopen(os.open('private.yml', os.O_WRONLY | os.O_CREAT, 0o600), 'w', encoding="utf-8") as f: yaml.dump(towrite, f, Dumper=SafeDumper)
def encrypt(contents): k = crypto.generate_random_key(32) v = crypto.generate_random_key(32) u = crypto.strbitxor(k, v) ciphertext = crypto.encrypt(contents, k) try: recovered = crypto.decrypt(ciphertext, k).decode('utf-8') except UnicodeDecodeError: recovered = crypto.decrypt(ciphertext, k) if recovered != contents: raise Exception("Test decryption failed") return {'u': u, 'v': v, 'k': k, 'ciphertext': ciphertext}
def encrypt(contents): k = crypto.generate_random_key(32) v = crypto.generate_random_key(32) u = crypto.strbitxor(k, v) ciphertext = crypto.encrypt(contents, k) try: recovered = crypto.decrypt(ciphertext, k).decode("utf-8") except UnicodeDecodeError: recovered = crypto.decrypt(ciphertext, k) if recovered != contents: raise Exception("Test decryption failed") return {"u": u, "v": v, "k": k, "ciphertext": ciphertext}
def test_aes(self): message = b"a secret message!" aeskey = get_random_bytes(32) ciphertext = encrypt(message, aeskey) plaintext = decrypt(ciphertext, aeskey) self.assertEqual(plaintext, message)