diff --git a/CMakeLists.txt b/CMakeLists.txt index 467f4b797..e4ec24358 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,9 @@ set(LIBTOOL_FULL_VERSION ${LIBTOOL_SO_VERSION}.${LIBTOOL_AGE}.${LIBTOOL_REVISION set(WOLFSSL_DEFINITIONS) set(WOLFSSL_LINK_LIBS) +set(WOLFSSL_INCLUDE_DIRS) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/") include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/functions.cmake) #################################################### @@ -377,6 +379,24 @@ endif() set(WOLFSSL_SLOW_MATH "yes") +# liboqs +add_option(WOLFSSL_OQS + "Enable integration with the OQS (Open Quantum Safe) liboqs library (default: disabled)" + "no" "yes;no") + +if (WOLFSSL_OQS) + find_package(OQS) + + if (OQS_FOUND) + list(APPEND WOLFSSL_LINK_LIBS ${OQS_LIBRARY}) + list(APPEND WOLFSSL_INCLUDE_DIRS ${OQS_INCLUDE_DIR}) + set(HAVE_LIBOQS 1) + list(APPEND WOLFSSL_DEFINITIONS + "-DHAVE_TLS_EXTENSIONS" + "-DHAVE_LIBOQS") + endif() +endif() + # TODO: - Lean PSK # - Lean TLS # - Low resource @@ -1803,6 +1823,7 @@ target_include_directories(wolfssl $ $ $ + ${WOLFSSL_INCLUDE_DIRS} ) #################################################### diff --git a/cmake/functions.cmake b/cmake/functions.cmake index 3cbed6325..4714ad526 100644 --- a/cmake/functions.cmake +++ b/cmake/functions.cmake @@ -190,6 +190,9 @@ function(generate_build_flags) if(WOLFSSL_XCHACHA OR WOLFSSL_USER_SETTINGS) set(BUILD_XCHACHA "yes" PARENT_SCOPE) endif() + if(WOLFSSL_OQS OR WOLFSSL_USER_SETTINGS) + set(BUILD_FALCON "yes" PARENT_SCOPE) + endif() set(BUILD_INLINE ${WOLFSSL_INLINE} PARENT_SCOPE) if(WOLFSSL_OCSP OR WOLFSSL_USER_SETTINGS) set(BUILD_OCSP "yes" PARENT_SCOPE) @@ -788,6 +791,10 @@ function(generate_lib_src_list LIB_SOURCES) endif() endif() + if(BUILD_FALCON) + list(APPEND LIB_SOURCES wolfcrypt/src/falcon.c) + endif() + if(BUILD_LIBZ) list(APPEND LIB_SOURCES wolfcrypt/src/compress.c) endif() diff --git a/cmake/include.am b/cmake/include.am index f6cd31164..9d9bc038c 100644 --- a/cmake/include.am +++ b/cmake/include.am @@ -1,2 +1,3 @@ EXTRA_DIST += cmake/config.in EXTRA_DIST += cmake/functions.cmake +EXTRA_DIST += cmake/modules/FindOQS.cmake diff --git a/cmake/modules/FindOQS.cmake b/cmake/modules/FindOQS.cmake new file mode 100644 index 000000000..06661e446 --- /dev/null +++ b/cmake/modules/FindOQS.cmake @@ -0,0 +1,20 @@ +# Filename: FindOQS.cmake +# Authors: darktohka (27 Jul, 2022) +# +# Usage: +# find_package(OQS [REQUIRED] [QUIET]) +# +# Once done this will define: +# OQS_FOUND - system has liboqs +# OQS_INCLUDE_DIR - the include directory containing oqs/ +# OQS_LIBRARY - the path to the liboqs library +# + +find_path(OQS_INCLUDE_DIR NAMES "oqs/common.h") + +find_library(OQS_LIBRARY NAMES "oqs") + +mark_as_advanced(OQS_INCLUDE_DIR OQS_LIBRARY) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OQS DEFAULT_MSG OQS_INCLUDE_DIR OQS_LIBRARY)