set(GMSSL_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../vendor/gmssl")
set(ASCON_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../vendor/ascon-c")
set(ASCON_BACKEND "opt32" CACHE STRING "Pinned standard Ascon-AEAD128 backend (opt32 or ref)")
set_property(CACHE ASCON_BACKEND PROPERTY STRINGS opt32 ref)
if(NOT ASCON_BACKEND STREQUAL "opt32" AND NOT ASCON_BACKEND STREQUAL "ref")
    message(FATAL_ERROR "ASCON_BACKEND must be opt32 or ref")
endif()
set(ASCON_IMPL "${ASCON_ROOT}/crypto_aead/asconaead128/${ASCON_BACKEND}")
set(ASCON_SOURCES "${ASCON_IMPL}/aead.c" "${ASCON_IMPL}/printstate.c")
if(ASCON_BACKEND STREQUAL "opt32")
    list(APPEND ASCON_SOURCES "${ASCON_IMPL}/permutations.c")
endif()
idf_component_register(SRCS "console_main.c" "member_setup.c" "uart_rpc.c" "aead.c" "selftest.c" "aead_registry.c"
    "ascon_adapter.c" "ascon_selftest.c" ${ASCON_SOURCES}
    "sm4_adapter.c" "sm4_selftest.c"
    "${GMSSL_ROOT}/src/sm4.c" "${GMSSL_ROOT}/src/sm4_ctr.c" "${GMSSL_ROOT}/src/sm4_gcm.c"
    "${GMSSL_ROOT}/src/gf128.c" "${GMSSL_ROOT}/src/ghash.c" "${GMSSL_ROOT}/src/hex.c" "gmssl_debug_port.c"
    INCLUDE_DIRS "." "${GMSSL_ROOT}/include" "${ASCON_IMPL}" "${ASCON_ROOT}/tests"
    REQUIRES esp_driver_uart esp_wifi esp_event esp_netif nvs_flash esp_timer lwip mbedtls esp_app_format)
if(ASCON_BACKEND STREQUAL "ref")
    target_compile_definitions(${COMPONENT_LIB} PRIVATE ASCON_BACKEND_REF=1)
else()
    target_compile_definitions(${COMPONENT_LIB} PRIVATE ASCON_BACKEND_OPT32=1)
endif()
message(STATUS "Week15 standard Ascon-AEAD128 backend: ${ASCON_BACKEND}")

target_compile_definitions(${COMPONENT_LIB} PRIVATE DEBUG=0 ENABLE_SMALL_FOOTPRINT=1)
