summaryrefslogtreecommitdiff
path: root/test/python
diff options
context:
space:
mode:
Diffstat (limited to 'test/python')
-rwxr-xr-xtest/python/compare.sh17
-rw-r--r--test/python/crypto_aead.py18
-rwxr-xr-xtest/python/generate-vectors.sh31
-rwxr-xr-xtest/python/genkat_aead.py49
4 files changed, 115 insertions, 0 deletions
diff --git a/test/python/compare.sh b/test/python/compare.sh
new file mode 100755
index 0000000..414eb1e
--- /dev/null
+++ b/test/python/compare.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+PYTHON_DIR=$(dirname $0)
+ROOT_DIR=${PYTHON_DIR}/../../
+RESULTS_DIR=${ROOT_DIR}/results
+CRYPTO_AEAD=${ROOT_DIR}/crypto_aead
+
+set -eu
+
+mkdir -p ${RESULTS_DIR}/crypto_aead_ref
+for d in ${CRYPTO_AEAD}/lilliputaei*
+do
+ mkdir -p ${RESULTS_DIR}/crypto_aead_ref/$(basename $d)
+ cp $d/LWC*.txt ${RESULTS_DIR}/crypto_aead_ref/$(basename $d)/
+done
+
+diff -ru ${RESULTS_DIR}/crypto_aead_ref ${RESULTS_DIR}/crypto_aead_py
diff --git a/test/python/crypto_aead.py b/test/python/crypto_aead.py
new file mode 100644
index 0000000..792369c
--- /dev/null
+++ b/test/python/crypto_aead.py
@@ -0,0 +1,18 @@
+import lilliput
+from lilliput.constants import NONCE_BYTES as NPUBBYTES, TAG_BYTES
+
+# Import KEYBYTES to expose it to genkat_aead.
+# Import MODE to provide it to lilliput.
+from parameters import KEYBYTES, MODE
+
+
+def encrypt(m, ad, npub, k):
+ c, tag = lilliput.encrypt(m, ad, k, npub, MODE)
+ return c+tag
+
+
+def decrypt(c, ad, npub, k):
+ clen = len(c)-TAG_BYTES
+ ctext = c[:clen]
+ tag = c[clen:]
+ return lilliput.decrypt(ctext, tag, ad, k, npub, MODE)
diff --git a/test/python/generate-vectors.sh b/test/python/generate-vectors.sh
new file mode 100755
index 0000000..e328c67
--- /dev/null
+++ b/test/python/generate-vectors.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+set -eu
+
+PYTHON_DIR=$(dirname $0)
+ROOT_DIR=${PYTHON_DIR}/../../
+SRC_DIR=${ROOT_DIR}/src/add_python
+RESULTS_DIR=${ROOT_DIR}/results
+CRYPTO_AEAD=${RESULTS_DIR}/crypto_aead_py
+
+mkdir -p ${CRYPTO_AEAD}/lilliputae{i,ii}{128,192,256}v1
+
+declare -A names=([1]=lilliputaei [2]=lilliputaeii)
+
+for mode in 1 2
+do
+ for keylen in 128 192 256
+ do
+ echo generating for ${mode} ${keylen}
+
+ cat <<EOF > ${RESULTS_DIR}/parameters.py
+MODE = ${mode}
+KEYBYTES = $((keylen/8))
+EOF
+
+ PYTHONPATH=${RESULTS_DIR}:${SRC_DIR} ${PYTHON_DIR}/genkat_aead.py
+
+ dest=${CRYPTO_AEAD}/${names[${mode}]}${keylen}v1
+ mv LWC_AEAD_KAT_${keylen}_120.txt ${dest}
+ done
+done
diff --git a/test/python/genkat_aead.py b/test/python/genkat_aead.py
new file mode 100755
index 0000000..01bed6f
--- /dev/null
+++ b/test/python/genkat_aead.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+import crypto_aead
+
+
+MAX_MESSAGE_LENGTH = 32
+MAX_ADATA_LENGTH = 32
+
+
+def print_bstr(output, label, buf):
+ print('{l} = {b}'.format(l=label, b=buf.hex().upper()), file=output)
+
+
+def generate_test_vectors():
+ output_path = '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(output_path, 'w') as output:
+
+ count = 1
+ for mlen in range(MAX_MESSAGE_LENGTH+1):
+ for adlen in range(MAX_ADATA_LENGTH+1):
+ print('Count = {c}'.format(c=count), file=output)
+
+ msg = bytes(range(mlen))
+ ad = bytes(range(adlen))
+
+ 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)
+
+ crypto_aead.decrypt(ct, ad, npub, key)
+
+ count += 1
+
+ print(file=output)
+
+
+if __name__ == '__main__':
+ generate_test_vectors()