diff options
Diffstat (limited to 'test/python/genkat_aead.py')
| -rwxr-xr-x | test/python/genkat_aead.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/test/python/genkat_aead.py b/test/python/genkat_aead.py new file mode 100755 index 0000000..db3a89c --- /dev/null +++ b/test/python/genkat_aead.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 + +# Python port of genkat_aead.c. +# +# Authors, hereby denoted as "the implementer": +# Kévin Le Gouguec, +# 2019. +# +# For more information, feedback or questions, refer to our website: +# https://paclido.fr/lilliput-ae +# +# To the extent possible under law, the implementer has waived all copyright +# and related or neighboring rights to the source code in this file. +# http://creativecommons.org/publicdomain/zero/1.0/ + +"""Python port of the genkat_aead.c program.""" + +import crypto_aead + + +class DecryptionError(Exception): + def __init__(self): + super().__init__('crypto_aead.decrypt did not recover the plaintext') + + +MAX_MESSAGE_LENGTH = 32 +MAX_ASSOCIATED_DATA_LENGTH = 32 + + +def print_bstr(output, label, buf): + print('{l} = {b}'.format(l=label, b=buf.hex().upper()), file=output) + + +def generate_test_vectors(): + count = 1 + filename = 'LWC_AEAD_KAT_{key}_{npub}.txt'.format( + key=crypto_aead.KEYBYTES*8, npub=crypto_aead.NPUBBYTES*8 + ) + + npub = bytes(range(crypto_aead.NPUBBYTES)) + key = bytes(range(crypto_aead.KEYBYTES)) + + with open(filename, 'w') as output: + + for mlen in range(MAX_MESSAGE_LENGTH+1): + for adlen in range(MAX_ASSOCIATED_DATA_LENGTH+1): + + msg = bytes(range(mlen)) + ad = bytes(range(adlen)) + + print('Count = {c}'.format(c=count), file=output) + count += 1 + + print_bstr(output, 'Key', key) + print_bstr(output, 'Nonce', npub) + print_bstr(output, 'PT', msg) + print_bstr(output, 'AD', ad) + + ct = crypto_aead.encrypt(msg, ad, npub, key) + + print_bstr(output, 'CT', ct) + + msg2 = crypto_aead.decrypt(ct, ad, npub, key) + + if msg != msg2: + raise DecryptionError() + + print(file=output) + + +if __name__ == '__main__': + generate_test_vectors() |
