add_vanetza_component(security
    backend.cpp
    backend_null.cpp
    cam_ssp.cpp
    decap_service.cpp
    delegating_security_entity.cpp
    ecc_point.cpp
    ecdsa256.cpp
    encap_service.cpp
    hashed_id.cpp
    hmac.cpp
    key_type.cpp
    public_key.cpp
    persistence.cpp
    peer_request_tracker.cpp
    secured_message.cpp
    sha.cpp
    signature.cpp
    straight_verify_service.cpp
    verify_service.cpp
    v2/basic_elements.cpp
    v2/certificate.cpp
    v2/certificate_cache.cpp
    v2/default_certificate_validator.cpp
    v2/ecc_point.cpp
    v2/encryption_parameter.cpp
    v2/header_field.cpp
    v2/int_x.cpp
    v2/length_coding.cpp
    v2/naive_certificate_provider.cpp
    v2/null_certificate_provider.cpp
    v2/null_certificate_validator.cpp
    v2/payload.cpp
    v2/persistence.cpp
    v2/public_key.cpp
    v2/recipient_info.cpp
    v2/region.cpp
    v2/secured_message.cpp
    v2/serialization.cpp
    v2/sign_header_policy.cpp
    v2/signature.cpp
    v2/signer_info.cpp
    v2/sign_service.cpp
    v2/static_certificate_provider.cpp
    v2/subject_attribute.cpp
    v2/subject_info.cpp
    v2/trailer_field.cpp
    v2/trust_store.cpp
    v2/validity_restriction.cpp
    v2/verification.cpp
    v3/asn1_conversions.cpp
    v3/basic_elements.cpp
    v3/boost_geometry.cpp
    v3/certificate.cpp
    v3/certificate_cache.cpp
    v3/certificate_validator.cpp
    v3/distance.cpp
    v3/geometry.cpp
    v3/hash.cpp
    v3/issuer_memory_lookup.cpp
    v3/location_checker.cpp
    v3/secured_message.cpp
    v3/sign_service.cpp
    v3/naive_certificate_provider.cpp
    v3/sign_header_policy.cpp
    v3/static_certificate_provider.cpp
    v3/persistence.cpp
    v3/revocation_lookup.cpp
    v3/trust_store.cpp
    v3/validity_restriction.cpp
)
target_link_libraries(security PUBLIC Boost::headers asn1 asn1_security common net)
target_link_libraries(security PRIVATE geodesy)

if(VANETZA_WITH_PQC)
    set_property(TARGET security APPEND PROPERTY SOURCES
        pqc/fndsa512_oqs.cpp
        pqc/hybrid_certificate.cpp
        pqc/hybrid_certificate_validator.cpp)
    target_link_libraries(security PRIVATE OQS::oqs)
endif()

if(VANETZA_WITH_CRYPTOPP)
    set_property(TARGET security APPEND PROPERTY
        SOURCES backend_cryptopp.cpp)
    target_link_libraries(security PRIVATE CryptoPP::CryptoPP)
    target_compile_definitions(security PUBLIC "VANETZA_WITH_CRYPTOPP")
endif()

if(VANETZA_WITH_OPENSSL)
    set_property(TARGET security APPEND PROPERTY
        SOURCES backend_openssl.cpp openssl_wrapper.cpp)
    target_link_libraries(security PRIVATE OpenSSL::Crypto)
    target_compile_definitions(security PUBLIC "VANETZA_WITH_OPENSSL")
    target_compile_definitions(security PRIVATE "OPENSSL_API_COMPAT=0x10101000L")
endif()

if(NOT VANETZA_WITH_CRYPTOPP AND NOT VANETZA_WITH_OPENSSL)
    message(WARNING "Vanetza is built without proper security backend")
endif()

# shared test data for all security tests
set(SECURITY_TEST_ASSET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/assets")
add_test_subdirectory(tests)
add_test_subdirectory(v2/tests)
add_test_subdirectory(v3/tests)
if(VANETZA_WITH_PQC)
    add_test_subdirectory(pqc/tests)
endif()
