diff --git a/Makefile.am b/Makefile.am
index c84006d44..b0be1369e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -11,7 +11,7 @@ CLANGFORMAT ?= clang-format-3.9
SUBDIRS = ${SRCDIR} . tests
-BUILT_SOURCES = oqsconfigh links
+BUILT_SOURCES = links
lib_LTLIBRARIES = liboqs.la
liboqs_la_SOURCES =
liboqs_la_LIBADD = src/common/libcommon.la
@@ -55,9 +55,6 @@ if USE_OPENSSL
liboqs_la_LIBADD += -L${OPENSSL_DIR}/lib -lcrypto
endif
-oqsconfigh:
- grep OQS_ config.h > src/oqsconfig.h
-
installheaderdir=$(includedir)/oqs
##### OQS_COPY_FROM_PQCLEAN_FRAGMENT_INSTALLHEADER_START
installheader_HEADERS= src/oqs.h \
@@ -94,9 +91,11 @@ kat: clean-kats check
tests/kat_kem
scripts/check_kats.sh
-links: oqsconfigh
+links:
$(MKDIR_P) include/oqs
cp -f src/oqs.h include/oqs
+ grep OQS_ config.h > src/oqsconfig.h
+ grep USE_ config.h >> src/oqsconfig.h
cp -f src/oqsconfig.h include/oqs
cp -f src/common/common.h include/oqs
cp -f src/common/rand.h include/oqs
diff --git a/VisualStudio/oqs/oqs.vcxproj.filters b/VisualStudio/oqs/oqs.vcxproj.filters
index 272794556..a49187794 100644
--- a/VisualStudio/oqs/oqs.vcxproj.filters
+++ b/VisualStudio/oqs/oqs.vcxproj.filters
@@ -641,6 +641,18 @@
{143e4927-3f7d-449f-b1d9-669993470c2f}
+
+ {de97684a-bf94-413e-ad0d-477202dedea6}
+
+
+ {cf8dbf1d-cf1a-4ce9-893d-85841bced3fb}
+
+
+ {c7244cdd-79f6-4b9a-9a4e-ed358dc0cd79}
+
+
+ {f379218e-10bf-4e7a-ac6e-7e283568ff68}
+
{38993d7a-4180-4824-9451-f118b8df2fbd}
diff --git a/src/common/pqclean_shims/aes.h b/src/common/pqclean_shims/aes.h
index 70c116b8c..fa801fec5 100644
--- a/src/common/pqclean_shims/aes.h
+++ b/src/common/pqclean_shims/aes.h
@@ -14,16 +14,14 @@
typedef void * aes128ctx;
-static void aes128_keyexp(aes128ctx *r, const unsigned char *key) {
- OQS_AES128_load_schedule(key, r, 1);
-}
+#define aes128_keyexp(r, key) OQS_AES128_load_schedule((key), (r), 1);
+#define aes128_ecb(out, in, nblocks, ctx) OQS_AES128_ECB_enc_sch((in), (nblocks) * AES_BLOCKBYTES, *(ctx), (out));
+#define aes128_ctx_release(ctx) OQS_AES128_free_schedule(*(ctx));
-static void aes128_ecb(unsigned char *out, const unsigned char *in, size_t nblocks, aes128ctx *ctx) {
- OQS_AES128_ECB_enc_sch(in, nblocks * AES_BLOCKBYTES, *ctx, out);
- OQS_AES128_free_schedule(*ctx);
- // FIXME: PQClean AES API expects that aes128_ecb can be called multiple
- // times with the same key schedule, but this instantiation does not, since
- // it frees the key schedule immediately
-}
+typedef void * aes256ctx;
+
+#define aes256_keyexp(r, key) OQS_AES256_load_schedule((key), (r), 1);
+#define aes256_ecb(out, in, nblocks, ctx) OQS_AES256_ECB_enc_sch((in), (nblocks) * AES_BLOCKBYTES, *(ctx), (out));
+#define aes256_ctx_release(ctx) OQS_AES256_free_schedule(*(ctx));
#endif
diff --git a/src/crypto/aes/aes.c b/src/crypto/aes/aes.c
index bb36c5161..8df52c376 100644
--- a/src/crypto/aes/aes.c
+++ b/src/crypto/aes/aes.c
@@ -1,12 +1,14 @@
#include
+#include
+
#include "aes.h"
#include "aes_local.h"
void OQS_AES128_load_schedule(const uint8_t *key, void **schedule, UNUSED int for_encryption) {
#ifdef USE_OPENSSL
oqs_aes128_load_schedule_ossl(key, schedule, for_encryption);
-#elif defined(AES_ENABLE_NI)
+#elif defined(USE_AES_NI)
oqs_aes128_load_schedule_ni(key, schedule);
#else
oqs_aes128_load_schedule_c(key, schedule);
@@ -16,7 +18,7 @@ void OQS_AES128_load_schedule(const uint8_t *key, void **schedule, UNUSED int fo
void OQS_AES128_free_schedule(void *schedule) {
#ifdef USE_OPENSSL
oqs_aes128_free_schedule_ossl(schedule);
-#elif defined(AES_ENABLE_NI)
+#elif defined(USE_AES_NI)
oqs_aes128_free_schedule_ni(schedule);
#else
oqs_aes128_free_schedule_c(schedule);
@@ -26,7 +28,7 @@ void OQS_AES128_free_schedule(void *schedule) {
void OQS_AES128_ECB_enc(const uint8_t *plaintext, const size_t plaintext_len, const uint8_t *key, uint8_t *ciphertext) {
#ifdef USE_OPENSSL
oqs_aes128_ecb_enc_ossl(plaintext, plaintext_len, key, ciphertext);
-#elif defined(AES_ENABLE_NI)
+#elif defined(USE_AES_NI)
oqs_aes128_ecb_enc_ni(plaintext, plaintext_len, key, ciphertext);
#else
oqs_aes128_ecb_enc_c(plaintext, plaintext_len, key, ciphertext);
@@ -36,7 +38,7 @@ void OQS_AES128_ECB_enc(const uint8_t *plaintext, const size_t plaintext_len, co
void OQS_AES128_ECB_dec(const uint8_t *ciphertext, const size_t ciphertext_len, const uint8_t *key, uint8_t *plaintext) {
#ifdef USE_OPENSSL
oqs_aes128_ecb_dec_ossl(ciphertext, ciphertext_len, key, plaintext);
-#elif defined(AES_ENABLE_NI)
+#elif defined(USE_AES_NI)
oqs_aes128_ecb_dec_ni(ciphertext, ciphertext_len, key, plaintext);
#else
oqs_aes128_ecb_dec_c(ciphertext, ciphertext_len, key, plaintext);
@@ -46,7 +48,7 @@ void OQS_AES128_ECB_dec(const uint8_t *ciphertext, const size_t ciphertext_len,
void OQS_AES128_ECB_enc_sch(const uint8_t *plaintext, const size_t plaintext_len, const void *schedule, uint8_t *ciphertext) {
#ifdef USE_OPENSSL
oqs_aes128_ecb_enc_sch_ossl(plaintext, plaintext_len, schedule, ciphertext);
-#elif defined(AES_ENABLE_NI)
+#elif defined(USE_AES_NI)
oqs_aes128_ecb_enc_sch_ni(plaintext, plaintext_len, schedule, ciphertext);
#else
oqs_aes128_ecb_enc_sch_c(plaintext, plaintext_len, schedule, ciphertext);
@@ -56,14 +58,14 @@ void OQS_AES128_ECB_enc_sch(const uint8_t *plaintext, const size_t plaintext_len
void OQS_AES128_ECB_dec_sch(const uint8_t *ciphertext, const size_t ciphertext_len, const void *schedule, uint8_t *plaintext) {
#ifdef USE_OPENSSL
oqs_aes128_ecb_dec_sch_ossl(ciphertext, ciphertext_len, schedule, plaintext);
-#elif defined(AES_ENABLE_NI)
+#elif defined(USE_AES_NI)
oqs_aes128_ecb_dec_sch_ni(ciphertext, ciphertext_len, schedule, plaintext);
#else
oqs_aes128_ecb_dec_sch_c(ciphertext, ciphertext_len, schedule, plaintext);
#endif
}
-#ifdef AES_ENABLE_NI
+#ifdef USE_AES_NI
void oqs_aes128_ecb_enc_ni(const uint8_t *plaintext, const size_t plaintext_len, const uint8_t *key, uint8_t *ciphertext) {
void *schedule = NULL;
oqs_aes128_load_schedule_ni(key, &schedule);
@@ -79,7 +81,7 @@ void oqs_aes128_ecb_enc_c(const uint8_t *plaintext, const size_t plaintext_len,
oqs_aes128_free_schedule_c(schedule);
}
-#ifdef AES_ENABLE_NI
+#ifdef USE_AES_NI
void oqs_aes128_ecb_enc_sch_ni(const uint8_t *plaintext, const size_t plaintext_len, const void *schedule, uint8_t *ciphertext) {
assert(plaintext_len % 16 == 0);
for (size_t block = 0; block < plaintext_len / 16; block++) {
@@ -95,7 +97,7 @@ void oqs_aes128_ecb_enc_sch_c(const uint8_t *plaintext, const size_t plaintext_l
}
}
-#ifdef AES_ENABLE_NI
+#ifdef USE_AES_NI
void oqs_aes128_ecb_dec_ni(const uint8_t *ciphertext, const size_t ciphertext_len, const uint8_t *key, uint8_t *plaintext) {
void *schedule = NULL;
oqs_aes128_load_schedule_ni(key, &schedule);
@@ -111,7 +113,7 @@ void oqs_aes128_ecb_dec_c(const uint8_t *ciphertext, const size_t ciphertext_len
oqs_aes128_free_schedule_c(schedule);
}
-#ifdef AES_ENABLE_NI
+#ifdef USE_AES_NI
void oqs_aes128_ecb_dec_sch_ni(const uint8_t *ciphertext, const size_t ciphertext_len, const void *schedule, uint8_t *plaintext) {
assert(ciphertext_len % 16 == 0);
for (size_t block = 0; block < ciphertext_len / 16; block++) {
diff --git a/src/crypto/aes/aes_ni.c b/src/crypto/aes/aes_ni.c
index e70720e91..48a745ade 100644
--- a/src/crypto/aes/aes_ni.c
+++ b/src/crypto/aes/aes_ni.c
@@ -3,7 +3,7 @@
#include
#include
-#ifndef AES_ENABLE_NI
+#ifndef USE_AES_NI
#include
void oqs_aes128_load_schedule_ni(UNUSED const uint8_t *key, UNUSED void **_schedule) {
assert(0);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2ea8342d0..ab4463b21 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -5,7 +5,10 @@ if !ENABLE_SHARED
check_PROGRAMS += test_aes test_sha3
endif
-LIB_FLAGS=../liboqs.la -lm -lcrypto
+LIB_FLAGS=../liboqs.la -lm
+if USE_OPENSSL
+LIB_FLAGS += -L${OPENSSL_DIR}/lib -lcrypto
+endif
example_kem_SOURCES = example_kem.c
example_sig_SOURCES = example_sig.c
diff --git a/tests/test_aes.c b/tests/test_aes.c
index 45ec96002..0d0481e69 100644
--- a/tests/test_aes.c
+++ b/tests/test_aes.c
@@ -72,7 +72,7 @@ static int test_aes256_correctness_c() {
return EXIT_SUCCESS;
}
-#ifdef AES_ENABLE_NI
+#ifdef USE_AES_NI
static int test_aes128_correctness_ni() {
uint8_t derived_plaintext[16], derived_ciphertext[16];
void *schedule = NULL;
@@ -168,7 +168,7 @@ static void speed_aes256_c() {
oqs_aes256_free_schedule_c(schedule);
}
-#ifdef AES_ENABLE_NI
+#ifdef USE_AES_NI
static void speed_aes128_ni() {
uint8_t plaintext[16], ciphertext[16];
void *schedule = NULL;
@@ -253,7 +253,7 @@ int main(int argc, char **argv) {
return EXIT_FAILURE;
if (test_aes256_correctness_c() != EXIT_SUCCESS)
return EXIT_FAILURE;
-#ifdef AES_ENABLE_NI
+#ifdef USE_AES_NI
if (test_aes128_correctness_ni() != EXIT_SUCCESS)
return EXIT_FAILURE;
#endif
@@ -270,7 +270,7 @@ int main(int argc, char **argv) {
PRINT_TIMER_HEADER
speed_aes128_c();
speed_aes256_c();
-#ifdef AES_ENABLE_NI
+#ifdef USE_AES_NI
speed_aes128_ni();
#endif
#ifdef USE_OPENSSL