From 5ce08d4f7680fccbcd2db42aac3e12a9942739ac Mon Sep 17 00:00:00 2001
From: Constantin Papizh <p.const@bk.ru>
Date: Tue, 17 Sep 2019 11:54:56 +0300
Subject: [PATCH] Windows operability fix

---
 libdap-crypto.pri                   | 17 ++++++++++++++---
 src/msrln/kex.c                     |  6 +++---
 src/msrln/random.c                  |  8 ++++----
 src/sha3/sha3.pri                   |  5 ++---
 src/sig_dilithium/sig_dilithium.pri | 16 ++++++++++++++++
 5 files changed, 39 insertions(+), 13 deletions(-)
 create mode 100644 src/sig_dilithium/sig_dilithium.pri

diff --git a/libdap-crypto.pri b/libdap-crypto.pri
index fa8dc22..6ca16ee 100755
--- a/libdap-crypto.pri
+++ b/libdap-crypto.pri
@@ -7,6 +7,9 @@ include (src/sha3/sha3.pri)
 include (src/sig_bliss/sig_bliss.pri)
 include (src/sig_picnic/sig_picnic.pri)
 include (src/sig_tesla/sig_tesla.pri)
+include (src/sig_dilithium/sig_dilithium.pri)
+
+DEFINES += KeccakP1600timesN_excluded
 
 HEADERS += $$PWD/include/dap_enc.h \
     $$PWD/include/dap_enc_base64.h \
@@ -20,7 +23,10 @@ HEADERS += $$PWD/include/dap_enc.h \
     $$PWD/include/dap_enc_tesla.h \
     $$PWD/include/dap_crypto_common.h \
     $$PWD/include/dap_enc_base58.h \
-    $$PWD/include/dap_enc_ca.h
+    $$PWD/include/dap_enc_dilithium.h \
+    $$PWD/src/XKCP/lib/high/Keccak/FIPS202/SimpleFIPS202.h \
+    $$PWD/src/XKCP/lib/high/Keccak/SP800-185/SP800-185.h \
+    $$PWD/src/XKCP/lib/high/common/Phases.h
 
 SOURCES += $$PWD/src/dap_enc.c \
     $$PWD/src/dap_enc_base64.c \
@@ -33,6 +39,11 @@ SOURCES += $$PWD/src/dap_enc.c \
     $$PWD/src/dap_enc_bliss.c \
     $$PWD/src/dap_enc_tesla.c \
     $$PWD/src/dap_enc_base58.c \
-    $$PWD/src/dap_enc_ca.c
+    $$PWD/src/dap_enc_dilithium.c \
+    $$PWD/src/dap_enc_ca.c \
+    $$PWD/src/XKCP/lib/high/Keccak/FIPS202/SimpleFIPS202.c \
+    $$PWD/src/XKCP/lib/high/Keccak/SP800-185/SP800-185.c \
+    $$PWD/src/XKCP/lib/high/Keccak/SP800-185/SP800-185.inc
+
 
-INCLUDEPATH += $$PWD/include $$PWD/../ $$PWD/src
+INCLUDEPATH += $$PWD/include $$PWD/../ $$PWD/src $$PWD/src/XKCP/lib/high/Keccak/FIPS202 $$PWD/src/XKCP/lib/high/Keccak/SP800-185 $$PWD/src/XKCP/lib/high/common
diff --git a/src/msrln/kex.c b/src/msrln/kex.c
index 942c5ae..9cb69a3 100755
--- a/src/msrln/kex.c
+++ b/src/msrln/kex.c
@@ -473,15 +473,15 @@ CRYPTO_MSRLN_STATUS generate_a(uint32_t* a, const unsigned char* seed, Extendabl
 //    shake128_absorb(state, seed, SEED_BYTES);
 //    shake128_squeezeblocks((unsigned char *) buf, nblocks, state);
 
-    #ifdef _WIN32
+    /*#ifdef _WIN32
         SHAKE128_InitAbsorb( &ks, seed, SEED_BYTES );
         KECCAK_HashSqueeze( &ks, (unsigned char *) buf, nblocks * 8 );
-    #else
+    #else */
         Keccak_HashInitialize_SHAKE128(&ks);
         Keccak_HashUpdate( &ks, seed, SEED_BYTES * 8 );
         Keccak_HashFinal( &ks, seed );
         Keccak_HashSqueeze( &ks, (unsigned char *) buf, nblocks * 8 * 8 );
-    #endif
+    //#endif
 
     while (ctr < PARAMETER_N) {
         val = (buf[pos] | ((uint16_t) buf[pos + 1] << 8)) & 0x3fff;
diff --git a/src/msrln/random.c b/src/msrln/random.c
index e5a760c..b7b5a4c 100755
--- a/src/msrln/random.c
+++ b/src/msrln/random.c
@@ -1,6 +1,6 @@
 #include "msrln_priv.h"
 
-//#include "KeccakHash.h"
+#include "KeccakHash.h"
 //#include "SimpleFIPS202.h"
 
 #define LOG_TAG "RANDOM"
@@ -18,15 +18,15 @@ CRYPTO_MSRLN_STATUS MSRLN_generate_a(const unsigned char* seed, unsigned int see
 //    shake128_absorb(state, seed, seed_nbytes);
 //    shake128_squeezeblocks((unsigned char *) buf, nblocks, state);
 
-    #ifdef _WIN32
+   /* #ifdef _WIN32
         SHAKE128_InitAbsorb( &ks, seed, seed_nbytes );
         KECCAK_HashSqueeze( &ks, (unsigned char *) buf, nblocks * 8 );
-    #else
+    #else */
         Keccak_HashInitialize_SHAKE128(&ks);
         Keccak_HashUpdate( &ks, seed, seed_nbytes * 8 );
         Keccak_HashFinal( &ks, seed );
         Keccak_HashSqueeze( &ks, (unsigned char *) buf, nblocks * 8 * 8 );
-    #endif
+    //#endif
 
     while (ctr < array_ndigits) {
         val = (buf[pos] | ((uint16_t) buf[pos + 1] << 8)) & 0x3fff;
diff --git a/src/sha3/sha3.pri b/src/sha3/sha3.pri
index b93b260..be9685f 100755
--- a/src/sha3/sha3.pri
+++ b/src/sha3/sha3.pri
@@ -8,8 +8,7 @@ HEADERS += $$PWD/fips202.h \
 	$$PWD/KeccakSponge-common.h \
 	$$PWD/KeccakSpongeWidth1600.h
 	
-SOURCES += $$PWD/fips202.c \
-	$$PWD/KeccakHash.c \
+SOURCES += $$PWD/KeccakHash.c \
 	$$PWD/KeccakP-1600-reference.c \
 	$$PWD/KeccakSpongeWidth1600.c
-	
\ No newline at end of file
+	
diff --git a/src/sig_dilithium/sig_dilithium.pri b/src/sig_dilithium/sig_dilithium.pri
new file mode 100644
index 0000000..ad13a94
--- /dev/null
+++ b/src/sig_dilithium/sig_dilithium.pri
@@ -0,0 +1,16 @@
+HEADERS += $$PWD/dilithium_params.h \
+	$$PWD/dilithium_packing.h \
+	$$PWD/dilithium_poly.h \
+	$$PWD/dilithium_polyvec.h \
+	$$PWD/dilithium_rounding_reduce.h \
+	$$PWD/dilithium_sign.h
+
+SOURCES += $$PWD/dilithium_params.c \
+	$$PWD/dilithium_packing.c \
+	$$PWD/dilithium_poly.c \
+	$$PWD/dilithium_polyvec.c \
+	$$PWD/dilithium_rounding_reduce.c \
+	$$PWD/dilithium_sign.c
+	
+INCLUDEPATH += $$PWD
+
-- 
GitLab