3rdparty: Add additional build facilities for 3rd-party code
diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
index 4511e43..dca4bd7 100644
--- a/3rdparty/CMakeLists.txt
+++ b/3rdparty/CMakeLists.txt
@@ -1,6 +1,11 @@
+list (APPEND thirdparty_src)
+list (APPEND thirdparty_lib)
+list (APPEND thirdparty_inc)
+list (APPEND thirdparty_def)
+
add_subdirectory(everest)
-set(src_thirdparty
- ${src_everest}
- PARENT_SCOPE
-)
+set(thirdparty_src ${thirdparty_src} PARENT_SCOPE)
+set(thirdparty_lib ${thirdparty_lib} PARENT_SCOPE)
+set(thirdparty_inc ${thirdparty_inc} PARENT_SCOPE)
+set(thirdparty_def ${thirdparty_def} PARENT_SCOPE)
diff --git a/3rdparty/everest/CMakeLists.txt b/3rdparty/everest/CMakeLists.txt
index 84e2763..5b0a078 100644
--- a/3rdparty/everest/CMakeLists.txt
+++ b/3rdparty/everest/CMakeLists.txt
@@ -1,10 +1,40 @@
-include_directories(include include/everest include/everest/kremlib)
+list (APPEND everest_src)
+list (APPEND everest_inc)
+list (APPEND everest_def)
-set(src_everest
- ${CMAKE_CURRENT_SOURCE_DIR}/library/everest.c
- ${CMAKE_CURRENT_SOURCE_DIR}/library/Hacl_Curve25519.c
- ${CMAKE_CURRENT_SOURCE_DIR}/library/x25519.c
- ${CMAKE_CURRENT_SOURCE_DIR}/library/kremlib/FStar_UInt64_FStar_UInt32_FStar_UInt16_FStar_UInt8.c
- PARENT_SCOPE
-)
+execute_process(COMMAND ${PERL_EXECUTABLE} scripts/config.pl -f include/mbedtls/config.h get MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED RESULT_VARIABLE result)
+if(${result} EQUAL 0)
+ set(everest_src
+ ${CMAKE_CURRENT_SOURCE_DIR}/library/everest.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/library/x25519.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/library/kremlib/FStar_UInt64_FStar_UInt32_FStar_UInt16_FStar_UInt8.c
+ )
+
+ if (${CMAKE_LIBRARY_ARCHITECTURE} STREQUAL "x86_64-linux-gnu")
+ list(APPEND everest_src ${CMAKE_CURRENT_SOURCE_DIR}/library/Hacl_Curve25519.c)
+ else()
+ list(APPEND everest_def -DKRML_VERIFIED_UINT128)
+ list(APPEND everest_src
+ ${CMAKE_CURRENT_SOURCE_DIR}/library/legacy/Hacl_Curve25519.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/library/kremlib/FStar_UInt128_extracted.c
+ )
+ endif()
+
+ list(APPEND everest_inc ${CMAKE_CURRENT_SOURCE_DIR}/../../include ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/include/everest ${CMAKE_CURRENT_SOURCE_DIR}/include/everest/kremlib)
+
+ if(INSTALL_MBEDTLS_HEADERS)
+
+ file(GLOB_RECURSE headers "${CMAKE_CURRENT_SOURCE_DIR}/include/everest/*.h")
+
+ install(FILES ${headers}
+ DESTINATION include/everest
+ PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
+
+ endif(INSTALL_MBEDTLS_HEADERS)
+
+endif()
+
+set(thirdparty_src ${thirdparty_src} ${everest_src} PARENT_SCOPE)
+set(thirdparty_inc ${thirdparty_inc} ${everest_inc} PARENT_SCOPE)
+set(thirdparty_def ${thirdparty_def} ${everest_def} PARENT_SCOPE)
diff --git a/3rdparty/everest/Makefile.inc b/3rdparty/everest/Makefile.inc
index bbdba56..0b71e2a 100755
--- a/3rdparty/everest/Makefile.inc
+++ b/3rdparty/everest/Makefile.inc
@@ -1,7 +1,18 @@
-THIRDPARTY_INCLUDES+=-I../3rdparty/everest/include -I../3rdparty/everest/include/everest -I../3rdparty/everest/include/everest/kremlib
-
-THIRDPARTY_OBJECTS+= \
- ../3rdparty/everest/library/everest.o \
- ../3rdparty/everest/library/Hacl_Curve25519.o \
- ../3rdparty/everest/library/x25519.o \
- ../3rdparty/everest/library/kremlib/FStar_UInt64_FStar_UInt32_FStar_UInt16_FStar_UInt8.o
\ No newline at end of file
+EVEREST_ENABLED=$(shell perl ../scripts/config.pl -f ../include/mbedtls/config.h get MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED; echo $$?)
+
+ifeq ($(EVEREST_ENABLED),0)
+THIRDPARTY_INCLUDES+=-I../3rdparty/everest/include -I../3rdparty/everest/include/everest -I../3rdparty/everest/include/everest/kremlib
+
+THIRDPARTY_OBJECTS+= \
+ ../3rdparty/everest/library/everest.o \
+ ../3rdparty/everest/library/x25519.o \
+ ../3rdparty/everest/library/kremlib/FStar_UInt64_FStar_UInt32_FStar_UInt16_FStar_UInt8.o
+
+ifeq ($(shell getconf LONG_BIT),64)
+THIRDPARTY_OBJECTS+=../3rdparty/everest/library/Hacl_Curve25519.o
+else
+CFLAGS+="-DKRML_VERIFIED_UINT128"
+THIRDPARTY_OBJECTS+=../3rdparty/everest/library/legacy/Hacl_Curve25519.o \
+ ../3rdparty/everest/library/kremlib/FStar_UInt128_extracted.o
+endif
+endif
diff --git a/3rdparty/everest/library/vs2010/Hacl_Curve25519.c b/3rdparty/everest/library/legacy/Hacl_Curve25519.c
similarity index 100%
rename from 3rdparty/everest/library/vs2010/Hacl_Curve25519.c
rename to 3rdparty/everest/library/legacy/Hacl_Curve25519.c