Exemple #1
0
    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)
Exemple #2
0
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')
Exemple #3
0
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)