summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rwxr-xr-xpython/genkat_aead.py16
-rw-r--r--python/lilliput.py41
-rw-r--r--python/lilliput_ae_1.py5
-rw-r--r--python/lilliput_ae_2.py5
4 files changed, 34 insertions, 33 deletions
diff --git a/python/genkat_aead.py b/python/genkat_aead.py
index 5bce05f..daa48f8 100755
--- a/python/genkat_aead.py
+++ b/python/genkat_aead.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-import lilliput
+from lilliput import encrypt, decrypt, LilliputAeMode
from os import makedirs, path
@@ -10,6 +10,12 @@ MAX_ADATA_LENGTH = 32
CRYPTO_NPUBBYTES = 120//8
+MODE_SUFFIXES = {
+ LilliputAeMode.lilliput_1: 'i',
+ LilliputAeMode.lilliput_2: 'ii'
+}
+
+
def bstr(buf):
return ''.join('{:02X}'.format(b) for b in buf)
@@ -37,7 +43,7 @@ def generate_test_vectors(mode, keylen):
print('generating for', mode, keylen)
directory = 'crypto_aead/lilliputae{mode}{keylen}v1'.format(
- mode=mode*'i', keylen=keylen
+ mode=MODE_SUFFIXES[mode], keylen=keylen
)
makedirs(directory, exist_ok=True)
@@ -64,11 +70,11 @@ def generate_test_vectors(mode, keylen):
print_bstr(output, 'PT', msg)
print_bstr(output, 'AD', ad)
- ct, tag = lilliput.mainEnc(msg, ad, key, nonce, mode)
+ ct, tag = encrypt(msg, ad, key, nonce, mode)
print_bstr(output, 'CT', ct+tag)
- msg2 = lilliput.mainDec(ct, tag, ad, key, nonce, mode)
+ msg2 = decrypt(ct, tag, ad, key, nonce, mode)
if msg != msg2:
raise DecryptionError(msg, msg2, mode, keylen)
@@ -79,6 +85,6 @@ def generate_test_vectors(mode, keylen):
if __name__ == '__main__':
- for mode in 1, 2:
+ for mode in LilliputAeMode:
for keylen in 128, 192, 256:
generate_test_vectors(mode, keylen)
diff --git a/python/lilliput.py b/python/lilliput.py
index f9c1b09..90a0ed1 100644
--- a/python/lilliput.py
+++ b/python/lilliput.py
@@ -1,40 +1,33 @@
+from enum import Enum
+
import lilliput_ae_1
import lilliput_ae_2
from constants import NONCE_BYTES
-def _checkInputs(key, nonce):
+class LilliputAeMode(Enum):
+ lilliput_1 = lilliput_ae_1
+ lilliput_2 = lilliput_ae_2
+
+
+def _checkInputs(key, mode, nonce):
valid_key_lengths = (128, 192, 256)
if len(key)*8 not in valid_key_lengths:
raise ValueError('invalid key size: {} not in {}'.format(len(key)*8, valid_key_lengths))
+ if mode.name not in LilliputAeMode.__members__:
+ raise ValueError('invalid mode: use a member of the LilliputAeMode enumeration')
+
if len(nonce) != NONCE_BYTES:
raise ValueError('nonce must be {}-byte long'.format(NONCE_BYTES))
-def mainEnc(plaintext, adata, key, nonce, mode):
- _checkInputs(key, nonce)
-
- A = adata
- M = plaintext
- N = nonce
-
- if(mode == 1) :
- return lilliput_ae_1.OCB3Enc(A, M, N, key)
- if(mode == 2) :
- return lilliput_ae_2.SCT2Enc(A, M, N, key)
-
-
-def mainDec(ciphertext, tag, adata, key, nonce, mode):
- _checkInputs(key, nonce)
+def encrypt(plaintext, adata, key, nonce, mode):
+ _checkInputs(key, mode, nonce)
+ return mode.value.encrypt(adata, plaintext, nonce, key)
- A = adata
- C = ciphertext
- N = nonce
- tag = list(tag)
- if(mode == 1) :
- return lilliput_ae_1.OCB3Dec(A, C, N, tag, key)
- if(mode == 2) :
- return lilliput_ae_2.SCT2Dec(A, C, N, tag, key)
+def decrypt(ciphertext, tag, adata, key, nonce, mode):
+ _checkInputs(key, mode, nonce)
+ return mode.value.decrypt(adata, ciphertext, nonce, tag, key)
diff --git a/python/lilliput_ae_1.py b/python/lilliput_ae_1.py
index 9de753c..8b618d9 100644
--- a/python/lilliput_ae_1.py
+++ b/python/lilliput_ae_1.py
@@ -129,7 +129,7 @@ def TreatMessageDec(C, N, key) :
################################################################################
-def OCB3Enc(A, M, N, key) :
+def encrypt(A, M, N, key) :
K = list(key)
Auth = BuildAuth(TWEAK_BITS, A, K)
@@ -139,8 +139,9 @@ def OCB3Enc(A, M, N, key) :
return BlockbytesMatrixToBytes(C), bytes(tag)
-def OCB3Dec(A, C, N, tag, key) :
+def decrypt(A, C, N, tag, key) :
K = list(key)
+ tag = list(tag)
Auth = BuildAuth(TWEAK_BITS, A, K)
(Final, M) = TreatMessageDec(C, N, K)
diff --git a/python/lilliput_ae_2.py b/python/lilliput_ae_2.py
index cb1d1c4..f455f43 100644
--- a/python/lilliput_ae_2.py
+++ b/python/lilliput_ae_2.py
@@ -98,7 +98,7 @@ def MessageEncryption(M, N, tag, key) :
return C
################################################################################
-def SCT2Enc(A, M, N, key) :
+def encrypt(A, M, N, key) :
K = list(key)
Auth = BuildAuth(TWEAK_BITS, A, K)
@@ -108,8 +108,9 @@ def SCT2Enc(A, M, N, key) :
return BlockbytesMatrixToBytes(C), bytes(tag)
-def SCT2Dec(A, C, N, tag, key) :
+def decrypt(A, C, N, tag, key) :
K = list(key)
+ tag = list(tag)
M = BlockbytesMatrixToBytes(
MessageEncryption(C, N, tag, K)