Browse Source

Add liboqs integration to CMake build system (#5407)

* Add liboqs integration to CMake build system

* Rephrase WOLFSSL_OQS option

* Add new FindOQS.cmake file to cmake/include.am

Co-authored-by: Disyer <denialmc1@gmail.com>
Derzsi Dániel 1 year ago
parent
commit
f515916f68
4 changed files with 49 additions and 0 deletions
  1. 21 0
      CMakeLists.txt
  2. 7 0
      cmake/functions.cmake
  3. 1 0
      cmake/include.am
  4. 20 0
      cmake/modules/FindOQS.cmake

+ 21 - 0
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
         $<INSTALL_INTERFACE:include>
         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
         $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+        ${WOLFSSL_INCLUDE_DIRS}
 )
 
 ####################################################

+ 7 - 0
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()

+ 1 - 0
cmake/include.am

@@ -1,2 +1,3 @@
 EXTRA_DIST += cmake/config.in
 EXTRA_DIST += cmake/functions.cmake
+EXTRA_DIST += cmake/modules/FindOQS.cmake

+ 20 - 0
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)