commit 4ee53ce2ac2e32aa9ae9c2334f0770d7f5f28fa8
parent ffd17baa2f156d90f854e72eee374f0bc5abc99e
Author: Kévin Le Gouguec <kevin.legouguec@airbus.com>
Date: Thu, 29 Nov 2018 15:21:39 +0100
Ajout d'une cible dans le Makefile pour la livraison NIST
Et aussi :
- extraction des sources de TestVectorGen.zip (la flemme de m'assurer
que le conteneur GCC aura unzip)
- dépôt dans le dossier results ; on laissera Gitlab archiver le
résultat pour nous
Diffstat:
7 files changed, 195 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
@@ -4,7 +4,10 @@ implementations = $(dir \
delegated = clean test
-.PHONY: $(delegated)
+.PHONY: $(delegated) nist
+
+results:
+ mkdir $@
$(delegated)::
status=0; \
@@ -16,6 +19,7 @@ $(delegated)::
clean::
- rm traces*.tgz
+ - rm -r results
# To generate complete traces, apply this patch before running "make traces":
# $ git apply traces.patch
@@ -23,6 +27,9 @@ clean::
# $ git diff src > traces.patch
traces: traces-ae traces-tbc
-traces-%:
+traces-%: | results
@ echo "Collecting traces"
@ ./collect-traces.sh $@
+
+nist: | results
+ ./nist/make-package.sh
diff --git a/collect-traces.sh b/collect-traces.sh
@@ -21,7 +21,7 @@ do
cp ${implem_dir}/results/traces*.txt ${d}
done
-tar czf ${trace_type}.tgz -C ${d} .
+tar czf results/${trace_type}.tgz -C ${d} .
rm -r ${d}
diff --git a/nist/README.md b/nist/README.md
@@ -1,9 +1,9 @@
-`TestVectorGen.zip` was retrieved on [NIST's website] ([direct link]).
+`TestVectorGen` was retrieved from [NIST's website] ([direct link]).
-`make-package.sh` will take create the directory structure specified
-by [NIST's requirements], compile and run `TestVectorGen.zip`'s
-`genkat_aead.c` against every member of the Lilliput-AE family, and
-bundle the sources and the vectors into a tarball.
+`make-package.sh` will create the directory structure specified by
+[NIST's requirements], compile and run `TestVectorGen/genkat_aead.c`
+against every member of the Lilliput-AE family, and bundle the sources
+and vectors into a folder.
[NIST's website]: https://csrc.nist.gov/projects/lightweight-cryptography
diff --git a/nist/TestVectorGen.zip b/nist/TestVectorGen.zip
Binary files differ.
diff --git a/nist/TestVectorGen/crypto_aead.h b/nist/TestVectorGen/crypto_aead.h
@@ -0,0 +1,18 @@
+
+int crypto_aead_encrypt(
+ unsigned char *c, unsigned long long *clen,
+ const unsigned char *m, unsigned long long mlen,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *nsec,
+ const unsigned char *npub,
+ const unsigned char *k
+);
+
+int crypto_aead_decrypt(
+ unsigned char *m, unsigned long long *mlen,
+ unsigned char *nsec,
+ const unsigned char *c, unsigned long long clen,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *npub,
+ const unsigned char *k
+);
+\ No newline at end of file
diff --git a/nist/TestVectorGen/genkat_aead.c b/nist/TestVectorGen/genkat_aead.c
@@ -0,0 +1,159 @@
+//
+// NIST-developed software is provided by NIST as a public service.
+// You may use, copy and distribute copies of the software in any medium,
+// provided that you keep intact this entire notice. You may improve,
+// modify and create derivative works of the software or any portion of
+// the software, and you may copy and distribute such modifications or
+// works. Modified works should carry a notice stating that you changed
+// the software and should note the date and nature of any such change.
+// Please explicitly acknowledge the National Institute of Standards and
+// Technology as the source of the software.
+//
+// NIST-developed software is expressly provided "AS IS." NIST MAKES NO
+// WARRANTY OF ANY KIND, EXPRESS, IMPLIED, IN FACT OR ARISING BY OPERATION
+// OF LAW, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT AND DATA ACCURACY. NIST
+// NEITHER REPRESENTS NOR WARRANTS THAT THE OPERATION OF THE SOFTWARE WILL BE
+// UNINTERRUPTED OR ERROR-FREE, OR THAT ANY DEFECTS WILL BE CORRECTED. NIST
+// DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF THE SOFTWARE
+// OR THE RESULTS THEREOF, INCLUDING BUT NOT LIMITED TO THE CORRECTNESS, ACCURACY,
+// RELIABILITY, OR USEFULNESS OF THE SOFTWARE.
+//
+// You are solely responsible for determining the appropriateness of using and
+// distributing the software and you assume all risks associated with its use,
+// including but not limited to the risks and costs of program errors, compliance
+// with applicable laws, damage to or loss of data, programs or equipment, and
+// the unavailability or interruption of operation. This software is not intended
+// to be used in any situation where a failure could cause risk of injury or
+// damage to property. The software developed by NIST employees is not subject to
+// copyright protection within the United States.
+//
+
+// disable deprecation for sprintf and fopen
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include "crypto_aead.h"
+#include "api.h"
+
+#define KAT_SUCCESS 0
+#define KAT_FILE_OPEN_ERROR -1
+#define KAT_DATA_ERROR -3
+#define KAT_CRYPTO_FAILURE -4
+
+#define MAX_FILE_NAME 256
+#define MAX_MESSAGE_LENGTH 32
+#define MAX_ASSOCIATED_DATA_LENGTH 32
+
+void init_buffer(unsigned char *buffer, unsigned long long numbytes);
+
+void fprint_bstr(FILE *fp, const char *label, const unsigned char *data, unsigned long long length);
+
+int generate_test_vectors();
+
+int main()
+{
+ int ret = generate_test_vectors();
+
+ if (ret != KAT_SUCCESS) {
+ fprintf(stderr, "test vector generation failed with code %d\n", ret);
+ }
+
+ return ret;
+}
+
+int generate_test_vectors()
+{
+ FILE *fp;
+ char fileName[MAX_FILE_NAME];
+ unsigned char key[CRYPTO_KEYBYTES];
+ unsigned char nonce[CRYPTO_NPUBBYTES];
+ unsigned char msg[MAX_MESSAGE_LENGTH];
+ unsigned char msg2[MAX_MESSAGE_LENGTH];
+ unsigned char ad[MAX_ASSOCIATED_DATA_LENGTH];
+ unsigned char ct[MAX_MESSAGE_LENGTH + CRYPTO_ABYTES];
+ unsigned long long clen, mlen2;
+ int count = 1;
+ int func_ret, ret_val = KAT_SUCCESS;
+
+ init_buffer(key, sizeof(key));
+ init_buffer(nonce, sizeof(nonce));
+ init_buffer(msg, sizeof(msg));
+ init_buffer(ad, sizeof(ad));
+
+ sprintf(fileName, "LWC_AEAD_KAT_%d_%d.txt", (CRYPTO_KEYBYTES * 8), (CRYPTO_NPUBBYTES * 8));
+
+ if ((fp = fopen(fileName, "w")) == NULL) {
+ fprintf(stderr, "Couldn't open <%s> for write\n", fileName);
+ return KAT_FILE_OPEN_ERROR;
+ }
+
+ for (unsigned long long mlen = 0; (mlen <= MAX_MESSAGE_LENGTH) && (ret_val == KAT_SUCCESS); mlen++) {
+
+ for (unsigned long long adlen = 0; adlen <= MAX_ASSOCIATED_DATA_LENGTH; adlen++) {
+
+ fprintf(fp, "Count = %d\n", count++);
+
+ fprint_bstr(fp, "Key = ", key, CRYPTO_KEYBYTES);
+
+ fprint_bstr(fp, "Nonce = ", nonce, CRYPTO_NPUBBYTES);
+
+ fprint_bstr(fp, "PT = ", msg, mlen);
+
+ fprint_bstr(fp, "AD = ", ad, adlen);
+
+ if ((func_ret = crypto_aead_encrypt(ct, &clen, msg, mlen, ad, adlen, NULL, nonce, key)) != 0) {
+ fprintf(fp, "crypto_aead_encrypt returned <%d>\n", func_ret);
+ ret_val = KAT_CRYPTO_FAILURE;
+ break;
+ }
+
+ fprint_bstr(fp, "CT = ", ct, clen);
+
+ fprintf(fp, "\n");
+
+ if ((func_ret = crypto_aead_decrypt(msg2, &mlen2, NULL, ct, clen, ad, adlen, nonce, key)) != 0) {
+ fprintf(fp, "crypto_aead_decrypt returned <%d>\n", func_ret);
+ ret_val = KAT_CRYPTO_FAILURE;
+ break;
+ }
+
+ if (mlen != mlen2) {
+ fprintf(fp, "crypto_aead_decrypt returned bad 'mlen': Got <%llu>, expected <%llu>\n", mlen2, mlen);
+ ret_val = KAT_CRYPTO_FAILURE;
+ break;
+ }
+
+ if (memcmp(msg, msg2, mlen)) {
+ fprintf(fp, "crypto_aead_decrypt did not recover the plaintext\n");
+ ret_val = KAT_CRYPTO_FAILURE;
+ break;
+ }
+ }
+ }
+
+ fclose(fp);
+
+ return ret_val;
+}
+
+
+void fprint_bstr(FILE *fp, const char *label, const unsigned char *data, unsigned long long length)
+{
+ fprintf(fp, "%s", label);
+
+ for (unsigned long long i = 0; i < length; i++)
+ fprintf(fp, "%02X", data[i]);
+
+ fprintf(fp, "\n");
+}
+
+void init_buffer(unsigned char *buffer, unsigned long long numbytes)
+{
+ for (unsigned long long i = 0; i < numbytes; i++)
+ buffer[i] = (unsigned char)i;
+}
diff --git a/nist/make-package.sh b/nist/make-package.sh
@@ -81,7 +81,7 @@ test-variant ()
}
-unzip ${NIST_DIR}/TestVectorGen.zip -d ${TMP_DIR}
+cp ${NIST_DIR}/TestVectorGen/* ${TMP_DIR}
for mode in i ii
do
@@ -92,6 +92,6 @@ do
done
done
-tar czf lilliput-ae.tgz -C ${TMP_DIR} crypto_aead
+cp -r ${TMP_DIR}/crypto_aead results/
cleanup