def test_cipher(self): for mode in ['AES-128/CTR-BE', 'Serpent/GCM', 'ChaCha20Poly1305']: enc = botan2.SymmetricCipher(mode, encrypt=True) if mode == 'AES-128/CTR-BE': self.assertEqual(enc.algo_name(), 'CTR-BE(AES-128)') elif mode == 'Serpent/GCM': self.assertEqual(enc.algo_name(), 'Serpent/GCM(16)') else: self.assertEqual(enc.algo_name(), mode) (kmin, kmax) = enc.key_length() self.assertLessEqual(kmin, kmax) rng = botan2.RandomNumberGenerator() iv = rng.get(enc.default_nonce_length()) key = rng.get(kmax) pt = rng.get(21) enc.set_key(key) enc.start(iv) update_result = enc.update('') assert not update_result ct = enc.finish(pt) dec = botan2.SymmetricCipher(mode, encrypt=False) dec.set_key(key) dec.start(iv) decrypted = dec.finish(ct) self.assertEqual(decrypted, pt)
def decrypt(iv, key, ctxt): cipher = botan.SymmetricCipher('AES-256/GCM', False) cipher.set_key(key) cipher.start(iv) ptxt = cipher.finish(ctxt) cipher.clear() return ptxt.decode('utf-8')
def encrypt(key, ptxt): iv = botan.RandomNumberGenerator().get(16) cipher = botan.SymmetricCipher('AES-256/GCM') cipher.set_key(key) cipher.start(iv) ctxt = cipher.finish(ptxt.encode('utf-8')) cipher.clear() return (iv, ctxt)