diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b888bf..486a344 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,75 +26,15 @@ set(CMAKE_CXX_STANDARD 17) pico_sdk_init() -add_executable(pico_hsm_sdk) +add_executable(pico_hsm_sdk_exe) -if (NOT DEFINED USB_VID) - set(USB_VID 0xFEFF) -endif() -add_definitions(-DUSB_VID=${USB_VID}) -if (NOT DEFINED USB_PID) - set(USB_PID 0xFCFD) -endif() -add_definitions(-DUSB_PID=${USB_PID}) -if (NOT DEFINED DEBUG_APDU) - set(DEBUG_APDU 0) -endif() -if (NOT DEFINED HSM_DRIVER) - set(HSM_DRIVER "ccid") -endif() -add_definitions(-DDEBUG_APDU=${DEBUG_APDU}) -configure_file(${CMAKE_CURRENT_LIST_DIR}/config/mbedtls_config.h ${CMAKE_CURRENT_LIST_DIR}/mbedtls/include/mbedtls COPYONLY) +include(pico_hsm_sdk.cmake) -message(STATUS "HSM driver: ${HSM_DRIVER}") - - -target_sources(pico_hsm_sdk PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src/main.c - ${CMAKE_CURRENT_LIST_DIR}/src/usb/usb.c - ${CMAKE_CURRENT_LIST_DIR}/src/fs/file.c - ${CMAKE_CURRENT_LIST_DIR}/src/fs/flash.c - ${CMAKE_CURRENT_LIST_DIR}/src/fs/low_flash.c - ${CMAKE_CURRENT_LIST_DIR}/src/rng/random.c - ${CMAKE_CURRENT_LIST_DIR}/src/rng/hwrng.c - ${CMAKE_CURRENT_LIST_DIR}/src/eac.c - ${CMAKE_CURRENT_LIST_DIR}/src/crypto_utils.c - ${CMAKE_CURRENT_LIST_DIR}/src/asn1.c - ${CMAKE_CURRENT_LIST_DIR}/src/apdu.c - ) - -if (${HSM_DRIVER} STREQUAL "ccid") -target_sources(pico_hsm_sdk PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src/usb/ccid/usb_descriptors.c - ${CMAKE_CURRENT_LIST_DIR}/src/usb/ccid/ccid.c - ) - -target_include_directories(pico_hsm_sdk PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src/usb/ccid - ) -elseif (${HSM_DRIVER} STREQUAL "hid") -target_sources(pico_hsm_sdk PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src/usb/hid/hid.c - ${CMAKE_CURRENT_LIST_DIR}/src/usb/hid/usb_descriptors.c - ) -target_include_directories(pico_hsm_sdk PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src/usb/hid - ) -endif() - -target_include_directories(pico_hsm_sdk PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src - ${CMAKE_CURRENT_LIST_DIR}/src/usb - ${CMAKE_CURRENT_LIST_DIR}/src/fs - ${CMAKE_CURRENT_LIST_DIR}/src/rng - ${CMAKE_CURRENT_LIST_DIR}/mbedtls/include - ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library - ) - -target_compile_options(pico_hsm_sdk PUBLIC +target_compile_options(pico_hsm_sdk_exe PUBLIC -Wall -Werror ) -pico_add_extra_outputs(pico_hsm_sdk) +pico_add_extra_outputs(pico_hsm_sdk_exe) -target_link_libraries(pico_hsm_sdk PRIVATE pico_stdlib pico_multicore hardware_flash hardware_sync hardware_adc pico_unique_id hardware_rtc tinyusb_device tinyusb_board) +target_link_libraries(pico_hsm_sdk_exe PRIVATE pico_hsm_sdk pico_stdlib pico_multicore hardware_flash hardware_sync hardware_adc pico_unique_id hardware_rtc tinyusb_device tinyusb_board) diff --git a/pico_hsm_sdk_import.cmake b/pico_hsm_sdk_import.cmake new file mode 100644 index 0000000..ec6d343 --- /dev/null +++ b/pico_hsm_sdk_import.cmake @@ -0,0 +1,113 @@ + # + # This file is part of the Pico HSM SDK distribution (https://github.com/polhenarejos/pico-hsm-sdk). + # Copyright (c) 2022 Pol Henarejos. + # + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by + # the Free Software Foundation, version 3. + # + # This program is distributed in the hope that it will be useful, but + # WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + # General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + # + +if (NOT DEFINED USB_VID) + set(USB_VID 0xFEFF) +endif() +add_definitions(-DUSB_VID=${USB_VID}) +if (NOT DEFINED USB_PID) + set(USB_PID 0xFCFD) +endif() +add_definitions(-DUSB_PID=${USB_PID}) +if (NOT DEFINED DEBUG_APDU) + set(DEBUG_APDU 0) +endif() +if (NOT DEFINED HSM_DRIVER) + set(HSM_DRIVER "ccid") +endif() +add_definitions(-DDEBUG_APDU=${DEBUG_APDU}) +configure_file(${CMAKE_CURRENT_LIST_DIR}/config/mbedtls_config.h ${CMAKE_CURRENT_LIST_DIR}/mbedtls/include/mbedtls COPYONLY) + +message(STATUS "HSM driver: ${HSM_DRIVER}") +message(STATUS "USB VID/PID: ${USB_VID}:${USB_PID}") + +configure_file(${CMAKE_CURRENT_LIST_DIR}/config/mbedtls_config.h ${CMAKE_CURRENT_LIST_DIR}/mbedtls/include/mbedtls COPYONLY) + +if (NOT TARGET pico_hsm_sdk) + pico_add_impl_library(pico_hsm_sdk) + + target_sources(pico_hsm_sdk INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/src/main.c + ${CMAKE_CURRENT_LIST_DIR}/src/usb/usb.c + ${CMAKE_CURRENT_LIST_DIR}/src/fs/file.c + ${CMAKE_CURRENT_LIST_DIR}/src/fs/flash.c + ${CMAKE_CURRENT_LIST_DIR}/src/fs/low_flash.c + ${CMAKE_CURRENT_LIST_DIR}/src/rng/random.c + ${CMAKE_CURRENT_LIST_DIR}/src/rng/hwrng.c + ${CMAKE_CURRENT_LIST_DIR}/src/eac.c + ${CMAKE_CURRENT_LIST_DIR}/src/crypto_utils.c + ${CMAKE_CURRENT_LIST_DIR}/src/asn1.c + ${CMAKE_CURRENT_LIST_DIR}/src/apdu.c + + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/aes.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/asn1write.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/bignum.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/cmac.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/cipher.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/cipher_wrap.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/constant_time.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/ecdsa.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/ecdh.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/ecp.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/ecp_curves.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/hkdf.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/md.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/md5.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/oid.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/platform_util.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/ripemd160.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/rsa.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/rsa_alt_helpers.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/sha1.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/sha256.c + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/sha512.c + ) + + if (${HSM_DRIVER} STREQUAL "ccid") + target_sources(pico_hsm_sdk INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/src/usb/ccid/usb_descriptors.c + ${CMAKE_CURRENT_LIST_DIR}/src/usb/ccid/ccid.c + ) + + target_include_directories(pico_hsm_sdk INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/src/usb/ccid + ) + elseif (${HSM_DRIVER} STREQUAL "hid") + target_sources(pico_hsm_sdk INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/src/usb/hid/hid.c + ${CMAKE_CURRENT_LIST_DIR}/src/usb/hid/usb_descriptors.c + ) + target_include_directories(pico_hsm_sdk INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/src/usb/hid + ) + endif() + + target_include_directories(pico_hsm_sdk INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/src + ${CMAKE_CURRENT_LIST_DIR}/src/usb + ${CMAKE_CURRENT_LIST_DIR}/src/fs + ${CMAKE_CURRENT_LIST_DIR}/src/rng + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/include + ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library + ) + + target_link_libraries(pico_hsm_sdk INTERFACE pico_stdlib pico_multicore hardware_flash hardware_sync hardware_adc pico_unique_id hardware_rtc tinyusb_device tinyusb_board) +endif() + + + +