Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/bsd/libfido2/dist Import libfido2 1.7.0; changes:



details:   https://anonhg.NetBSD.org/src/rev/d3d0ea6018a6
branches:  trunk
changeset: 379743:d3d0ea6018a6
user:      christos <christos%NetBSD.org@localhost>
date:      Thu Jun 17 00:38:06 2021 +0000

description:
Import libfido2 1.7.0; changes:

Version 1.7.0 (2021-03-29)
- New dependency on zlib.
- Fixed musl build; gh#259.
- hid_win: detect devices with vendor or product IDs > 0x7fff; gh#264.
- Support for FIDO 2.1 authenticator configuration.
- Support for FIDO 2.1 UV token permissions.
- Support for FIDO 2.1 "credBlobs" and "largeBlobs" extensions.
- New API calls:
    fido_assert_blob_len;
    fido_assert_blob_ptr;
    fido_assert_largeblob_key_len;
    fido_assert_largeblob_key_ptr;
    fido_assert_set_hmac_secret;
    fido_cbor_info_maxcredbloblen;
    fido_cred_largeblob_key_len;
    fido_cred_largeblob_key_ptr;
    fido_cred_set_blob;
    fido_dev_enable_entattest;
    fido_dev_force_pin_change;
    fido_dev_has_uv;
    fido_dev_largeblob_get;
    fido_dev_largeblob_get_array;
    fido_dev_largeblob_remove;
    fido_dev_largeblob_set;
    fido_dev_largeblob_set_array;
    fido_dev_set_pin_minlen;
    fido_dev_set_sigmask;
    fido_dev_supports_credman;
    fido_dev_supports_permissions;
    fido_dev_supports_uv;
    fido_dev_toggle_always_uv.
- New fido_init flag to disable fido_dev_open's U2F fallback; gh#282.
- Experimental NFC support on Linux; enable with -DNFC_LINUX.

Version 1.6.0 (2020-12-22)
- Fix OpenSSL 1.0 and Cygwin builds.
- hid_linux: fix build on 32-bit systems.
- hid_osx: allow reads from spawned threads.
- Documentation and reliability fixes.
- New API calls:
    fido_cred_authdata_raw_len;
    fido_cred_authdata_raw_ptr;
    fido_cred_sigcount;
    fido_dev_get_uv_retry_count;
    fido_dev_supports_credman.
- Hardened Windows build.
- Native FreeBSD and NetBSD support.
- Use CTAP2 canonical CBOR when combining hmac-secret and credProtect.

diffstat:

 external/bsd/libfido2/dist/CMakeLists.txt                     |   426 +--
 external/bsd/libfido2/dist/LICENSE                            |     2 +-
 external/bsd/libfido2/dist/NEWS                               |    49 +
 external/bsd/libfido2/dist/README.adoc                        |    21 +-
 external/bsd/libfido2/dist/examples/CMakeLists.txt            |    31 +-
 external/bsd/libfido2/dist/examples/README.adoc               |    16 +-
 external/bsd/libfido2/dist/examples/assert.c                  |    32 +-
 external/bsd/libfido2/dist/examples/cred.c                    |    26 +-
 external/bsd/libfido2/dist/examples/info.c                    |     2 +-
 external/bsd/libfido2/dist/examples/manifest.c                |     3 +-
 external/bsd/libfido2/dist/examples/reset.c                   |     6 +-
 external/bsd/libfido2/dist/examples/retries.c                 |     3 +-
 external/bsd/libfido2/dist/examples/select.c                  |     3 +-
 external/bsd/libfido2/dist/examples/setpin.c                  |     4 +-
 external/bsd/libfido2/dist/examples/util.c                    |    15 +-
 external/bsd/libfido2/dist/fuzz/CMakeLists.txt                |    20 +
 external/bsd/libfido2/dist/fuzz/Dockerfile                    |     7 +-
 external/bsd/libfido2/dist/fuzz/Makefile                      |     9 +-
 external/bsd/libfido2/dist/fuzz/README                        |     6 +-
 external/bsd/libfido2/dist/fuzz/build-coverage                |     7 +-
 external/bsd/libfido2/dist/fuzz/export.gnu                    |    35 +
 external/bsd/libfido2/dist/fuzz/functions.txt                 |  1058 +++++----
 external/bsd/libfido2/dist/fuzz/fuzz_assert.c                 |    52 +-
 external/bsd/libfido2/dist/fuzz/fuzz_bio.c                    |    24 +-
 external/bsd/libfido2/dist/fuzz/fuzz_cred.c                   |    74 +-
 external/bsd/libfido2/dist/fuzz/fuzz_credman.c                |    20 +-
 external/bsd/libfido2/dist/fuzz/fuzz_hid.c                    |   173 +
 external/bsd/libfido2/dist/fuzz/fuzz_largeblob.c              |   270 ++
 external/bsd/libfido2/dist/fuzz/fuzz_mgmt.c                   |   162 +-
 external/bsd/libfido2/dist/fuzz/fuzz_netlink.c                |   249 ++
 external/bsd/libfido2/dist/fuzz/libfuzzer.c                   |     5 +-
 external/bsd/libfido2/dist/fuzz/mutator_aux.c                 |   167 +-
 external/bsd/libfido2/dist/fuzz/mutator_aux.h                 |    18 +-
 external/bsd/libfido2/dist/fuzz/report.tgz                    |   Bin 
 external/bsd/libfido2/dist/fuzz/summary.txt                   |    58 +-
 external/bsd/libfido2/dist/fuzz/wiredata_fido2.h              |    86 +-
 external/bsd/libfido2/dist/fuzz/wrap.c                        |    41 +-
 external/bsd/libfido2/dist/fuzz/wrapped.sym                   |     4 +
 external/bsd/libfido2/dist/man/CMakeLists.txt                 |    31 +-
 external/bsd/libfido2/dist/man/fido2-assert.1                 |    13 +-
 external/bsd/libfido2/dist/man/fido2-cred.1                   |    25 +-
 external/bsd/libfido2/dist/man/fido2-token.1                  |   207 +-
 external/bsd/libfido2/dist/man/fido_assert_new.3              |    32 +-
 external/bsd/libfido2/dist/man/fido_assert_set_authdata.3     |    20 +-
 external/bsd/libfido2/dist/man/fido_cbor_info_new.3           |     9 +
 external/bsd/libfido2/dist/man/fido_cred_new.3                |    37 +-
 external/bsd/libfido2/dist/man/fido_cred_set_authdata.3       |    29 +-
 external/bsd/libfido2/dist/man/fido_cred_verify.3             |     2 +-
 external/bsd/libfido2/dist/man/fido_credman_metadata_new.3    |     4 +
 external/bsd/libfido2/dist/man/fido_dev_enable_entattest.3    |    95 +
 external/bsd/libfido2/dist/man/fido_dev_largeblob_get.3       |   194 +
 external/bsd/libfido2/dist/man/fido_dev_make_cred.3           |     2 +-
 external/bsd/libfido2/dist/man/fido_dev_open.3                |    49 +-
 external/bsd/libfido2/dist/man/fido_dev_set_io_functions.3    |   172 +-
 external/bsd/libfido2/dist/man/fido_dev_set_pin.3             |    15 +
 external/bsd/libfido2/dist/man/fido_init.3                    |    14 +-
 external/bsd/libfido2/dist/openbsd-compat/endian_win32.c      |    51 +
 external/bsd/libfido2/dist/openbsd-compat/freezero.c          |    30 +
 external/bsd/libfido2/dist/openbsd-compat/hkdf.c              |   124 +
 external/bsd/libfido2/dist/openbsd-compat/hkdf.h              |    65 +
 external/bsd/libfido2/dist/openbsd-compat/openbsd-compat.h    |    24 +
 external/bsd/libfido2/dist/openbsd-compat/posix_ioctl_check.c |     7 +
 external/bsd/libfido2/dist/openbsd-compat/time.h              |    33 +-
 external/bsd/libfido2/dist/openbsd-compat/types.h             |     5 +
 external/bsd/libfido2/dist/regress/assert.c                   |    48 +-
 external/bsd/libfido2/dist/regress/cred.c                     |    46 +
 external/bsd/libfido2/dist/regress/dev.c                      |   192 +-
 external/bsd/libfido2/dist/src/CMakeLists.txt                 |    88 +-
 external/bsd/libfido2/dist/src/aes256.c                       |   235 +-
 external/bsd/libfido2/dist/src/assert.c                       |   197 +-
 external/bsd/libfido2/dist/src/authkey.c                      |     3 +-
 external/bsd/libfido2/dist/src/bio.c                          |    28 +-
 external/bsd/libfido2/dist/src/blob.c                         |    89 +-
 external/bsd/libfido2/dist/src/blob.h                         |     4 +-
 external/bsd/libfido2/dist/src/buf.c                          |     1 -
 external/bsd/libfido2/dist/src/cbor.c                         |   473 ++-
 external/bsd/libfido2/dist/src/compress.c                     |    49 +
 external/bsd/libfido2/dist/src/config.c                       |   193 +
 external/bsd/libfido2/dist/src/cred.c                         |   129 +-
 external/bsd/libfido2/dist/src/credman.c                      |    53 +-
 external/bsd/libfido2/dist/src/dev.c                          |   250 +-
 external/bsd/libfido2/dist/src/ecdh.c                         |   152 +-
 external/bsd/libfido2/dist/src/eddsa.c                        |     7 +-
 external/bsd/libfido2/dist/src/err.c                          |    10 +
 external/bsd/libfido2/dist/src/es256.c                        |    11 +-
 external/bsd/libfido2/dist/src/export.gnu                     |    27 +
 external/bsd/libfido2/dist/src/export.llvm                    |    27 +
 external/bsd/libfido2/dist/src/export.msvc                    |    27 +
 external/bsd/libfido2/dist/src/extern.h                       |   102 +-
 external/bsd/libfido2/dist/src/fido.h                         |    41 +-
 external/bsd/libfido2/dist/src/fido/config.h                  |    34 +
 external/bsd/libfido2/dist/src/fido/err.h                     |     7 +-
 external/bsd/libfido2/dist/src/fido/param.h                   |    16 +
 external/bsd/libfido2/dist/src/fido/types.h                   |    70 +-
 external/bsd/libfido2/dist/src/hid.c                          |   110 +-
 external/bsd/libfido2/dist/src/hid_freebsd.c                  |   253 ++
 external/bsd/libfido2/dist/src/hid_hidapi.c                   |   102 +-
 external/bsd/libfido2/dist/src/hid_linux.c                    |   249 +-
 external/bsd/libfido2/dist/src/hid_netbsd.c                   |   259 +-
 external/bsd/libfido2/dist/src/hid_openbsd.c                  |    72 +-
 external/bsd/libfido2/dist/src/hid_osx.c                      |    59 +-
 external/bsd/libfido2/dist/src/hid_unix.c                     |    76 +
 external/bsd/libfido2/dist/src/hid_win.c                      |    18 +-
 external/bsd/libfido2/dist/src/info.c                         |     9 +-
 external/bsd/libfido2/dist/src/io.c                           |    28 +-
 external/bsd/libfido2/dist/src/iso7816.c                      |    30 +-
 external/bsd/libfido2/dist/src/iso7816.h                      |     2 +-
 external/bsd/libfido2/dist/src/largeblob.c                    |   881 ++++++++
 external/bsd/libfido2/dist/src/libfido2.pc.in                 |     1 +
 external/bsd/libfido2/dist/src/log.c                          |    63 +-
 external/bsd/libfido2/dist/src/netlink.c                      |   782 +++++++
 external/bsd/libfido2/dist/src/netlink.h                      |    44 +
 external/bsd/libfido2/dist/src/nfc_linux.c                    |   631 +++++
 external/bsd/libfido2/dist/src/pin.c                          |   637 +++--
 external/bsd/libfido2/dist/src/random.c                       |    82 +
 external/bsd/libfido2/dist/src/reset.c                        |     6 +-
 external/bsd/libfido2/dist/src/rs256.c                        |     6 +-
 external/bsd/libfido2/dist/src/u2f.c                          |    60 +-
 external/bsd/libfido2/dist/tools/CMakeLists.txt               |    29 +-
 external/bsd/libfido2/dist/tools/assert_get.c                 |    19 +-
 external/bsd/libfido2/dist/tools/assert_verify.c              |     1 -
 external/bsd/libfido2/dist/tools/bio.c                        |   178 +-
 external/bsd/libfido2/dist/tools/config.c                     |   149 +
 external/bsd/libfido2/dist/tools/cred_make.c                  |    19 +-
 external/bsd/libfido2/dist/tools/credman.c                    |   245 +-
 external/bsd/libfido2/dist/tools/extern.h                     |    49 +-
 external/bsd/libfido2/dist/tools/fido2-assert.c               |     2 +-
 external/bsd/libfido2/dist/tools/fido2-cred.c                 |     2 +-
 external/bsd/libfido2/dist/tools/fido2-token.c                |    28 +-
 external/bsd/libfido2/dist/tools/largeblob.c                  |   593 +++++
 external/bsd/libfido2/dist/tools/pin.c                        |     3 -
 external/bsd/libfido2/dist/tools/test.sh                      |   364 ++-
 external/bsd/libfido2/dist/tools/token.c                      |   162 +-
 external/bsd/libfido2/dist/tools/util.c                       |   164 +-
 external/bsd/libfido2/dist/udev/70-u2f.rules                  |    60 +-
 external/bsd/libfido2/dist/udev/fidodevs                      |    36 +-
 external/bsd/libfido2/dist/windows/build.ps1                  |   128 +-
 137 files changed, 10760 insertions(+), 3013 deletions(-)

diffs (truncated from 19811 to 300 lines):

diff -r 9f6878d0c322 -r d3d0ea6018a6 external/bsd/libfido2/dist/CMakeLists.txt
--- a/external/bsd/libfido2/dist/CMakeLists.txt Thu Jun 17 00:03:05 2021 +0000
+++ b/external/bsd/libfido2/dist/CMakeLists.txt Thu Jun 17 00:38:06 2021 +0000
@@ -7,6 +7,10 @@ cmake_policy(SET CMP0025 NEW)
 
 project(libfido2 C)
 cmake_minimum_required(VERSION 3.0)
+# Set PIE flags for POSITION_INDEPENDENT_CODE targets, added in CMake 3.14.
+if(POLICY CMP0083)
+  cmake_policy(SET CMP0083 NEW)
+endif()
 
 include(CheckCCompilerFlag)
 include(CheckFunctionExists)
@@ -15,16 +19,29 @@ include(CheckSymbolExists)
 include(CheckIncludeFiles)
 include(CheckTypeSize)
 include(GNUInstallDirs)
+include(CheckPIESupported OPTIONAL RESULT_VARIABLE CHECK_PIE_SUPPORTED)
+if(CHECK_PIE_SUPPORTED)
+  check_pie_supported(LANGUAGES C)
+endif()
 
-set(CMAKE_COLOR_MAKEFILE off)
-set(CMAKE_VERBOSE_MAKEFILE on)
 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-
+set(CMAKE_COLOR_MAKEFILE OFF)
+set(CMAKE_VERBOSE_MAKEFILE ON)
 set(FIDO_MAJOR "1")
-set(FIDO_MINOR "5")
+set(FIDO_MINOR "7")
 set(FIDO_PATCH "0")
 set(FIDO_VERSION ${FIDO_MAJOR}.${FIDO_MINOR}.${FIDO_PATCH})
 
+option(BUILD_EXAMPLES    "Build example programs"             ON)
+option(BUILD_MANPAGES    "Build man pages"                    ON)
+option(BUILD_SHARED_LIBS "Build the shared library"           ON)
+option(BUILD_STATIC_LIBS "Build the static library"           ON)
+option(BUILD_TOOLS       "Build tool programs"                ON)
+option(FUZZ              "Enable fuzzing instrumentation"     OFF)
+option(LIBFUZZER         "Build libfuzzer harnesses"          OFF)
+option(USE_HIDAPI        "Use hidapi as the HID backend"      OFF)
+option(NFC_LINUX         "Experimental NFC support on Linux"  OFF)
+
 add_definitions(-D_FIDO_MAJOR=${FIDO_MAJOR})
 add_definitions(-D_FIDO_MINOR=${FIDO_MINOR})
 add_definitions(-D_FIDO_PATCH=${FIDO_PATCH})
@@ -43,14 +60,116 @@ if(APPLE)
            "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
 endif()
 
+if(NOT MSVC)
+       set(FIDO_CFLAGS "${FIDO_CFLAGS} -D_POSIX_C_SOURCE=200809L")
+       set(FIDO_CFLAGS "${FIDO_CFLAGS} -D_BSD_SOURCE")
+       if(APPLE)
+               set(FIDO_CFLAGS "${FIDO_CFLAGS} -D_DARWIN_C_SOURCE")
+               set(FIDO_CFLAGS "${FIDO_CFLAGS} -D__STDC_WANT_LIB_EXT1__=1")
+       elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+               set(FIDO_CFLAGS "${FIDO_CFLAGS} -D_GNU_SOURCE")
+               set(FIDO_CFLAGS "${FIDO_CFLAGS} -D_DEFAULT_SOURCE")
+       elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+               set(FIDO_CFLAGS "${FIDO_CFLAGS} -D__BSD_VISIBLE=1")
+       endif()
+       set(FIDO_CFLAGS "${FIDO_CFLAGS} -std=c99")
+       set(CMAKE_C_FLAGS "${FIDO_CFLAGS} ${CMAKE_C_FLAGS}")
+endif()
+
+check_c_compiler_flag("-Wshorten-64-to-32" HAVE_SHORTEN_64_TO_32)
+check_c_compiler_flag("-fstack-protector-all" HAVE_STACK_PROTECTOR_ALL)
+
+check_include_files(cbor.h HAVE_CBOR_H)
+check_include_files(endian.h HAVE_ENDIAN_H)
+check_include_files(err.h HAVE_ERR_H)
+check_include_files(openssl/opensslv.h HAVE_OPENSSLV_H)
+check_include_files(signal.h HAVE_SIGNAL_H)
+check_include_files(sys/random.h HAVE_SYS_RANDOM_H)
+check_include_files(unistd.h HAVE_UNISTD_H)
+
+check_symbol_exists(arc4random_buf stdlib.h HAVE_ARC4RANDOM_BUF)
+check_symbol_exists(clock_gettime time.h HAVE_CLOCK_GETTIME)
+check_symbol_exists(explicit_bzero string.h HAVE_EXPLICIT_BZERO)
+check_symbol_exists(freezero stdlib.h HAVE_FREEZERO)
+check_symbol_exists(getline stdio.h HAVE_GETLINE)
+check_symbol_exists(getopt unistd.h HAVE_GETOPT)
+check_symbol_exists(getpagesize unistd.h HAVE_GETPAGESIZE)
+check_symbol_exists(getrandom sys/random.h HAVE_GETRANDOM)
+check_symbol_exists(memset_s string.h HAVE_MEMSET_S)
+check_symbol_exists(readpassphrase readpassphrase.h HAVE_READPASSPHRASE)
+check_symbol_exists(recallocarray stdlib.h HAVE_RECALLOCARRAY)
+check_symbol_exists(sigaction signal.h HAVE_SIGACTION)
+check_symbol_exists(strlcat string.h HAVE_STRLCAT)
+check_symbol_exists(strlcpy string.h HAVE_STRLCPY)
+check_symbol_exists(sysconf unistd.h HAVE_SYSCONF)
+check_symbol_exists(timespecsub sys/time.h HAVE_TIMESPECSUB)
+check_symbol_exists(timingsafe_bcmp string.h HAVE_TIMINGSAFE_BCMP)
+
+set(CMAKE_EXTRA_INCLUDE_FILES signal.h)
+check_type_size("sig_atomic_t" HAVE_SIG_ATOMIC_T)
+set(CMAKE_EXTRA_INCLUDE_FILES)
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+try_compile(HAVE_POSIX_IOCTL
+    "${CMAKE_CURRENT_BINARY_DIR}/posix_ioctl_check.o"
+    "${CMAKE_CURRENT_SOURCE_DIR}/openbsd-compat/posix_ioctl_check.c"
+    COMPILE_DEFINITIONS "-Werror -Woverflow -Wsign-conversion")
+
+list(APPEND CHECK_VARIABLES
+       HAVE_ARC4RANDOM_BUF
+       HAVE_CBOR_H
+       HAVE_CLOCK_GETTIME
+       HAVE_ENDIAN_H
+       HAVE_ERR_H
+       HAVE_FREEZERO
+       HAVE_GETLINE
+       HAVE_GETOPT
+       HAVE_GETPAGESIZE
+       HAVE_GETRANDOM
+       HAVE_MEMSET_S
+       HAVE_OPENSSLV_H
+       HAVE_POSIX_IOCTL
+       HAVE_READPASSPHRASE
+       HAVE_RECALLOCARRAY
+       HAVE_SIGACTION
+       HAVE_SIGNAL_H
+       HAVE_STRLCAT
+       HAVE_STRLCPY
+       HAVE_SYSCONF
+       HAVE_SYS_RANDOM_H
+       HAVE_TIMESPECSUB
+       HAVE_TIMINGSAFE_BCMP
+       HAVE_UNISTD_H
+)
+
+foreach(v ${CHECK_VARIABLES})
+       if (${v})
+               add_definitions(-D${v})
+       endif()
+endforeach()
+
+if(HAVE_EXPLICIT_BZERO AND NOT LIBFUZZER)
+       add_definitions(-DHAVE_EXPLICIT_BZERO)
+endif()
+
+if(HAVE_SIGACTION AND (NOT HAVE_SIG_ATOMIC_T STREQUAL ""))
+       add_definitions(-DSIGNAL_EXAMPLE)
+endif()
+
+if(UNIX)
+       add_definitions(-DHAVE_DEV_URANDOM)
+endif()
+
 if(MSVC)
        if((NOT CBOR_INCLUDE_DIRS) OR (NOT CBOR_LIBRARY_DIRS) OR
-          (NOT CRYPTO_INCLUDE_DIRS) OR (NOT CRYPTO_LIBRARY_DIRS))
+          (NOT CRYPTO_INCLUDE_DIRS) OR (NOT CRYPTO_LIBRARY_DIRS) OR
+          (NOT ZLIB_INCLUDE_DIRS) OR (NOT ZLIB_LIBRARY_DIRS))
                message(FATAL_ERROR "please provide definitions for "
-                   "{CBOR,CRYPTO}_{INCLUDE,LIBRARY}_DIRS when building "
+                  "{CBOR,CRYPTO,ZLIB}_{INCLUDE,LIBRARY}_DIRS when building "
                    "under msvc")
        endif()
        set(CBOR_LIBRARIES cbor)
+       set(ZLIB_LIBRARIES zlib)
        set(CRYPTO_LIBRARIES crypto-46)
        set(MSVC_DISABLED_WARNINGS_LIST
                "C4200" # nonstandard extension used: zero-sized array in
@@ -67,45 +186,40 @@ if(MSVC)
            ${MSVC_DISABLED_WARNINGS_LIST})
        string(REGEX REPLACE "[/-]W[1234][ ]?" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MP -W4 -WX ${MSVC_DISABLED_WARNINGS_STR}")
-       set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Z7")
-       set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi")
+       set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Z7 /guard:cf /sdl /RTCcsu")
+       set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi /guard:cf /sdl")
 else()
        include(FindPkgConfig)
        pkg_search_module(CBOR libcbor)
        pkg_search_module(CRYPTO libcrypto)
+       pkg_search_module(ZLIB zlib)
 
-       # XXX workaround libcbor's missing .pc file
-       if(NOT CBOR_FOUND)
-               check_include_files(cbor.h HAVE_CBOR_H)
-               if(NOT HAVE_CBOR_H)
-                       message(FATAL_ERROR "could not find cbor header files")
-               endif()
-               set(CBOR_LIBRARIES "cbor")
+       if(NOT CBOR_FOUND AND NOT HAVE_CBOR_H)
+               message(FATAL_ERROR "could not find libcbor")
+       endif()
+       if(NOT CRYPTO_FOUND AND NOT HAVE_OPENSSLV_H)
+               message(FATAL_ERROR "could not find libcrypto")
+       endif()
+       if(NOT ZLIB_FOUND)
+               message(FATAL_ERROR "could not find zlib")
        endif()
 
-       # XXX workaround libcrypto's missing .pc file
-       if(NOT CRYPTO_FOUND)
-               check_include_files(openssl/opensslv.h HAVE_OPENSSLV_H)
-               if(NOT HAVE_OPENSSLV_H)
-                       message(FATAL_ERROR "could not find crypto header files")
-               endif()
-               set(CRYPTO_LIBRARIES "crypto")
-       endif()
+       set(CBOR_LIBRARIES "cbor")
+       set(CRYPTO_LIBRARIES "crypto")
 
        if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
                pkg_search_module(UDEV libudev REQUIRED)
                set(UDEV_NAME "udev")
-               include_directories(${UDEV_INCLUDE_DIRS})
-               link_directories(${UDEV_LIBRARY_DIRS})
-               # Define be32toh().
-               add_definitions(-D_GNU_SOURCE)
                # If using hidapi, use hidapi-hidraw.
                set(HIDAPI_SUFFIX -hidraw)
-               # Look for clock_gettime in librt.
-               check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME)
-               if(HAVE_CLOCK_GETTIME)
-                       set(BASE_LIBRARIES ${BASE_LIBRARIES} rt)
-                       add_definitions(-DHAVE_CLOCK_GETTIME)
+               if(NOT HAVE_CLOCK_GETTIME)
+                       # Look for clock_gettime in librt.
+                       check_library_exists(rt clock_gettime "time.h"
+                           HAVE_CLOCK_GETTIME)
+                       if (HAVE_CLOCK_GETTIME)
+                               add_definitions(-DHAVE_CLOCK_GETTIME)
+                               set(BASE_LIBRARIES ${BASE_LIBRARIES} rt)
+                       endif()
                endif()
        endif()
 
@@ -113,57 +227,56 @@ else()
                # MinGW is stuck with a flavour of C89.
                add_definitions(-DFIDO_NO_DIAGNOSTIC)
                add_definitions(-DWC_ERR_INVALID_CHARS=0x80)
-               set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
+               add_compile_options(-Wno-unused-parameter)
        endif()
 
        if(USE_HIDAPI)
                add_definitions(-DUSE_HIDAPI)
                pkg_search_module(HIDAPI hidapi${HIDAPI_SUFFIX} REQUIRED)
-               if(HIDAPI_FOUND)
-                       include_directories(${HIDAPI_INCLUDE_DIRS})
-                       link_directories(${HIDAPI_LIBRARY_DIRS})
-                       set(HIDAPI_LIBRARIES hidapi${HIDAPI_SUFFIX})
-               endif()
+               set(HIDAPI_LIBRARIES hidapi${HIDAPI_SUFFIX})
+       endif()
+
+       if(FUZZ)
+               set(NFC_LINUX ON)
+       endif()
+
+       if(NFC_LINUX)
+               add_definitions(-DNFC_LINUX)
        endif()
 
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra")
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow")
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wwrite-strings")
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes")
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wbad-function-cast")
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic")
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic-errors")
-       check_c_compiler_flag("-fstack-protector-all" HAVE_STACK_PROTECTOR_ALL)
+       add_compile_options(-Wall)
+       add_compile_options(-Wextra)
+       add_compile_options(-Werror)
+       add_compile_options(-Wshadow)
+       add_compile_options(-Wcast-qual)
+       add_compile_options(-Wwrite-strings)
+       add_compile_options(-Wmissing-prototypes)
+       add_compile_options(-Wbad-function-cast)
+       add_compile_options(-pedantic)
+       add_compile_options(-pedantic-errors)
+
+       if(HAVE_SHORTEN_64_TO_32)
+               add_compile_options(-Wshorten-64-to-32)
+       endif()
        if(HAVE_STACK_PROTECTOR_ALL)
-               set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-all")
+               add_compile_options(-fstack-protector-all)
        endif()
 
-       add_definitions(-D_DEFAULT_SOURCE)
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
-
        set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g2")
        set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-omit-frame-pointer")
+       set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D_FORTIFY_SOURCE=2")
 
        if(FUZZ)
-               if(LIBFUZZER)
-                       set(FUZZ_LDFLAGS "-fsanitize=fuzzer")



Home | Main Index | Thread Index | Old Index