Use artik security framework without external dependency 64/163264/1
authorJaroslaw Pelczar <j.pelczar@samsung.com>
Mon, 4 Dec 2017 06:10:33 +0000 (07:10 +0100)
committerJaroslaw Pelczar <j.pelczar@samsung.com>
Mon, 4 Dec 2017 06:10:33 +0000 (07:10 +0100)
Change-Id: If6533199a1cbfc1f4b6f36abacb96b3bfabaecc0
Signed-off-by: Jaroslaw Pelczar <j.pelczar@samsung.com>
CMakeLists.txt
cmake/CheckFrameworks.cmake
dcm-client/CMakeLists.txt
dcm-daemon/CMakeLists.txt
dcm-daemon/dcmsession.cpp
dcm-daemon/see-backend/CMakeLists.txt
dcm-daemon/see-backend/artik_security.h
packaging/device-certificate-manager.spec
tests/CMakeLists.txt

index 5027e44..bc49dfc 100644 (file)
@@ -1,6 +1,6 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 
-##### Configure project version, especially when using
+##### Configure project version when using
 ##### outdated tools like CMake v2
 
 IF(POLICY CMP0048)
@@ -32,12 +32,7 @@ find_package(Threads REQUIRED)
 INCLUDE(cmake/CheckFrameworks.cmake)
 INCLUDE(cmake/CStandard.cmake)
 
-SET(ENABLE_DUMMY_BACKEND OFF)
-
-IF(NOT ARTIK_SECURITY_FOUND)
-       SET(ENABLE_DUMMY_BACKEND        ON)
-       message(WARNING "Dummy backend enabled as no usable frameworks found")
-ENDIF()
+option(ENABLE_DUMMY_BACKEND "Enable dummy crypto backend" OFF)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/dcm_build_config.h.in
        ${CMAKE_CURRENT_BINARY_DIR}/dcm_build_config.h)
index ff961e0..cb5909d 100644 (file)
@@ -6,6 +6,8 @@ INCLUDE(CheckIncludeFiles)
 
 CHECK_INCLUDE_FILE("pkix_interface.h" HAVE_PKIX_INTERFACE)
 
+FIND_PACKAGE(Boost 1.54 COMPONENTS unit_test_framework)
+
 FIND_PACKAGE(Boost 1.54
        REQUIRED
        COMPONENTS
@@ -14,8 +16,7 @@ FIND_PACKAGE(Boost 1.54
                program_options
                log
                thread
-               system
-               )
+               system)
 
 FIND_PACKAGE(PkgConfig REQUIRED)
 
index cb61bc4..ab08b48 100644 (file)
@@ -51,12 +51,14 @@ GENERATE_EXPORT_HEADER(device-certificate-manager
 ApplyCxx11Standard(device-certificate-manager)
 
 target_link_libraries(device-certificate-manager 
-       ${Boost_LIBRARIES
+       ${Boost_SYSTEM_LIBRARY
        ${CMAKE_THREAD_LIBS_INIT} 
        ${PROTOBUF_LIBRARIES}
        ${MBEDTLS_LIB}
        ${MBEDCRYPTO_LIB})
 
+set_property(TARGET device-certificate-manager APPEND PROPERTY LINK_FLAGS "-Wl,--no-undefined")  
+
 IF(DLOG_FOUND)
        target_link_libraries(device-certificate-manager ${DLOG_LIBRARIES})
 ENDIF()
index bfddd42..17a3593 100644 (file)
@@ -38,6 +38,7 @@ ENDIF(SYSTEMD_FOUND)
 IF(ARTIK_SECURITY_FOUND)
        include_directories(${ARTIK_SECURITY_INCLUDE_DIRS})
        add_definitions(${ARTIK_SECURITY_CFLAGS_OTHER})
+       add_definitions(-DUSE_ARTIK_SECURITY_HEADERS=1)
 ENDIF(ARTIK_SECURITY_FOUND)
 
 IF(SMACK_FOUND)
@@ -61,9 +62,9 @@ IF(ENABLE_DUMMY_BACKEND)
        SET(DUMMY_BACKEND_OBJECTS $<TARGET_OBJECTS:dummy_backend_objects>)
 ENDIF(ENABLE_DUMMY_BACKEND)
 
-IF(ARTIK_SECURITY_FOUND)
+IF(SECURITY_MANAGER_FOUND)
        SET(SEE_BACKEND_OBJECTS $<TARGET_OBJECTS:see-backend>)
-ENDIF(ARTIK_SECURITY_FOUND)
+ENDIF(SECURITY_MANAGER_FOUND)
 
 ###### Main executable #######
 
@@ -89,8 +90,13 @@ ApplyCxx11Standard(device-certificate-managerd)
 
 ###### Framework linking #######
 
-target_link_libraries(device-certificate-managerd ${Boost_LIBRARIES} 
-       ${CMAKE_THREAD_LIBS_INIT} 
+target_link_libraries(device-certificate-managerd 
+       ${Boost_LOG_LIBRARY}
+       ${Boost_THREAD_LIBRARY}
+       ${Boost_FILESYSTEM_LIBRARY}
+       ${Boost_PROGRAM_OPTIONS_LIBRARY}
+       ${Boost_SYSTEM_LIBRARY} 
+       ${CMAKE_THREAD_LIBS_INIT}       
        device-certificate-manager
        dl)
 
index 068c76e..615e762 100644 (file)
@@ -333,6 +333,7 @@ void dcm_session::handle_context_association(const AssociateKeyContext& message)
                auto backend = crypto_backend_roster::instance().choose_backend(message.service(), message.usage());
 
                if(!backend) {
+                       BOOST_LOG_SEV(dcm_logger::get(), log_severity::error) << "No crypto usable backend available";
                        throw std::invalid_argument("Unable to find crypto backend");
                }
 
index 42b718b..dac67cb 100644 (file)
@@ -1,8 +1,6 @@
-IF(ARTIK_SECURITY_FOUND)
-       add_library(see-backend
-               OBJECT
-               seebackend.cpp
-               seebackendcontext.cpp)
-               
-       add_dependencies(see-backend protobuf_generated)                
-ENDIF()
+add_library(see-backend
+       OBJECT
+       seebackend.cpp
+       seebackendcontext.cpp)
+       
+add_dependencies(see-backend protobuf_generated)               
index bebd5d7..d5a6975 100644 (file)
@@ -1,7 +1,19 @@
-/*
- * Workaround for broken header definitions
- */
-#undef public
-#define public
+#ifdef USE_ARTIK_SECURITY_HEADERS
 #include <artik/security.h>
-#undef public
+#else
+
+#ifndef _ARTIK_SECURITY_H_
+#define _ARTIK_SECURITY_H_
+
+typedef struct {
+       void *data;
+       unsigned int length;
+} see_data;
+
+typedef enum {
+       ECDSA_SEC_P256R1 = 3 /**< nist curve for P256r1 */
+} see_ecdsa_curve;
+
+#endif
+
+#endif
index 3660733..deafc29 100644 (file)
@@ -9,7 +9,6 @@ Source1001: device-certificate-manager.manifest
 Source1002: device-certificate-manager-devel.manifest
 BuildRequires: cmake
 BuildRequires: pkgconfig(dlog)
-# BuildRequires: pkgconfig(artik-security)
 BuildRequires: pkgconfig(libsystemd-daemon)
 BuildRequires: pkgconfig(security-manager)
 BuildRequires: pkgconfig(libsmack)
index 7214699..205c1a5 100644 (file)
@@ -9,3 +9,8 @@ target_link_libraries(dcm_hw_api_test device-certificate-manager ${MBEDTLS_LIB}
 
 install(TARGETS dcm_example_client dcm_hw_api_test
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+IF(Boost_UNIT_TEST_FRAMEWORK_FOUND)
+ELSE()
+       message(STATUS "Boost::test library not found. Disabling unit test build")
+ENDIF()