refactor: clean up cmake
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c859b23..143f0a8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,141 +1,149 @@
-cmake_minimum_required( VERSION 3.0.0)
+cmake_minimum_required(VERSION 3.0.0)
 
-set (VERSION_MAJOR 0 CACHE STRING "Project major version number")
-set (VERSION_MINOR "1" CACHE STRING "Project minor version number")
-set (VERSION_PATCH "0" CACHE STRING "Project patch version number")
-set (COSE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
+set(VERSION_MAJOR
+    0
+    CACHE STRING "Project major version number")
+set(VERSION_MINOR
+    "1"
+    CACHE STRING "Project minor version number")
+set(VERSION_PATCH
+    "0"
+    CACHE STRING "Project patch version number")
+set(COSE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
 mark_as_advanced(VERSION_MAJOR VERSION_MINOR VERSION_PATCH COSE_VERSION)
 
-project ("cose-c" VERSION "${COSE_VERSION}")
+project("cose-c" VERSION "${COSE_VERSION}")
 
 ###############################################################################
 # OPTIONS
 ###############################################################################
 
-option (COSE_C_USE_CONTEXT	         "Use context pointer for COSE functions" ON)
-option (COSE_C_VERBOSE              "Produce COSE_C_VERBOSE makefile output" OFF)
-option (COSE_C_OPTIMIZE             "Optimize for size" OFF)
-option (COSE_C_FATAL_WARNINGS       "Treat build warnings as error" OFF)
-option (COSE_C_COVERALLS            "Generate coveralls data" ON)
-option (COSE_C_COVERALLS_SEND       "Send data to coveralls site" OFF )
-option (COSE_C_BUILD_DOCS           "Create docs using Doxygen" OFF )
-option (COSE_C_BUILD_TESTS          "build tests" ON )
-option (COSE_C_BUILD_DUMPER         "build dumper" ON )
-option (BUILD_SHARED_LIBS           "Build Shared Libraries" ON)
-option (COSE_C_USE_MBEDTLS          "Use MBedTLS for the Crypto Package" OFF)
-option (COSE_C_USE_FIND_PACKAGE     "Use cmake find_package instead of using cmake project_add" OFF)
-option (COSE_C_INCLUDE_ENCRYPT      "Include COSE_ENCRYPT" ON)
-option (COSE_C_INCLUDE_ENCRYPT0     "Include COSE_ENCRYPT0" ON)
-option (COSE_C_INCLUDE_MAC          "Include COSE_MAC" ON)
-option (COSE_C_INCLUDE_MAC0         "Include COSE_MAC0" ON)
-option (COSE_C_INCLUDE_SIGN         "Include COSE_SIGN" ON)
-option (COSE_C_INCLUDE_SIGN0        "Include COSE_SIGN0" ON)
-option (COSE_C_INCLUDE_SIGN1        "Include COSE_SIGN1" ON)
+option(COSE_C_USE_CONTEXT "Use context pointer for COSE functions" ON)
+option(COSE_C_VERBOSE "Produce COSE_C_VERBOSE makefile output" OFF)
+option(COSE_C_OPTIMIZE "Optimize for size" OFF)
+option(COSE_C_FATAL_WARNINGS "Treat build warnings as error" OFF)
+option(COSE_C_COVERALLS "Generate coveralls data" ON)
+option(COSE_C_COVERALLS_SEND "Send data to coveralls site" OFF)
+option(COSE_C_BUILD_DOCS "Create docs using Doxygen" OFF)
+option(COSE_C_BUILD_TESTS "build tests" ON)
+option(COSE_C_BUILD_DUMPER "build dumper" ON)
+option(BUILD_SHARED_LIBS "Build Shared Libraries" ON)
+option(COSE_C_USE_MBEDTLS "Use MBedTLS for the Crypto Package" OFF)
+option(COSE_C_USE_FIND_PACKAGE "Use cmake find_package instead of using cmake project_add" OFF)
+option(COSE_C_INCLUDE_ENCRYPT "Include COSE_ENCRYPT" ON)
+option(COSE_C_INCLUDE_ENCRYPT0 "Include COSE_ENCRYPT0" ON)
+option(COSE_C_INCLUDE_MAC "Include COSE_MAC" ON)
+option(COSE_C_INCLUDE_MAC0 "Include COSE_MAC0" ON)
+option(COSE_C_INCLUDE_SIGN "Include COSE_SIGN" ON)
+option(COSE_C_INCLUDE_SIGN0 "Include COSE_SIGN0" ON)
+option(COSE_C_INCLUDE_SIGN1 "Include COSE_SIGN1" ON)
 
-if (NOT COSE_C_INCLUDE_SIGN0)
-   message ( "Use COSE_C_INCLUDE_SIGN1 rather than COSE_C_INCLUDE_SIGN0" )
-   set (COSE_C_INCLUDE_SIGN1 ${COSE_C_INCLUDE_SIGN0})
-endif ()
+if(NOT COSE_C_INCLUDE_SIGN0)
+  message("Use COSE_C_INCLUDE_SIGN1 rather than COSE_C_INCLUDE_SIGN0")
+  set(COSE_C_INCLUDE_SIGN1 ${COSE_C_INCLUDE_SIGN0})
+endif()
 
 # Set the output of the libraries and executables.
 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_BINARY_DIR})
 
-set ( dist_dir          ${CMAKE_BINARY_DIR}/dist )
-set ( prefix            ${CMAKE_INSTALL_PREFIX} )
-set ( exec_prefix       ${CMAKE_INSTALL_PREFIX}/bin )
-set ( libdir            ${CMAKE_INSTALL_PREFIX}/lib )
-set ( includedir        ${CMAKE_INSTALL_PREFIX}/include )
+set(dist_dir ${CMAKE_BINARY_DIR}/dist)
+set(prefix ${CMAKE_INSTALL_PREFIX})
+set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
+set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
+set(includedir ${CMAKE_INSTALL_PREFIX}/include)
 
+if(NOT CMAKE_BUILD_TYPE)
+  if(COSE_C_OPTIMIZE)
+    set(CMAKE_BUILD_TYPE MinSizeRel)
+    set(COSE_C_COVERALLS OFF)
+    set(COSE_C_COVERALLS_SEND OFF)
+  else()
+    set(CMAKE_BUILD_TYPE Debug)
+  endif()
+endif()
 
-if (NOT CMAKE_BUILD_TYPE)
-   if (COSE_C_OPTIMIZE)
-      set ( CMAKE_BUILD_TYPE MinSizeRel )
-      set ( COSE_C_COVERALLS OFF )
-      set ( COSE_C_COVERALLS_SEND OFF )
-   else ()
-      set ( CMAKE_BUILD_TYPE Debug)
-   endif ()
-endif ()
+if(NOT COSE_C_INCLUDE_ENCRYPT)
+  add_definitions(-DINCLUDE_ENCRYPT=0)
+endif()
+if(NOT COSE_C_INCLUDE_ENCRYPT0)
+  add_definitions(-DINCLUDE_ENCRYPT0=0)
+endif()
+if(NOT COSE_C_INCLUDE_MAC)
+  add_definitions(-DINCLUDE_MAC=0)
+endif()
+if(NOT COSE_C_INCLUDE_MAC0)
+  add_definitions(-DINCLUDE_MAC0=0)
+endif()
+if(NOT COSE_C_INCLUDE_SIGN)
+  add_definitions(-DINCLUDE_SIGN=0)
+endif()
+if(NOT COSE_C_INCLUDE_SIGN1)
+  add_definitions(-DINCLUDE_SIGN1=0)
+endif()
+if(COSE_C_USE_CONTEXT)
+  add_definitions(-DUSE_CBOR_CONTEXT)
+endif()
+if(MSVC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+  set(COSE_C_COVERALLS OFF)
+endif()
 
-if (NOT COSE_C_INCLUDE_ENCRYPT)
-   add_definitions( -DINCLUDE_ENCRYPT=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_ENCRYPT0)
-   add_definitions( -DINCLUDE_ENCRYPT0=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_MAC)
-   add_definitions( -DINCLUDE_MAC=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_MAC0)
-   add_definitions( -DINCLUDE_MAC0=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_SIGN)
-   add_definitions( -DINCLUDE_SIGN=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_SIGN1)
-   add_definitions( -DINCLUDE_SIGN1=0 )
-endif ()
+message("Build type: ${CMAKE_BUILD_TYPE}")
 
-if ( MSVC OR CMAKE_C_COMPILER_ID MATCHES "Clang" )
-   set (COSE_C_COVERALLS OFF)
-endif ()
+add_definitions(-DUSE_ARRAY)
+if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+  message(STATUS "adding GCC/Clang options ")
+  add_definitions(-std=gnu99 -Wall -Wextra -pedantic)
+  if(COSE_C_FATAL_WARNINGS)
+    add_definitions(-Werror)
+  endif()
+  if(COSE_C_OPTIMIZE)
+    add_definitions(-Os)
+  endif()
+  add_definitions(-DNDEBUG)
+elseif(MSVC)
+  add_definitions(/W4)
+  if(COSE_C_FATAL_WARNINGS)
+    add_definitions(/WX)
+  endif()
+else()
+  message(FATAL_ERROR "unhandled compiler id: ${CMAKE_C_COMPILER_ID}")
+endif()
 
-message ( "Build type: ${CMAKE_BUILD_TYPE}" )
+set(LIB_TYPE STATIC)
+if(BUILD_SHARED_LIBS)
+  set(LIB_TYPE SHARED)
+endif(BUILD_SHARED_LIBS)
 
-add_definitions( -DUSE_ARRAY )
-if ( CMAKE_C_COMPILER_ID STREQUAL "GNU" OR
-     CMAKE_C_COMPILER_ID MATCHES "Clang")
-   message ( STATUS "adding GCC/Clang options ")
-   add_definitions( -std=gnu99 -Wall -Wextra -pedantic )
-   if ( COSE_C_FATAL_WARNINGS )
-      add_definitions( -Werror )
-   endif ()
-   if (COSE_C_OPTIMIZE) 
-      add_definitions( -Os )
-   endif ()
-   add_definitions( -DNDEBUG )
-elseif (MSVC)
-   add_definitions ( /W4 )
-   if (COSE_C_FATAL_WARNINGS)
-      add_definitions( /WX )
-   endif ()
-else ()
-    message ( FATAL_ERROR "unhandled compiler id: ${CMAKE_C_COMPILER_ID}" )
-endif ()
-
-set (LIB_TYPE STATIC)
-if (BUILD_SHARED_LIBS)
-   set (LIB_TYPE SHARED)
-endif (BUILD_SHARED_LIBS)
-
-if (versbose)
-   set (CMAKE_VERBOSE_MAKEFILE ON)
-endif ()
+if(versbose)
+  set(CMAKE_VERBOSE_MAKEFILE ON)
+endif()
 
 ###############################################################################
 # DOCS
 ###############################################################################
 
-if (COSE_C_BUILD_DOCS)
-   find_package(Doxygen)
-   if (NOT DOXYGEN_FOUND)
-        message(FATAL_ERROR "Doxygen is needed to build the documenation")
-   endif()
+if(COSE_C_BUILD_DOCS)
+  find_package(Doxygen)
+  if(NOT DOXYGEN_FOUND)
+    message(FATAL_ERROR "Doxygen is needed to build the documenation")
+  endif()
 
-   set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
-   set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
+  set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
+  set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
 
-   configure_file(${doxyfile_in} ${doxyfile} @ONLY)
+  configure_file(${doxyfile_in} ${doxyfile} @ONLY)
 
-   add_custom_target(doc
-       COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
-       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-       COMMENT "Generating API documentation with Doxygen"
-       VERBATIM)
+  add_custom_target(
+    doc
+    COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+    COMMENT "Generating API documentation with Doxygen"
+    VERBATIM)
 
-   install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc)
+  install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc)
 endif()
 
 ###############################################################################
@@ -143,60 +151,81 @@
 ###############################################################################
 
 if(COSE_C_USE_FIND_PACKAGE)
-   find_package(cn-cbor REQUIRED)
+  find_package(cn-cbor REQUIRED)
 else()
-   include(ExternalProject)
-   ExternalProject_Add(
-   project_cn-cbor
-   GIT_REPOSITORY https://github.com/jimsch/cn-cbor
-   GIT_TAG master
-   CMAKE_ARGS -Doptimize=OFF -Duse_context=${COSE_C_USE_CONTEXT} -Dbuild_docs=OFF -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -Dcoveralls=OFF -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -Dfatal_warnings=OFF
-   INSTALL_DIR "${dist_dir}"
-   UPDATE_DISCONNECTED 1
-   )
+  include(ExternalProject)
+  externalproject_add(
+    project_cn-cbor
+    GIT_REPOSITORY https://github.com/jimsch/cn-cbor
+    GIT_TAG master
+    CMAKE_ARGS -Doptimize=OFF
+               -Duse_context=${COSE_C_USE_CONTEXT}
+               -Dbuild_docs=OFF
+               -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+               -Dcoveralls=OFF
+               -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
+               -Dfatal_warnings=OFF
+    INSTALL_DIR "${dist_dir}"
+    UPDATE_DISCONNECTED 1)
 
-   ExternalProject_Get_Property(project_cn-cbor install_dir)
-   include_directories ( "${install_dir}/include" )
+  externalproject_get_property(project_cn-cbor install_dir)
+  include_directories("${install_dir}/include")
 
-   if (MSVC)
-      add_library (cn-cbor STATIC IMPORTED)
-      set_property (TARGET cn-cbor PROPERTY IMPORTED_LOCATION "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor.lib")
-   else ()
-      add_library (cn-cbor STATIC IMPORTED)
-      set_property (TARGET cn-cbor PROPERTY IMPORTED_LOCATION "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor${CMAKE_SHARED_LIBRARY_SUFFIX}")
-   endif ()
+  if(MSVC)
+    add_library(cn-cbor STATIC IMPORTED GLOBAL)
+    set_property(TARGET cn-cbor PROPERTY IMPORTED_LOCATION
+                                         "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor.lib")
+  else()
+    add_library(cn-cbor STATIC IMPORTED GLOBAL)
+    set_property(
+      TARGET cn-cbor PROPERTY IMPORTED_LOCATION
+                              "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor${CMAKE_SHARED_LIBRARY_SUFFIX}")
+  endif()
 
-   add_dependencies(cn-cbor project_cn-cbor)
+  if(NOT TARGET cn-cbor::cn-cbor)
+    add_library(cn-cbor::cn-cbor ALIAS cn-cbor)
+  endif()
+
+  add_dependencies(cn-cbor project_cn-cbor)
 endif()
 
-if (COSE_C_USE_MBEDTLS)
-   add_definitions( -DUSE_MBED_TLS )
+if(COSE_C_USE_MBEDTLS)
+  add_definitions(-DUSE_MBED_TLS)
 
-   if(COSE_C_USE_FIND_PACKAGE)
-      find_package(MbedTLS REQUIRED)
-   else()
-      ExternalProject_Add(
-         project_mbedtls
-         GIT_REPOSITORY https://github.com/ARMmbed/mbedtls
-         CMAKE_ARGS -DENABLED_PROGRAMS=OFF -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -Dcoveralls=OFF -DUSE_SHARED_MBEDTLS_LIBRARY=${BUILD_SHARED_LIBS} -Dfatal_warnings=OFF -DENABLE_TESTING=OFF -DLIB_INSTALL_DIR=${install_dir}/lib
-         INTALL_DIR "${dist_dir}"
-         UPDATE_DISCONNECTED 1
-      )
+  if(COSE_C_USE_FIND_PACKAGE)
+    find_package(MbedTLS REQUIRED)
+  else()
+    externalproject_add(
+      project_mbedtls
+      GIT_REPOSITORY https://github.com/ARMmbed/mbedtls
+      CMAKE_ARGS -DENABLED_PROGRAMS=OFF
+                 -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+                 -Dcoveralls=OFF
+                 -DUSE_SHARED_MBEDTLS_LIBRARY=${BUILD_SHARED_LIBS}
+                 -Dfatal_warnings=OFF
+                 -DENABLE_TESTING=OFF
+                 -DLIB_INSTALL_DIR=${install_dir}/lib
+                 INTALL_DIR
+                 "${dist_dir}"
+      UPDATE_DISCONNECTED 1)
 
-      ExternalProject_Get_Property(project_mbedtls install_dir)
-      include_directories( "${install_dir}/include" )
-      add_library( mbedtls STATIC IMPORTED)
-      if (MSVC)
-         set_property (TARGET mbedtls PROPERTY IMPORTED_LOCATION "${dist_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}mbedcrypto.lib")
-      else ()
-         set_property (TARGET mbedtls PROPERTY IMPORTED_LOCATION "${dist_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}mbedcrypto${CMAKE_SHARED_LIBRARY_SUFFIX}")
-      endif ()
-      add_dependencies(mbedtls project_mbedtls)
-   endif()
+    externalproject_get_property(project_mbedtls install_dir)
+    include_directories("${install_dir}/include")
+    add_library(mbedtls STATIC IMPORTED)
+    if(MSVC)
+      set_property(TARGET mbedtls PROPERTY IMPORTED_LOCATION
+                                           "${dist_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}mbedcrypto.lib")
+    else()
+      set_property(
+        TARGET mbedtls PROPERTY IMPORTED_LOCATION
+                                "${dist_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}mbedcrypto${CMAKE_SHARED_LIBRARY_SUFFIX}")
+    endif()
+    add_dependencies(mbedtls project_mbedtls)
+  endif()
 
 else()
-   find_package(OpenSSL REQUIRED)
-endif ()
+  find_package(OpenSSL REQUIRED)
+endif()
 
 ###############################################################################
 # ADD LIBRARY
@@ -205,42 +234,41 @@
 add_subdirectory(src)
 
 ###############################################################################
-# ADD DUMPER 
+# ADD DUMPER
 ###############################################################################
 
 if(COSE_C_BUILD_DUMPER)
-   add_subdirectory(dumper)
+  add_subdirectory(dumper)
 endif()
 
 ###############################################################################
-# ADD TESTS 
+# ADD TESTS
 ###############################################################################
 
 if(COSE_C_BUILD_TESTS)
-   include (CTest)
-   add_subdirectory(test)
+  enable_testing()
+  include(CTest)
+  add_subdirectory(test)
 endif()
 
 ###############################################################################
-# PRINT CONFIG 
+# PRINT CONFIG
 ###############################################################################
 
-message(STATUS "COSE_C_INCLUDE_ENCRYPT:..............${COSE_C_INCLUDE_ENCRYPT}")
-message(STATUS "COSE_C_INCLUDE_ENCRYPT0:.............${COSE_C_INCLUDE_ENCRYPT0}")
-message(STATUS "COSE_C_INCLUDE_MAC:..................${COSE_C_INCLUDE_MAC}")
-message(STATUS "COSE_C_INCLUDE_MAC0:.................${COSE_C_INCLUDE_MAC0}")
-message(STATUS "COSE_C_INCLUDE_SIGN:.................${COSE_C_INCLUDE_SIGN}")
-message(STATUS "COSE_C_INCLUDE_SIGN0:................${COSE_C_INCLUDE_SIGN0}")
-message(STATUS "COSE_C_INCLUDE_SIGN1:................${COSE_C_INCLUDE_SIGN1}")
-message(STATUS "COSE_C_USE_CONTEXT:..................${COSE_C_USE_CONTEXT}")
-message(STATUS "COSE_C_FATAL_WARNINGS:...............${COSE_C_FATAL_WARNINGS}")
-message(STATUS "COSE_C_BUILD_TESTS:..................${COSE_C_BUILD_TESTS}")
-message(STATUS "COSE_C_BUILD_DOCS:...................${COSE_C_BUILD_DOCS}")
-message(STATUS "COSE_C_USE_MBEDTLS:..................${COSE_C_USE_MBEDTLS}")
-message(STATUS "COSE_C_USE_FIND_PACKAGE:.............${COSE_C_USE_FIND_PACKAGE}")
-message(STATUS "COSE_C_BUILD_DUMPER:.................${COSE_C_BUILD_DUMPER}")
-message(STATUS "CMAKE_BUILD_TYPE:....................${CMAKE_BUILD_TYPE}")
-message(STATUS "BUILD_SHARED_LIBS:...................${BUILD_SHARED_LIBS}")
-message(STATUS "COSE_VERSION:........................${COSE_VERSION}")
-
-
+message(STATUS "COSE_C_INCLUDE_ENCRYPT:..........${COSE_C_INCLUDE_ENCRYPT}")
+message(STATUS "COSE_C_INCLUDE_ENCRYPT0:.........${COSE_C_INCLUDE_ENCRYPT0}")
+message(STATUS "COSE_C_INCLUDE_MAC:..............${COSE_C_INCLUDE_MAC}")
+message(STATUS "COSE_C_INCLUDE_MAC0:.............${COSE_C_INCLUDE_MAC0}")
+message(STATUS "COSE_C_INCLUDE_SIGN:.............${COSE_C_INCLUDE_SIGN}")
+message(STATUS "COSE_C_INCLUDE_SIGN0:............${COSE_C_INCLUDE_SIGN0}")
+message(STATUS "COSE_C_INCLUDE_SIGN1:............${COSE_C_INCLUDE_SIGN1}")
+message(STATUS "COSE_C_USE_CONTEXT:..............${COSE_C_USE_CONTEXT}")
+message(STATUS "COSE_C_FATAL_WARNINGS:...........${COSE_C_FATAL_WARNINGS}")
+message(STATUS "COSE_C_BUILD_TESTS:..............${COSE_C_BUILD_TESTS}")
+message(STATUS "COSE_C_BUILD_DOCS:...............${COSE_C_BUILD_DOCS}")
+message(STATUS "COSE_C_USE_MBEDTLS:..............${COSE_C_USE_MBEDTLS}")
+message(STATUS "COSE_C_USE_FIND_PACKAGE:.........${COSE_C_USE_FIND_PACKAGE}")
+message(STATUS "COSE_C_BUILD_DUMPER:.............${COSE_C_BUILD_DUMPER}")
+message(STATUS "CMAKE_BUILD_TYPE:................${CMAKE_BUILD_TYPE}")
+message(STATUS "BUILD_SHARED_LIBS:...............${BUILD_SHARED_LIBS}")
+message(STATUS "COSE_VERSION:....................${COSE_VERSION}")
diff --git a/cmake-format.yaml b/cmake-format.yaml
new file mode 100644
index 0000000..60329ed
--- /dev/null
+++ b/cmake-format.yaml
@@ -0,0 +1,15 @@
+# https://github.com/cheshirekow/cmake_format
+
+# How wide to allow formatted cmake files
+line_width: 120
+
+# How many spaces to tab for indent
+tab_size: 2
+
+# Format command names consistently as 'lower' or 'upper' case
+command_case: "lower"
+
+first_comment_is_literal: False
+
+# enable comment markup parsing and reflow
+enable_markup: False
diff --git a/conanfile.txt b/conanfile.txt
new file mode 100644
index 0000000..91b2156
--- /dev/null
+++ b/conanfile.txt
@@ -0,0 +1,19 @@
+# conan usage:
+
+# pip install conan --upgrade
+# rm -rf build
+# mkdir build
+# cd build
+# conan install ..
+# cmake .. -DCOSE_C_USE_FIND_PACKAGE=OFF
+# cmake --build .
+
+[requires]
+mbedtls/2.16.3-gpl
+cn-cbor/1.0.0
+
+[generators]
+cmake_find_package
+cmake_paths
+
+[options]
diff --git a/dumper/CMakeLists.txt b/dumper/CMakeLists.txt
index 52e87a9..600a0db 100644
--- a/dumper/CMakeLists.txt
+++ b/dumper/CMakeLists.txt
@@ -1,40 +1,20 @@
-#
-#  Compiling/running tests
-#
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/dumper)
 
-if (COSE_C_USE_CONTEXT)
-   add_definitions(-DUSE_CBOR_CONTEXT)
+add_executable(cose_dumper dumper.c)
+target_link_libraries(cose_dumper PRIVATE cn-cbor::cn-cbor cose-c::cose-c)
+if(MSVC)
+  target_link_libraries(cose_dumper PRIVATE ws2_32)
 endif()
 
-set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/dumper )
-
-add_executable ( cose_dumper dumper.c )
-
-target_link_libraries (cose_dumper PRIVATE cose-c )
-
-## OpenSSL
-
-target_include_directories(cose_dumper PRIVATE ${OPENSSL_INCLUDE_DIR})
-#target_link_libraries( cose_dumper PRIVATE event_openssl)
-target_link_libraries( cose_dumper PRIVATE ${OPENSSL_LIBRARIES} )
-target_link_libraries( cose_dumper PRIVATE cn-cbor )
-
-if ( MSVC )
-   message ( "test: ${BUILD_SHARED_LIBS}")
-   message ( "COSE_C_VERBOSE: ${COSE_C_VERBOSE}")
-
-target_link_libraries( cose_dumper PRIVATE ws2_32 )
-endif ()
-if (COSE_C_USE_MBEDTLS)
-    target_include_directories ( cose_dumper PUBLIC ${CMAKE_SHARED_MODLE_PREFIX}mbedtls${CMAKE_SHARED_LIBRARY_SUFFIX}/include )
-    target_link_libraries ( cose_dumper PRIVATE mbedtls )
+if(COSE_C_USE_MBEDTLS)
+  # mbedtls
+  target_include_directories(cose_dumper
+                             PUBLIC ${CMAKE_SHARED_MODLE_PREFIX}mbedtls${CMAKE_SHARED_LIBRARY_SUFFIX}/include)
+  target_link_libraries(cose_dumper PRIVATE mbedtls)
+else()
+  # openssl
+  target_include_directories(cose_dumper PRIVATE ${OPENSSL_INCLUDE_DIR})
+  target_link_libraries(cose_dumper PRIVATE ${OPENSSL_LIBRARIES})
 endif()
 
-target_include_directories ( cose_dumper PRIVATE ../include )
-target_include_directories ( cose_dumper PRIVATE ../src )
-target_include_directories ( cose_dumper PUBLIC ../../cose/cn-cbor/include )
-target_include_directories ( cose_dumper PUBLIC ../../cn-cbor/implement/cn-cbor/include )
-
-enable_testing()
-# add_test ( NAME cose_dumper COMMAND cose_dumper )
-
+# target_include_directories(cose_dumper PRIVATE ../src)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 55e577e..587e86c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,84 +1,81 @@
+add_library(${PROJECT_NAME} ${LIB_TYPE})
 
-if (COSE_C_USE_MBEDTLS)
-  set (cose_crypto mbedtls.c)
-else ()
-  set (cose_crypto openssl.c)
+if(COSE_C_USE_MBEDTLS)
+  set(cose_crypto mbedtls.c)
+else()
+  set(cose_crypto openssl.c)
 endif()
 
 set(cose_sources
-  ${CMAKE_CURRENT_LIST_DIR}/../include/cose/cose.h
-  ${CMAKE_CURRENT_LIST_DIR}/../include/cose/cose_configure.h
-  crypto.h
-  cose_int.h
-  crypto.h
-  Cose.c
-  MacMessage.c
-  MacMessage0.c
-  Sign.c
-  Sign1.c
-  cbor.c
-  Encrypt.c
-  Encrypt0.c
-  Recipient.c
-  SignerInfo.c
-  ${cose_crypto}
-)
+    ${PROJECT_SOURCE_DIR}/include/cose/cose.h
+    ${PROJECT_SOURCE_DIR}/include/cose/cose_configure.h
+    crypto.h
+    cose_int.h
+    crypto.h
+    Cose.c
+    MacMessage.c
+    MacMessage0.c
+    Sign.c
+    Sign1.c
+    cbor.c
+    Encrypt.c
+    Encrypt0.c
+    Recipient.c
+    SignerInfo.c
+    ${cose_crypto})
 
+target_sources(${PROJECT_NAME} PRIVATE ${cose_sources})
 
-if (COSE_C_USE_CONTEXT)
-    add_definitions(-DUSE_CBOR_CONTEXT)
+target_include_directories(
+  ${PROJECT_NAME}
+  PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>
+  PRIVATE ../src)
+target_link_libraries(${PROJECT_NAME} PRIVATE cn-cbor::cn-cbor)
+# target_include_directories(${PROJECT_NAME} PUBLIC ${dist_dir}/include)
+
+if(COSE_C_USE_MBEDTLS)
+  target_include_directories(${PROJECT_NAME}
+                             PUBLIC ${CMAKE_SHARED_MODLE_PREFIX}mbedtls${CMAKE_SHARED_LIBRARY_SUFFIX}/include)
+  target_link_libraries(${PROJECT_NAME} PRIVATE mbedtls)
+else()
+  target_include_directories(${PROJECT_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR})
+  target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES})
 endif()
 
-add_library ( cose-c ${LIB_TYPE} ${cose_sources} )
-
-target_include_directories ( cose-c PRIVATE ${OPENSSL_INCLUDE_DIR} )
-target_include_directories ( cose-c PUBLIC ${dist_dir}/include )
-target_include_directories ( cose-c PUBLIC ../include )
-target_include_directories ( cose-c PRIVATE ../src )
-
-target_link_libraries ( cose-c PRIVATE ${OPENSSL_LIBRARIES} )
-target_link_libraries ( cose-c PRIVATE cn-cbor )
-if (COSE_C_USE_MBEDTLS)
-    target_include_directories ( cose-c PUBLIC ${CMAKE_SHARED_MODLE_PREFIX}mbedtls${CMAKE_SHARED_LIBRARY_SUFFIX}/include )
-    target_link_libraries ( cose-c PRIVATE mbedtls )
+if(MSVC)
+  target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32)
 endif()
 
-if ( MSVC )
-    target_link_libraries( cose-c PRIVATE ws2_32 )
-endif ()
+add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
 
-if (COSE_C_COVERALLS)
-    include(Coveralls)
-    coveralls_turn_on_coverage()
+if(COSE_C_COVERALLS)
+  include(Coveralls)
+  coveralls_turn_on_coverage()
 
-    set(COVERAGE_SRC "")
-    foreach (S ${cose_sources})
-       get_filename_component(S_ABS ${S} ABSOLUTE)
-       list (APPEND COVERAGE_SRCS ${S_ABS})
-    endforeach()
+  set(COVERAGE_SRC "")
+  foreach(S ${cose_sources})
+    get_filename_component(S_ABS ${S} ABSOLUTE)
+    list(APPEND COVERAGE_SRCS ${S_ABS})
+  endforeach()
 
-    # Create the coveralls target.
-    coveralls_setup(
-    	"${COVERAGE_SRCS}"
-  	${COSE_C_COVERALLS_SEND}	# If we should upload
-    )
+  # Create the coveralls target. If we should upload
+  coveralls_setup("${COVERAGE_SRCS}" ${COSE_C_COVERALLS_SEND})
 endif()
 
-
 ###############################################################################
-# INSTALL LIBRARY
+#INSTALL LIBRARY
 ###############################################################################
 
 include(GNUInstallDirs)
 
-install ( TARGETS cose-c
-  LIBRARY DESTINATION lib
-  ARCHIVE DESTINATION lib
-  RUNTIME DESTINATION bin)
 install(
-  DIRECTORY ../include
+  TARGETS ${PROJECT_NAME}
+  LIBRARY DESTINATION lib COMPONENT lib
+  ARCHIVE DESTINATION lib COMPONENT dev
+  RUNTIME DESTINATION lib COMPONENT lib)
+install(
+  DIRECTORY ${PROJECT_SOURCE_DIR}/include
   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
   COMPONENT dev
   FILES_MATCHING
   PATTERN "*.h")
-
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index c95f71f..d8b48cc 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,80 +1,152 @@
-#
-#  Compiling/running tests
-#
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/test)
 
-if (COSE_C_USE_CONTEXT)
-   add_definitions(-DUSE_CBOR_CONTEXT)
+add_executable(cose_test test.c json.c encrypt.c sign.c context.c mac_test.c)
+
+target_link_libraries(cose_test PRIVATE cose-c::cose-c cn-cbor::cn-cbor)
+
+if(COSE_C_USE_MBEDTLS)
+  # mbedtls
+  target_link_libraries(cose_test PRIVATE mbedtls)
+else()
+  # OpenSSL
+  target_include_directories(cose_test PRIVATE ${OPENSSL_INCLUDE_DIR})
+  target_link_libraries(cose_test PRIVATE ${OPENSSL_LIBRARIES})
 endif()
 
-set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/test )
-
-add_executable ( cose_test test.c json.c encrypt.c sign.c context.c mac_test.c)
-
-target_link_libraries (cose_test PRIVATE cose-c )
-if (COSE_C_USE_MBEDTLS)
-    target_link_libraries ( cose_test PRIVATE mbedtls )
+if(MSVC)
+  target_link_libraries(cose_test PRIVATE ws2_32)
 endif()
 
-## OpenSSL
-
-target_include_directories(cose_test PRIVATE ${OPENSSL_INCLUDE_DIR})
-target_link_libraries( cose_test PRIVATE ${OPENSSL_LIBRARIES} )
-
-target_link_libraries( cose_test PRIVATE cn-cbor )
-if ( MSVC )
-    target_link_libraries( cose_test PRIVATE ws2_32 )
-endif ()
-
-target_include_directories ( cose_test PRIVATE ../include )
-target_include_directories ( cose_test PRIVATE ../src )
-target_include_directories ( cose_test PUBLIC ../../cose/cn-cbor/include )
-target_include_directories ( cose_test PUBLIC ../../cn-cbor/implement/cn-cbor/include )
+target_include_directories(cose_test PRIVATE ../src)
+# target_include_directories(cose_test PUBLIC ../../cose/cn-cbor/include)
 
 enable_testing()
 
-add_test ( NAME cose_test COMMAND cose_test )
+add_test(NAME cose_test COMMAND cose_test)
 
-add_test ( NAME RFC8152 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/RFC8152 )
+add_test(
+  NAME RFC8152
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/RFC8152)
 
-add_test ( NAME aes-ccm WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/aes-ccm-examples )
+add_test(
+  NAME aes-ccm
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/aes-ccm-examples)
 
-add_test ( NAME aes-gcm WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/aes-gcm-examples )
+add_test(
+  NAME aes-gcm
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/aes-gcm-examples)
 
-add_test ( NAME enveloped WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/enveloped-tests )
-add_test ( NAME encrypted WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/encrypted-tests )
+add_test(
+  NAME enveloped
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/enveloped-tests)
+add_test(
+  NAME encrypted
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/encrypted-tests)
 
-add_test ( NAME cbc-mac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/cbc-mac-examples )
+add_test(
+  NAME cbc-mac
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/cbc-mac-examples)
 
-add_test ( NAME ecdsa WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/ecdsa-examples )
+add_test(
+  NAME ecdsa
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/ecdsa-examples)
 
-add_test ( NAME hmac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/hmac-examples )
-add_test ( NAME mac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/mac-tests )
-add_test ( NAME mac0 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/mac0-tests )
+add_test(
+  NAME hmac
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/hmac-examples)
+add_test(
+  NAME mac
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/mac-tests)
+add_test(
+  NAME mac0
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/mac0-tests)
 
-add_test (NAME hkdf-hmac-sha WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/hkdf-hmac-sha-examples )
-add_test (NAME hkdf-aes WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/hkdf-aes-examples )
+add_test(
+  NAME hkdf-hmac-sha
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/hkdf-hmac-sha-examples)
+add_test(
+  NAME hkdf-aes
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/hkdf-aes-examples)
 
-add_test (NAME aes-wrap WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/aes-wrap-examples )
+add_test(
+  NAME aes-wrap
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/aes-wrap-examples)
 
-add_test (NAME ecdh-direct WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/ecdh-direct-examples )
-add_test (NAME ecdh-wrap WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/ecdh-wrap-examples )
-add_test ( NAME sign WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/sign-tests )
-add_test ( NAME sign1 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/sign1-tests )
+add_test(
+  NAME ecdh-direct
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/ecdh-direct-examples)
+add_test(
+  NAME ecdh-wrap
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/ecdh-wrap-examples)
+add_test(
+  NAME sign
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/sign-tests)
+add_test(
+  NAME sign1
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --dir Examples/sign1-tests)
 
+add_test(
+  NAME corner-cases
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --corners)
 
-add_test (NAME corner-cases WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --corners )
+add_test(
+  NAME Memory-mac-hmac
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/hmac-examples/HMac-01.json)
+add_test(
+  NAME Memory-mac-cbc-mac
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/cbc-mac-examples/cbc-mac-01.json)
+add_test(
+  NAME Memory-mac0
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/hmac-examples/HMac-enc-01.json)
 
-add_test (NAME Memory-mac-hmac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/hmac-examples/HMac-01.json )
-add_test (NAME Memory-mac-cbc-mac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/cbc-mac-examples/cbc-mac-01.json )
-add_test (NAME Memory-mac0 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/hmac-examples/HMac-enc-01.json )
+add_test(
+  NAME Memory-encrypt-gcm
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/aes-gcm-examples/aes-gcm-enc-01.json)
+add_test(
+  NAME Memory-encrypt-ccm
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/aes-ccm-examples/aes-ccm-enc-01.json)
+add_test(
+  NAME Memory-enveloped
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/aes-gcm-examples/aes-gcm-01.json)
 
-add_test (NAME Memory-encrypt-gcm WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/aes-gcm-examples/aes-gcm-enc-01.json )
-add_test (NAME Memory-encrypt-ccm WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/aes-ccm-examples/aes-ccm-enc-01.json )
-add_test (NAME Memory-enveloped WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/aes-gcm-examples/aes-gcm-01.json )
+add_test(
+  NAME Memory-ecdh
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/ecdh-direct-examples/p256-hkdf-256-01.json)
+add_test(
+  NAME Memory-aes-kw
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/aes-wrap-examples/aes-wrap-128-01.json)
 
-add_test (NAME Memory-ecdh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/ecdh-direct-examples/p256-hkdf-256-01.json )
-add_test (NAME Memory-aes-kw WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/aes-wrap-examples/aes-wrap-128-01.json )
-
-add_test (NAME Memory-sign0 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/ecdsa-examples/ecdsa-sig-01.json )
-add_test (NAME Memory-sign WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/ecdsa-examples/ecdsa-01.json )
-
+add_test(
+  NAME Memory-sign0
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/ecdsa-examples/ecdsa-sig-01.json)
+add_test(
+  NAME Memory-sign
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+  COMMAND cose_test --memory Examples/ecdsa-examples/ecdsa-01.json)