Merge pull request #251 from kurtuluso/authentication_plugin
Builtin authentication plugin for DDS Security
This commit is contained in:
commit
e53920031f
147 changed files with 21271 additions and 323 deletions
|
@ -81,7 +81,7 @@ osx_xcode10_3: &osx_xcode10_3
|
|||
- eval "export COV_COMPTYPE=clang COV_PLATFORM=macOSX"
|
||||
- eval "export PATH=\"${PATH}:$(python3 -m site --user-base)/bin\""
|
||||
install:
|
||||
- pip3 install conan --upgrade --user
|
||||
- python3 -m pip install conan --upgrade --user
|
||||
|
||||
osx_xcode9: &osx_xcode9
|
||||
<<: *osx_xcode10_3
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
project(CycloneDDS VERSION 0.1.0)
|
||||
|
||||
# Set a default build type if none was specified
|
||||
set(default_build_type "RelWithDebInfo")
|
||||
|
@ -42,13 +43,12 @@ ENDFUNCTION(PREPEND)
|
|||
|
||||
# Set module path before defining project so platform files will work.
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules")
|
||||
set(CMAKE_PROJECT_NAME_FULL "Eclipse Cyclone DDS")
|
||||
project(CycloneDDS VERSION 0.1.0)
|
||||
set(PROJECT_NAME_FULL "Eclipse Cyclone DDS")
|
||||
|
||||
# Set some convenience variants of the project-name
|
||||
string(REPLACE " " "-" CMAKE_PROJECT_NAME_DASHED "${CMAKE_PROJECT_NAME_FULL}")
|
||||
string(TOUPPER ${CMAKE_PROJECT_NAME} CMAKE_PROJECT_NAME_CAPS)
|
||||
string(TOLOWER ${CMAKE_PROJECT_NAME} CMAKE_PROJECT_NAME_SMALL)
|
||||
string(REPLACE " " "-" PROJECT_NAME_DASHED "${PROJECT_NAME_FULL}")
|
||||
string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_CAPS)
|
||||
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_SMALL)
|
||||
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "VxWorks")
|
||||
|
@ -170,17 +170,17 @@ endif()
|
|||
# the address sanitizer for ordinary debug builds; gcc is giving some grief on
|
||||
# Travis, so don't enable it for gcc by default
|
||||
if(NOT USE_SANITIZER)
|
||||
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" AND
|
||||
NOT (${CMAKE_GENERATOR} STREQUAL "Xcode") AND
|
||||
(${CMAKE_C_COMPILER_ID} STREQUAL "Clang"
|
||||
OR ${CMAKE_C_COMPILER_ID} STREQUAL "AppleClang"))
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" AND
|
||||
NOT ("${CMAKE_GENERATOR}" STREQUAL "Xcode") AND
|
||||
("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang"
|
||||
OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang"))
|
||||
message(STATUS "Enabling address sanitizer; set USE_SANITIZER=none to prevent this")
|
||||
set(USE_SANITIZER address)
|
||||
else()
|
||||
set(USE_SANITIZER none)
|
||||
endif()
|
||||
endif()
|
||||
if(NOT (${USE_SANITIZER} STREQUAL "none"))
|
||||
if(NOT ("${USE_SANITIZER}" STREQUAL "none"))
|
||||
message(STATUS "Sanitizer set to ${USE_SANITIZER}")
|
||||
add_compile_options(-fno-omit-frame-pointer -fsanitize=${USE_SANITIZER})
|
||||
link_libraries(-fno-omit-frame-pointer -fsanitize=${USE_SANITIZER})
|
||||
|
|
|
@ -281,12 +281,17 @@ function(add_cunit_executable TARGET)
|
|||
set_property(
|
||||
TEST ${ctest}
|
||||
PROPERTY ENVIRONMENT
|
||||
"DYLD_LIBRARY_PATH=${CUNIT_LIBRARY_DIR}:$ENV{DYLD_LIBRARY_PATH}")
|
||||
"DYLD_LIBRARY_PATH=${CUNIT_LIBRARY_DIR}:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}:$ENV{DYLD_LIBRARY_PATH}")
|
||||
elseif(WIN32 AND ${CUNIT_LIBRARY_TYPE} STREQUAL "SHARED_LIBRARY")
|
||||
set_property(
|
||||
TEST ${ctest}
|
||||
PROPERTY ENVIRONMENT
|
||||
"PATH=${CUNIT_LIBRARY_DIR};$ENV{PATH}")
|
||||
else()
|
||||
set_property(
|
||||
TEST ${ctest}
|
||||
PROPERTY ENVIRONMENT
|
||||
"LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}:$ENV{LD_LIBRARY_PATH}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -9,17 +9,22 @@
|
|||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
set(CUNIT_HEADER "CUnit/CUnit.h")
|
||||
|
||||
if(CONAN_INCLUDE_DIRS)
|
||||
find_path(CUNIT_INCLUDE_DIR ${CUNIT_HEADER} HINTS ${CONAN_INCLUDE_DIRS})
|
||||
find_package(CUnit CONFIG QUIET)
|
||||
if(CUnit_FOUND)
|
||||
message(STATUS "Found CUnit via Config file: ${CUnit_DIR}")
|
||||
set(CUNIT_FOUND ${CUnit_FOUND})
|
||||
else()
|
||||
set(CUNIT_HEADER "CUnit/CUnit.h")
|
||||
|
||||
if(CONAN_INCLUDE_DIRS)
|
||||
find_path(CUNIT_INCLUDE_DIR ${CUNIT_HEADER} HINTS ${CONAN_INCLUDE_DIRS})
|
||||
else()
|
||||
find_path(CUNIT_INCLUDE_DIR ${CUNIT_HEADER})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
mark_as_advanced(CUNIT_INCLUDE_DIR)
|
||||
mark_as_advanced(CUNIT_INCLUDE_DIR)
|
||||
|
||||
if(CUNIT_INCLUDE_DIR AND EXISTS "${CUNIT_INCLUDE_DIR}/${CUNIT_HEADER}")
|
||||
if(CUNIT_INCLUDE_DIR AND EXISTS "${CUNIT_INCLUDE_DIR}/${CUNIT_HEADER}")
|
||||
set(PATTERN "^#define CU_VERSION \"([0-9]+)\\.([0-9]+)\\-([0-9]+)\"$")
|
||||
file(STRINGS "${CUNIT_INCLUDE_DIR}/${CUNIT_HEADER}" CUNIT_H REGEX "${PATTERN}")
|
||||
|
||||
|
@ -28,12 +33,13 @@ if(CUNIT_INCLUDE_DIR AND EXISTS "${CUNIT_INCLUDE_DIR}/${CUNIT_HEADER}")
|
|||
string(REGEX REPLACE "${PATTERN}" "\\3" CUNIT_VERSION_PATCH "${CUNIT_H}")
|
||||
|
||||
set(CUNIT_VERSION "${CUNIT_VERSION_MAJOR}.${CUNIT_VERSION_MINOR}-${CUNIT_VERSION_PATCH}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CONAN_LIB_DIRS)
|
||||
if(CONAN_LIB_DIRS)
|
||||
find_library(CUNIT_LIBRARY cunit HINTS ${CONAN_LIB_DIRS})
|
||||
else()
|
||||
else()
|
||||
find_library(CUNIT_LIBRARY cunit)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
|
|
@ -18,39 +18,39 @@ include(CMakePackageConfigHelpers)
|
|||
include(GNUInstallDirs)
|
||||
|
||||
set(PACKAGING_MODULE_DIR "${PROJECT_SOURCE_DIR}/cmake/Modules/Packaging")
|
||||
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}")
|
||||
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}")
|
||||
|
||||
# Generates <Package>Config.cmake.
|
||||
if(BUILD_IDLC)
|
||||
configure_package_config_file(
|
||||
"${PACKAGING_MODULE_DIR}/PackageConfig.cmake.in"
|
||||
"${CMAKE_PROJECT_NAME}Config.cmake"
|
||||
"${PROJECT_NAME}Config.cmake"
|
||||
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}")
|
||||
else()
|
||||
configure_package_config_file(
|
||||
"${PACKAGING_MODULE_DIR}/PackageConfigNoIdlc.cmake.in"
|
||||
"${CMAKE_PROJECT_NAME}Config.cmake"
|
||||
"${PROJECT_NAME}Config.cmake"
|
||||
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}")
|
||||
endif()
|
||||
|
||||
# Generates <Package>Version.cmake.
|
||||
write_basic_package_version_file(
|
||||
"${CMAKE_PROJECT_NAME}Version.cmake"
|
||||
"${PROJECT_NAME}Version.cmake"
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY SameMajorVersion)
|
||||
|
||||
install(
|
||||
FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Version.cmake"
|
||||
FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Version.cmake"
|
||||
DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" COMPONENT dev)
|
||||
|
||||
if((NOT DEFINED BUILD_SHARED_LIBS) OR BUILD_SHARED_LIBS)
|
||||
# Generates <Package>Targets.cmake file included by <Package>Config.cmake.
|
||||
# The files are placed in CMakeFiles/Export in the build tree.
|
||||
install(
|
||||
EXPORT "${CMAKE_PROJECT_NAME}"
|
||||
FILE "${CMAKE_PROJECT_NAME}Targets.cmake"
|
||||
NAMESPACE "${CMAKE_PROJECT_NAME}::"
|
||||
EXPORT "${PROJECT_NAME}"
|
||||
FILE "${PROJECT_NAME}Targets.cmake"
|
||||
NAMESPACE "${PROJECT_NAME}::"
|
||||
DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" COMPONENT dev)
|
||||
endif()
|
||||
|
||||
|
@ -61,7 +61,7 @@ set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
|||
set(CPACK_PACKAGE_VERSION_TWEAK ${PROJECT_VERSION_TWEAK})
|
||||
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
|
||||
|
||||
set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
|
||||
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
|
||||
set(CPACK_PACKAGE_VENDOR "Eclipse Cyclone DDS project")
|
||||
set(CPACK_PACKAGE_CONTACT "https://github.com/eclipse-cyclonedds/cyclonedds")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Implementation of the OMG DDS standard")
|
||||
|
@ -84,10 +84,10 @@ set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/license.txt")
|
|||
# does help to clearify which settings are required for a platform.
|
||||
|
||||
set(CPACK_COMPONENTS_ALL dev lib)
|
||||
set(CPACK_COMPONENT_LIB_DISPLAY_NAME "${CMAKE_PROJECT_NAME_FULL} library")
|
||||
set(CPACK_COMPONENT_LIB_DESCRIPTION "Library used to run programs with ${CMAKE_PROJECT_NAME_FULL}")
|
||||
set(CPACK_COMPONENT_DEV_DISPLAY_NAME "${CMAKE_PROJECT_NAME_FULL} development")
|
||||
set(CPACK_COMPONENT_DEV_DESCRIPTION "Development files for use with ${CMAKE_PROJECT_NAME_FULL}")
|
||||
set(CPACK_COMPONENT_LIB_DISPLAY_NAME "${PROJECT_NAME_FULL} library")
|
||||
set(CPACK_COMPONENT_LIB_DESCRIPTION "Library used to run programs with ${PROJECT_NAME_FULL}")
|
||||
set(CPACK_COMPONENT_DEV_DISPLAY_NAME "${PROJECT_NAME_FULL} development")
|
||||
set(CPACK_COMPONENT_DEV_DESCRIPTION "Development files for use with ${PROJECT_NAME_FULL}")
|
||||
|
||||
if(WIN32 AND NOT UNIX)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
|
@ -99,8 +99,8 @@ if(WIN32 AND NOT UNIX)
|
|||
|
||||
set(CPACK_GENERATOR "WIX;ZIP;${CPACK_GENERATOR}" CACHE STRING "List of package generators")
|
||||
|
||||
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}-${__arch}")
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_PROJECT_NAME_FULL}")
|
||||
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${CPACK_PACKAGE_VERSION}-${__arch}")
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME_FULL}")
|
||||
|
||||
include(InstallRequiredSystemLibraries)
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
|
@ -123,7 +123,7 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|||
set(CPACK_RPM_COMPONENT_INSTALL ON)
|
||||
# FIXME: The package file name must be updated to include the distribution.
|
||||
# See Fedora and Red Hat packaging guidelines for details.
|
||||
set(CPACK_RPM_LIB_PACKAGE_NAME "${CMAKE_PROJECT_NAME_DASHED}")
|
||||
set(CPACK_RPM_LIB_PACKAGE_NAME "${PROJECT_NAME_DASHED}")
|
||||
set(CPACK_RPM_LIB_FILE_NAME "${CPACK_RPM_LIB_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${__arch}.rpm")
|
||||
set(CPACK_RPM_DEV_PACKAGE_NAME "${CPACK_RPM_LIB_PACKAGE_NAME}-devel")
|
||||
set(CPACK_RPM_DEV_FILE_NAME "${CPACK_RPM_DEV_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${__arch}.rpm")
|
||||
|
@ -138,7 +138,7 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|||
|
||||
set(CPACK_GENERATOR "DEB;TGZ;${CPACK_GENERATOR}" CACHE STRING "List of package generators")
|
||||
|
||||
string(TOLOWER "${CMAKE_PROJECT_NAME_DASHED}" CPACK_DEBIAN_LIB_PACKAGE_NAME)
|
||||
string(TOLOWER "${PROJECT_NAME_DASHED}" CPACK_DEBIAN_LIB_PACKAGE_NAME)
|
||||
set(CPACK_DEBIAN_LIB_FILE_NAME "${CPACK_DEBIAN_LIB_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${__arch}.deb")
|
||||
set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "${CPACK_DEBIAN_LIB_PACKAGE_NAME} (= ${CPACK_PACKAGE_VERSION}), libc6 (>= 2.23)")
|
||||
set(CPACK_DEBIAN_DEV_PACKAGE_NAME "${CPACK_DEBIAN_LIB_PACKAGE_NAME}-dev")
|
||||
|
|
|
@ -11,5 +11,5 @@
|
|||
#
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@CMAKE_PROJECT_NAME@Targets.cmake")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/idlc/IdlcGenerate.cmake")
|
||||
|
|
|
@ -11,4 +11,4 @@
|
|||
#
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@CMAKE_PROJECT_NAME@Targets.cmake")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
|
||||
|
|
3
colcon.pkg
Normal file
3
colcon.pkg
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"cmake-args": [ "-DBUILD_IDLC=OFF" ]
|
||||
}
|
|
@ -9,7 +9,7 @@
|
|||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
set(CMAKE_INSTALL_EXAMPLESDIR "${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}/examples")
|
||||
set(CMAKE_INSTALL_EXAMPLESDIR "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/examples")
|
||||
|
||||
add_subdirectory(helloworld)
|
||||
add_subdirectory(roundtrip)
|
||||
|
|
|
@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.5)
|
|||
if (NOT TARGET CycloneDDS::ddsc)
|
||||
# Find the CycloneDDS package. If it is not in a default location, try
|
||||
# finding it relative to the example where it most likely resides.
|
||||
find_package(CycloneDDS REQUIRED PATHS "${CMAKE_SOURCE_DIR}/../../")
|
||||
find_package(CycloneDDS REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/../../")
|
||||
endif()
|
||||
|
||||
# This is a convenience function, provided by the CycloneDDS package,
|
||||
|
|
|
@ -14,7 +14,7 @@ cmake_minimum_required(VERSION 3.5)
|
|||
if (NOT TARGET CycloneDDS::ddsc)
|
||||
# Find the CycloneDDS package. If it is not in a default location, try
|
||||
# finding it relative to the example where it most likely resides.
|
||||
find_package(CycloneDDS REQUIRED PATHS "${CMAKE_SOURCE_DIR}/../../")
|
||||
find_package(CycloneDDS REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/../../")
|
||||
endif()
|
||||
|
||||
# This is a convenience function, provided by the CycloneDDS package,
|
||||
|
|
|
@ -14,7 +14,7 @@ cmake_minimum_required(VERSION 3.5)
|
|||
if (NOT TARGET CycloneDDS::ddsc)
|
||||
# Find the CycloneDDS package. If it is not in a default location, try
|
||||
# finding it relative to the example where it most likely resides.
|
||||
find_package(CycloneDDS REQUIRED PATHS "${CMAKE_SOURCE_DIR}/../../")
|
||||
find_package(CycloneDDS REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/../../")
|
||||
endif()
|
||||
|
||||
# This is a convenience function, provided by the CycloneDDS package,
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
<url type="repository">https://github.com/eclipse-cyclonedds/cyclonedds</url>
|
||||
|
||||
<buildtool_depend>cmake</buildtool_depend>
|
||||
<buildtool_depend>java</buildtool_depend>
|
||||
<buildtool_depend>maven</buildtool_depend>
|
||||
<depend>openssl</depend>
|
||||
<test_depend>libcunit-dev</test_depend>
|
||||
<doc_depend>python3-sphinx</doc_depend>
|
||||
|
|
|
@ -24,7 +24,7 @@ endif()
|
|||
# default system locations, i.e. /usr/lib and /usr/include on *NIX platforms.
|
||||
# The install prefix must therefore be postfixed with the project name.
|
||||
if(UNIX)
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/${CMAKE_PROJECT_NAME}")
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}")
|
||||
endif()
|
||||
|
||||
set(ENTRYPOINT "real_main"
|
||||
|
@ -119,7 +119,7 @@ install(
|
|||
|
||||
install(
|
||||
TARGETS freertos-sim freertos-sim-loader
|
||||
EXPORT "${CMAKE_PROJECT_NAME}"
|
||||
EXPORT "${PROJECT_NAME}"
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
|
||||
#
|
||||
# CMake toolchain file generated by @CMAKE_PROJECT_NAME@
|
||||
# CMake toolchain file generated by @PROJECT_NAME@
|
||||
#
|
||||
|
||||
set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
|
||||
|
|
|
@ -23,7 +23,7 @@ add_subdirectory(ddsrt)
|
|||
if(BUILD_IDLC)
|
||||
add_subdirectory(idlc)
|
||||
endif()
|
||||
add_subdirectory(security/api)
|
||||
add_subdirectory(security)
|
||||
add_subdirectory(core)
|
||||
add_subdirectory(tools)
|
||||
if(BUILD_TESTING AND HAVE_MULTI_PROCESS AND BUILD_IDLC)
|
||||
|
|
|
@ -59,7 +59,7 @@ if(NOT ENABLE_SECURITY)
|
|||
message(STATUS "Building without OMG DDS Security support")
|
||||
else()
|
||||
add_definitions(-DDDSI_INCLUDE_SECURITY)
|
||||
target_link_libraries(ddsc PRIVATE security_api)
|
||||
target_link_libraries(ddsc PRIVATE security_core)
|
||||
target_include_directories(
|
||||
ddsc PUBLIC
|
||||
$<BUILD_INTERFACE:$<TARGET_PROPERTY:security_api,INTERFACE_INCLUDE_DIRECTORIES>>)
|
||||
|
@ -82,11 +82,11 @@ set_target_properties(ddsc PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PRO
|
|||
# Create a pseudo-target that other targets (i.e. examples, tests) can depend
|
||||
# on and can also be provided as import-target by a package-file when building
|
||||
# those targets outside the regular Cyclone build-tree (i.e. the installed tree)
|
||||
add_library(${CMAKE_PROJECT_NAME}::ddsc ALIAS ddsc)
|
||||
add_library(${PROJECT_NAME}::ddsc ALIAS ddsc)
|
||||
|
||||
install(
|
||||
TARGETS ddsc
|
||||
EXPORT "${CMAKE_PROJECT_NAME}"
|
||||
EXPORT "${PROJECT_NAME}"
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
|
||||
|
|
|
@ -87,11 +87,6 @@ generate_export_header(
|
|||
EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/include/dds/export.h"
|
||||
)
|
||||
|
||||
target_include_directories(
|
||||
ddsc PUBLIC
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>")
|
||||
|
||||
target_sources(ddsc
|
||||
PRIVATE
|
||||
${srcs_ddsc}
|
||||
|
@ -103,29 +98,23 @@ target_sources(ddsc
|
|||
|
||||
target_include_directories(ddsc
|
||||
PUBLIC
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>"
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_LIST_DIR}/src")
|
||||
|
||||
target_include_directories(ddsc INTERFACE $<INSTALL_INTERFACE:include>)
|
||||
"${CMAKE_CURRENT_LIST_DIR}/src"
|
||||
INTERFACE
|
||||
$<INSTALL_INTERFACE:include>)
|
||||
|
||||
install(
|
||||
DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/include/dds"
|
||||
DIRECTORY
|
||||
"${CMAKE_CURRENT_LIST_DIR}/include/"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
COMPONENT dev)
|
||||
|
||||
install(
|
||||
DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/include/ddsc"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
COMPONENT dev)
|
||||
|
||||
install(
|
||||
FILES "${CMAKE_CURRENT_BINARY_DIR}/include/dds/export.h"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/dds"
|
||||
COMPONENT dev)
|
||||
|
||||
# TODO: improve test inclusion.
|
||||
if((BUILD_TESTING) AND ((NOT DEFINED MSVC_VERSION) OR (MSVC_VERSION GREATER "1800")))
|
||||
if((BUILD_TESTING) AND (BUILD_IDLC) AND ((NOT DEFINED MSVC_VERSION) OR (MSVC_VERSION GREATER "1800")))
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/tests")
|
||||
endif()
|
||||
|
||||
|
|
|
@ -17,9 +17,9 @@
|
|||
#define DDSC_VERSION_MINOR @CycloneDDS_VERSION_MINOR@
|
||||
#define DDSC_VERSION_PATCH @CycloneDDS_VERSION_PATCH@
|
||||
#define DDSC_VERSION_TWEAK @CycloneDDS_VERSION_TWEAK@
|
||||
#define DDSC_PROJECT_NAME_NOSPACE_CAPS "@CMAKE_PROJECT_NAME_CAPS@"
|
||||
#define DDSC_PROJECT_NAME_NOSPACE_SMALL "@CMAKE_PROJECT_NAME_SMALL@"
|
||||
#define DDSC_PROJECT_NAME_NOSPACE "@CMAKE_PROJECT_NAME@"
|
||||
#define DDSC_PROJECT_NAME "@CMAKE_PROJECT_NAME@"
|
||||
#define DDSC_PROJECT_NAME_NOSPACE_CAPS "@PROJECT_NAME_CAPS@"
|
||||
#define DDSC_PROJECT_NAME_NOSPACE_SMALL "@PROJECT_NAME_SMALL@"
|
||||
#define DDSC_PROJECT_NAME_NOSPACE "@PROJECT_NAME@"
|
||||
#define DDSC_PROJECT_NAME "@PROJECT_NAME@"
|
||||
|
||||
#endif /* DDSC_PROJECT_H */
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include "dds/dds.h"
|
||||
#include "dds/ddsrt/heap.h"
|
||||
#include "dds/ddsrt/md5.h"
|
||||
#include "dds/ddsi/q_bswap.h"
|
||||
#include "dds/ddsi/q_config.h"
|
||||
#include "dds/ddsi/q_freelist.h"
|
||||
#include "dds/ddsi/ddsi_sertopic.h"
|
||||
|
|
|
@ -175,17 +175,17 @@ static void dds_os_put1be (dds_ostreamBE_t * __restrict s, uint8_t v)
|
|||
|
||||
static void dds_os_put2be (dds_ostreamBE_t * __restrict s, uint16_t v)
|
||||
{
|
||||
dds_os_put2 (&s->x, toBE2u (v));
|
||||
dds_os_put2 (&s->x, ddsrt_toBE2u (v));
|
||||
}
|
||||
|
||||
static void dds_os_put4be (dds_ostreamBE_t * __restrict s, uint32_t v)
|
||||
{
|
||||
dds_os_put4 (&s->x, toBE4u (v));
|
||||
dds_os_put4 (&s->x, ddsrt_toBE4u (v));
|
||||
}
|
||||
|
||||
static void dds_os_put8be (dds_ostreamBE_t * __restrict s, uint64_t v)
|
||||
{
|
||||
dds_os_put8 (&s->x, toBE8u (v));
|
||||
dds_os_put8 (&s->x, ddsrt_toBE8u (v));
|
||||
}
|
||||
|
||||
static void dds_os_put_bytes (dds_ostream_t * __restrict s, const void * __restrict b, uint32_t l)
|
||||
|
@ -782,7 +782,7 @@ static bool normalize_uint16 (char * __restrict data, uint32_t * __restrict off,
|
|||
if ((*off = check_align_prim (*off, size, 1)) == UINT32_MAX)
|
||||
return false;
|
||||
if (bswap)
|
||||
*((uint16_t *) (data + *off)) = bswap2u (*((uint16_t *) (data + *off)));
|
||||
*((uint16_t *) (data + *off)) = ddsrt_bswap2u (*((uint16_t *) (data + *off)));
|
||||
(*off) += 2;
|
||||
return true;
|
||||
}
|
||||
|
@ -792,7 +792,7 @@ static bool normalize_uint32 (char * __restrict data, uint32_t * __restrict off,
|
|||
if ((*off = check_align_prim (*off, size, 2)) == UINT32_MAX)
|
||||
return false;
|
||||
if (bswap)
|
||||
*((uint32_t *) (data + *off)) = bswap4u (*((uint32_t *) (data + *off)));
|
||||
*((uint32_t *) (data + *off)) = ddsrt_bswap4u (*((uint32_t *) (data + *off)));
|
||||
(*off) += 4;
|
||||
return true;
|
||||
}
|
||||
|
@ -802,7 +802,7 @@ static bool read_and_normalize_uint32 (uint32_t * __restrict val, char * __restr
|
|||
if ((*off = check_align_prim (*off, size, 2)) == UINT32_MAX)
|
||||
return false;
|
||||
if (bswap)
|
||||
*((uint32_t *) (data + *off)) = bswap4u (*((uint32_t *) (data + *off)));
|
||||
*((uint32_t *) (data + *off)) = ddsrt_bswap4u (*((uint32_t *) (data + *off)));
|
||||
*val = *((uint32_t *) (data + *off));
|
||||
(*off) += 4;
|
||||
return true;
|
||||
|
@ -813,7 +813,7 @@ static bool normalize_uint64 (char * __restrict data, uint32_t * __restrict off,
|
|||
if ((*off = check_align_prim (*off, size, 3)) == UINT32_MAX)
|
||||
return false;
|
||||
if (bswap)
|
||||
*((uint64_t *) (data + *off)) = bswap8u (*((uint64_t *) (data + *off)));
|
||||
*((uint64_t *) (data + *off)) = ddsrt_bswap8u (*((uint64_t *) (data + *off)));
|
||||
(*off) += 8;
|
||||
return true;
|
||||
}
|
||||
|
@ -847,7 +847,7 @@ static bool normalize_primarray (char * __restrict data, uint32_t * __restrict o
|
|||
{
|
||||
uint16_t *xs = (uint16_t *) (data + *off);
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
xs[i] = bswap2u (xs[i]);
|
||||
xs[i] = ddsrt_bswap2u (xs[i]);
|
||||
}
|
||||
*off += 2 * num;
|
||||
return true;
|
||||
|
@ -858,7 +858,7 @@ static bool normalize_primarray (char * __restrict data, uint32_t * __restrict o
|
|||
{
|
||||
uint32_t *xs = (uint32_t *) (data + *off);
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
xs[i] = bswap4u (xs[i]);
|
||||
xs[i] = ddsrt_bswap4u (xs[i]);
|
||||
}
|
||||
*off += 4 * num;
|
||||
return true;
|
||||
|
@ -869,7 +869,7 @@ static bool normalize_primarray (char * __restrict data, uint32_t * __restrict o
|
|||
{
|
||||
uint64_t *xs = (uint64_t *) (data + *off);
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
xs[i] = bswap8u (xs[i]);
|
||||
xs[i] = ddsrt_bswap8u (xs[i]);
|
||||
}
|
||||
*off += 8 * num;
|
||||
return true;
|
||||
|
@ -956,7 +956,7 @@ static bool normalize_uni_disc (uint32_t * __restrict val, char * __restrict dat
|
|||
if ((*off = check_align_prim (*off, size, 1)) == UINT32_MAX)
|
||||
return false;
|
||||
if (bswap)
|
||||
*((uint16_t *) (data + *off)) = bswap2u (*((uint16_t *) (data + *off)));
|
||||
*((uint16_t *) (data + *off)) = ddsrt_bswap2u (*((uint16_t *) (data + *off)));
|
||||
*val = *((uint16_t *) (data + *off));
|
||||
(*off) += 2;
|
||||
return true;
|
||||
|
@ -964,7 +964,7 @@ static bool normalize_uni_disc (uint32_t * __restrict val, char * __restrict dat
|
|||
if ((*off = check_align_prim (*off, size, 2)) == UINT32_MAX)
|
||||
return false;
|
||||
if (bswap)
|
||||
*((uint32_t *) (data + *off)) = bswap4u (*((uint32_t *) (data + *off)));
|
||||
*((uint32_t *) (data + *off)) = ddsrt_bswap4u (*((uint32_t *) (data + *off)));
|
||||
*val = *((uint32_t *) (data + *off));
|
||||
(*off) += 4;
|
||||
return true;
|
||||
|
@ -1180,19 +1180,19 @@ static void dds_stream_swap_insitu (void * __restrict vbuf, uint32_t size, uint3
|
|||
case 2: {
|
||||
uint16_t *buf = vbuf;
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
buf[i] = bswap2u (buf[i]);
|
||||
buf[i] = ddsrt_bswap2u (buf[i]);
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
uint32_t *buf = vbuf;
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
buf[i] = bswap4u (buf[i]);
|
||||
buf[i] = ddsrt_bswap4u (buf[i]);
|
||||
break;
|
||||
}
|
||||
case 8: {
|
||||
uint64_t *buf = vbuf;
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
buf[i] = bswap8u (buf[i]);
|
||||
buf[i] = ddsrt_bswap8u (buf[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1294,21 +1294,21 @@ static void dds_stream_swap_copy (void * __restrict vdst, const void * __restric
|
|||
const uint16_t *src = vsrc;
|
||||
uint16_t *dst = vdst;
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
dst[i] = bswap2u (src[i]);
|
||||
dst[i] = ddsrt_bswap2u (src[i]);
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
const uint32_t *src = vsrc;
|
||||
uint32_t *dst = vdst;
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
dst[i] = bswap4u (src[i]);
|
||||
dst[i] = ddsrt_bswap4u (src[i]);
|
||||
break;
|
||||
}
|
||||
case 8: {
|
||||
const uint64_t *src = vsrc;
|
||||
uint64_t *dst = vdst;
|
||||
for (uint32_t i = 0; i < num; i++)
|
||||
dst[i] = bswap8u (src[i]);
|
||||
dst[i] = ddsrt_bswap8u (src[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1943,7 +1943,7 @@ void dds_ostream_add_to_serdata_default (dds_ostream_t * __restrict s, struct dd
|
|||
(*d) = (void *) s->m_buffer;
|
||||
(*d)->pos = (s->m_index - (uint32_t) offsetof (struct ddsi_serdata_default, data));
|
||||
(*d)->size = (s->m_size - (uint32_t) offsetof (struct ddsi_serdata_default, data));
|
||||
(*d)->hdr.options = toBE2u ((uint16_t) pad);
|
||||
(*d)->hdr.options = ddsrt_toBE2u ((uint16_t) pad);
|
||||
}
|
||||
|
||||
void dds_ostreamBE_from_serdata_default (dds_ostreamBE_t * __restrict s, struct ddsi_serdata_default * __restrict d)
|
||||
|
@ -1966,5 +1966,5 @@ void dds_ostreamBE_add_to_serdata_default (dds_ostreamBE_t * __restrict s, struc
|
|||
(*d) = (void *) s->x.m_buffer;
|
||||
(*d)->pos = (s->x.m_index - (uint32_t) offsetof (struct ddsi_serdata_default, data));
|
||||
(*d)->size = (s->x.m_size - (uint32_t) offsetof (struct ddsi_serdata_default, data));
|
||||
(*d)->hdr.options = toBE2u ((uint16_t) pad);
|
||||
(*d)->hdr.options = ddsrt_toBE2u ((uint16_t) pad);
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ get_test_property(CUnit_ddsc_config_simple_udp ENVIRONMENT CUnit_ddsc_config_sim
|
|||
set(CUnit_ddsc_config_simple_udp_file "${CMAKE_CURRENT_LIST_DIR}/config_simple_udp.xml")
|
||||
set(CUnit_ddsc_config_simple_udp_uri "file://${CUnit_ddsc_config_simple_udp_file}")
|
||||
set(CUnit_ddsc_config_simple_udp_max_participants "0")
|
||||
set(CUnit_ddsc_config_simple_udp_env "${CMAKE_PROJECT_NAME_CAPS}_URI=${CUnit_ddsc_config_simple_udp_uri};MAX_PARTICIPANTS=${CUnit_ddsc_config_simple_udp_max_participants};${CUnit_ddsc_config_simple_udp_env}")
|
||||
set(CUnit_ddsc_config_simple_udp_env "${PROJECT_NAME_CAPS}_URI=${CUnit_ddsc_config_simple_udp_uri};MAX_PARTICIPANTS=${CUnit_ddsc_config_simple_udp_max_participants};${CUnit_ddsc_config_simple_udp_env}")
|
||||
|
||||
set_tests_properties(
|
||||
CUnit_ddsc_config_simple_udp
|
||||
|
|
|
@ -31,7 +31,6 @@ PREPEND(srcs_ddsi "${CMAKE_CURRENT_LIST_DIR}/src"
|
|||
q_addrset.c
|
||||
q_bitset_inlines.c
|
||||
q_bswap.c
|
||||
q_bswap_inlines.c
|
||||
q_config.c
|
||||
q_ddsi_discovery.c
|
||||
q_debmon.c
|
||||
|
@ -138,7 +137,7 @@ target_include_directories(ddsc
|
|||
PRIVATE "${CMAKE_CURRENT_LIST_DIR}/include")
|
||||
|
||||
install(
|
||||
DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/include/dds"
|
||||
DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/include/"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
COMPONENT dev)
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "dds/ddsrt/endian.h"
|
||||
#include "dds/ddsrt/bswap.h"
|
||||
#include "dds/ddsrt/misc.h"
|
||||
#include "dds/ddsi/q_rtps.h" /* for nn_guid_t, nn_guid_prefix_t */
|
||||
#include "dds/ddsi/q_protocol.h" /* for nn_sequence_number_t */
|
||||
|
@ -23,71 +23,12 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
inline uint16_t bswap2u (uint16_t x)
|
||||
{
|
||||
return (uint16_t) ((x >> 8) | (x << 8));
|
||||
}
|
||||
|
||||
inline int16_t bswap2 (int16_t x)
|
||||
{
|
||||
return (int16_t) bswap2u ((uint16_t) x);
|
||||
}
|
||||
|
||||
inline uint32_t bswap4u (uint32_t x)
|
||||
{
|
||||
return (x >> 24) | ((x >> 8) & 0xff00) | ((x << 8) & 0xff0000) | (x << 24);
|
||||
}
|
||||
|
||||
inline int32_t bswap4 (int32_t x)
|
||||
{
|
||||
return (int32_t) bswap4u ((uint32_t) x);
|
||||
}
|
||||
|
||||
inline uint64_t bswap8u (uint64_t x)
|
||||
{
|
||||
const uint32_t newhi = bswap4u ((uint32_t) x);
|
||||
const uint32_t newlo = bswap4u ((uint32_t) (x >> 32));
|
||||
return ((uint64_t) newhi << 32) | (uint64_t) newlo;
|
||||
}
|
||||
|
||||
inline int64_t bswap8 (int64_t x)
|
||||
{
|
||||
return (int64_t) bswap8u ((uint64_t) x);
|
||||
}
|
||||
|
||||
inline void bswapSN (nn_sequence_number_t *sn)
|
||||
{
|
||||
sn->high = bswap4 (sn->high);
|
||||
sn->low = bswap4u (sn->low);
|
||||
sn->high = ddsrt_bswap4 (sn->high);
|
||||
sn->low = ddsrt_bswap4u (sn->low);
|
||||
}
|
||||
|
||||
#if DDSRT_ENDIAN == DDSRT_LITTLE_ENDIAN
|
||||
#define toBE2(x) bswap2 (x)
|
||||
#define toBE2u(x) bswap2u (x)
|
||||
#define toBE4(x) bswap4 (x)
|
||||
#define toBE4u(x) bswap4u (x)
|
||||
#define toBE8(x) bswap8 (x)
|
||||
#define toBE8u(x) bswap8u (x)
|
||||
#define fromBE2(x) bswap2 (x)
|
||||
#define fromBE2u(x) bswap2u (x)
|
||||
#define fromBE4(x) bswap4 (x)
|
||||
#define fromBE4u(x) bswap4u (x)
|
||||
#define fromBE8(x) bswap8 (x)
|
||||
#define fromBE8u(x) bswap8u (x)
|
||||
#else
|
||||
#define toBE2u(x) (x)
|
||||
#define toBE4(x) (x)
|
||||
#define toBE4u(x) (x)
|
||||
#define toBE8(x) (x)
|
||||
#define toBE8u(x) (x)
|
||||
#define fromBE2(x) (x)
|
||||
#define fromBE2u(x) (x)
|
||||
#define fromBE4(x) (x)
|
||||
#define fromBE4u(x) (x)
|
||||
#define fromBE8(x) (x)
|
||||
#define fromBE8u(x) (x)
|
||||
#endif
|
||||
|
||||
ddsi_guid_prefix_t nn_hton_guid_prefix (ddsi_guid_prefix_t p);
|
||||
ddsi_guid_prefix_t nn_ntoh_guid_prefix (ddsi_guid_prefix_t p);
|
||||
ddsi_entityid_t nn_hton_entityid (ddsi_entityid_t e);
|
||||
|
|
|
@ -296,7 +296,7 @@ static struct ddsi_serdata_default *serdata_default_from_ser_common (const struc
|
|||
|
||||
const bool needs_bswap = (d->hdr.identifier != NATIVE_ENCODING);
|
||||
d->hdr.identifier = NATIVE_ENCODING;
|
||||
const uint32_t pad = fromBE2u (d->hdr.options) & 2;
|
||||
const uint32_t pad = ddsrt_fromBE2u (d->hdr.options) & 2;
|
||||
if (d->pos < pad)
|
||||
{
|
||||
ddsi_serdata_unref (&d->c);
|
||||
|
@ -474,7 +474,7 @@ static struct ddsi_serdata *serdata_default_from_sample_plist (const struct ddsi
|
|||
ddsrt_md5_state_t md5st;
|
||||
ddsrt_md5_byte_t digest[16];
|
||||
topic_name_sz = (uint32_t) strlen (topic_name) + 1;
|
||||
topic_name_sz_BE = toBE4u (topic_name_sz);
|
||||
topic_name_sz_BE = ddsrt_toBE4u (topic_name_sz);
|
||||
d->keyhash.m_set = 1;
|
||||
d->keyhash.m_iskey = 0;
|
||||
ddsrt_md5_init (&md5st);
|
||||
|
|
|
@ -11,11 +11,13 @@
|
|||
*/
|
||||
#include "dds/ddsi/q_bswap.h"
|
||||
|
||||
extern inline void bswapSN (nn_sequence_number_t *sn);
|
||||
|
||||
ddsi_guid_prefix_t nn_hton_guid_prefix (ddsi_guid_prefix_t p)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 3; i++)
|
||||
p.u[i] = toBE4u (p.u[i]);
|
||||
p.u[i] = ddsrt_toBE4u (p.u[i]);
|
||||
return p;
|
||||
}
|
||||
|
||||
|
@ -23,19 +25,19 @@ ddsi_guid_prefix_t nn_ntoh_guid_prefix (ddsi_guid_prefix_t p)
|
|||
{
|
||||
int i;
|
||||
for (i = 0; i < 3; i++)
|
||||
p.u[i] = fromBE4u (p.u[i]);
|
||||
p.u[i] = ddsrt_fromBE4u (p.u[i]);
|
||||
return p;
|
||||
}
|
||||
|
||||
ddsi_entityid_t nn_hton_entityid (ddsi_entityid_t e)
|
||||
{
|
||||
e.u = toBE4u (e.u);
|
||||
e.u = ddsrt_toBE4u (e.u);
|
||||
return e;
|
||||
}
|
||||
|
||||
ddsi_entityid_t nn_ntoh_entityid (ddsi_entityid_t e)
|
||||
{
|
||||
e.u = fromBE4u (e.u);
|
||||
e.u = ddsrt_fromBE4u (e.u);
|
||||
return e;
|
||||
}
|
||||
|
||||
|
@ -56,25 +58,26 @@ ddsi_guid_t nn_ntoh_guid (ddsi_guid_t g)
|
|||
void bswap_sequence_number_set_hdr (nn_sequence_number_set_header_t *snset)
|
||||
{
|
||||
bswapSN (&snset->bitmap_base);
|
||||
snset->numbits = bswap4u (snset->numbits);
|
||||
snset->numbits = ddsrt_bswap4u (snset->numbits);
|
||||
}
|
||||
|
||||
void bswap_sequence_number_set_bitmap (nn_sequence_number_set_header_t *snset, uint32_t *bits)
|
||||
{
|
||||
const uint32_t n = (snset->numbits + 31) / 32;
|
||||
for (uint32_t i = 0; i < n; i++)
|
||||
bits[i] = bswap4u (bits[i]);
|
||||
bits[i] = ddsrt_bswap4u (bits[i]);
|
||||
}
|
||||
|
||||
void bswap_fragment_number_set_hdr (nn_fragment_number_set_header_t *fnset)
|
||||
{
|
||||
fnset->bitmap_base = bswap4u (fnset->bitmap_base);
|
||||
fnset->numbits = bswap4u (fnset->numbits);
|
||||
fnset->bitmap_base = ddsrt_bswap4u (fnset->bitmap_base);
|
||||
fnset->numbits = ddsrt_bswap4u (fnset->numbits);
|
||||
}
|
||||
|
||||
void bswap_fragment_number_set_bitmap (nn_fragment_number_set_header_t *fnset, uint32_t *bits)
|
||||
{
|
||||
const uint32_t n = (fnset->numbits + 31) / 32;
|
||||
for (uint32_t i = 0; i < n; i++)
|
||||
bits[i] = bswap4u (bits[i]);
|
||||
bits[i] = ddsrt_bswap4u (bits[i]);
|
||||
}
|
||||
|
||||
|
|
|
@ -1044,7 +1044,7 @@ int rtps_init (struct q_globals *gv)
|
|||
that won't repeat in the lifetime of the process. Seems like it ought to work
|
||||
to keep the risks of collisions low. */
|
||||
{
|
||||
uint64_t iid = toBE8u (ddsi_iid_gen ());
|
||||
uint64_t iid = ddsrt_toBE8u (ddsi_iid_gen ());
|
||||
ddsrt_md5_state_t st;
|
||||
ddsrt_md5_byte_t digest[16];
|
||||
ddsrt_md5_init (&st);
|
||||
|
|
|
@ -320,7 +320,7 @@ void handle_PMD (const struct receiver_state *rst, nn_wctime_t timestamp, uint32
|
|||
const ParticipantMessageData_t *pmd = (ParticipantMessageData_t *) (data + 1);
|
||||
ddsi_guid_prefix_t p = nn_ntoh_guid_prefix (pmd->participantGuidPrefix);
|
||||
uint32_t kind = ntohl (pmd->kind);
|
||||
uint32_t length = bswap ? bswap4u (pmd->length) : pmd->length;
|
||||
uint32_t length = bswap ? ddsrt_bswap4u (pmd->length) : pmd->length;
|
||||
RSTTRACE (" pp %"PRIx32":%"PRIx32":%"PRIx32" kind %u data %u", p.u[0], p.u[1], p.u[2], kind, length);
|
||||
if (len - sizeof (struct CDRHeader) - offsetof (ParticipantMessageData_t, value) < length)
|
||||
debug_print_rawdata (rst->gv, " SHORT2", pmd->value, len - sizeof (struct CDRHeader) - offsetof (ParticipantMessageData_t, value));
|
||||
|
|
|
@ -144,7 +144,7 @@ void write_pcap_received (struct q_globals *gv, nn_wctime_t tstamp, const struct
|
|||
pcap_hdr.incl_len = pcap_hdr.orig_len = (uint32_t) sz_iud;
|
||||
fwrite (&pcap_hdr, sizeof (pcap_hdr), 1, gv->pcap_fp);
|
||||
u.ipv4_hdr = ipv4_hdr_template;
|
||||
u.ipv4_hdr.totallength = toBE2u ((unsigned short) sz_iud);
|
||||
u.ipv4_hdr.totallength = ddsrt_toBE2u ((unsigned short) sz_iud);
|
||||
u.ipv4_hdr.ttl = 128;
|
||||
u.ipv4_hdr.srcip = ((struct sockaddr_in*) src)->sin_addr.s_addr;
|
||||
u.ipv4_hdr.dstip = ((struct sockaddr_in*) dst)->sin_addr.s_addr;
|
||||
|
@ -152,7 +152,7 @@ void write_pcap_received (struct q_globals *gv, nn_wctime_t tstamp, const struct
|
|||
fwrite (&u.ipv4_hdr, sizeof (u.ipv4_hdr), 1, gv->pcap_fp);
|
||||
udp_hdr.srcport = ((struct sockaddr_in*) src)->sin_port;
|
||||
udp_hdr.dstport = ((struct sockaddr_in*) dst)->sin_port;
|
||||
udp_hdr.length = toBE2u ((unsigned short) sz_ud);
|
||||
udp_hdr.length = ddsrt_toBE2u ((unsigned short) sz_ud);
|
||||
udp_hdr.checksum = 0; /* don't have to compute a checksum for UDPv4 */
|
||||
fwrite (&udp_hdr, sizeof (udp_hdr), 1, gv->pcap_fp);
|
||||
fwrite (buf, sz, 1, gv->pcap_fp);
|
||||
|
@ -177,7 +177,7 @@ void write_pcap_sent (struct q_globals *gv, nn_wctime_t tstamp, const struct soc
|
|||
pcap_hdr.incl_len = pcap_hdr.orig_len = (uint32_t) sz_iud;
|
||||
fwrite (&pcap_hdr, sizeof (pcap_hdr), 1, gv->pcap_fp);
|
||||
u.ipv4_hdr = ipv4_hdr_template;
|
||||
u.ipv4_hdr.totallength = toBE2u ((unsigned short) sz_iud);
|
||||
u.ipv4_hdr.totallength = ddsrt_toBE2u ((unsigned short) sz_iud);
|
||||
u.ipv4_hdr.ttl = 255;
|
||||
u.ipv4_hdr.srcip = ((struct sockaddr_in*) src)->sin_addr.s_addr;
|
||||
u.ipv4_hdr.dstip = ((struct sockaddr_in*) hdr->msg_name)->sin_addr.s_addr;
|
||||
|
@ -185,7 +185,7 @@ void write_pcap_sent (struct q_globals *gv, nn_wctime_t tstamp, const struct soc
|
|||
fwrite (&u.ipv4_hdr, sizeof (u.ipv4_hdr), 1, gv->pcap_fp);
|
||||
udp_hdr.srcport = ((struct sockaddr_in*) src)->sin_port;
|
||||
udp_hdr.dstport = ((struct sockaddr_in*) hdr->msg_name)->sin_port;
|
||||
udp_hdr.length = toBE2u ((unsigned short) sz_ud);
|
||||
udp_hdr.length = ddsrt_toBE2u ((unsigned short) sz_ud);
|
||||
udp_hdr.checksum = 0; /* don't have to compute a checksum for UDPv4 */
|
||||
fwrite (&udp_hdr, sizeof (udp_hdr), 1, gv->pcap_fp);
|
||||
write_data (gv->pcap_fp, hdr, sz);
|
||||
|
|
|
@ -216,7 +216,7 @@ static dds_return_t deser_uint32 (uint32_t *dst, const struct dd * __restrict dd
|
|||
return DDS_RETCODE_BAD_PARAMETER;
|
||||
tmp = *((uint32_t *) (dd->buf + off1));
|
||||
if (dd->bswap)
|
||||
tmp = bswap4u (tmp);
|
||||
tmp = ddsrt_bswap4u (tmp);
|
||||
*dst = tmp;
|
||||
*off = off1 + 4;
|
||||
return 0;
|
||||
|
@ -230,7 +230,7 @@ static dds_return_t deser_int64 (int64_t *dst, const struct dd * __restrict dd,
|
|||
return DDS_RETCODE_BAD_PARAMETER;
|
||||
tmp = *((int64_t *) (dd->buf + off1));
|
||||
if (dd->bswap)
|
||||
tmp = bswap8 (tmp);
|
||||
tmp = ddsrt_bswap8 (tmp);
|
||||
*dst = tmp;
|
||||
*off = off1 + 8;
|
||||
return 0;
|
||||
|
@ -298,7 +298,7 @@ static dds_return_t deser_statusinfo (void * __restrict dst, size_t * __restrict
|
|||
/* status info is always in BE format (it is an array of 4 octets according to the spec) --
|
||||
fortunately we have 4 byte alignment anyway -- and can have bits set we don't grok
|
||||
(which we discard) */
|
||||
*x = fromBE4u (*((uint32_t *) (dd->buf + srcoff1))) & NN_STATUSINFO_STANDARDIZED;
|
||||
*x = ddsrt_fromBE4u (*((uint32_t *) (dd->buf + srcoff1))) & NN_STATUSINFO_STANDARDIZED;
|
||||
*dstoff += sizeof (*x);
|
||||
*srcoff = srcoff1 + 4;
|
||||
*flagset->present |= flag;
|
||||
|
@ -309,7 +309,7 @@ static dds_return_t ser_statusinfo (struct nn_xmsg *xmsg, nn_parameterid_t pid,
|
|||
{
|
||||
uint32_t const * const x = deser_generic_src (src, &srcoff, alignof (uint32_t));
|
||||
uint32_t * const p = nn_xmsg_addpar (xmsg, pid, sizeof (uint32_t));
|
||||
*p = toBE4u (*x);
|
||||
*p = ddsrt_toBE4u (*x);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2032,8 +2032,8 @@ static dds_return_t do_locator (nn_locators_t *ls, uint64_t *present, uint64_t w
|
|||
memcpy (&loc, dd->buf, sizeof (loc));
|
||||
if (dd->bswap)
|
||||
{
|
||||
loc.kind = bswap4 (loc.kind);
|
||||
loc.port = bswap4u (loc.port);
|
||||
loc.kind = ddsrt_bswap4 (loc.kind);
|
||||
loc.port = ddsrt_bswap4u (loc.port);
|
||||
}
|
||||
switch (loc.kind)
|
||||
{
|
||||
|
@ -2187,7 +2187,7 @@ static dds_return_t do_port (nn_plist_t *dest, nn_ipaddress_params_tmp_t *dest_t
|
|||
}
|
||||
memcpy (p, dd->buf, sizeof (*p));
|
||||
if (dd->bswap)
|
||||
*p = bswap4u (*p);
|
||||
*p = ddsrt_bswap4u (*p);
|
||||
if (*p <= 0 || *p > 65535)
|
||||
return DDS_RETCODE_BAD_PARAMETER;
|
||||
dest_tmp->present |= fl_tmp;
|
||||
|
@ -2488,8 +2488,8 @@ dds_return_t nn_plist_init_frommsg (nn_plist_t *dest, char **nextafterplist, uin
|
|||
/* swapping header partially based on wireshark dissector
|
||||
output, partially on intuition, and in a small part based on
|
||||
the spec */
|
||||
pid = (nn_parameterid_t) (dd.bswap ? bswap2u (par->parameterid) : par->parameterid);
|
||||
length = (uint16_t) (dd.bswap ? bswap2u (par->length) : par->length);
|
||||
pid = (nn_parameterid_t) (dd.bswap ? ddsrt_bswap2u (par->parameterid) : par->parameterid);
|
||||
length = (uint16_t) (dd.bswap ? ddsrt_bswap2u (par->length) : par->length);
|
||||
if (pid == PID_SENTINEL)
|
||||
{
|
||||
/* Sentinel terminates list, the length is ignored, DDSI 9.4.2.11. */
|
||||
|
@ -2607,8 +2607,8 @@ unsigned char *nn_plist_quickscan (struct nn_rsample_info *dest, const struct nn
|
|||
nn_parameter_t *par = (nn_parameter_t *) pl;
|
||||
nn_parameterid_t pid;
|
||||
uint16_t length;
|
||||
pid = (nn_parameterid_t) (dest->bswap ? bswap2u (par->parameterid) : par->parameterid);
|
||||
length = (uint16_t) (dest->bswap ? bswap2u (par->length) : par->length);
|
||||
pid = (nn_parameterid_t) (dest->bswap ? ddsrt_bswap2u (par->parameterid) : par->parameterid);
|
||||
length = (uint16_t) (dest->bswap ? ddsrt_bswap2u (par->length) : par->length);
|
||||
pl += sizeof (*par);
|
||||
if (pid == PID_SENTINEL)
|
||||
return (unsigned char *) pl;
|
||||
|
@ -2639,7 +2639,7 @@ unsigned char *nn_plist_quickscan (struct nn_rsample_info *dest, const struct nn
|
|||
{
|
||||
/* can only represent 2 LSBs of statusinfo in "dest", so if others are set,
|
||||
mark it as a "complex_qos" and accept the hit of parsing the data completely. */
|
||||
uint32_t stinfo = fromBE4u (*((uint32_t *) pl));
|
||||
uint32_t stinfo = ddsrt_fromBE4u (*((uint32_t *) pl));
|
||||
dest->statusinfo = stinfo & 3u;
|
||||
if ((stinfo & ~3u))
|
||||
dest->complex_qos = 1;
|
||||
|
|
|
@ -145,7 +145,7 @@ static int valid_AckNack (const struct receiver_state *rst, AckNack_t *msg, size
|
|||
if (byteswap)
|
||||
{
|
||||
bswap_sequence_number_set_bitmap (&msg->readerSNState, msg->bits);
|
||||
*count = bswap4 (*count);
|
||||
*count = ddsrt_bswap4 (*count);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -199,8 +199,8 @@ static int valid_InfoTS (InfoTS_t *msg, size_t size, int byteswap)
|
|||
{
|
||||
if (byteswap)
|
||||
{
|
||||
msg->time.seconds = bswap4 (msg->time.seconds);
|
||||
msg->time.fraction = bswap4u (msg->time.fraction);
|
||||
msg->time.seconds = ddsrt_bswap4 (msg->time.seconds);
|
||||
msg->time.fraction = ddsrt_bswap4u (msg->time.fraction);
|
||||
}
|
||||
return valid_ddsi_timestamp (msg->time);
|
||||
}
|
||||
|
@ -214,7 +214,7 @@ static int valid_Heartbeat (Heartbeat_t *msg, size_t size, int byteswap)
|
|||
{
|
||||
bswapSN (&msg->firstSN);
|
||||
bswapSN (&msg->lastSN);
|
||||
msg->count = bswap4 (msg->count);
|
||||
msg->count = ddsrt_bswap4 (msg->count);
|
||||
}
|
||||
msg->readerId = nn_ntoh_entityid (msg->readerId);
|
||||
msg->writerId = nn_ntoh_entityid (msg->writerId);
|
||||
|
@ -231,8 +231,8 @@ static int valid_HeartbeatFrag (HeartbeatFrag_t *msg, size_t size, int byteswap)
|
|||
if (byteswap)
|
||||
{
|
||||
bswapSN (&msg->writerSN);
|
||||
msg->lastFragmentNum = bswap4u (msg->lastFragmentNum);
|
||||
msg->count = bswap4 (msg->count);
|
||||
msg->lastFragmentNum = ddsrt_bswap4u (msg->lastFragmentNum);
|
||||
msg->count = ddsrt_bswap4 (msg->count);
|
||||
}
|
||||
msg->readerId = nn_ntoh_entityid (msg->readerId);
|
||||
msg->writerId = nn_ntoh_entityid (msg->writerId);
|
||||
|
@ -267,7 +267,7 @@ static int valid_NackFrag (NackFrag_t *msg, size_t size, int byteswap)
|
|||
if (byteswap)
|
||||
{
|
||||
bswap_fragment_number_set_bitmap (&msg->fragmentNumberState, msg->bits);
|
||||
*count = bswap4 (*count);
|
||||
*count = ddsrt_bswap4 (*count);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -292,8 +292,8 @@ static int valid_Data (const struct receiver_state *rst, struct nn_rmsg *rmsg, D
|
|||
return 0;
|
||||
if (byteswap)
|
||||
{
|
||||
msg->x.extraFlags = bswap2u (msg->x.extraFlags);
|
||||
msg->x.octetsToInlineQos = bswap2u (msg->x.octetsToInlineQos);
|
||||
msg->x.extraFlags = ddsrt_bswap2u (msg->x.extraFlags);
|
||||
msg->x.octetsToInlineQos = ddsrt_bswap2u (msg->x.octetsToInlineQos);
|
||||
bswapSN (&msg->x.writerSN);
|
||||
}
|
||||
msg->x.readerId = nn_ntoh_entityid (msg->x.readerId);
|
||||
|
@ -400,13 +400,13 @@ static int valid_DataFrag (const struct receiver_state *rst, struct nn_rmsg *rms
|
|||
|
||||
if (byteswap)
|
||||
{
|
||||
msg->x.extraFlags = bswap2u (msg->x.extraFlags);
|
||||
msg->x.octetsToInlineQos = bswap2u (msg->x.octetsToInlineQos);
|
||||
msg->x.extraFlags = ddsrt_bswap2u (msg->x.extraFlags);
|
||||
msg->x.octetsToInlineQos = ddsrt_bswap2u (msg->x.octetsToInlineQos);
|
||||
bswapSN (&msg->x.writerSN);
|
||||
msg->fragmentStartingNum = bswap4u (msg->fragmentStartingNum);
|
||||
msg->fragmentsInSubmessage = bswap2u (msg->fragmentsInSubmessage);
|
||||
msg->fragmentSize = bswap2u (msg->fragmentSize);
|
||||
msg->sampleSize = bswap4u (msg->sampleSize);
|
||||
msg->fragmentStartingNum = ddsrt_bswap4u (msg->fragmentStartingNum);
|
||||
msg->fragmentsInSubmessage = ddsrt_bswap2u (msg->fragmentsInSubmessage);
|
||||
msg->fragmentSize = ddsrt_bswap2u (msg->fragmentSize);
|
||||
msg->sampleSize = ddsrt_bswap4u (msg->sampleSize);
|
||||
}
|
||||
msg->x.readerId = nn_ntoh_entityid (msg->x.readerId);
|
||||
msg->x.writerId = nn_ntoh_entityid (msg->x.writerId);
|
||||
|
@ -2665,7 +2665,7 @@ static int handle_submsg_sequence
|
|||
}
|
||||
if (byteswap)
|
||||
{
|
||||
sm->smhdr.octetsToNextHeader = bswap2u (sm->smhdr.octetsToNextHeader);
|
||||
sm->smhdr.octetsToNextHeader = ddsrt_bswap2u (sm->smhdr.octetsToNextHeader);
|
||||
}
|
||||
|
||||
octetsToNextHeader = sm->smhdr.octetsToNextHeader;
|
||||
|
@ -2932,7 +2932,7 @@ static bool do_packet (struct thread_state1 * const ts1, struct q_globals *gv, d
|
|||
}
|
||||
if (swap)
|
||||
{
|
||||
ml->length = bswap4u (ml->length);
|
||||
ml->length = ddsrt_bswap4u (ml->length);
|
||||
}
|
||||
|
||||
if (ml->smhdr.submessageId != SMID_PT_MSG_LEN)
|
||||
|
|
|
@ -1109,7 +1109,7 @@ static void write_pmd_message (struct thread_state1 * const ts1, struct nn_xpack
|
|||
}
|
||||
|
||||
u.pmd.participantGuidPrefix = nn_hton_guid_prefix (pp->e.guid.prefix);
|
||||
u.pmd.kind = toBE4u (pmd_kind);
|
||||
u.pmd.kind = ddsrt_toBE4u (pmd_kind);
|
||||
u.pmd.length = PMD_DATA_LENGTH;
|
||||
memset (u.pmd.value, 0, u.pmd.length);
|
||||
|
||||
|
|
|
@ -786,7 +786,7 @@ void nn_xmsg_addpar_keyhash (struct nn_xmsg *m, const struct ddsi_serdata *serda
|
|||
static void nn_xmsg_addpar_BE4u (struct nn_xmsg *m, nn_parameterid_t pid, uint32_t x)
|
||||
{
|
||||
unsigned *p = nn_xmsg_addpar (m, pid, sizeof (x));
|
||||
*p = toBE4u (x);
|
||||
*p = ddsrt_toBE4u (x);
|
||||
}
|
||||
|
||||
void nn_xmsg_addpar_statusinfo (struct nn_xmsg *m, unsigned statusinfo)
|
||||
|
@ -800,8 +800,8 @@ void nn_xmsg_addpar_statusinfo (struct nn_xmsg *m, unsigned statusinfo)
|
|||
assert ((statusinfo & ~NN_STATUSINFO_STANDARDIZED) == NN_STATUSINFO_OSPL_AUTO);
|
||||
if (statusinfo & NN_STATUSINFO_OSPL_AUTO)
|
||||
statusinfox |= NN_STATUSINFOX_OSPL_AUTO;
|
||||
p[0] = toBE4u (statusinfo & NN_STATUSINFO_STANDARDIZED);
|
||||
p[1] = toBE4u (statusinfox);
|
||||
p[0] = ddsrt_toBE4u (statusinfo & NN_STATUSINFO_STANDARDIZED);
|
||||
p[1] = ddsrt_toBE4u (statusinfox);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1374,7 +1374,7 @@ int nn_xpack_addmsg (struct nn_xpack *xp, struct nn_xmsg *m, const uint32_t flag
|
|||
assert (m->refd_payload == NULL || (m->refd_payload_iov.iov_len % 4) == 0);
|
||||
|
||||
if (xp->iov == NULL)
|
||||
xp->iov = malloc (NN_XMSG_MAX_MESSAGE_IOVECS * sizeof (*xp->iov));
|
||||
xp->iov = ddsrt_malloc (NN_XMSG_MAX_MESSAGE_IOVECS * sizeof (*xp->iov));
|
||||
|
||||
if (!nn_xpack_mayaddmsg (xp, m, flags))
|
||||
{
|
||||
|
|
|
@ -117,6 +117,7 @@ list(APPEND headers
|
|||
"${include_path}/dds/ddsrt/static_assert.h")
|
||||
|
||||
list(APPEND sources
|
||||
"${source_path}/bswap.c"
|
||||
"${source_path}/io.c"
|
||||
"${source_path}/log.c"
|
||||
"${source_path}/retcode.c"
|
||||
|
@ -262,20 +263,9 @@ if(BUILD_TESTING)
|
|||
endif()
|
||||
|
||||
install(
|
||||
DIRECTORY "include/dds"
|
||||
DIRECTORY
|
||||
"include/"
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
COMPONENT dev
|
||||
FILES_MATCHING PATTERN "*.h")
|
||||
|
||||
install(
|
||||
FILES "${CMAKE_CURRENT_BINARY_DIR}/include/dds/version.h"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/dds"
|
||||
COMPONENT dev)
|
||||
|
||||
if(WIN32)
|
||||
install(
|
||||
FILES "${CMAKE_CURRENT_BINARY_DIR}/include/getopt.h"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
COMPONENT dev)
|
||||
endif()
|
||||
|
||||
|
|
87
src/ddsrt/include/dds/ddsrt/bswap.h
Normal file
87
src/ddsrt/include/dds/ddsrt/bswap.h
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
#ifndef DDSRT_BSWAP_H
|
||||
#define DDSRT_BSWAP_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dds/ddsrt/endian.h"
|
||||
|
||||
#if defined (__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
inline uint16_t ddsrt_bswap2u (uint16_t x)
|
||||
{
|
||||
return (uint16_t) ((x >> 8) | (x << 8));
|
||||
}
|
||||
|
||||
inline int16_t ddsrt_bswap2 (int16_t x)
|
||||
{
|
||||
return (int16_t) ddsrt_bswap2u ((uint16_t) x);
|
||||
}
|
||||
|
||||
inline uint32_t ddsrt_bswap4u (uint32_t x)
|
||||
{
|
||||
return (x >> 24) | ((x >> 8) & 0xff00) | ((x << 8) & 0xff0000) | (x << 24);
|
||||
}
|
||||
|
||||
inline int32_t ddsrt_bswap4 (int32_t x)
|
||||
{
|
||||
return (int32_t) ddsrt_bswap4u ((uint32_t) x);
|
||||
}
|
||||
|
||||
inline uint64_t ddsrt_bswap8u (uint64_t x)
|
||||
{
|
||||
const uint32_t newhi = ddsrt_bswap4u ((uint32_t) x);
|
||||
const uint32_t newlo = ddsrt_bswap4u ((uint32_t) (x >> 32));
|
||||
return ((uint64_t) newhi << 32) | (uint64_t) newlo;
|
||||
}
|
||||
|
||||
inline int64_t ddsrt_bswap8 (int64_t x)
|
||||
{
|
||||
return (int64_t) ddsrt_bswap8u ((uint64_t) x);
|
||||
}
|
||||
|
||||
#if DDSRT_ENDIAN == DDSRT_LITTLE_ENDIAN
|
||||
#define ddsrt_toBE2(x) ddsrt_bswap2 (x)
|
||||
#define ddsrt_toBE2u(x) ddsrt_bswap2u (x)
|
||||
#define ddsrt_toBE4(x) ddsrt_bswap4 (x)
|
||||
#define ddsrt_toBE4u(x) ddsrt_bswap4u (x)
|
||||
#define ddsrt_toBE8(x) ddsrt_bswap8 (x)
|
||||
#define ddsrt_toBE8u(x) ddsrt_bswap8u (x)
|
||||
#define ddsrt_fromBE2(x) ddsrt_bswap2 (x)
|
||||
#define ddsrt_fromBE2u(x) ddsrt_bswap2u (x)
|
||||
#define ddsrt_fromBE4(x) ddsrt_bswap4 (x)
|
||||
#define ddsrt_fromBE4u(x) ddsrt_bswap4u (x)
|
||||
#define ddsrt_fromBE8(x) ddsrt_bswap8 (x)
|
||||
#define ddsrt_fromBE8u(x) ddsrt_bswap8u (x)
|
||||
#else
|
||||
#define ddsrt_toBE2u(x) (x)
|
||||
#define ddsrt_toBE4(x) (x)
|
||||
#define ddsrt_toBE4u(x) (x)
|
||||
#define ddsrt_toBE8(x) (x)
|
||||
#define ddsrt_toBE8u(x) (x)
|
||||
#define ddsrt_fromBE2(x) (x)
|
||||
#define ddsrt_fromBE2u(x) (x)
|
||||
#define ddsrt_fromBE4(x) (x)
|
||||
#define ddsrt_fromBE4u(x) (x)
|
||||
#define ddsrt_fromBE8(x) (x)
|
||||
#define ddsrt_fromBE8u(x) (x)
|
||||
#endif
|
||||
|
||||
#if defined (__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* DDSRT_BSWAP_H */
|
|
@ -59,6 +59,9 @@ typedef int64_t dds_duration_t;
|
|||
/** @name Infinite timeout for relative time */
|
||||
#define DDS_INFINITY ((dds_duration_t) INT64_MAX)
|
||||
|
||||
/** @name Invalid time value for assigning to time output when something goes wrong */
|
||||
#define DDS_TIME_INVALID ((dds_time_t) INT64_MIN)
|
||||
|
||||
/** @name Macro definition for time conversion to nanoseconds
|
||||
@{**/
|
||||
#define DDS_SECS(n) ((n) * DDS_NSECS_IN_SEC)
|
||||
|
|
|
@ -17,10 +17,10 @@
|
|||
#define DDS_VERSION_MINOR @CycloneDDS_VERSION_MINOR@
|
||||
#define DDS_VERSION_PATCH @CycloneDDS_VERSION_PATCH@
|
||||
#define DDS_VERSION_TWEAK @CycloneDDS_VERSION_TWEAK@
|
||||
#define DDS_PROJECT_NAME_NOSPACE_CAPS "@CMAKE_PROJECT_NAME_CAPS@"
|
||||
#define DDS_PROJECT_NAME_NOSPACE_SMALL "@CMAKE_PROJECT_NAME_SMALL@"
|
||||
#define DDS_PROJECT_NAME_NOSPACE "@CMAKE_PROJECT_NAME@"
|
||||
#define DDS_PROJECT_NAME "@CMAKE_PROJECT_NAME@"
|
||||
#define DDS_PROJECT_NAME_NOSPACE_CAPS "@PROJECT_NAME_CAPS@"
|
||||
#define DDS_PROJECT_NAME_NOSPACE_SMALL "@PROJECT_NAME_SMALL@"
|
||||
#define DDS_PROJECT_NAME_NOSPACE "@PROJECT_NAME@"
|
||||
#define DDS_PROJECT_NAME "@PROJECT_NAME@"
|
||||
|
||||
#define DDS_HOST_NAME "@CMAKE_HOST_SYSTEM_NAME@"
|
||||
#define DDS_TARGET_NAME "@CMAKE_SYSTEM_NAME@"
|
||||
|
|
|
@ -9,13 +9,11 @@
|
|||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
#include "dds/ddsi/q_bswap.h"
|
||||
|
||||
extern inline uint16_t bswap2u (uint16_t x);
|
||||
extern inline uint32_t bswap4u (uint32_t x);
|
||||
extern inline uint64_t bswap8u (uint64_t x);
|
||||
extern inline int16_t bswap2 (int16_t x);
|
||||
extern inline int32_t bswap4 (int32_t x);
|
||||
extern inline int64_t bswap8 (int64_t x);
|
||||
extern inline void bswapSN (nn_sequence_number_t *sn);
|
||||
#include "dds/ddsrt/bswap.h"
|
||||
|
||||
extern inline uint16_t ddsrt_bswap2u (uint16_t x);
|
||||
extern inline uint32_t ddsrt_bswap4u (uint32_t x);
|
||||
extern inline uint64_t ddsrt_bswap8u (uint64_t x);
|
||||
extern inline int16_t ddsrt_bswap2 (int16_t x);
|
||||
extern inline int32_t ddsrt_bswap4 (int32_t x);
|
||||
extern inline int64_t ddsrt_bswap8 (int64_t x);
|
|
@ -86,7 +86,8 @@ dds_return_t ddsrt_dlerror(char *buf, size_t buflen) {
|
|||
if ( err == 0 ) {
|
||||
retcode = DDS_RETCODE_NOT_FOUND;
|
||||
} else {
|
||||
retcode = ddsrt_strerror_r(err, buf, buflen);
|
||||
ddsrt_strerror_r(err, buf, buflen);
|
||||
SetLastError(0);
|
||||
}
|
||||
|
||||
return retcode;
|
||||
|
|
|
@ -45,17 +45,17 @@ include(cmake/IdlcGenerate.cmake)
|
|||
|
||||
install(
|
||||
FILES "cmake/IdlcGenerate.cmake"
|
||||
DESTINATION "${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}/idlc"
|
||||
DESTINATION "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/idlc"
|
||||
COMPONENT dev)
|
||||
|
||||
install(
|
||||
FILES "${IDLC_SCRIPT_IN}"
|
||||
DESTINATION "${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}/idlc"
|
||||
DESTINATION "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/idlc"
|
||||
COMPONENT dev)
|
||||
|
||||
install(
|
||||
FILES "${IDLC_JAR}"
|
||||
DESTINATION "${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}/idlc"
|
||||
DESTINATION "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/idlc"
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||
COMPONENT dev)
|
||||
|
||||
|
|
|
@ -14,6 +14,6 @@ package org.eclipse.cyclonedds;
|
|||
public class Project
|
||||
{
|
||||
public static String version = "@PROJECT_VERSION@";
|
||||
public static String name = "@CMAKE_PROJECT_NAME@";
|
||||
public static String nameCaps = "@CMAKE_PROJECT_NAME_CAPS@";
|
||||
public static String name = "@PROJECT_NAME@";
|
||||
public static String nameCaps = "@PROJECT_NAME_CAPS@";
|
||||
}
|
||||
|
|
|
@ -11,14 +11,17 @@
|
|||
#
|
||||
include(${MPT_CMAKE})
|
||||
|
||||
add_compile_options("-I${PROJECT_SOURCE_DIR}/src/core/ddsi/include")
|
||||
|
||||
idlc_generate(mpt_rwdata_lib "procs/rwdata.idl")
|
||||
|
||||
set(sources_qosmatch
|
||||
"procs/rw.c"
|
||||
"qosmatch.c")
|
||||
add_mpt_executable(mpt_qosmatch ${sources_qosmatch})
|
||||
|
||||
target_include_directories(
|
||||
mpt_qosmatch PRIVATE
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../../core/ddsi/include>")
|
||||
|
||||
target_link_libraries(mpt_qosmatch PRIVATE mpt_rwdata_lib)
|
||||
|
||||
set(sources_ppuserdata
|
||||
|
|
21
src/security/CMakeLists.txt
Normal file
21
src/security/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
|
||||
if( ENABLE_SECURITY )
|
||||
add_subdirectory(api)
|
||||
add_subdirectory(core)
|
||||
|
||||
if ( ENABLE_SSL)
|
||||
add_subdirectory(builtin_plugins)
|
||||
endif()
|
||||
endif()
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
# Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
|
@ -15,7 +15,9 @@ add_library(security_api INTERFACE)
|
|||
|
||||
target_include_directories(
|
||||
security_api INTERFACE
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>")
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>"
|
||||
)
|
||||
|
||||
install(
|
||||
DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/include/"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
|
@ -47,13 +47,13 @@ extern "C" {
|
|||
#define DDS_SECURITY_ERR_INVALID_TRUSTED_CA_DIR_MESSAGE "Can not open trusted CA directory"
|
||||
#define DDS_SECURITY_ERR_CA_NOT_TRUSTED_CODE 121
|
||||
#define DDS_SECURITY_ERR_CA_NOT_TRUSTED_MESSAGE "Identity CA is not trusted"
|
||||
#define DDS_SECURITY_ERR_CERT_STARTDATE_INVALID_CODE 122
|
||||
#define DDS_SECURITY_ERR_CERT_STARTDATE_INVALID_MESSAGE "Certificate start date is in the future"
|
||||
#define DDS_SECURITY_ERR_CERT_STARTDATE_IN_FUTURE_CODE 122
|
||||
#define DDS_SECURITY_ERR_CERT_STARTDATE_IN_FUTURE_MESSAGE "Certificate start date is in the future"
|
||||
#define DDS_SECURITY_ERR_CERT_EXPIRED_CODE 123
|
||||
#define DDS_SECURITY_ERR_CERT_EXPIRED_MESSAGE "Certificate expired"
|
||||
#define DDS_SECURITY_ERR_INVALID_CRYPTO_RECEIVER_SIGN_CODE 124
|
||||
#define DDS_SECURITY_ERR_CERT_AUTHENTICATION_ALGO_KIND_UNKNOWN_CODE 125
|
||||
#define DDS_SECURITY_ERR_CERT_AUTHENTICATION_ALGO_KIND_UNKNOWN_MESSAGE "Certificate authentication algorithm unknown"
|
||||
#define DDS_SECURITY_ERR_CERT_AUTH_ALGO_KIND_UNKNOWN_CODE 125
|
||||
#define DDS_SECURITY_ERR_CERT_AUTH_ALGO_KIND_UNKNOWN_MESSAGE "Certificate authentication algorithm unknown"
|
||||
#define DDS_SECURITY_ERR_ALLOCATION_FAILED_CODE 126
|
||||
#define DDS_SECURITY_ERR_ALLOCATION_FAILED_MESSAGE "Failed to allocate internal structure"
|
||||
#define DDS_SECURITY_ERR_INVALID_SMIME_DOCUMENT_CODE 127
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
|
@ -20,8 +20,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* *
|
||||
* Primitive types. *
|
||||
|
|
19
src/security/builtin_plugins/CMakeLists.txt
Normal file
19
src/security/builtin_plugins/CMakeLists.txt
Normal file
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/authentication")
|
||||
|
||||
# TODO: improve test inclusion.
|
||||
if((BUILD_TESTING) AND ((NOT DEFINED MSVC_VERSION) OR (MSVC_VERSION GREATER "1800")))
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/tests")
|
||||
endif()
|
65
src/security/builtin_plugins/authentication/CMakeLists.txt
Normal file
65
src/security/builtin_plugins/authentication/CMakeLists.txt
Normal file
|
@ -0,0 +1,65 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
include (GenerateExportHeader)
|
||||
|
||||
PREPEND(srcs_authentication "${CMAKE_CURRENT_LIST_DIR}/src"
|
||||
authentication.c
|
||||
auth_utils.c
|
||||
)
|
||||
|
||||
PREPEND(hdrs_private_authentication "${CMAKE_CURRENT_LIST_DIR}/src"
|
||||
auth_defs.h
|
||||
authentication.h
|
||||
auth_utils.h
|
||||
dds_security_core_if.h
|
||||
)
|
||||
|
||||
add_library(dds_security_auth SHARED "")
|
||||
|
||||
generate_export_header(
|
||||
dds_security_auth
|
||||
BASE_NAME SECURITY
|
||||
EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/include/dds/security/export.h"
|
||||
)
|
||||
|
||||
|
||||
|
||||
find_package(OpenSSL )
|
||||
|
||||
add_definitions(-DDDSI_INCLUDE_SSL)
|
||||
|
||||
target_link_libraries(dds_security_auth PUBLIC ddsc)
|
||||
target_link_libraries(dds_security_auth PUBLIC OpenSSL::SSL)
|
||||
|
||||
target_sources(dds_security_auth
|
||||
PRIVATE
|
||||
${srcs_authentication}
|
||||
|
||||
)
|
||||
|
||||
target_include_directories(dds_security_auth
|
||||
PUBLIC
|
||||
"$<BUILD_INTERFACE:$<TARGET_PROPERTY:security_api,INTERFACE_INCLUDE_DIRECTORIES>>"
|
||||
"$<BUILD_INTERFACE:$<TARGET_PROPERTY:security_core,INTERFACE_INCLUDE_DIRECTORIES>>"
|
||||
"$<BUILD_INTERFACE:$<TARGET_PROPERTY:ddsrt,INTERFACE_INCLUDE_DIRECTORIES>>"
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>"
|
||||
)
|
||||
|
||||
install(
|
||||
TARGETS
|
||||
EXPORT "${CMAKE_PROJECT_NAME}"
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
|
||||
)
|
||||
|
||||
|
1379
src/security/builtin_plugins/authentication/src/auth_utils.c
Normal file
1379
src/security/builtin_plugins/authentication/src/auth_utils.c
Normal file
File diff suppressed because it is too large
Load diff
238
src/security/builtin_plugins/authentication/src/auth_utils.h
Normal file
238
src/security/builtin_plugins/authentication/src/auth_utils.h
Normal file
|
@ -0,0 +1,238 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef AUTH_UTILS_H
|
||||
#define AUTH_UTILS_H
|
||||
|
||||
#include "dds/security/dds_security_api.h"
|
||||
#include "dds/ddsrt/time.h"
|
||||
|
||||
#define DDS_AUTH_PLUGIN_CONTEXT "Authentication"
|
||||
|
||||
typedef enum {
|
||||
AUTH_ALGO_KIND_UNKNOWN,
|
||||
AUTH_ALGO_KIND_RSA_2048,
|
||||
AUTH_ALGO_KIND_EC_PRIME256V1
|
||||
} AuthenticationAlgoKind_t;
|
||||
|
||||
typedef enum {
|
||||
AUTH_CONF_ITEM_PREFIX_UNKNOWN,
|
||||
AUTH_CONF_ITEM_PREFIX_FILE,
|
||||
AUTH_CONF_ITEM_PREFIX_DATA,
|
||||
AUTH_CONF_ITEM_PREFIX_PKCS11
|
||||
} AuthConfItemPrefix_t;
|
||||
|
||||
|
||||
typedef struct AuthenticationChallenge {
|
||||
unsigned char value[DDS_SECURITY_AUTHENTICATION_CHALLENGE_SIZE];
|
||||
} AuthenticationChallenge;
|
||||
|
||||
typedef struct {
|
||||
uint32_t length;
|
||||
X509 **buffer;
|
||||
} X509Seq;
|
||||
|
||||
typedef unsigned char HashValue_t[SHA256_DIGEST_LENGTH];
|
||||
/*typedef struct HashValue {
|
||||
unsigned char value[SHA256_DIGEST_LENGTH];
|
||||
} HashValue_t;
|
||||
*/
|
||||
|
||||
/* Return a string that contains an openssl error description
|
||||
* When a openssl function returns an error this function can be
|
||||
* used to retrieve a descriptive error string.
|
||||
* Note that the returned string should be freed.
|
||||
*/
|
||||
char *
|
||||
get_openssl_error_message(
|
||||
void);
|
||||
|
||||
/* Return the subject name of contained in a X509 certificate
|
||||
* Note that the returned string should be freed.
|
||||
*/
|
||||
char*
|
||||
get_certificate_subject_name(
|
||||
const X509 *cert,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
/* Return the expiry date of contained in a X509 certificate
|
||||
*
|
||||
*/
|
||||
dds_time_t
|
||||
get_certificate_expiry(
|
||||
const X509 *cert);
|
||||
|
||||
/* Return the subject name of a X509 certificate DER
|
||||
* encoded. The DER encoded subject name is returned in
|
||||
* the provided buffer. The length of the allocated
|
||||
* buffer is returned
|
||||
*
|
||||
* return length of allocated buffer or -1 on error
|
||||
*/
|
||||
DDS_Security_ValidationResult_t
|
||||
get_subject_name_DER_encoded(
|
||||
const X509 *cert,
|
||||
unsigned char **buffer,
|
||||
size_t *size,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
|
||||
/* Load a X509 certificate for the provided data.
|
||||
*
|
||||
* data : certificate in PEM format
|
||||
* x509Cert : the openssl X509 return value
|
||||
*/
|
||||
DDS_Security_ValidationResult_t
|
||||
load_X509_certificate_from_data(
|
||||
const char *data,
|
||||
int len,
|
||||
X509 **x509Cert,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
|
||||
/* Load a X509 certificate for the provided data.
|
||||
*
|
||||
* data : URI of the certificate. URI format is defined in DDS Security spec 9.3.1
|
||||
|
||||
* x509Cert : the openssl X509 return value
|
||||
*/
|
||||
DDS_Security_ValidationResult_t
|
||||
load_X509_certificate(
|
||||
const char *data,
|
||||
X509 **x509Cert,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
|
||||
/* Load a X509 certificate for the provided file.
|
||||
*
|
||||
* filename : path of the file that contains PEM formatted certificate
|
||||
* x509Cert : the openssl X509 return value
|
||||
*/
|
||||
DDS_Security_ValidationResult_t
|
||||
load_X509_certificate_from_file(
|
||||
const char *filename,
|
||||
X509 **x509Cert,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
/* Load a Private Key for the provided data.
|
||||
*
|
||||
* data : URI of the private key. URI format is defined in DDS Security spec 9.3.1
|
||||
* privateKey : the openssl EVP_PKEY return value
|
||||
*/
|
||||
DDS_Security_ValidationResult_t
|
||||
load_X509_private_key(
|
||||
const char *data,
|
||||
const char *password,
|
||||
EVP_PKEY **privateKey,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
|
||||
/* Validate an identity certificate against the identityCA
|
||||
* The provided identity certificate is checked if it is
|
||||
* signed by the identity corresponding to the identityCA.
|
||||
*
|
||||
* Note: Currently only a self signed CA is supported
|
||||
* The function does not yet check a CLR or ocsp
|
||||
* for expiry of identity certificate.
|
||||
*/
|
||||
DDS_Security_ValidationResult_t
|
||||
verify_certificate(
|
||||
X509 *identityCert,
|
||||
X509 *identityCa,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
check_certificate_expiry(
|
||||
const X509 *cert,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
AuthenticationAlgoKind_t
|
||||
get_auhentication_algo_kind(
|
||||
X509 *cert);
|
||||
|
||||
AuthenticationChallenge *
|
||||
generate_challenge(
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
get_certificate_contents(
|
||||
X509 *cert,
|
||||
unsigned char **data,
|
||||
uint32_t *size,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
generate_dh_keys(
|
||||
EVP_PKEY **dhkey,
|
||||
AuthenticationAlgoKind_t authKind,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
dh_public_key_to_oct(
|
||||
EVP_PKEY *pkey,
|
||||
AuthenticationAlgoKind_t algo,
|
||||
unsigned char **buffer,
|
||||
uint32_t *length,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
dh_oct_to_public_key(
|
||||
EVP_PKEY **data,
|
||||
AuthenticationAlgoKind_t algo,
|
||||
const unsigned char *str,
|
||||
uint32_t size,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
|
||||
AuthConfItemPrefix_t
|
||||
get_conf_item_type(
|
||||
const char *str,
|
||||
char **data);
|
||||
|
||||
/*
|
||||
* Frees the contents of theCA list.
|
||||
*/
|
||||
void
|
||||
free_ca_list_contents(
|
||||
X509Seq *ca_list);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
get_trusted_ca_list (
|
||||
const char* trusted_ca_dir,
|
||||
X509Seq *ca_list,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
char *
|
||||
string_from_data(
|
||||
const unsigned char *data,
|
||||
uint32_t size);
|
||||
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
create_asymmetrical_signature(
|
||||
EVP_PKEY *pkey,
|
||||
const unsigned char *data,
|
||||
const size_t dataLen,
|
||||
unsigned char **signature,
|
||||
size_t *signatureLen,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
validate_asymmetrical_signature(
|
||||
EVP_PKEY *pkey,
|
||||
const unsigned char *data,
|
||||
const size_t dataLen,
|
||||
const unsigned char *signature,
|
||||
const size_t signatureLen,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
#endif /* AUTH_UTILS_H */
|
3513
src/security/builtin_plugins/authentication/src/authentication.c
Normal file
3513
src/security/builtin_plugins/authentication/src/authentication.c
Normal file
File diff suppressed because it is too large
Load diff
146
src/security/builtin_plugins/authentication/src/authentication.h
Normal file
146
src/security/builtin_plugins/authentication/src/authentication.h
Normal file
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
|
||||
|
||||
#ifndef SECURITY_BUILTIN_PLUGINS_AUTHENTICATION_H_
|
||||
#define SECURITY_BUILTIN_PLUGINS_AUTHENTICATION_H_
|
||||
|
||||
#include "dds/ddsrt/atomics.h"
|
||||
#include "dds/security/dds_security_api.h"
|
||||
#include "dds/security/export.h"
|
||||
|
||||
SECURITY_EXPORT int32_t
|
||||
init_authentication(const char *argument, void **context);
|
||||
|
||||
SECURITY_EXPORT int32_t
|
||||
finalize_authentication(void *context);
|
||||
|
||||
|
||||
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
validate_local_identity(
|
||||
dds_security_authentication *instance,
|
||||
DDS_Security_IdentityHandle *local_identity_handle,
|
||||
DDS_Security_GUID_t *adjusted_participant_guid,
|
||||
const DDS_Security_DomainId domain_id,
|
||||
const DDS_Security_Qos *participant_qos,
|
||||
const DDS_Security_GUID_t *candidate_participant_guid,
|
||||
|
||||
DDS_Security_SecurityException *ex);
|
||||
DDS_Security_boolean
|
||||
get_identity_token(dds_security_authentication *instance,
|
||||
DDS_Security_IdentityToken *identity_token,
|
||||
const DDS_Security_IdentityHandle handle,
|
||||
DDS_Security_SecurityException *ex);
|
||||
DDS_Security_boolean
|
||||
set_permissions_credential_and_token(
|
||||
dds_security_authentication *instance,
|
||||
const DDS_Security_IdentityHandle handle,
|
||||
const DDS_Security_PermissionsCredentialToken *permissions_credential,
|
||||
const DDS_Security_PermissionsToken *permissions_token,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
validate_remote_identity(
|
||||
dds_security_authentication *instance,
|
||||
DDS_Security_IdentityHandle *remote_identity_handle,
|
||||
DDS_Security_AuthRequestMessageToken *local_auth_request_token,
|
||||
const DDS_Security_AuthRequestMessageToken *remote_auth_request_token,
|
||||
const DDS_Security_IdentityHandle local_identity_handle,
|
||||
const DDS_Security_IdentityToken *remote_identity_token,
|
||||
const DDS_Security_GUID_t *remote_participant_guid,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
begin_handshake_request(
|
||||
dds_security_authentication *instance,
|
||||
DDS_Security_HandshakeHandle *handshake_handle,
|
||||
DDS_Security_HandshakeMessageToken *handshake_message,
|
||||
const DDS_Security_IdentityHandle initiator_identity_handle,
|
||||
const DDS_Security_IdentityHandle replier_identity_handle,
|
||||
const DDS_Security_OctetSeq *serialized_local_participant_data,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
begin_handshake_reply(
|
||||
dds_security_authentication *instance,
|
||||
DDS_Security_HandshakeHandle *handshake_handle,
|
||||
DDS_Security_HandshakeMessageToken *handshake_message_out,
|
||||
const DDS_Security_HandshakeMessageToken *handshake_message_in,
|
||||
const DDS_Security_IdentityHandle initiator_identity_handle,
|
||||
const DDS_Security_IdentityHandle replier_identity_handle,
|
||||
const DDS_Security_OctetSeq *serialized_local_participant_data,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
process_handshake(
|
||||
dds_security_authentication *instance,
|
||||
DDS_Security_HandshakeMessageToken *handshake_message_out,
|
||||
const DDS_Security_HandshakeMessageToken *handshake_message_in,
|
||||
const DDS_Security_HandshakeHandle handshake_handle,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_SharedSecretHandle get_shared_secret(
|
||||
dds_security_authentication *instance,
|
||||
const DDS_Security_HandshakeHandle handshake_handle,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_boolean
|
||||
get_authenticated_peer_credential_token(
|
||||
dds_security_authentication *instance,
|
||||
DDS_Security_AuthenticatedPeerCredentialToken *peer_credential_token,
|
||||
const DDS_Security_HandshakeHandle handshake_handle,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
|
||||
DDS_Security_boolean get_identity_status_token(
|
||||
dds_security_authentication *instance,
|
||||
DDS_Security_IdentityStatusToken *identity_status_token,
|
||||
const DDS_Security_IdentityHandle handle,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_boolean set_listener(dds_security_authentication *instance,
|
||||
const dds_security_authentication_listener *listener,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_boolean return_identity_token(dds_security_authentication *instance,
|
||||
const DDS_Security_IdentityToken *token,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_boolean return_identity_status_token(
|
||||
dds_security_authentication *instance,
|
||||
const DDS_Security_IdentityStatusToken *token,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_boolean return_authenticated_peer_credential_token(
|
||||
dds_security_authentication *instance,
|
||||
const DDS_Security_AuthenticatedPeerCredentialToken *peer_credential_token,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_boolean
|
||||
return_handshake_handle(dds_security_authentication *instance,
|
||||
const DDS_Security_HandshakeHandle handshake_handle,
|
||||
DDS_Security_SecurityException *ex);
|
||||
DDS_Security_boolean
|
||||
return_identity_handle(
|
||||
dds_security_authentication *instance,
|
||||
const DDS_Security_IdentityHandle identity_handle,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_boolean return_sharedsecret_handle(
|
||||
dds_security_authentication *instance,
|
||||
const DDS_Security_SharedSecretHandle sharedsecret_handle,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
|
||||
#endif /* SECURITY_BUILTIN_PLUGINS_AUTHENTICATION_H_ */
|
51
src/security/builtin_plugins/tests/CMakeLists.txt
Normal file
51
src/security/builtin_plugins/tests/CMakeLists.txt
Normal file
|
@ -0,0 +1,51 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
include(CUnit)
|
||||
|
||||
set(security_auth_test_sources
|
||||
"validate_begin_handshake_reply/src/validate_begin_handshake_reply_utests.c"
|
||||
"get_authenticated_peer_credential_token/src/get_authenticated_peer_credential_token_utests.c"
|
||||
"validate_local_identity/src/validate_local_identity_utests.c"
|
||||
"validate_remote_identity/src/validate_remote_identity_utests.c"
|
||||
"validate_begin_handshake_request/src/validate_begin_handshake_request_utests.c"
|
||||
"process_handshake/src/process_handshake_utests.c"
|
||||
"common/src/handshake_helper.c"
|
||||
"common/src/loader.c")
|
||||
|
||||
add_cunit_executable(cunit_security_plugins ${security_auth_test_sources})
|
||||
target_include_directories(
|
||||
cunit_security_plugins PRIVATE
|
||||
"$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src/include/>"
|
||||
"$<BUILD_INTERFACE:$<TARGET_PROPERTY:security_api,INTERFACE_INCLUDE_DIRECTORIES>>"
|
||||
"$<BUILD_INTERFACE:$<TARGET_PROPERTY:security_core,INTERFACE_INCLUDE_DIRECTORIES>>"
|
||||
"$<BUILD_INTERFACE:$<TARGET_PROPERTY:ddsrt,INTERFACE_INCLUDE_DIRECTORIES>>"
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>"
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
|
||||
)
|
||||
|
||||
|
||||
target_link_libraries(cunit_security_plugins PRIVATE ddsc security_api)
|
||||
|
||||
|
||||
find_package(OpenSSL )
|
||||
if(OPENSSL_FOUND)
|
||||
target_link_libraries(cunit_security_plugins PRIVATE OpenSSL::SSL)
|
||||
|
||||
else()
|
||||
message(FATAL_ERROR "To build without openssl support, set DDSC_ENABLE_OPENSSL to OFF")
|
||||
endif()
|
||||
|
||||
set(CUnit_builtin_plugins_tests_dir "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
configure_file("config_env.h.in" "config_env.h")
|
||||
|
||||
|
579
src/security/builtin_plugins/tests/common/src/handshake_helper.c
Normal file
579
src/security/builtin_plugins/tests/common/src/handshake_helper.c
Normal file
|
@ -0,0 +1,579 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
#include "handshake_helper.h"
|
||||
#include "dds/security/core/dds_security_serialize.h"
|
||||
#include "dds/ddsrt/string.h"
|
||||
#include "dds/ddsrt/heap.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "dds/ddsrt/environ.h"
|
||||
#include "CUnit/CUnit.h"
|
||||
#include "CUnit/Test.h"
|
||||
#include "assert.h"
|
||||
#include "dds/ddsrt/misc.h"
|
||||
#include "dds/security/core/shared_secret.h"
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x1000200fL
|
||||
#define AUTH_INCLUDE_EC
|
||||
#include <openssl/ec.h>
|
||||
#include <dds/security/core/dds_security_utils.h>
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||
#define AUTH_INCLUDE_DH_ACCESSORS
|
||||
#endif
|
||||
#else
|
||||
#error "version not found"
|
||||
#endif
|
||||
|
||||
|
||||
const BIGNUM *
|
||||
dh_get_public_key(
|
||||
DH *dhkey)
|
||||
{
|
||||
#ifdef AUTH_INCLUDE_DH_ACCESSORS
|
||||
const BIGNUM *pubkey, *privkey;
|
||||
DH_get0_key(dhkey, &pubkey, &privkey);
|
||||
return pubkey;
|
||||
#else
|
||||
return dhkey->pub_key;
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
dh_set_public_key(
|
||||
DH *dhkey,
|
||||
BIGNUM *pubkey)
|
||||
{
|
||||
#ifdef AUTH_INCLUDE_DH_ACCESSORS
|
||||
return DH_set0_key(dhkey, pubkey, NULL);
|
||||
#else
|
||||
dhkey->pub_key = pubkey;
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* for DEBUG purposes */
|
||||
void print_binary_test( char* name, unsigned char *value, uint32_t size){
|
||||
uint32_t i;
|
||||
printf("%s: ",name );
|
||||
for( i=0; i< size; i++)
|
||||
{
|
||||
printf("%x",value[i]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
DDS_Security_BinaryProperty_t *
|
||||
print_binary_properties_test(
|
||||
DDS_Security_DataHolder *token)
|
||||
{
|
||||
DDS_Security_BinaryProperty_t *result = NULL;
|
||||
uint32_t i;
|
||||
for (i = 0; i < token->binary_properties._length && !result; i++) {
|
||||
print_binary_test( token->binary_properties._buffer[i].name, token->binary_properties._buffer[i].value._buffer, token->binary_properties._buffer[i].value._length);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
create_signature_for_test(
|
||||
EVP_PKEY *pkey,
|
||||
const DDS_Security_BinaryProperty_t **binary_properties,
|
||||
const uint32_t binary_properties_length,
|
||||
unsigned char **signature,
|
||||
size_t *signatureLen,
|
||||
DDS_Security_SecurityException *ex)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result;
|
||||
DDS_Security_Serializer serializer;
|
||||
unsigned char *buffer;
|
||||
size_t size;
|
||||
|
||||
serializer = DDS_Security_Serializer_new(4096, 4096);
|
||||
|
||||
DDS_Security_Serialize_BinaryPropertyArray(serializer,binary_properties, binary_properties_length);
|
||||
DDS_Security_Serializer_buffer(serializer, &buffer, &size);
|
||||
|
||||
result = create_asymmetrical_signature_for_test(pkey, buffer, size, signature, signatureLen, ex);
|
||||
|
||||
ddsrt_free(buffer);
|
||||
DDS_Security_Serializer_free(serializer);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#if( AC_TESTS_IMPLEMENTED )
|
||||
static DDS_Security_ValidationResult_t
|
||||
screate_asymmetrical_signature_for_test(
|
||||
EVP_PKEY *pkey,
|
||||
void *data,
|
||||
size_t dataLen,
|
||||
unsigned char **signature,
|
||||
size_t *signatureLen,
|
||||
DDS_Security_SecurityException *ex)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result = DDS_SECURITY_VALIDATION_OK;
|
||||
EVP_MD_CTX *mdctx = NULL;
|
||||
EVP_PKEY_CTX *kctx = NULL;
|
||||
|
||||
if (!(mdctx = EVP_MD_CTX_create())) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, result, "Failed to create signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_create_ctx;
|
||||
}
|
||||
|
||||
if (EVP_DigestSignInit(mdctx, &kctx, EVP_sha256(), NULL, pkey) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, result, "Failed to initialize signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_sign;
|
||||
}
|
||||
|
||||
if (EVP_PKEY_CTX_set_rsa_padding(kctx, RSA_PKCS1_PSS_PADDING) < 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, result, "Failed to initialize signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_sign;
|
||||
}
|
||||
|
||||
if (EVP_DigestSignUpdate(mdctx, data, dataLen) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, result, "Failed to update signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_sign;
|
||||
}
|
||||
|
||||
if (EVP_DigestSignFinal(mdctx, NULL, signatureLen) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, result, "Failed to finalize signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_sign;
|
||||
}
|
||||
|
||||
//*signature = ddsrt_malloc(sizeof(unsigned char) * (*signatureLen));
|
||||
*signature = OPENSSL_malloc(*signatureLen);
|
||||
if (EVP_DigestSignFinal(mdctx, *signature, signatureLen) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, result, "Failed to finalize signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
ddsrt_free(signature);
|
||||
}
|
||||
|
||||
err_sign:
|
||||
EVP_MD_CTX_destroy(mdctx);
|
||||
err_create_ctx:
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
char *
|
||||
get_openssl_error_message_for_test(
|
||||
void)
|
||||
{
|
||||
BIO *bio = BIO_new(BIO_s_mem());
|
||||
char *msg;
|
||||
char *buf = NULL;
|
||||
size_t len;
|
||||
|
||||
if (bio) {
|
||||
ERR_print_errors(bio);
|
||||
len = (size_t)BIO_get_mem_data (bio, &buf);
|
||||
msg = ddsrt_malloc(len + 1);
|
||||
memset(msg, 0, len+1);
|
||||
memcpy(msg, buf, len);
|
||||
BIO_free(bio);
|
||||
} else {
|
||||
msg = ddsrt_strdup("BIO_new failed");
|
||||
}
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
validate_asymmetrical_signature_for_test(
|
||||
EVP_PKEY *pkey,
|
||||
void *data,
|
||||
size_t dataLen,
|
||||
unsigned char *signature,
|
||||
size_t signatureLen,
|
||||
DDS_Security_SecurityException *ex)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result = DDS_SECURITY_VALIDATION_OK;
|
||||
EVP_MD_CTX *mdctx = NULL;
|
||||
|
||||
if (!(mdctx = EVP_MD_CTX_create())) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to create verify context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_create_ctx;
|
||||
}
|
||||
|
||||
if (EVP_DigestVerifyInit(mdctx, NULL, EVP_sha256(), NULL, pkey) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to initialize verify context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_verify;
|
||||
}
|
||||
|
||||
if (EVP_DigestVerifyUpdate(mdctx, data, dataLen) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to update verify context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_verify;
|
||||
}
|
||||
|
||||
if (EVP_DigestVerifyFinal(mdctx, signature, signatureLen) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to finalize verify context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_verify;
|
||||
}
|
||||
|
||||
err_verify:
|
||||
EVP_MD_CTX_destroy(mdctx);
|
||||
err_create_ctx:
|
||||
return result;
|
||||
}
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
get_public_key(
|
||||
EVP_PKEY *pkey,
|
||||
unsigned char **buffer,
|
||||
size_t *length,
|
||||
DDS_Security_SecurityException *ex)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result = DDS_SECURITY_VALIDATION_OK;
|
||||
BIO *bio = NULL;
|
||||
char *ptr = NULL;
|
||||
size_t sz;
|
||||
|
||||
assert(pkey);
|
||||
assert(buffer);
|
||||
|
||||
*length = 0;
|
||||
|
||||
bio = BIO_new(BIO_s_mem());
|
||||
|
||||
if ( bio == NULL) {
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to get public key: BIO_new_mem_buf failed");
|
||||
} else if (!PEM_write_bio_PUBKEY(bio, pkey)) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to get public key: PEM_write_bio_PUBKEY failed: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
} else {
|
||||
sz = (size_t)BIO_get_mem_data(bio, &ptr);
|
||||
*buffer = ddsrt_malloc(sz +1);
|
||||
memcpy(*buffer, ptr, sz);
|
||||
*length = sz;
|
||||
}
|
||||
|
||||
if (bio) BIO_free(bio);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static EVP_PKEY *
|
||||
modp_data_to_pubkey(
|
||||
const unsigned char *data,
|
||||
uint32_t size)
|
||||
{
|
||||
EVP_PKEY *pkey= NULL;
|
||||
DH *dhkey = NULL;
|
||||
ASN1_INTEGER *asni;
|
||||
BIGNUM *bn = NULL;
|
||||
|
||||
if (!(asni = d2i_ASN1_INTEGER(NULL, &data, size))) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to decode DH public key: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto fail_asni;
|
||||
}
|
||||
|
||||
if (!(bn = ASN1_INTEGER_to_BN(asni, NULL))) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to convert to BIGNU<: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto fail_bn;
|
||||
}
|
||||
|
||||
if (!(dhkey = DH_get_2048_256())) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to allocate dhkey: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto fail_dhkey;
|
||||
}
|
||||
|
||||
dh_set_public_key(dhkey,bn);
|
||||
|
||||
if (!(pkey = EVP_PKEY_new())) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to allocate pkey: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto fail_pkey;
|
||||
}
|
||||
|
||||
if (!EVP_PKEY_set1_DH(pkey, dhkey)) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to set public key: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
EVP_PKEY_free(pkey);
|
||||
pkey = NULL;
|
||||
}
|
||||
|
||||
ASN1_INTEGER_free(asni);
|
||||
DH_free(dhkey);
|
||||
|
||||
return pkey;
|
||||
|
||||
fail_pkey:
|
||||
DH_free(dhkey);
|
||||
fail_dhkey:
|
||||
BN_free(bn);
|
||||
fail_bn:
|
||||
ASN1_INTEGER_free(asni);
|
||||
fail_asni:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static EVP_PKEY *
|
||||
ecdh_data_to_pubkey(
|
||||
const unsigned char *data,
|
||||
uint32_t size)
|
||||
{
|
||||
EVP_PKEY *pkey = NULL;
|
||||
EC_KEY *eckey = NULL;
|
||||
EC_GROUP *group = NULL;
|
||||
EC_POINT *point = NULL;
|
||||
|
||||
if (!(group = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1))) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to allocate EC group: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
} else if (!(point = EC_POINT_new(group))) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to allocate EC point: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
} else if (EC_POINT_oct2point(group, point, data, size, NULL) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to deserialize EC public key to EC point: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
} else if (!(eckey = EC_KEY_new())) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to allocate EC KEY: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
} else if (EC_KEY_set_group(eckey, group) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to convert octet sequence to ASN1 integer: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
} else if (EC_KEY_set_public_key(eckey, point) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to set EC public key: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
} else if (!(pkey = EVP_PKEY_new())) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to allocate EVP key: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
} else if (EVP_PKEY_set1_EC_KEY(pkey, eckey) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("Failed to set EVP key to EC public key: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
EVP_PKEY_free(pkey);
|
||||
pkey = NULL;
|
||||
}
|
||||
|
||||
if (eckey) EC_KEY_free(eckey);
|
||||
if (point) EC_POINT_free(point);
|
||||
if (group) EC_GROUP_free(group);
|
||||
|
||||
return pkey;
|
||||
}
|
||||
|
||||
int
|
||||
check_shared_secret(
|
||||
dds_security_authentication *auth,
|
||||
int use_ecdh,
|
||||
const DDS_Security_BinaryProperty_t *dh_remote,
|
||||
EVP_PKEY *dh_local_private,
|
||||
|
||||
DDS_Security_HandshakeHandle handshake_handle)
|
||||
|
||||
{
|
||||
/* calculate shared secret with the other side */
|
||||
EVP_PKEY_CTX *ctx = NULL;
|
||||
size_t skeylen;
|
||||
EVP_PKEY *dh_remote_public = NULL;
|
||||
DDS_Security_SharedSecretHandle shared_secret_local_handle;
|
||||
DDS_Security_SecurityException exception;
|
||||
DDS_Security_octet *shared_secret_local;
|
||||
DDS_Security_octet shared_secret_remote[SHA256_DIGEST_LENGTH];
|
||||
DDS_Security_octet *secret;
|
||||
int result;
|
||||
|
||||
if (use_ecdh) {
|
||||
dh_remote_public = ecdh_data_to_pubkey(dh_remote->value._buffer, dh_remote->value._length);
|
||||
} else {
|
||||
dh_remote_public = modp_data_to_pubkey(dh_remote->value._buffer, dh_remote->value._length);
|
||||
}
|
||||
|
||||
if (!dh_remote_public) {
|
||||
CU_FAIL("Coud not decode DH public key");
|
||||
}
|
||||
|
||||
ctx = EVP_PKEY_CTX_new(dh_local_private, NULL /* no engine */);
|
||||
if (!ctx)
|
||||
{
|
||||
/* Error occurred */
|
||||
CU_FAIL("Coud not allocate CTX");
|
||||
}
|
||||
|
||||
if (EVP_PKEY_derive_init(ctx) <= 0)
|
||||
{
|
||||
/* Error */
|
||||
CU_FAIL("Coud not init");
|
||||
}
|
||||
result = EVP_PKEY_derive_set_peer(ctx, dh_remote_public) ;
|
||||
if (result<= 0)
|
||||
{
|
||||
/* Error */
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
printf("DH remote public: %s\n",dh_remote->value._buffer);
|
||||
printf("SSL Error: %s\n", msg);
|
||||
ddsrt_free(msg);
|
||||
CU_FAIL("Could not set peer");
|
||||
}
|
||||
|
||||
/* Determine buffer length */
|
||||
result = EVP_PKEY_derive(ctx, NULL, &skeylen);
|
||||
if (result <= 0)
|
||||
{
|
||||
/* Error */
|
||||
CU_FAIL("Could not set derive");
|
||||
}
|
||||
|
||||
secret = ddsrt_malloc(skeylen+1);
|
||||
|
||||
if (EVP_PKEY_derive(ctx, secret, &skeylen) <= 0)
|
||||
{
|
||||
/* Error */
|
||||
CU_FAIL("Could not set derive");
|
||||
}
|
||||
|
||||
SHA256(secret, skeylen, shared_secret_remote);
|
||||
|
||||
ddsrt_free(secret);
|
||||
|
||||
/* get the secret handle */
|
||||
shared_secret_local_handle = auth->get_shared_secret( auth, handshake_handle, &exception);
|
||||
|
||||
/* convert handle to object */
|
||||
shared_secret_local = ((DDS_Security_SharedSecretHandleImpl *)(shared_secret_local_handle))->shared_secret;
|
||||
/*compare with remote. They should be same */
|
||||
|
||||
if (ctx) {
|
||||
EVP_PKEY_CTX_free(ctx);
|
||||
}
|
||||
|
||||
if (dh_remote_public) {
|
||||
EVP_PKEY_free(dh_remote_public);
|
||||
}
|
||||
|
||||
return memcmp(shared_secret_local, shared_secret_remote, SHA256_DIGEST_LENGTH);
|
||||
}
|
||||
|
||||
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
create_asymmetrical_signature_for_test(
|
||||
EVP_PKEY *pkey,
|
||||
void *data,
|
||||
size_t dataLen,
|
||||
unsigned char **signature,
|
||||
size_t *signatureLen,
|
||||
DDS_Security_SecurityException *ex)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result = DDS_SECURITY_VALIDATION_OK;
|
||||
EVP_MD_CTX *mdctx = NULL;
|
||||
EVP_PKEY_CTX *kctx = NULL;
|
||||
|
||||
if (!(mdctx = EVP_MD_CTX_create())) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to create signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_create_ctx;
|
||||
}
|
||||
|
||||
if (EVP_DigestSignInit(mdctx, &kctx, EVP_sha256(), NULL, pkey) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to initialize signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_sign;
|
||||
}
|
||||
|
||||
if (EVP_PKEY_CTX_set_rsa_padding(kctx, RSA_PKCS1_PSS_PADDING) < 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to initialize signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_sign;
|
||||
}
|
||||
|
||||
if (EVP_DigestSignUpdate(mdctx, data, dataLen) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to update signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_sign;
|
||||
}
|
||||
|
||||
if (EVP_DigestSignFinal(mdctx, NULL, signatureLen) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to finalize signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
goto err_sign;
|
||||
}
|
||||
|
||||
//*signature = os_malloc(sizeof(unsigned char) * (*signatureLen));
|
||||
*signature = OPENSSL_malloc(*signatureLen);
|
||||
if (EVP_DigestSignFinal(mdctx, *signature, signatureLen) != 1) {
|
||||
char *msg = get_openssl_error_message_for_test();
|
||||
result = DDS_SECURITY_VALIDATION_FAILED;
|
||||
DDS_Security_Exception_set(ex, "Authentication", DDS_SECURITY_ERR_UNDEFINED_CODE, (int)result, "Failed to finalize signing context: %s", msg);
|
||||
ddsrt_free(msg);
|
||||
ddsrt_free(signature);
|
||||
}
|
||||
|
||||
err_sign:
|
||||
EVP_MD_CTX_destroy(mdctx);
|
||||
err_create_ctx:
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef DDS_SECURITY_BUITIN_TEST_HANDSHAKE_HELPER_H
|
||||
#define DDS_SECURITY_BUITIN_TEST_HANDSHAKE_HELPER_H
|
||||
|
||||
#include "dds/security/dds_security_api.h"
|
||||
#include "dds/security/core/dds_security_serialize.h"
|
||||
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/asn1.h>
|
||||
#include <openssl/x509.h>
|
||||
#include <openssl/x509_vfy.h>
|
||||
#include <openssl/pem.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/evp.h>
|
||||
|
||||
const BIGNUM *
|
||||
dh_get_public_key(
|
||||
DH *dhkey);
|
||||
|
||||
int
|
||||
dh_set_public_key(
|
||||
DH *dhkey,
|
||||
BIGNUM *pubkey);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
create_signature_for_test(
|
||||
EVP_PKEY *pkey,
|
||||
const DDS_Security_BinaryProperty_t **binary_properties,
|
||||
const uint32_t binary_properties_length,
|
||||
unsigned char **signature,
|
||||
size_t *signatureLen,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
create_asymmetrical_signature_for_test(
|
||||
EVP_PKEY *pkey,
|
||||
void *data,
|
||||
size_t dataLen,
|
||||
unsigned char **signature,
|
||||
size_t *signatureLen,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
char *
|
||||
get_openssl_error_message_for_test(
|
||||
void);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
validate_asymmetrical_signature_for_test(
|
||||
EVP_PKEY *pkey,
|
||||
void *data,
|
||||
size_t dataLen,
|
||||
unsigned char *signature,
|
||||
size_t signatureLen,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
DDS_Security_ValidationResult_t
|
||||
get_public_key(
|
||||
EVP_PKEY *pkey,
|
||||
unsigned char **buffer,
|
||||
size_t *length,
|
||||
DDS_Security_SecurityException *ex);
|
||||
|
||||
/* for DEBUG purposes */
|
||||
void print_binary_test( char* name, unsigned char *value, uint32_t size);
|
||||
|
||||
DDS_Security_BinaryProperty_t *
|
||||
print_binary_properties_test(
|
||||
DDS_Security_DataHolder *token);
|
||||
|
||||
int
|
||||
check_shared_secret(
|
||||
dds_security_authentication *auth,
|
||||
int use_ecdh,
|
||||
const DDS_Security_BinaryProperty_t *dh_remote,
|
||||
EVP_PKEY *dh_local_private,
|
||||
DDS_Security_HandshakeHandle handshake_handle);
|
||||
|
||||
#endif
|
222
src/security/builtin_plugins/tests/common/src/loader.c
Normal file
222
src/security/builtin_plugins/tests/common/src/loader.c
Normal file
|
@ -0,0 +1,222 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <CUnit/Test.h>
|
||||
#include <dds/ddsrt/misc.h>
|
||||
#include "loader.h"
|
||||
#include "dds/ddsrt/dynlib.h"
|
||||
#include "dds/ddsrt/heap.h"
|
||||
#include "dds/ddsrt/string.h"
|
||||
#include "sys/stat.h"
|
||||
#include "assert.h"
|
||||
#include "stdio.h"
|
||||
#include "string.h"
|
||||
#include "dds/security/core/dds_security_utils.h"
|
||||
|
||||
struct plugin_info {
|
||||
void *context;
|
||||
ddsrt_dynlib_t lib_handle;
|
||||
plugin_init func_init;
|
||||
plugin_finalize func_fini;
|
||||
};
|
||||
|
||||
struct plugins_hdl {
|
||||
struct plugin_info plugin_ac;
|
||||
struct plugin_info plugin_auth;
|
||||
struct plugin_info plugin_crypto;
|
||||
};
|
||||
|
||||
static void*
|
||||
load_plugin(
|
||||
struct plugin_info *info,
|
||||
const char *name_lib,
|
||||
const char *name_init,
|
||||
const char *name_fini)
|
||||
{
|
||||
dds_return_t result;
|
||||
void *plugin = NULL;
|
||||
assert(info);
|
||||
|
||||
result = ddsrt_dlopen(name_lib, true, &info->lib_handle);
|
||||
if (result == DDS_RETCODE_OK && info->lib_handle) {
|
||||
|
||||
result = ddsrt_dlsym(info->lib_handle, name_init, (void **)&info->func_init);
|
||||
if( result != DDS_RETCODE_OK || info->func_init == NULL) {
|
||||
char buf[200];
|
||||
ddsrt_dlerror(buf, 200);
|
||||
printf("ERROR: could not init %s\n. Invalid init function: %s: %s", name_lib, name_init, buf);
|
||||
return plugin;
|
||||
}
|
||||
|
||||
result = ddsrt_dlsym(info->lib_handle, name_fini, (void **)&info->func_fini);
|
||||
if( result != DDS_RETCODE_OK || info->func_fini == NULL ) {
|
||||
printf("ERROR: could not init %s\n. Invalid fini function: %s", name_lib, name_fini);
|
||||
return plugin;
|
||||
}
|
||||
|
||||
char * init_parameters = "";
|
||||
(void)info->func_init(init_parameters, &plugin);
|
||||
if (plugin) {
|
||||
info->context = plugin;
|
||||
} else {
|
||||
printf("ERROR: could not init %s\n", name_lib);
|
||||
}
|
||||
} else {
|
||||
char buffer[300];
|
||||
ddsrt_dlerror(buffer,300);
|
||||
printf("ERROR: could not load %s. %s\n", name_lib, buffer);
|
||||
}
|
||||
return plugin;
|
||||
}
|
||||
|
||||
struct plugins_hdl*
|
||||
load_plugins(
|
||||
dds_security_access_control **ac,
|
||||
dds_security_authentication **auth,
|
||||
dds_security_cryptography **crypto)
|
||||
{
|
||||
struct plugins_hdl *plugins = ddsrt_malloc(sizeof(struct plugins_hdl));
|
||||
assert(plugins);
|
||||
memset(plugins, 0, sizeof(struct plugins_hdl));
|
||||
if (ac) {
|
||||
*ac = load_plugin(&(plugins->plugin_ac),
|
||||
"dds_security_ac",
|
||||
"init_access_control",
|
||||
"finalize_access_control");
|
||||
if (!(*ac)) {
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (auth) {
|
||||
*auth = load_plugin(&(plugins->plugin_auth),
|
||||
//"dds_security_auth",
|
||||
"dds_security_auth",
|
||||
"init_authentication",
|
||||
"finalize_authentication");
|
||||
if (!(*auth)) {
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (crypto) {
|
||||
*crypto = load_plugin(&(plugins->plugin_crypto),
|
||||
"dds_security_crypto",
|
||||
"init_crypto",
|
||||
"finalize_crypto");
|
||||
if (!(*crypto)) {
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
return plugins;
|
||||
|
||||
err:
|
||||
unload_plugins(plugins);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
unload_plugin(
|
||||
struct plugin_info *info)
|
||||
{
|
||||
dds_return_t result;
|
||||
assert(info);
|
||||
|
||||
if (info->lib_handle) {
|
||||
if (info->func_fini && info->context) {
|
||||
info->func_fini(info->context);
|
||||
}
|
||||
result = ddsrt_dlclose( info->lib_handle );
|
||||
if ( result != 0 ){
|
||||
printf( "Error occured while closing the library\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
unload_plugins(
|
||||
struct plugins_hdl *plugins)
|
||||
{
|
||||
assert (plugins);
|
||||
unload_plugin(&(plugins->plugin_ac));
|
||||
unload_plugin(&(plugins->plugin_auth));
|
||||
unload_plugin(&(plugins->plugin_crypto));
|
||||
ddsrt_free(plugins);
|
||||
}
|
||||
|
||||
static size_t
|
||||
regular_file_size(
|
||||
const char *filename)
|
||||
{
|
||||
size_t sz = 0;
|
||||
/* Provided? */
|
||||
if (filename) {
|
||||
/* Accessible? */
|
||||
#if _WIN32
|
||||
struct _stat stat_info;
|
||||
int ret = _stat( filename, &stat_info );
|
||||
#else
|
||||
struct stat stat_info;
|
||||
int ret = stat( filename, &stat_info );
|
||||
#endif
|
||||
if ( ret == 0 ) {
|
||||
/* Regular? */
|
||||
#ifdef WIN32
|
||||
if (stat_info.st_mode & _S_IFREG) {
|
||||
#else
|
||||
if (S_ISREG(stat_info.st_mode)) {
|
||||
#endif
|
||||
/* Yes, so get the size. */
|
||||
sz = ( size_t ) stat_info.st_size;
|
||||
}
|
||||
}
|
||||
}
|
||||
return sz;
|
||||
}
|
||||
|
||||
char *
|
||||
load_file_contents(
|
||||
const char *filename)
|
||||
{
|
||||
char *document = NULL;
|
||||
char *fname;
|
||||
size_t sz, r;
|
||||
FILE *fp;
|
||||
|
||||
assert(filename);
|
||||
|
||||
/* Get portable file name. */
|
||||
fname = DDS_Security_normalize_file( filename );
|
||||
if (fname) {
|
||||
/* Get size if it is a accessible regular file (no dir or link). */
|
||||
sz = regular_file_size(fname);
|
||||
if (sz > 0) {
|
||||
/* Open the actual file. */
|
||||
DDSRT_WARNING_MSVC_OFF(4996);
|
||||
fp = fopen(fname, "r");
|
||||
DDSRT_WARNING_MSVC_ON(4996);
|
||||
if (fp) {
|
||||
/* Read the content. */
|
||||
document = ddsrt_malloc(sz + 1);
|
||||
r = fread(document, 1, sz, fp);
|
||||
if (r == 0) {
|
||||
ddsrt_free(document);
|
||||
document = NULL;
|
||||
} else {
|
||||
document[r] = '\0';
|
||||
}
|
||||
(void)fclose(fp);
|
||||
}
|
||||
}
|
||||
ddsrt_free(fname);
|
||||
}
|
||||
|
||||
return document;
|
||||
}
|
34
src/security/builtin_plugins/tests/common/src/loader.h
Normal file
34
src/security/builtin_plugins/tests/common/src/loader.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _DBT_SECURITY_PLUGINS_LOADER_H_
|
||||
#define _DBT_SECURITY_PLUGINS_LOADER_H_
|
||||
|
||||
#include "dds/security/dds_security_api.h"
|
||||
|
||||
struct plugins_hdl;
|
||||
|
||||
struct plugins_hdl*
|
||||
load_plugins(
|
||||
dds_security_access_control **ac,
|
||||
dds_security_authentication **auth,
|
||||
dds_security_cryptography **crypto);
|
||||
|
||||
void
|
||||
unload_plugins(
|
||||
struct plugins_hdl *plugins);
|
||||
|
||||
char*
|
||||
load_file_contents(
|
||||
const char *filename);
|
||||
|
||||
#endif
|
17
src/security/builtin_plugins/tests/config_env.h.in
Normal file
17
src/security/builtin_plugins/tests/config_env.h.in
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
#ifndef CONFIG_ENV_H
|
||||
#define CONFIG_ENV_H
|
||||
|
||||
#define CONFIG_ENV_TESTS_DIR "@CUnit_builtin_plugins_tests_dir@"
|
||||
|
||||
#endif /* CONFIG_ENV_H */
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,22 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDkTCCAnmgAwIBAgIJAJvGJOEKNct1MA0GCSqGSIb3DQEBCwUAMF8xCzAJBgNV
|
||||
BAYTAk5MMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
|
||||
aWRnaXRzIFB0eSBMdGQxGDAWBgNVBAMMD0NIQU01MDAgcm9vdCBjYTAeFw0xODAy
|
||||
MTIxNTA1MDVaFw0yMDEyMDIxNTA1MDVaMF8xCzAJBgNVBAYTAk5MMRMwEQYDVQQI
|
||||
DApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQx
|
||||
GDAWBgNVBAMMD0NIQU01MDAgcm9vdCBjYTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
||||
ADCCAQoCggEBAM/dCO4QAcCduw0NMqShDpTvGT6DClTFAJE8ZfuPCHKqNkicRbyj
|
||||
sVXfF35Sdo6K92Ksz4G7i1RqJU2n8c7hg2EFUza0lIGgmTHV/DvFBcbAa0PpvdKS
|
||||
XoPtSNDh65/GO1R7oeSFRzapqsLMPUwOWi46dYvRnPabxs21xHxn56JeuG74bad5
|
||||
PMTBvA2SiiTYPBlHGJS78GPo3BPMjL0MzPoMmumO8NSVYI+MEDY1lC4KkyZVKqtV
|
||||
nIfaO/7adcM19xOAfAHkwhLGBC/bVAEqelev+GH/42xjNv532nM4/JVtBns+msR5
|
||||
DAYdtr6i82b7zhU1+lOOihv4lmQHoSnTya8CAwEAAaNQME4wHQYDVR0OBBYEFFYr
|
||||
0CpiwxgFcZnW6IQEhxGv/vwiMB8GA1UdIwQYMBaAFFYr0CpiwxgFcZnW6IQEhxGv
|
||||
/vwiMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAKbBt0ht72fdtxwm
|
||||
Kr0pOsKyDW0Rd5Ca5aDK4qAhDL0AD5+O6ShGYCnFNDGk3J5Yzawp8VoKrhDZZyUt
|
||||
z2b0jNucVapAvPMA4066QxeIfvFmWcS73l7vjjeUoKWmNNGWprTg3RLsacTorKuY
|
||||
ZRL7wsThfrhvg4B/OOIWKp5MEwIrUfnQzUca8getF2eyTt6QcMtE29AW5+01QTzj
|
||||
fxZgzkmJFYBE2K/TLMDBDd+bz/8XnmPrJ01VUntXiXenTGTcIbJerB6GYQojjvhy
|
||||
ZrOeuHTON1ndFiQkpeZA67ByZjkKVoJG3I8fwBjzcLE7u/QAQptVPjJXXcSpL7fA
|
||||
a1tOvqw=
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEKTCCAxGgAwIBAgIBATANBgkqhkiG9w0BAQsFADByMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGTAXBgNVBAMTEElkZW50
|
||||
aXR5IENBIFRlc3QxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlua3RlY2gu
|
||||
Y29tMB4XDTE4MDMxMjAwMDAwMFoXDTI3MDMxMTIzNTk1OVowcjELMAkGA1UEBhMC
|
||||
TkwxCzAJBgNVBAgTAk9WMRMwEQYDVQQKEwpBRExpbmsgSVNUMRkwFwYDVQQDExBJ
|
||||
ZGVudGl0eSBDQSBUZXN0MSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlzdC5hZGxpbmt0
|
||||
ZWNoLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANa/ENFfGVXg
|
||||
bPLTzBdDfiZQcp5dWZ//Pb8ErFOJu8uosVHFv8t69dgjHgNHB4OsjmjnR7GfKUZT
|
||||
0cMvWJnjsC7DDlBwFET9rj4k40n96bbVCH9I7+tNhsoqzc6Eu+5h4sk7VfNGTM2Z
|
||||
SyCd4GiSZRuA44rRbhXI7/LDpr4hY5J9ZDo5AM9ZyoLAoh774H3CZWD67S35XvUs
|
||||
72dzE6uKG/vxBbvZ7eW2GLO6ewa9UxlnLVMPfJdpkp/xYXwwcPW2+2YXCge1ujxs
|
||||
tjrOQJ5HUySh6DkE/kZpx8zwYWm9AaCrsvCIX1thsqgvKy+U5v1FS1L58eGc6s//
|
||||
9yMgNhU29R0CAwEAAaOByTCBxjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRNVUJN
|
||||
FzhJPReYT4QSx6dK53CXCTAfBgNVHSMEGDAWgBRNVUJNFzhJPReYT4QSx6dK53CX
|
||||
CTAPBgNVHQ8BAf8EBQMDB/+AMGUGA1UdJQEB/wRbMFkGCCsGAQUFBwMBBggrBgEF
|
||||
BQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkGCCsG
|
||||
AQUFBwMNBggrBgEFBQcDDgYHKwYBBQIDBTANBgkqhkiG9w0BAQsFAAOCAQEAcOLF
|
||||
ZYdJguj0uxeXB8v3xnUr1AWz9+gwg0URdfNLU2KvF2lsb/uznv6168b3/FcPgezN
|
||||
Ihl9GqB+RvGwgXS/1UelCGbQiIUdsNxk246P4uOGPIyW32RoJcYPWZcpY+cw11tQ
|
||||
NOnk994Y5/8ad1DmcxVLLqq5kwpXGWQufV1zOONq8B+mCvcVAmM4vkyF/de56Lwa
|
||||
sAMpk1p77uhaDnuq2lIR4q3QHX2wGctFid5Q375DRscFQteY01r/dtwBBrMn0wuL
|
||||
AMNx9ZGD+zAoOUaslpIlEQ+keAxk3jgGMWFMxF81YfhEnXzevSQXWpyek86XUyFL
|
||||
O9IAQi5pa15gXjSbUg==
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,28 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEtjCCA56gAwIBAgIBATANBgkqhkiG9w0BAQsFADByMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGTAXBgNVBAMTEElkZW50
|
||||
aXR5IENBIFRlc3QxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlua3RlY2gu
|
||||
Y29tMB4XDTE4MDYxMTAwMDAwMFoXDTI3MDYxMDIzNTk1OVowcjELMAkGA1UEBhMC
|
||||
TkwxCzAJBgNVBAgTAk9WMRMwEQYDVQQKEwpBRExpbmsgSVNUMRkwFwYDVQQDExBJ
|
||||
ZGVudGl0eSBDQSBUZXN0MSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlzdC5hZGxpbmt0
|
||||
ZWNoLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANRf3XKmM6O+
|
||||
WoYPNpOAdkGKKZHLJ8ZuPxVVBMX6oJAlcOmkhLzfkHSA+gl/OWaMOXIEtN512gyL
|
||||
YszBf1RImwVzRjJFwIxzGzVQ68jYNj+qBbsOt+IG+hs3wgVCLFkCh+J7hXUgvk8A
|
||||
eRM/SRrI42dQfcgKUAMNi4/iX6Vs+FV9pHB63L4PiLA9hfUE25sH6EsIC7icvGDJ
|
||||
6cGG94glVSHDI1NtXfsNHY+NGY/jYKtQZklqU3lew5I60aJIsea+Wk6PJiz4hyXv
|
||||
XVVmrcNeG1g4OEFgiSXZC2XknDw8t9+ELprGNvuJvTFxwPMAgLeF4IhEQC9dQY2W
|
||||
BRwUxtZBzukCAwEAAaOCAVUwggFRMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFER4
|
||||
R6N3MQ1Wl7gn+R8wwHloDCVZMB8GA1UdIwQYMBaAFER4R6N3MQ1Wl7gn+R8wwHlo
|
||||
DCVZMA8GA1UdDwEB/wQFAwMH/4Awge8GA1UdJQEB/wSB5DCB4QYIKwYBBQUHAwEG
|
||||
CCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMIBgorBgEEAYI3
|
||||
AgEVBgorBgEEAYI3AgEWBgorBgEEAYI3CgMBBgorBgEEAYI3CgMDBgorBgEEAYI3
|
||||
CgMEBglghkgBhvhCBAEGCysGAQQBgjcKAwQBBggrBgEFBQcDBQYIKwYBBQUHAwYG
|
||||
CCsGAQUFBwMHBggrBgEFBQgCAgYKKwYBBAGCNxQCAgYIKwYBBQUHAwkGCCsGAQUF
|
||||
BwMNBggrBgEFBQcDDgYHKwYBBQIDBTANBgkqhkiG9w0BAQsFAAOCAQEAwXuEWDG3
|
||||
aAyL+DsGr0B4YMLjHtx6FjzkJOpTtXQhkrtSMpD3Xytl7Wfz8lyWuTnbrk8F4gWO
|
||||
IkJR/NdMGW27SmeYU0z7QAGRDwtHX6kqqizQbCwf4F6P/2QftcLp1VrlsIlb0gyx
|
||||
gLjpGmn5TT7gj+ahW0iIRglOwhzCvkNu6agYpdGwVirSyLShy/Hq303DZSbVuktz
|
||||
5/PmZKpufnoGqURNnJqbV4TQipE0FiDmp2o+gVgJ+DVRhiCdfk68Xp7+TlmxCDfZ
|
||||
C3qb18qrwAZ4AL3T9/RlzfkXh4ME9V6wqa5Y6j7Vwx5Ef2OHL+mnMnoNSXDLRh6j
|
||||
45ky66su5dROpA==
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIENDCCAxygAwIBAgIBAjANBgkqhkiG9w0BAQsFADByMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGTAXBgNVBAMTEElkZW50
|
||||
aXR5IENBIFRlc3QxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlua3RlY2gu
|
||||
Y29tMB4XDTE4MDYxMzAwMDAwMFoXDTI3MDYxMDIzNTk1OVowfTELMAkGA1UEBhMC
|
||||
TkwxCzAJBgNVBAgTAk9WMRMwEQYDVQQKEwpBRExpbmsgSVNUMSQwIgYDVQQDExtJ
|
||||
ZGVudGl0eSBDQSBUZXN0IFdpdGggQ2hhaW4xJjAkBgkqhkiG9w0BCQEWF2luZm9A
|
||||
aXN0LmFkbGlua3RlY2guY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
||||
AQEA1r8Q0V8ZVeBs8tPMF0N+JlBynl1Zn/89vwSsU4m7y6ixUcW/y3r12CMeA0cH
|
||||
g6yOaOdHsZ8pRlPRwy9YmeOwLsMOUHAURP2uPiTjSf3pttUIf0jv602GyirNzoS7
|
||||
7mHiyTtV80ZMzZlLIJ3gaJJlG4DjitFuFcjv8sOmviFjkn1kOjkAz1nKgsCiHvvg
|
||||
fcJlYPrtLfle9SzvZ3MTq4ob+/EFu9nt5bYYs7p7Br1TGWctUw98l2mSn/FhfDBw
|
||||
9bb7ZhcKB7W6PGy2Os5AnkdTJKHoOQT+RmnHzPBhab0BoKuy8IhfW2GyqC8rL5Tm
|
||||
/UVLUvnx4Zzqz//3IyA2FTb1HQIDAQABo4HJMIHGMAwGA1UdEwQFMAMBAf8wHQYD
|
||||
VR0OBBYEFE1VQk0XOEk9F5hPhBLHp0rncJcJMB8GA1UdIwQYMBaAFER4R6N3MQ1W
|
||||
l7gn+R8wwHloDCVZMA8GA1UdDwEB/wQFAwMH/4AwZQYDVR0lAQH/BFswWQYIKwYB
|
||||
BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMIBggr
|
||||
BgEFBQcDCQYIKwYBBQUHAw0GCCsGAQUFBwMOBgcrBgEFAgMFMA0GCSqGSIb3DQEB
|
||||
CwUAA4IBAQCbl7ed4p66G6WquxO7ceZFvYKn3kDErjCfXHcqHxBnA2xTpoZCGj95
|
||||
Qpirqo6N4UcLX5sn3CmgyVk0dYvlti/53FJgZ9XQDNxBuEYWPkY7vO+Uo0WdYpGz
|
||||
ZDNIUQpiPMA7bHvwKldTIs77xxtnw9kbBU2k0xQyb2tdZNfD5YqSI1MeUtpEpNFW
|
||||
sbC8+mQ3clzWpjF8eHH1fFSAmlJ+z1Uqmtt2FK0vRz+MQcpydwvpMnfqGdcwhGPQ
|
||||
X4HZreLObjBA8KUEkUB3+rZXuELBgkk/c8/jRZl7QF5jJDLQCCLg7KoYBKN2GuTt
|
||||
/dzeSnP7VZm/nTL8wpCvKgSOwOGgklf2
|
||||
-----END CERTIFICATE-----
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEmTCCA4GgAwIBAgIIZ5gEIUFhO5wwDQYJKoZIhvcNAQELBQAwXzELMAkGA1UE
|
||||
BhMCTkwxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp
|
||||
ZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPQ0hBTTUwMCByb290IGNhMCAXDTE4MDIx
|
||||
MjE1MDUwMFoYDzIyMjIwMjIyMjIyMjAwWjBfMQswCQYDVQQGEwJOTDETMBEGA1UE
|
||||
CBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
|
||||
MRgwFgYDVQQDEw9DSEFNNTAwIHJvb3QgY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
||||
DwAwggEKAoIBAQC6Fa3TheL+UrdZCp9GhU/2WbneP2t/avUa3muwDttPxeI2XU9k
|
||||
ZjBR95mAXme4SPXHk5+YDN319AqIje3oKhzky/ngvKH2GkoJKYxWnuDBfMEHdViz
|
||||
2Q9/xso2ZvH50ukwWa0pfx2/EVV1wRxeQcRd/UVfq3KTJizG0M88mOYvGEAw3LFf
|
||||
zef7k1aCuOofQmBvLukUudcYpMzfyHFp7lQqU4CcrrR5RtmfiUfrWfdGLea2iPDB
|
||||
pJgN8ESOMwEHtOTEBDclYnH9L4t7CHQz+fXXS5IWFsDK9fCMQjnxDsDVeNrNzTYL
|
||||
FaZrMg9S6IUQCEsQWsnq5weS8omOpVLUm9klAgMBAAGjggFVMIIBUTAMBgNVHRME
|
||||
BTADAQH/MB0GA1UdDgQWBBQg2FZB/j8uWDVnJhjwXkX278znSTAfBgNVHSMEGDAW
|
||||
gBQg2FZB/j8uWDVnJhjwXkX278znSTAPBgNVHQ8BAf8EBQMDB/+AMIHvBgNVHSUB
|
||||
Af8EgeQwgeEGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwME
|
||||
BggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
|
||||
KwYBBAGCNwoDAwYKKwYBBAGCNwoDBAYJYIZIAYb4QgQBBgsrBgEEAYI3CgMEAQYI
|
||||
KwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUIAgIGCisGAQQBgjcU
|
||||
AgIGCCsGAQUFBwMJBggrBgEFBQcDDQYIKwYBBQUHAw4GBysGAQUCAwUwDQYJKoZI
|
||||
hvcNAQELBQADggEBAKHmwejWRwGE1wf1k2rG8SNRV/neGsZ6Qfqf6co3TpR/Wi1s
|
||||
iZDvSeT/rbqNBS7z34xnG88NIUwu00y78e8Mfon31ZZbK4Uo7fla9/D3ukdJqPQC
|
||||
LKdbKJjR2kH+KCukY/1rghjJ8/X+t2egBit0LCOdsFCl07Sfksb9kpGUIZSFcYYm
|
||||
geqhjhoNwxazzHiw+QWHC5HG9248JIizBmy1aymNWuMnPudhjHAnPcsIlqMVNq3t
|
||||
Rv9ap7S8JeCxHVRPJvJeCwXWvW3dW/v3xH52Yn/fqRblN1w9Fxz5NhopKx0gj/Jd
|
||||
sw2N4Fk4gaOWEolFpa0bwNw8nAx7moehZpowzfw=
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEKTCCAxGgAwIBAgIBATANBgkqhkiG9w0BAQsFADByMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGTAXBgNVBAMTEElkZW50
|
||||
aXR5IENBIFRlc3QxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlua3RlY2gu
|
||||
Y29tMB4XDTE4MDMxMjAwMDAwMFoXDTI3MDMxMTIzNTk1OVowcjELMAkGA1UEBhMC
|
||||
TkwxCzAJBgNVBAgTAk9WMRMwEQYDVQQKEwpBRExpbmsgSVNUMRkwFwYDVQQDExBJ
|
||||
ZGVudGl0eSBDQSBUZXN0MSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlzdC5hZGxpbmt0
|
||||
ZWNoLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANa/ENFfGVXg
|
||||
bPLTzBdDfiZQcp5dWZ//Pb8ErFOJu8uosVHFv8t69dgjHgNHB4OsjmjnR7GfKUZT
|
||||
0cMvWJnjsC7DDlBwFET9rj4k40n96bbVCH9I7+tNhsoqzc6Eu+5h4sk7VfNGTM2Z
|
||||
SyCd4GiSZRuA44rRbhXI7/LDpr4hY5J9ZDo5AM9ZyoLAoh774H3CZWD67S35XvUs
|
||||
72dzE6uKG/vxBbvZ7eW2GLO6ewa9UxlnLVMPfJdpkp/xYXwwcPW2+2YXCge1ujxs
|
||||
tjrOQJ5HUySh6DkE/kZpx8zwYWm9AaCrsvCIX1thsqgvKy+U5v1FS1L58eGc6s//
|
||||
9yMgNhU29R0CAwEAAaOByTCBxjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRNVUJN
|
||||
FzhJPReYT4QSx6dK53CXCTAfBgNVHSMEGDAWgBRNVUJNFzhJPReYT4QSx6dK53CX
|
||||
CTAPBgNVHQ8BAf8EBQMDB/+AMGUGA1UdJQEB/wRbMFkGCCsGAQUFBwMBBggrBgEF
|
||||
BQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkGCCsG
|
||||
AQUFBwMNBggrBgEFBQcDDgYHKwYBBQIDBTANBgkqhkiG9w0BAQsFAAOCAQEAcOLF
|
||||
ZYdJguj0uxeXB8v3xnUr1AWz9+gwg0URdfNLU2KvF2lsb/uznv6168b3/FcPgezN
|
||||
Ihl9GqB+RvGwgXS/1UelCGbQiIUdsNxk246P4uOGPIyW32RoJcYPWZcpY+cw11tQ
|
||||
NOnk994Y5/8ad1DmcxVLLqq5kwpXGWQufV1zOONq8B+mCvcVAmM4vkyF/de56Lwa
|
||||
sAMpk1p77uhaDnuq2lIR4q3QHX2wGctFid5Q375DRscFQteY01r/dtwBBrMn0wuL
|
||||
AMNx9ZGD+zAoOUaslpIlEQ+keAxk3jgGMWFMxF81YfhEnXzevSQXWpyek86XUyFL
|
||||
O9IAQi5pa15gXjSbUg==
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,28 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEtjCCA56gAwIBAgIBATANBgkqhkiG9w0BAQsFADByMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGTAXBgNVBAMTEElkZW50
|
||||
aXR5IENBIFRlc3QxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlua3RlY2gu
|
||||
Y29tMB4XDTE4MDYxMTAwMDAwMFoXDTI3MDYxMDIzNTk1OVowcjELMAkGA1UEBhMC
|
||||
TkwxCzAJBgNVBAgTAk9WMRMwEQYDVQQKEwpBRExpbmsgSVNUMRkwFwYDVQQDExBJ
|
||||
ZGVudGl0eSBDQSBUZXN0MSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlzdC5hZGxpbmt0
|
||||
ZWNoLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANRf3XKmM6O+
|
||||
WoYPNpOAdkGKKZHLJ8ZuPxVVBMX6oJAlcOmkhLzfkHSA+gl/OWaMOXIEtN512gyL
|
||||
YszBf1RImwVzRjJFwIxzGzVQ68jYNj+qBbsOt+IG+hs3wgVCLFkCh+J7hXUgvk8A
|
||||
eRM/SRrI42dQfcgKUAMNi4/iX6Vs+FV9pHB63L4PiLA9hfUE25sH6EsIC7icvGDJ
|
||||
6cGG94glVSHDI1NtXfsNHY+NGY/jYKtQZklqU3lew5I60aJIsea+Wk6PJiz4hyXv
|
||||
XVVmrcNeG1g4OEFgiSXZC2XknDw8t9+ELprGNvuJvTFxwPMAgLeF4IhEQC9dQY2W
|
||||
BRwUxtZBzukCAwEAAaOCAVUwggFRMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFER4
|
||||
R6N3MQ1Wl7gn+R8wwHloDCVZMB8GA1UdIwQYMBaAFER4R6N3MQ1Wl7gn+R8wwHlo
|
||||
DCVZMA8GA1UdDwEB/wQFAwMH/4Awge8GA1UdJQEB/wSB5DCB4QYIKwYBBQUHAwEG
|
||||
CCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMIBgorBgEEAYI3
|
||||
AgEVBgorBgEEAYI3AgEWBgorBgEEAYI3CgMBBgorBgEEAYI3CgMDBgorBgEEAYI3
|
||||
CgMEBglghkgBhvhCBAEGCysGAQQBgjcKAwQBBggrBgEFBQcDBQYIKwYBBQUHAwYG
|
||||
CCsGAQUFBwMHBggrBgEFBQgCAgYKKwYBBAGCNxQCAgYIKwYBBQUHAwkGCCsGAQUF
|
||||
BwMNBggrBgEFBQcDDgYHKwYBBQIDBTANBgkqhkiG9w0BAQsFAAOCAQEAwXuEWDG3
|
||||
aAyL+DsGr0B4YMLjHtx6FjzkJOpTtXQhkrtSMpD3Xytl7Wfz8lyWuTnbrk8F4gWO
|
||||
IkJR/NdMGW27SmeYU0z7QAGRDwtHX6kqqizQbCwf4F6P/2QftcLp1VrlsIlb0gyx
|
||||
gLjpGmn5TT7gj+ahW0iIRglOwhzCvkNu6agYpdGwVirSyLShy/Hq303DZSbVuktz
|
||||
5/PmZKpufnoGqURNnJqbV4TQipE0FiDmp2o+gVgJ+DVRhiCdfk68Xp7+TlmxCDfZ
|
||||
C3qb18qrwAZ4AL3T9/RlzfkXh4ME9V6wqa5Y6j7Vwx5Ef2OHL+mnMnoNSXDLRh6j
|
||||
45ky66su5dROpA==
|
||||
-----END CERTIFICATE-----
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,828 @@
|
|||
|
||||
|
||||
|
||||
|
||||
/* CUnit includes. */
|
||||
#include "dds/security/dds_security_api.h"
|
||||
#include "dds/security/core/dds_security_serialize.h"
|
||||
#include "dds/security/core/dds_security_utils.h"
|
||||
#include "dds/security/dds_security_api.h"
|
||||
#include "dds/ddsrt/heap.h"
|
||||
#include "dds/ddsrt/string.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "dds/ddsrt/environ.h"
|
||||
#include "CUnit/CUnit.h"
|
||||
#include "CUnit/Test.h"
|
||||
#include "assert.h"
|
||||
|
||||
|
||||
/* Test helper includes. */
|
||||
#include "common/src/loader.h"
|
||||
|
||||
/* Private header include */
|
||||
|
||||
#include <openssl/opensslv.h>
|
||||
|
||||
static const char * AUTH_PROTOCOL_CLASS_ID = "DDS:Auth:PKI-DH:1.0";
|
||||
|
||||
static const char * PROPERTY_IDENTITY_CA = "dds.sec.auth.identity_ca";
|
||||
static const char * PROPERTY_PRIVATE_KEY = "dds.sec.auth.private_key";
|
||||
static const char * PROPERTY_IDENTITY_CERT = "dds.sec.auth.identity_certificate";
|
||||
|
||||
static const char * PROPERTY_CERT_SUBJECT_NAME = "dds.cert.sn";
|
||||
static const char * PROPERTY_CERT_ALGORITHM = "dds.cert.algo";
|
||||
static const char * PROPERTY_CA_SUBJECT_NAME = "dds.ca.sn";
|
||||
static const char * PROPERTY_CA_ALGORITHM = "dds.ca.aglo";
|
||||
|
||||
static const char * SUBJECT_NAME_IDENTITY_CERT = "CN=CHAM-574 client,O=Some Company,ST=Some-State,C=NL";
|
||||
static const char * SUBJECT_NAME_IDENTITY_CA = "CN=CHAM-574 authority,O=Some Company,ST=Some-State,C=NL";
|
||||
|
||||
static const char * RSA_2048_ALGORITHM_NAME = "RSA-2048";
|
||||
|
||||
static const char * AUTH_REQUEST_TOKEN_CLASS_ID = "DDS:Auth:PKI-DH:1.0+AuthReq";
|
||||
static const char * AUTH_REQUEST_TOKEN_FUTURE_PROP_NAME = "future_challenge";
|
||||
|
||||
static const char * AUTH_HANDSHAKE_REQUEST_TOKEN_CLASS_ID = "DDS:Auth:PKI-DH:1.0+Req";
|
||||
|
||||
static const char * AUTH_DSIGN_ALGO_RSA_NAME = "RSASSA-PSS-SHA256";
|
||||
static const char * AUTH_KAGREE_ALGO_ECDH_NAME = "ECDH+prime256v1-CEUM";
|
||||
/* static const char * AUTH_KAGREE_ALGO_RSA_NAME = "DH+MODP-2048-256"; */
|
||||
|
||||
|
||||
|
||||
static const char *identity_certificate =
|
||||
"data:,-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIEQTCCAymgAwIBAgIINpuaAAnrQZIwDQYJKoZIhvcNAQELBQAwXzELMAkGA1UE\n"
|
||||
"BhMCTkwxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp\n"
|
||||
"ZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPQ0hBTTUwMCByb290IGNhMCAXDTE3MDIy\n"
|
||||
"MjIyMjIwMFoYDzIyMjIwMjIyMjIyMjAwWjBcMQswCQYDVQQGEwJOTDETMBEGA1UE\n"
|
||||
"CBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk\n"
|
||||
"MRUwEwYDVQQDEwxDSEFNNTAwIGNlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\n"
|
||||
"ggEKAoIBAQDCpVhivH/wBIyu74rvQncnSZqKyspN6CvD1pmV9wft5PHhVt9jV79v\n"
|
||||
"gSub5LADoRHAgFdv9duYgBr17Ob6uRrIY4B18CcrCjhQcC4gjx8y2jl9PeYm+qYD\n"
|
||||
"3o44FYBrBq0QCnrQgKsb/qX9Z+Mw/VUiw65x68W876LEHQQoEgT4kxSuagwBoVRk\n"
|
||||
"ePD6fYAKmT4XS3x+O0v+rHESTcsKF6yMadgp7h3eH1b8kJTzSx8JV9Zzq++mxjox\n"
|
||||
"qhbBVP5nDze2hhSIeCkCvSrx7efkgKS4AQXa5/Z44GiAu1TfXXUqdic9rxwD0edn\n"
|
||||
"ajNElnZe7sjok/0yuqvH+2hSqpNva/zpAgMBAAGjggEAMIH9MAwGA1UdDwQFAwMH\n"
|
||||
"/4AwgewGA1UdJQSB5DCB4QYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYI\n"
|
||||
"KwYBBQUHAwQGCCsGAQUFBwMIBgorBgEEAYI3AgEVBgorBgEEAYI3AgEWBgorBgEE\n"
|
||||
"AYI3CgMBBgorBgEEAYI3CgMDBgorBgEEAYI3CgMEBglghkgBhvhCBAEGCysGAQQB\n"
|
||||
"gjcKAwQBBggrBgEFBQcDBQYIKwYBBQUHAwYGCCsGAQUFBwMHBggrBgEFBQgCAgYK\n"
|
||||
"KwYBBAGCNxQCAgYIKwYBBQUHAwkGCCsGAQUFBwMNBggrBgEFBQcDDgYHKwYBBQID\n"
|
||||
"BTANBgkqhkiG9w0BAQsFAAOCAQEAawdHy0Xw7nTK2ltp91Ion6fJ7hqYuj///zr7\n"
|
||||
"Adt6uonpDh/xl3esuwcFimIJrJrHujnGkL0nLddRCikmnzuBMNDWS6yq0/Ckl/YG\n"
|
||||
"yjNr44dlX24wo+MVAgkj3/8CyWDZ3a8kBg9QT3bs2SqbjmhTrXN1DRyf9S5vJysE\n"
|
||||
"I7V1gTN66BeKL64hOrAlRVrEu8Ds6TWL6Q/YH+61ViZkoLTeSaPjH4nknaFr4C35\n"
|
||||
"iji0JhkyfRHRRVPHFnaj25AkxOrSV64qVKoTMjDl5fji5iMGtjm6iJ7q05ml/qDl\n"
|
||||
"nLotHXemZNvYhbwUmRzbt4Dls9EMH4VRbP85I94nM5TAvtHVNA==\n"
|
||||
"-----END CERTIFICATE-----\n";
|
||||
|
||||
|
||||
static const char *identity_ca =
|
||||
"data:,-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIEmTCCA4GgAwIBAgIIZ5gEIUFhO5wwDQYJKoZIhvcNAQELBQAwXzELMAkGA1UE\n"
|
||||
"BhMCTkwxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp\n"
|
||||
"ZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPQ0hBTTUwMCByb290IGNhMCAXDTE4MDIx\n"
|
||||
"MjE1MDUwMFoYDzIyMjIwMjIyMjIyMjAwWjBfMQswCQYDVQQGEwJOTDETMBEGA1UE\n"
|
||||
"CBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk\n"
|
||||
"MRgwFgYDVQQDEw9DSEFNNTAwIHJvb3QgY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n"
|
||||
"DwAwggEKAoIBAQC6Fa3TheL+UrdZCp9GhU/2WbneP2t/avUa3muwDttPxeI2XU9k\n"
|
||||
"ZjBR95mAXme4SPXHk5+YDN319AqIje3oKhzky/ngvKH2GkoJKYxWnuDBfMEHdViz\n"
|
||||
"2Q9/xso2ZvH50ukwWa0pfx2/EVV1wRxeQcRd/UVfq3KTJizG0M88mOYvGEAw3LFf\n"
|
||||
"zef7k1aCuOofQmBvLukUudcYpMzfyHFp7lQqU4CcrrR5RtmfiUfrWfdGLea2iPDB\n"
|
||||
"pJgN8ESOMwEHtOTEBDclYnH9L4t7CHQz+fXXS5IWFsDK9fCMQjnxDsDVeNrNzTYL\n"
|
||||
"FaZrMg9S6IUQCEsQWsnq5weS8omOpVLUm9klAgMBAAGjggFVMIIBUTAMBgNVHRME\n"
|
||||
"BTADAQH/MB0GA1UdDgQWBBQg2FZB/j8uWDVnJhjwXkX278znSTAfBgNVHSMEGDAW\n"
|
||||
"gBQg2FZB/j8uWDVnJhjwXkX278znSTAPBgNVHQ8BAf8EBQMDB/+AMIHvBgNVHSUB\n"
|
||||
"Af8EgeQwgeEGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwME\n"
|
||||
"BggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK\n"
|
||||
"KwYBBAGCNwoDAwYKKwYBBAGCNwoDBAYJYIZIAYb4QgQBBgsrBgEEAYI3CgMEAQYI\n"
|
||||
"KwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUIAgIGCisGAQQBgjcU\n"
|
||||
"AgIGCCsGAQUFBwMJBggrBgEFBQcDDQYIKwYBBQUHAw4GBysGAQUCAwUwDQYJKoZI\n"
|
||||
"hvcNAQELBQADggEBAKHmwejWRwGE1wf1k2rG8SNRV/neGsZ6Qfqf6co3TpR/Wi1s\n"
|
||||
"iZDvSeT/rbqNBS7z34xnG88NIUwu00y78e8Mfon31ZZbK4Uo7fla9/D3ukdJqPQC\n"
|
||||
"LKdbKJjR2kH+KCukY/1rghjJ8/X+t2egBit0LCOdsFCl07Sfksb9kpGUIZSFcYYm\n"
|
||||
"geqhjhoNwxazzHiw+QWHC5HG9248JIizBmy1aymNWuMnPudhjHAnPcsIlqMVNq3t\n"
|
||||
"Rv9ap7S8JeCxHVRPJvJeCwXWvW3dW/v3xH52Yn/fqRblN1w9Fxz5NhopKx0gj/Jd\n"
|
||||
"sw2N4Fk4gaOWEolFpa0bwNw8nAx7moehZpowzfw=\n"
|
||||
"-----END CERTIFICATE-----\n";
|
||||
|
||||
|
||||
static const char *private_key =
|
||||
"data:,-----BEGIN RSA PRIVATE KEY-----\n"
|
||||
"MIIEogIBAAKCAQEAwqVYYrx/8ASMru+K70J3J0maisrKTegrw9aZlfcH7eTx4Vbf\n"
|
||||
"Y1e/b4Erm+SwA6ERwIBXb/XbmIAa9ezm+rkayGOAdfAnKwo4UHAuII8fMto5fT3m\n"
|
||||
"JvqmA96OOBWAawatEAp60ICrG/6l/WfjMP1VIsOucevFvO+ixB0EKBIE+JMUrmoM\n"
|
||||
"AaFUZHjw+n2ACpk+F0t8fjtL/qxxEk3LChesjGnYKe4d3h9W/JCU80sfCVfWc6vv\n"
|
||||
"psY6MaoWwVT+Zw83toYUiHgpAr0q8e3n5ICkuAEF2uf2eOBogLtU3111KnYnPa8c\n"
|
||||
"A9HnZ2ozRJZ2Xu7I6JP9Mrqrx/toUqqTb2v86QIDAQABAoIBAC1q32DKkx+yMBFx\n"
|
||||
"m32QiLUGG6VfBC2BixS7MkMnzRXZYgcuehl4FBc0kLRjfB6cqsO8LqrVN1QyMBhK\n"
|
||||
"GutN3c38SbE7RChqzhEW2+yE+Mao3Nk4ZEecHLiyaYT0n25ZtHAVwep823BAzwJ+\n"
|
||||
"BykbM45VEpNKbG1VjSktjBa9faNyZiZAEJEjVyla+6R8N4kHV52LbZcLjvJv3IQ2\n"
|
||||
"iPYRrmMyI5C23qTni0vy7yJbAXBo3CqgSlwie9FARBWT7Puu7F4mF1O1c/SnTysw\n"
|
||||
"Tm3e5FzgfHipQbnRVn0w4rDprPMKmPxMnvf/Wkw0zVgNadp1Tc1I6Yj525DEQ07i\n"
|
||||
"2gIn/gECgYEA4jNnY1u2Eu7x3pAQF3dRO0x35boVtuq9iwQk7q+uaZaK4RJRr+0Y\n"
|
||||
"T68S3bPnfer6SHvcxtST89Bvs/j/Ky4SOaX037UYjFh6T7OIzPl+MzO1yb+VOBT6\n"
|
||||
"D6FVGEJGp8ZAITU1OfJPeTYViUeEC8tHFGoKUCk50FbB6jOf1oKtv/ECgYEA3EnB\n"
|
||||
"Y7kSbJJaUuj9ciFUL/pAno86Cim3VjegK1wKgEiyDb610bhoMErovPwfVJbtcttG\n"
|
||||
"eKJNuwizkRcVbj+vpjDvqqaP5eMxLl6/Nd4haPMJYzGo88Z8NJpwFRNF2KEWjOpQ\n"
|
||||
"2NEvoCeRtVulCJyka2Tpljzw8cOXkxhPOe2UhHkCgYBo3entj0QO7QXm56T+LAvV\n"
|
||||
"0PK45xdQEO3EuCwjGAFk5C0IgUSrqeCeeIzniZMltj1IQ1wsNbtNynEu3530t8wt\n"
|
||||
"O7oVyFBUKGSz9IjUdkpClJOPr6kPMfJoMqRPtdIpz+hFPPSrI6IikKdVWHloOlp+\n"
|
||||
"pVaYqTQrWT1XRY2xli3VEQKBgGySmZN6Cx+h/oywswIGdUT0VdcQhq2to+QFpJba\n"
|
||||
"VX6m1cM6hMip2Ag9U3qZ1SNPBBdBBfm9HQybHE3dj713/C2wHuAAGhpXIM1W+20k\n"
|
||||
"X1knuC/AsSH9aQhQOf/ZMOq1crTfZBuI9q0782/sjGmzMsKPySU4QhUWruVb7OiD\n"
|
||||
"NVkZAoGAEvihW7G+8/iOE40vGHyBqUeopAAWLciTAUIEwM/Oi3BYfNWNTWF/FWNc\n"
|
||||
"nMvCZPYigY8C1vO+1iT2Frtd3CIU+f01Q3fJNJoRLlEiKLNZUJRF48OKUqjKSmsi\n"
|
||||
"w6pucFO40z05YW7utApj4L82rZnOS0pd1tUI1yexqvj0i4ThJfk=\n"
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
|
||||
|
||||
|
||||
static struct plugins_hdl *plugins = NULL;
|
||||
static dds_security_authentication *auth = NULL;
|
||||
static DDS_Security_IdentityHandle local_identity_handle = DDS_SECURITY_HANDLE_NIL;
|
||||
static DDS_Security_IdentityHandle remote_identity_handle1 = DDS_SECURITY_HANDLE_NIL;
|
||||
static DDS_Security_IdentityHandle remote_identity_handle2 = DDS_SECURITY_HANDLE_NIL;
|
||||
static DDS_Security_AuthRequestMessageToken g_local_auth_request_token = DDS_SECURITY_TOKEN_INIT;
|
||||
static DDS_Security_AuthRequestMessageToken g_remote_auth_request_token = DDS_SECURITY_TOKEN_INIT;
|
||||
static const DDS_Security_BinaryProperty_t *challenge1 = NULL;
|
||||
static const DDS_Security_BinaryProperty_t *challenge2 = NULL;
|
||||
|
||||
|
||||
static void
|
||||
dds_security_property_init(
|
||||
DDS_Security_PropertySeq *seq,
|
||||
DDS_Security_unsigned_long size)
|
||||
{
|
||||
seq->_length = size;
|
||||
seq->_maximum = size;
|
||||
seq->_buffer = ddsrt_malloc(size * sizeof(DDS_Security_Property_t));
|
||||
memset(seq->_buffer, 0, size * sizeof(DDS_Security_Property_t));
|
||||
}
|
||||
|
||||
static void
|
||||
dds_security_property_deinit(
|
||||
DDS_Security_PropertySeq *seq)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < seq->_length; i++) {
|
||||
ddsrt_free(seq->_buffer[i].name);
|
||||
ddsrt_free(seq->_buffer[i].value);
|
||||
}
|
||||
ddsrt_free(seq->_buffer);
|
||||
}
|
||||
|
||||
static void
|
||||
reset_exception(
|
||||
DDS_Security_SecurityException *ex)
|
||||
{
|
||||
ex->minor_code = 0;
|
||||
ex->code = 0;
|
||||
ddsrt_free(ex->message);
|
||||
ex->message = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
initialize_identity_token(
|
||||
DDS_Security_IdentityToken *token,
|
||||
const char *certAlgo,
|
||||
const char *caAlgo)
|
||||
{
|
||||
memset(token, 0, sizeof(*token));
|
||||
|
||||
token->class_id = ddsrt_strdup(AUTH_PROTOCOL_CLASS_ID);
|
||||
token->properties._maximum = 4;
|
||||
token->properties._length = 4;
|
||||
token->properties._buffer = DDS_Security_PropertySeq_allocbuf(4);
|
||||
|
||||
token->properties._buffer[0].name = ddsrt_strdup(PROPERTY_CERT_SUBJECT_NAME);
|
||||
token->properties._buffer[0].value = ddsrt_strdup(SUBJECT_NAME_IDENTITY_CERT);
|
||||
token->properties._buffer[0].propagate = true;
|
||||
|
||||
token->properties._buffer[1].name = ddsrt_strdup(PROPERTY_CERT_ALGORITHM);
|
||||
token->properties._buffer[1].value = ddsrt_strdup(certAlgo);
|
||||
token->properties._buffer[1].propagate = true;
|
||||
|
||||
token->properties._buffer[2].name = ddsrt_strdup(PROPERTY_CA_SUBJECT_NAME);
|
||||
token->properties._buffer[2].value = ddsrt_strdup(SUBJECT_NAME_IDENTITY_CA);
|
||||
token->properties._buffer[2].propagate = true;
|
||||
|
||||
token->properties._buffer[3].name = ddsrt_strdup(PROPERTY_CA_ALGORITHM);
|
||||
token->properties._buffer[3].value = ddsrt_strdup(caAlgo);
|
||||
token->properties._buffer[3].propagate = true;
|
||||
}
|
||||
|
||||
static void
|
||||
fill_auth_request_token(
|
||||
DDS_Security_AuthRequestMessageToken *token)
|
||||
{
|
||||
uint32_t i;
|
||||
uint32_t len = 32;
|
||||
unsigned char *challenge;
|
||||
|
||||
challenge = ddsrt_malloc(len);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
challenge[i] = (unsigned char)(0xFF - i);
|
||||
}
|
||||
|
||||
memset(token, 0, sizeof(*token));
|
||||
|
||||
token->class_id = ddsrt_strdup(AUTH_REQUEST_TOKEN_CLASS_ID);
|
||||
token->binary_properties._maximum = 1;
|
||||
token->binary_properties._length = 1;
|
||||
token->binary_properties._buffer = DDS_Security_BinaryPropertySeq_allocbuf(1);
|
||||
token->binary_properties._buffer->name = ddsrt_strdup(AUTH_REQUEST_TOKEN_FUTURE_PROP_NAME);
|
||||
|
||||
token->binary_properties._buffer->value._maximum = len;
|
||||
token->binary_properties._buffer->value._length = len;
|
||||
token->binary_properties._buffer->value._buffer = challenge;
|
||||
}
|
||||
|
||||
static const DDS_Security_BinaryProperty_t *
|
||||
find_binary_property(
|
||||
DDS_Security_DataHolder *token,
|
||||
const char *name)
|
||||
{
|
||||
const DDS_Security_BinaryProperty_t *result = NULL;
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < token->binary_properties._length && !result; i++) {
|
||||
if (token->binary_properties._buffer[i].name && (strcmp(token->binary_properties._buffer[i].name, name) == 0)) {
|
||||
result = &token->binary_properties._buffer[i];
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
deinitialize_identity_token(
|
||||
DDS_Security_IdentityToken *token)
|
||||
{
|
||||
DDS_Security_DataHolder_deinit(token);
|
||||
}
|
||||
|
||||
static int
|
||||
validate_local_identity(void)
|
||||
{
|
||||
int res = 0;
|
||||
DDS_Security_ValidationResult_t result;
|
||||
DDS_Security_DomainId domain_id = 0;
|
||||
DDS_Security_Qos participant_qos;
|
||||
DDS_Security_GUID_t candidate_participant_guid;
|
||||
DDS_Security_SecurityException exception = {NULL, 0, 0};
|
||||
DDS_Security_GUID_t local_participant_guid;
|
||||
DDS_Security_GuidPrefix_t prefix = {0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb};
|
||||
DDS_Security_EntityId_t entityId = {{0xb0,0xb1,0xb2},0x1};
|
||||
|
||||
memset(&local_participant_guid, 0, sizeof(local_participant_guid));
|
||||
memcpy(&candidate_participant_guid.prefix, &prefix, sizeof(prefix));
|
||||
memcpy(&candidate_participant_guid.entityId, &entityId, sizeof(entityId));
|
||||
|
||||
memset(&participant_qos, 0, sizeof(participant_qos));
|
||||
dds_security_property_init(&participant_qos.property.value, 3);
|
||||
participant_qos.property.value._buffer[0].name = ddsrt_strdup(PROPERTY_IDENTITY_CERT);
|
||||
participant_qos.property.value._buffer[0].value = ddsrt_strdup(identity_certificate);
|
||||
participant_qos.property.value._buffer[1].name = ddsrt_strdup(PROPERTY_IDENTITY_CA);
|
||||
participant_qos.property.value._buffer[1].value = ddsrt_strdup(identity_ca);
|
||||
participant_qos.property.value._buffer[2].name = ddsrt_strdup(PROPERTY_PRIVATE_KEY);
|
||||
participant_qos.property.value._buffer[2].value = ddsrt_strdup(private_key);
|
||||
|
||||
/* Now call the function. */
|
||||
result = auth->validate_local_identity(
|
||||
auth,
|
||||
&local_identity_handle,
|
||||
&local_participant_guid,
|
||||
domain_id,
|
||||
&participant_qos,
|
||||
&candidate_participant_guid,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_OK) {
|
||||
res = -1;
|
||||
printf("validate_local_identity_failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
|
||||
dds_security_property_deinit(&participant_qos.property.value);
|
||||
reset_exception(&exception);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static void
|
||||
release_local_identity(void)
|
||||
{
|
||||
DDS_Security_SecurityException exception = {NULL, 0, 0};
|
||||
DDS_Security_boolean success;
|
||||
|
||||
if (local_identity_handle != DDS_SECURITY_HANDLE_NIL) {
|
||||
success = auth->return_identity_handle(auth, local_identity_handle, &exception);
|
||||
if (!success) {
|
||||
printf("return_identity_handle failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
reset_exception(&exception);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
validate_remote_identities (void)
|
||||
{
|
||||
int res = 0;
|
||||
DDS_Security_ValidationResult_t result;
|
||||
DDS_Security_IdentityToken remote_identity_token;
|
||||
static DDS_Security_AuthRequestMessageToken local_auth_request_token = DDS_SECURITY_TOKEN_INIT;
|
||||
DDS_Security_GUID_t remote_participant_guid1;
|
||||
DDS_Security_GUID_t remote_participant_guid2;
|
||||
DDS_Security_SecurityException exception = {NULL, 0, 0};
|
||||
DDS_Security_GuidPrefix_t prefix1 = {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab};
|
||||
DDS_Security_GuidPrefix_t prefix2 = {0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb};
|
||||
DDS_Security_EntityId_t entityId = {{0xb0,0xb1,0xb2},0x1};
|
||||
|
||||
memcpy(&remote_participant_guid1.prefix, &prefix1, sizeof(prefix1));
|
||||
memcpy(&remote_participant_guid1.entityId, &entityId, sizeof(entityId));
|
||||
memcpy(&remote_participant_guid2.prefix, &prefix2, sizeof(prefix2));
|
||||
memcpy(&remote_participant_guid2.entityId, &entityId, sizeof(entityId));
|
||||
|
||||
if (local_identity_handle == DDS_SECURITY_HANDLE_NIL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
initialize_identity_token(&remote_identity_token, RSA_2048_ALGORITHM_NAME, RSA_2048_ALGORITHM_NAME);
|
||||
|
||||
result = auth->validate_remote_identity(
|
||||
auth,
|
||||
&remote_identity_handle1,
|
||||
&g_local_auth_request_token,
|
||||
NULL,
|
||||
local_identity_handle,
|
||||
&remote_identity_token,
|
||||
&remote_participant_guid1,
|
||||
&exception);
|
||||
|
||||
if ((result != DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_REQUEST) &&
|
||||
(result != DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_MESSAGE)) {
|
||||
printf("validate_remote_identity_failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
|
||||
reset_exception(&exception);
|
||||
|
||||
fill_auth_request_token(&g_remote_auth_request_token);
|
||||
|
||||
result = auth->validate_remote_identity(
|
||||
auth,
|
||||
&remote_identity_handle2,
|
||||
&local_auth_request_token,
|
||||
&g_remote_auth_request_token,
|
||||
local_identity_handle,
|
||||
&remote_identity_token,
|
||||
&remote_participant_guid2,
|
||||
&exception);
|
||||
|
||||
if ((result != DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_REQUEST) &&
|
||||
(result != DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_MESSAGE)) {
|
||||
printf("validate_remote_identity_failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
|
||||
reset_exception(&exception);
|
||||
|
||||
deinitialize_identity_token(&remote_identity_token);
|
||||
DDS_Security_DataHolder_deinit(&local_auth_request_token);
|
||||
|
||||
challenge1 = find_binary_property(&g_local_auth_request_token, AUTH_REQUEST_TOKEN_FUTURE_PROP_NAME);
|
||||
challenge2 = find_binary_property(&g_remote_auth_request_token, AUTH_REQUEST_TOKEN_FUTURE_PROP_NAME);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static void
|
||||
release_remote_identities(void)
|
||||
{
|
||||
DDS_Security_SecurityException exception = {NULL, 0, 0};
|
||||
DDS_Security_boolean success;
|
||||
|
||||
if (remote_identity_handle1 != DDS_SECURITY_HANDLE_NIL) {
|
||||
success = auth->return_identity_handle(auth, remote_identity_handle1, &exception);
|
||||
if (!success) {
|
||||
printf("return_identity_handle failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
reset_exception(&exception);
|
||||
}
|
||||
if (remote_identity_handle2 != DDS_SECURITY_HANDLE_NIL) {
|
||||
success = auth->return_identity_handle(auth, remote_identity_handle2, &exception);
|
||||
if (!success) {
|
||||
printf("return_identity_handle failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
reset_exception(&exception);
|
||||
}
|
||||
|
||||
DDS_Security_DataHolder_deinit(&g_local_auth_request_token);
|
||||
DDS_Security_DataHolder_deinit(&g_remote_auth_request_token);
|
||||
}
|
||||
|
||||
static void
|
||||
fill_local_participant_data(
|
||||
DDS_Security_OctetSeq *pdata,
|
||||
uint32_t length)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
pdata->_length = pdata->_maximum = length;
|
||||
pdata->_buffer = ddsrt_malloc(length);
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
pdata->_buffer[i] = (unsigned char)(i % 256);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
release_local_participant_data(
|
||||
DDS_Security_OctetSeq *pdata)
|
||||
{
|
||||
if (pdata) {
|
||||
ddsrt_free(pdata->_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
CU_Init(ddssec_builtin_validate_begin_handshake_request)
|
||||
{
|
||||
int res = 0;
|
||||
|
||||
/* Only need the authentication plugin. */
|
||||
plugins = load_plugins(NULL /* Access Control */,
|
||||
&auth /* Authentication */,
|
||||
NULL /* Cryptograpy */);
|
||||
if (plugins) {
|
||||
res = validate_local_identity();
|
||||
if (res >= 0) {
|
||||
res = validate_remote_identities();
|
||||
}
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
CU_Clean(ddssec_builtin_validate_begin_handshake_request)
|
||||
{
|
||||
release_local_identity();
|
||||
release_remote_identities();
|
||||
unload_plugins(plugins);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool
|
||||
compare_octet_seq(
|
||||
const DDS_Security_OctetSeq *seq1,
|
||||
const DDS_Security_OctetSeq *seq2)
|
||||
{
|
||||
int r;
|
||||
if (seq1 && seq2) {
|
||||
r = (int)(seq2->_length - seq1->_length);
|
||||
if (r == 0) {
|
||||
r = memcmp(seq1->_buffer, seq2->_buffer, seq1->_length);
|
||||
}
|
||||
} else if (seq1 == seq2) {
|
||||
r = 0;
|
||||
} else {
|
||||
r = (seq2 > seq1) ? 1 : -1;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
static bool
|
||||
valid_c_id_property(
|
||||
const char *certificate,
|
||||
const DDS_Security_OctetSeq *value)
|
||||
{
|
||||
if (value->_length == 0) {
|
||||
CU_FAIL("c.id has no value");
|
||||
return false;
|
||||
}
|
||||
if (strncmp(certificate, (const char *)value->_buffer, value->_length) != 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
valid_string_value(
|
||||
const char *expected,
|
||||
const DDS_Security_OctetSeq *value)
|
||||
{
|
||||
size_t len = strlen(expected) + 1;
|
||||
|
||||
if (strncmp(expected, (const char *)value->_buffer, len) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static bool
|
||||
validate_handshake_token(
|
||||
DDS_Security_HandshakeMessageToken *token,
|
||||
const DDS_Security_OctetSeq *challenge)
|
||||
{
|
||||
const DDS_Security_BinaryProperty_t *property;
|
||||
|
||||
if (!token->class_id || strcmp(token->class_id, AUTH_HANDSHAKE_REQUEST_TOKEN_CLASS_ID) != 0) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect class_id");
|
||||
} else if ((property = find_binary_property(token, "c.id")) == NULL) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'c.id' not found");
|
||||
} else if (!valid_c_id_property(&identity_certificate[6], &property->value)) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'c.id' value is invalid");
|
||||
} else if ((property = find_binary_property(token, "c.pdata")) == NULL) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'c.pdata' not found");
|
||||
} else if ((property = find_binary_property(token, "c.dsign_algo")) == NULL) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'c.dsign_algo' not found");
|
||||
} else if (!valid_string_value(AUTH_DSIGN_ALGO_RSA_NAME, &property->value)) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'c.dsign_algo' incorrect value");
|
||||
} else if ((property = find_binary_property(token, "c.kagree_algo")) == NULL) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'c.kagree_algo' not found");
|
||||
} else if (!valid_string_value(AUTH_KAGREE_ALGO_ECDH_NAME, &property->value)) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'c.kagree_algo' incorrect value");
|
||||
} else if ((property = find_binary_property(token, "hash_c1")) == NULL) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'hash_c1' not found");
|
||||
} else if ((property = find_binary_property(token, "dh1")) == NULL) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'dh1' not found");
|
||||
} else if ((property = find_binary_property(token, "challenge1")) == NULL) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'challenge1' not found");
|
||||
} else if (challenge && compare_octet_seq(challenge, &property->value) != 0) {
|
||||
CU_FAIL("HandshakeMessageToken incorrect property 'challenge1' incorrect value");
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
CU_Test(ddssec_builtin_validate_begin_handshake_request,happy_day_challenge)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result;
|
||||
DDS_Security_HandshakeHandle handshake_handle;
|
||||
DDS_Security_HandshakeMessageToken handshake_token;
|
||||
DDS_Security_SecurityException exception = {NULL, 0, 0};
|
||||
DDS_Security_OctetSeq local_participant_data;
|
||||
DDS_Security_boolean success;
|
||||
|
||||
CU_ASSERT_FATAL (auth != NULL);
|
||||
CU_ASSERT_FATAL (local_identity_handle != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (remote_identity_handle1 != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (remote_identity_handle2 != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (auth->begin_handshake_request != NULL);
|
||||
|
||||
fill_local_participant_data(&local_participant_data, 82);
|
||||
|
||||
result = auth->begin_handshake_request(
|
||||
auth,
|
||||
&handshake_handle,
|
||||
&handshake_token,
|
||||
local_identity_handle,
|
||||
remote_identity_handle2,
|
||||
&local_participant_data,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_MESSAGE) {
|
||||
printf("begin_handshake_request failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
|
||||
CU_ASSERT_FATAL(result == DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_MESSAGE);
|
||||
CU_ASSERT(handshake_handle != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT(validate_handshake_token(&handshake_token, NULL));
|
||||
|
||||
reset_exception(&exception);
|
||||
|
||||
release_local_participant_data(&local_participant_data);
|
||||
|
||||
success= auth->return_handshake_handle(auth, handshake_handle, &exception);
|
||||
CU_ASSERT_TRUE (success);
|
||||
|
||||
if (!success) {
|
||||
printf("return_handshake_handle failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
reset_exception(&exception);
|
||||
|
||||
DDS_Security_DataHolder_deinit(&handshake_token);
|
||||
}
|
||||
|
||||
CU_Test(ddssec_builtin_validate_begin_handshake_request,happy_day_future_challenge)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result;
|
||||
DDS_Security_HandshakeHandle handshake_handle;
|
||||
DDS_Security_HandshakeMessageToken handshake_token;
|
||||
DDS_Security_SecurityException exception = {NULL, 0, 0};
|
||||
DDS_Security_OctetSeq local_participant_data;
|
||||
DDS_Security_boolean success;
|
||||
|
||||
CU_ASSERT_FATAL (auth != NULL);
|
||||
CU_ASSERT_FATAL (local_identity_handle != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (remote_identity_handle1 != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (remote_identity_handle2 != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (auth->begin_handshake_request != NULL);
|
||||
|
||||
fill_local_participant_data(&local_participant_data, 82);
|
||||
|
||||
result = auth->begin_handshake_request(
|
||||
auth,
|
||||
&handshake_handle,
|
||||
&handshake_token,
|
||||
local_identity_handle,
|
||||
remote_identity_handle1,
|
||||
&local_participant_data,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_MESSAGE) {
|
||||
printf("begin_handshake_request failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
|
||||
CU_ASSERT_FATAL(result == DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_MESSAGE);
|
||||
CU_ASSERT(handshake_handle != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT(validate_handshake_token(&handshake_token, &challenge1->value));
|
||||
|
||||
reset_exception(&exception);
|
||||
|
||||
release_local_participant_data(&local_participant_data);
|
||||
|
||||
success = auth->return_handshake_handle(auth, handshake_handle, &exception);
|
||||
CU_ASSERT_TRUE (success);
|
||||
|
||||
if (!success) {
|
||||
printf("return_handshake_handle failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
reset_exception(&exception);
|
||||
|
||||
DDS_Security_DataHolder_deinit(&handshake_token);
|
||||
}
|
||||
|
||||
|
||||
CU_Test(ddssec_builtin_validate_begin_handshake_request,invalid_arguments)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result;
|
||||
DDS_Security_HandshakeHandle handshake_handle;
|
||||
DDS_Security_HandshakeMessageToken handshake_token;
|
||||
DDS_Security_SecurityException exception = {NULL, 0, 0};
|
||||
DDS_Security_OctetSeq local_participant_data;
|
||||
|
||||
CU_ASSERT_FATAL (auth != NULL);
|
||||
CU_ASSERT_FATAL (local_identity_handle != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (remote_identity_handle1 != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (remote_identity_handle2 != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (auth->begin_handshake_request != NULL);
|
||||
|
||||
fill_local_participant_data(&local_participant_data, 82);
|
||||
|
||||
result = auth->begin_handshake_request(
|
||||
auth,
|
||||
NULL,
|
||||
&handshake_token,
|
||||
local_identity_handle,
|
||||
remote_identity_handle1,
|
||||
&local_participant_data,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_OK) {
|
||||
printf("validate_local_identity_failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
CU_ASSERT (result == DDS_SECURITY_VALIDATION_FAILED);
|
||||
CU_ASSERT (exception.minor_code != 0);
|
||||
CU_ASSERT (exception.message != NULL);
|
||||
reset_exception(&exception);
|
||||
|
||||
result = auth->begin_handshake_request(
|
||||
auth,
|
||||
&handshake_handle,
|
||||
NULL,
|
||||
local_identity_handle,
|
||||
remote_identity_handle1,
|
||||
&local_participant_data,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_OK) {
|
||||
printf("validate_local_identity_failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
CU_ASSERT (result == DDS_SECURITY_VALIDATION_FAILED);
|
||||
CU_ASSERT (exception.minor_code != 0);
|
||||
CU_ASSERT (exception.message != NULL);
|
||||
reset_exception(&exception);
|
||||
|
||||
result = auth->begin_handshake_request(
|
||||
auth,
|
||||
&handshake_handle,
|
||||
&handshake_token,
|
||||
0x1234598,
|
||||
remote_identity_handle1,
|
||||
&local_participant_data,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_OK) {
|
||||
printf("validate_local_identity_failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
CU_ASSERT (result == DDS_SECURITY_VALIDATION_FAILED);
|
||||
CU_ASSERT (exception.minor_code != 0);
|
||||
CU_ASSERT (exception.message != NULL);
|
||||
reset_exception(&exception);
|
||||
|
||||
result = auth->begin_handshake_request(
|
||||
auth,
|
||||
&handshake_handle,
|
||||
&handshake_token,
|
||||
local_identity_handle,
|
||||
0x1234598,
|
||||
&local_participant_data,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_OK) {
|
||||
printf("validate_local_identity_failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
CU_ASSERT (result == DDS_SECURITY_VALIDATION_FAILED);
|
||||
CU_ASSERT (exception.minor_code != 0);
|
||||
CU_ASSERT (exception.message != NULL);
|
||||
reset_exception(&exception);
|
||||
|
||||
result = auth->begin_handshake_request(
|
||||
auth,
|
||||
&handshake_handle,
|
||||
&handshake_token,
|
||||
local_identity_handle,
|
||||
remote_identity_handle1,
|
||||
NULL,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_OK) {
|
||||
printf("validate_local_identity_failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
CU_ASSERT (result == DDS_SECURITY_VALIDATION_FAILED);
|
||||
CU_ASSERT (exception.minor_code != 0);
|
||||
CU_ASSERT (exception.message != NULL);
|
||||
reset_exception(&exception);
|
||||
|
||||
release_local_participant_data(&local_participant_data);
|
||||
}
|
||||
|
||||
CU_Test(ddssec_builtin_validate_begin_handshake_request,return_handle)
|
||||
{
|
||||
DDS_Security_ValidationResult_t result;
|
||||
DDS_Security_HandshakeHandle handshake_handle;
|
||||
DDS_Security_HandshakeMessageToken handshake_token;
|
||||
DDS_Security_SecurityException exception = {NULL, 0, 0};
|
||||
DDS_Security_OctetSeq local_participant_data;
|
||||
DDS_Security_boolean success;
|
||||
|
||||
CU_ASSERT_FATAL (auth != NULL);
|
||||
CU_ASSERT_FATAL (local_identity_handle != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (remote_identity_handle1 != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (remote_identity_handle2 != DDS_SECURITY_HANDLE_NIL);
|
||||
CU_ASSERT_FATAL (auth->begin_handshake_request != NULL);
|
||||
|
||||
fill_local_participant_data(&local_participant_data, 82);
|
||||
|
||||
result = auth->begin_handshake_request(
|
||||
auth,
|
||||
&handshake_handle,
|
||||
&handshake_token,
|
||||
local_identity_handle,
|
||||
remote_identity_handle2,
|
||||
&local_participant_data,
|
||||
&exception);
|
||||
|
||||
if (result != DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_MESSAGE) {
|
||||
printf("begin_handshake_request failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
|
||||
CU_ASSERT_FATAL (result == DDS_SECURITY_VALIDATION_PENDING_HANDSHAKE_MESSAGE);
|
||||
CU_ASSERT (handshake_handle != DDS_SECURITY_HANDLE_NIL);
|
||||
|
||||
reset_exception(&exception);
|
||||
|
||||
release_local_participant_data(&local_participant_data);
|
||||
|
||||
success = auth->return_handshake_handle(auth, handshake_handle, &exception);
|
||||
CU_ASSERT_TRUE (success);
|
||||
|
||||
if (!success) {
|
||||
printf("return_handshake_handle failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
reset_exception(&exception);
|
||||
|
||||
success = auth->return_handshake_handle(auth, handshake_handle, &exception);
|
||||
CU_ASSERT_FALSE (success);
|
||||
CU_ASSERT (exception.minor_code != 0);
|
||||
CU_ASSERT (exception.message != NULL);
|
||||
|
||||
if (!success) {
|
||||
printf("return_handshake_handle failed: %s\n", exception.message ? exception.message : "Error message missing");
|
||||
}
|
||||
reset_exception(&exception);
|
||||
|
||||
DDS_Security_DataHolder_deinit(&handshake_token);
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEJTCCAw2gAwIBAgIBFzANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGjAYBgNVBAMTEUlkZW50
|
||||
aXR5IENBIFRlc3QyMSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlzdC5hZGxpbmt0ZWNo
|
||||
LmNvbTAeFw0xODA3MjAwMDAwMDBaFw0yNzA3MTkyMzU5NTlaMG0xCzAJBgNVBAYT
|
||||
Ak5MMQswCQYDVQQIEwJPVjETMBEGA1UEChMKQURMaW5rIElTVDEUMBIGA1UEAxML
|
||||
QWxpY2UgVGVzdDIxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlua3RlY2gu
|
||||
Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Fb60RkFrDsRAIRf
|
||||
LMf2fsiRnw9Agp7yEbUsA4Zg4X+hRhBkk78fFtagLisWo4LbT4DqKzqQXCvVnOn9
|
||||
a6uT0KsVejk2iaLoBy0fotQznudio3rzDpTfzP9eRDFVj8RJnl3JJ8P1DULxH7N0
|
||||
TyDBuKZ1ibBfuKjPffqeCEzYKgAc8NG2FB4m6mXzHhXuKw6W2v0IbHz6KYldsavf
|
||||
04rq7ztw0t67bexSQ4gLSVJEwiohAregm0dLvQnap5xd2qn0yETteTL8Y+Ujym1D
|
||||
WAnwDdwA6+0j2a0wkyzOzYQpZMt95NyZ8kcoqEqO8KAN2HclqfjHlg9iDscbof5x
|
||||
45SQwwIDAQABo4HJMIHGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFL66FT0vnlFE
|
||||
+PKrtV+KhJoLsCOWMB8GA1UdIwQYMBaAFIFGyWkPWvNkBD2SCYj9H+NfnlOLMA8G
|
||||
A1UdDwEB/wQFAwMH/4AwZQYDVR0lAQH/BFswWQYIKwYBBQUHAwEGCCsGAQUFBwMC
|
||||
BggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMIBggrBgEFBQcDCQYIKwYBBQUH
|
||||
Aw0GCCsGAQUFBwMOBgcrBgEFAgMFMA0GCSqGSIb3DQEBCwUAA4IBAQCsBINpBXSp
|
||||
Xe3f5MMObeUXE2VhWZWIjMdDQRFDDjq6u1YR7rbffsCReiCX5zviU2dtVV8VN3MQ
|
||||
k7wp8qEDKwP1ToMIwZGwT4Hfwei1eueJ1vuotgiGe0Gm3otXlGsb0C5otnsu63MM
|
||||
OeFgkpZde3VpIqK9EmhgjWOD8TXc8Me7zBlYSEIaXkkwP0jAKRf5vFgz0WfE5ITx
|
||||
SDKUO0OrcN789flO/OKLAHZ4cqNcxNPkMz7h9VBSgRRRk115HEa8Fe46nl1YpwRG
|
||||
0urHlyAKoUV+J+I3Qy4+SwIDwix978hgGN3bKVyv9q0yAQRzpZ54EJOj4C7lNEpB
|
||||
roGVpY4yYP/B
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEJDCCAwygAwIBAgIBAzANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxJDAiBgNVBAMTG0lkZW50
|
||||
aXR5IENBIFRlc3QgV2l0aCBDaGFpbjEmMCQGCSqGSIb3DQEJARYXaW5mb0Bpc3Qu
|
||||
YWRsaW5rdGVjaC5jb20wHhcNMTgwNjEzMDAwMDAwWhcNMjcwNjEwMjM1OTU5WjBw
|
||||
MQswCQYDVQQGEwJOTDELMAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1Qx
|
||||
FzAVBgNVBAMTDkJvYiBDaGFpbiBUZXN0MSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlz
|
||||
dC5hZGxpbmt0ZWNoLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
||||
AMHm+qG5afCHFdmp98+Z+POB7vD3WhfghKVugh8FenewuPaaotKxiGAE0kCf8WXU
|
||||
5l4XDR3iBWJsGDHll1yOyL4KW9grwfnfiJMl82uIzKGDiRJbFkXVOLF/DcVLsuqM
|
||||
oRjlk09+nlrg/7xS96itgm6yueW/UOIXpo+ElCHwnrYnpuHHrYM0s7t1ls3QFSyd
|
||||
a3INx+LkM6N/b+veVJF95yfe4GvVBhFpLkWtX4xKgZyMjczvmZ6LVNNSnthPhlZF
|
||||
HmspQyqXrTnGyax3qyoloqh9ibDvAK5pUnzqlv/Dyyt110q3bXFR5A0wqfj0fqtp
|
||||
7Mw4TdTkFQy1n4/Y4EuT8I8CAwEAAaOBuzCBuDAdBgNVHQ4EFgQUQpxLPHT5o/GQ
|
||||
RwdBw2scINXnWlUwHwYDVR0jBBgwFoAUTVVCTRc4ST0XmE+EEsenSudwlwkwDwYD
|
||||
VR0PAQH/BAUDAwf/gDBlBgNVHSUBAf8EWzBZBggrBgEFBQcDAQYIKwYBBQUHAwIG
|
||||
CCsGAQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwgGCCsGAQUFBwMJBggrBgEFBQcD
|
||||
DQYIKwYBBQUHAw4GBysGAQUCAwUwDQYJKoZIhvcNAQELBQADggEBAJwd60WigqbB
|
||||
/6CT0ekvXZdvIV5IaIKiy6KYU0/0ebPVXn0YKp9LQTE6lYCr6hZUcEjBfkFBZhAy
|
||||
KJJOb2sUXAnYqnX/mIipiNb7oHsCHxVCKAwEcmxsS3tGl2CXgpKL8EQQFKJgSrC/
|
||||
uzhf2QESQ0T5Mgni1jXXGf6SAwFAjk+mAM9bMdrtLOX39e5aKrgpZOHmdFke+m/K
|
||||
upxP/M0/omTNNQaSfWDmfDvpdsRD9+mFG12Kzgpue2jut1qeICvSmcQsu2OBYG/Q
|
||||
ZXMx8e8azoX0KB+njf826UcVgDkDmfwN9taOU2lFsmZAvYhpIslNwtH/Htu3zJWO
|
||||
vQxyIh+kxFQ=
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEKzCCAxOgAwIBAgIBFjANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGjAYBgNVBAMTEUlkZW50
|
||||
aXR5IENBIFRlc3QyMSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlzdC5hZGxpbmt0ZWNo
|
||||
LmNvbTAeFw0xODA3MjAwMDAwMDBaFw0yNzA3MTkyMzU5NTlaMHMxCzAJBgNVBAYT
|
||||
Ak5MMQswCQYDVQQIEwJPVjETMBEGA1UEChMKQURMaW5rIElTVDEaMBgGA1UEAxMR
|
||||
SWRlbnRpdHkgQ0EgVGVzdDIxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlu
|
||||
a3RlY2guY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyIweDOdB
|
||||
xotexcDiUdbIdDLu9A6/KSpkxUJnYb2iRhBonmCNFvErEokso/Dga6QT3rg83UCg
|
||||
GMJBSJSZhq/j+eZweHoXS8Ccet/aF2iNj5A5Uhn476M3zMg+rCoos2yKlpZLOz1x
|
||||
QjrRJfeOoBHvkHkxBeupnnQPx4oAro7zoXMIO83NKLwCROC/kGq1ktW8fbKa5THQ
|
||||
z0QfZG3zAeD93N+dTAqA+jkCfzbrQepF243Tu4cLaGwVALZ/8cZ7sky8+OOmKnBU
|
||||
P9r+U/4L62DVJYnYkTGnYEwqXcM1b8/JHasmKEaHXgAu/UI5i/SZfRPZUyC1ERSv
|
||||
tX6k7sBxZZSPLQIDAQABo4HJMIHGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFIFG
|
||||
yWkPWvNkBD2SCYj9H+NfnlOLMB8GA1UdIwQYMBaAFIFGyWkPWvNkBD2SCYj9H+Nf
|
||||
nlOLMA8GA1UdDwEB/wQFAwMH/4AwZQYDVR0lAQH/BFswWQYIKwYBBQUHAwEGCCsG
|
||||
AQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMIBggrBgEFBQcDCQYI
|
||||
KwYBBQUHAw0GCCsGAQUFBwMOBgcrBgEFAgMFMA0GCSqGSIb3DQEBCwUAA4IBAQCK
|
||||
SkemYQIvsslkMc8PNHSk2om4xk7hUXkatAZPN9dvRravu3PJqMWxpQ0TWbddrkBL
|
||||
he7/ARC2G9vVUwQl2b8K1Rjt/nZ3j+NPvhCDzcPyxjornyN8IG1NJQVH18fTxR23
|
||||
6PvDBE0H2trA3WJgKo6Wlxo6CHWts8ulFWWXBE1nNQw30hU49FDsFn3nz6Gry4ti
|
||||
/ouAvbz+UXSsT9R+zkci3A394sEsOCZSStgAnXsejU45pCt6OtCGaLfDvEPp21az
|
||||
OEjuIaj6Kbd+MHeLyPoe+d1Bkl39OnAUEJ8q2HdwvIg2ZqP6h0agm5gpZo/ALDWn
|
||||
9P3owIGVsHFGkYqhHc+K
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIENDCCAxygAwIBAgIBAjANBgkqhkiG9w0BAQsFADByMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGTAXBgNVBAMTEElkZW50
|
||||
aXR5IENBIFRlc3QxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlua3RlY2gu
|
||||
Y29tMB4XDTE4MDYxMzAwMDAwMFoXDTI3MDYxMDIzNTk1OVowfTELMAkGA1UEBhMC
|
||||
TkwxCzAJBgNVBAgTAk9WMRMwEQYDVQQKEwpBRExpbmsgSVNUMSQwIgYDVQQDExtJ
|
||||
ZGVudGl0eSBDQSBUZXN0IFdpdGggQ2hhaW4xJjAkBgkqhkiG9w0BCQEWF2luZm9A
|
||||
aXN0LmFkbGlua3RlY2guY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
||||
AQEA1r8Q0V8ZVeBs8tPMF0N+JlBynl1Zn/89vwSsU4m7y6ixUcW/y3r12CMeA0cH
|
||||
g6yOaOdHsZ8pRlPRwy9YmeOwLsMOUHAURP2uPiTjSf3pttUIf0jv602GyirNzoS7
|
||||
7mHiyTtV80ZMzZlLIJ3gaJJlG4DjitFuFcjv8sOmviFjkn1kOjkAz1nKgsCiHvvg
|
||||
fcJlYPrtLfle9SzvZ3MTq4ob+/EFu9nt5bYYs7p7Br1TGWctUw98l2mSn/FhfDBw
|
||||
9bb7ZhcKB7W6PGy2Os5AnkdTJKHoOQT+RmnHzPBhab0BoKuy8IhfW2GyqC8rL5Tm
|
||||
/UVLUvnx4Zzqz//3IyA2FTb1HQIDAQABo4HJMIHGMAwGA1UdEwQFMAMBAf8wHQYD
|
||||
VR0OBBYEFE1VQk0XOEk9F5hPhBLHp0rncJcJMB8GA1UdIwQYMBaAFER4R6N3MQ1W
|
||||
l7gn+R8wwHloDCVZMA8GA1UdDwEB/wQFAwMH/4AwZQYDVR0lAQH/BFswWQYIKwYB
|
||||
BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMIBggr
|
||||
BgEFBQcDCQYIKwYBBQUHAw0GCCsGAQUFBwMOBgcrBgEFAgMFMA0GCSqGSIb3DQEB
|
||||
CwUAA4IBAQCbl7ed4p66G6WquxO7ceZFvYKn3kDErjCfXHcqHxBnA2xTpoZCGj95
|
||||
Qpirqo6N4UcLX5sn3CmgyVk0dYvlti/53FJgZ9XQDNxBuEYWPkY7vO+Uo0WdYpGz
|
||||
ZDNIUQpiPMA7bHvwKldTIs77xxtnw9kbBU2k0xQyb2tdZNfD5YqSI1MeUtpEpNFW
|
||||
sbC8+mQ3clzWpjF8eHH1fFSAmlJ+z1Uqmtt2FK0vRz+MQcpydwvpMnfqGdcwhGPQ
|
||||
X4HZreLObjBA8KUEkUB3+rZXuELBgkk/c8/jRZl7QF5jJDLQCCLg7KoYBKN2GuTt
|
||||
/dzeSnP7VZm/nTL8wpCvKgSOwOGgklf2
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEA0Fb60RkFrDsRAIRfLMf2fsiRnw9Agp7yEbUsA4Zg4X+hRhBk
|
||||
k78fFtagLisWo4LbT4DqKzqQXCvVnOn9a6uT0KsVejk2iaLoBy0fotQznudio3rz
|
||||
DpTfzP9eRDFVj8RJnl3JJ8P1DULxH7N0TyDBuKZ1ibBfuKjPffqeCEzYKgAc8NG2
|
||||
FB4m6mXzHhXuKw6W2v0IbHz6KYldsavf04rq7ztw0t67bexSQ4gLSVJEwiohAreg
|
||||
m0dLvQnap5xd2qn0yETteTL8Y+Ujym1DWAnwDdwA6+0j2a0wkyzOzYQpZMt95NyZ
|
||||
8kcoqEqO8KAN2HclqfjHlg9iDscbof5x45SQwwIDAQABAoIBAG0dYPeqd0IhHWJ7
|
||||
8azufbchLMN1pX/D51xG2uptssfnpHuhkkufSZUYi4QipRS2ME6PYhWJ8pmTi6lH
|
||||
E6cUkbI0KGd/F4U2gPdhNrR9Fxwea5bbifkVF7Gx/ZkRjZJiZ3w9+mCNTQbJDKhh
|
||||
wITAzzT6WYznhvqbzzBX1fTa6kv0GAQtX7aHKM+XIwkhX2gzU5TU80bvH8aMrT05
|
||||
tAMGQqkUeRnpo0yucBl4VmTZzd/+X/d2UyXR0my15jE5iH5o+p+E6qTRE9D+MGUd
|
||||
MQ6Ftj0Untqy1lcog1ZLL6zPlnwcD4jgY5VCYDgvabnrSwymOJapPLsAEdWdq+U5
|
||||
ec44BMECgYEA/+3qPUrd4XxA517qO3fCGBvf2Gkr7w5ZDeATOTHGuD8QZeK0nxPl
|
||||
CWhRjdgkqo0fyf1cjczL5XgYayo+YxkO1Z4RUU+8lJAHlVx9izOQo+MTQfkwH4BK
|
||||
LYlHxMoHJwAOXXoE+dmBaDh5xT0mDUGU750r763L6EFovE4qRBn9hxkCgYEA0GWz
|
||||
rpOPNxb419WxG9npoQYdCZ5IbmEOGDH3ReggVzWHmW8sqtkqTZm5srcyDpqAc1Gu
|
||||
paUveMblEBbU+NFJjLWOfwB5PCp8jsrqRgCQSxolShiVkc3Vu3oyzMus9PDge1eo
|
||||
9mwVGO7ojQKWRu/WVAakENPaAjeyyhv4dqSNnjsCgYEAlwe8yszqoY1k8+U0T0G+
|
||||
HeIdOCXgkmOiNCj+zyrLvaEhuS6PLq1b5TBVqGJcSPWdQ+MrglbQIKu9pUg5ptt7
|
||||
wJ5WU+i9PeK9Ruxc/g/BFKYFkFJQjtZzb+nqm3wpul8zGwDN/O/ZiTqCyd3rHbmM
|
||||
/dZ/viKPCZHIEBAEq0m3LskCgYBndzcAo+5k8ZjWwBfQth5SfhCIp/daJgGzbYtR
|
||||
P/BenAsY2KOap3tjT8Fsw5usuHSxzIojX6H0Gvu7Qzq11mLn43Q+BeQrRQTWeFRc
|
||||
MQdy4iZFZXNNEp7dF8yE9VKHwdgSJPGUdxD6chMvf2tRCN6mlS171VLV6wVvZvez
|
||||
H/vX5QKBgD2Dq/NHpjCpAsECP9awmNF5Akn5WJbRGmegwXIih2mOtgtYYDeuQyxY
|
||||
ZCrdJFfIUjUVPagshEmUklKhkYMYpzy2PQDVtaVcm6UNFroxT5h+J+KDs1LN1H8G
|
||||
LsASrzyAg8EpRulwXEfLrWKiu9DKv8bMEgO4Ovgz8zTKJZIFhcac
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAweb6oblp8IcV2an3z5n484Hu8PdaF+CEpW6CHwV6d7C49pqi
|
||||
0rGIYATSQJ/xZdTmXhcNHeIFYmwYMeWXXI7Ivgpb2CvB+d+IkyXza4jMoYOJElsW
|
||||
RdU4sX8NxUuy6oyhGOWTT36eWuD/vFL3qK2CbrK55b9Q4hemj4SUIfCetiem4cet
|
||||
gzSzu3WWzdAVLJ1rcg3H4uQzo39v695UkX3nJ97ga9UGEWkuRa1fjEqBnIyNzO+Z
|
||||
notU01Ke2E+GVkUeaylDKpetOcbJrHerKiWiqH2JsO8ArmlSfOqW/8PLK3XXSrdt
|
||||
cVHkDTCp+PR+q2nszDhN1OQVDLWfj9jgS5PwjwIDAQABAoIBAHfgWhED9VgL29le
|
||||
uGMzmPLK4LM+6Qcb+kXghTeyhl1a928WeRVzRpG+SVJEz9QaBHYlICnaY2PO2kJ2
|
||||
49YIPFkpRFDn9JuLs/7tFonj4Eb2cBbWE3YG9W7e0t+oBiv1117yB9m8uSAMPG7s
|
||||
iEpTQvE3M7CzT8kHwCS4XXCCN0z7LqKyZ1heScjdfhV3D2TnFFjdtQ/9KfQa3hIc
|
||||
6ftbpi4EKbfasspyqfrJ/cqjHzse9iEXLOZJhs+atBAKe/uJ4Hc3LRPbX4MPniAp
|
||||
JJrldXFK9p+HILlbXvu+5n+DSGbZmT1x9a/E9suGyoJiASDH2Ax4yCVTi+v8C1R2
|
||||
aKdU1LkCgYEA/3dFuM6zIHwiJ0GKT0gtJL6J3m+i51SNcRIm8deXt6HULMpUNajj
|
||||
vZ1bgQm/h+uRBlPV3swkaVxvPTIabOTY4gmCBSzvVCSIAKHVc/+5Nkl9KruwSq4G
|
||||
tctmXZ7ymMDi+6QGCJTJkAx6jptXyrzC00HOjXOwyQ+iDipqgr3A8FsCgYEAwk7B
|
||||
2/hi569EIHFRT6nz/JMqQVPZ/MJDKoKhffTbnjQ5OAzpiVN6cyThMM1iVJEBFNhx
|
||||
OEacy60Qj0TtR1oYrQSRSLm58TTxiuB4Pohbmg3iU+kSM/eTq/ups/Ul1oCs2eAb
|
||||
POfweD3c4d4i7sN8bUNQXehiE4MOlK9TYQy39t0CgYAJht0mwy6S644qgJsz0bE9
|
||||
SY3Cqc8daV3M9axWIIAb7QEImpMBXUcA7zlWWpK18ub5oW68XEiPVU8grRmnLfGY
|
||||
nFoo70ANlz8rJt3a8ZJqn9r3GQC+CDdf2DH9E8xgPfE5CSjgcQwDPzPi1ZA0k02A
|
||||
q1eUltfk55xXguVt8r2bOQKBgQC7+kldr1yv20VDRZ1uPnMGRLE6Zg6bkqw78gid
|
||||
vEbDNK6uZP+BlTr/LgyVk/yu52Fucz6FPPrvqEw+7mXHA4ifya1r+BHFIn0S57os
|
||||
dOp5jTkKCI9NqxQ3683vhRjH/dA7L63qLFDdYqvP74FID+LOKbMURn6rdbyjZ0J4
|
||||
vz8yGQKBgHIzcKlQosRxf+KptOPMGRs30L9PnH+sNmTo2SmEzAGkBkt1msGRh/2l
|
||||
uT3hOEhUXL9knRyXwQSXgrIwr9QwI5rGS5FAgX26TgBtPBDs2NuyyhhS5yxsiEPT
|
||||
BR+EjQFW9dzRkpRJgvsG4DcNAhFn7fQqFNcWXgFWuBXmGNkdtEGR
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIICEDCCAbegAwIBAgIJAPOifu8ejrRRMAoGCCqGSM49BAMCMGUxCzAJBgNVBAYT
|
||||
Ak5MMRMwEQYDVQQIDApTb21lLVN0YXRlMR8wHQYDVQQKDBZBRExJTksgVGVjaG5v
|
||||
bG9neSBCLlYuMSAwHgYDVQQDDBdDSEFNXzU3MCBDQSBjZXJ0aWZpY2F0ZTAeFw0x
|
||||
OTAyMTgxMDQwMTZaFw00NjA3MDYxMDQwMTZaMGUxCzAJBgNVBAYTAk5MMRMwEQYD
|
||||
VQQIDApTb21lLVN0YXRlMR8wHQYDVQQKDBZBRExJTksgVGVjaG5vbG9neSBCLlYu
|
||||
MSAwHgYDVQQDDBdDSEFNXzU3MCBDQSBjZXJ0aWZpY2F0ZTBZMBMGByqGSM49AgEG
|
||||
CCqGSM49AwEHA0IABMXCYXBHEryADoYXMEE0Jw9aHlA7p3KVFzuypxuez0n7rKoX
|
||||
k9kanNtrw5o2X4WSWKM7zkH4I6AU7xSAQgJN+8GjUDBOMB0GA1UdDgQWBBR1Llq9
|
||||
zrRrTJLSvUJykksncZ+HsDAfBgNVHSMEGDAWgBR1Llq9zrRrTJLSvUJykksncZ+H
|
||||
sDAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0cAMEQCIHKRM3VeB2F7z3nJT752
|
||||
gY5mNdj91ulmNX84TXA7UHNKAiA2ytpsV4OKURHkjyn1gnW48JDKtHGZF6/tMNvX
|
||||
VrDITA==
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,50 @@
|
|||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number: 4096 (0x1000)
|
||||
Signature Algorithm: ecdsa-with-SHA256
|
||||
Issuer: C=NL, ST=Some-State, O=ADLINK Technology B.V., CN=CHAM_570 CA certificate
|
||||
Validity
|
||||
Not Before: Feb 18 10:52:41 2019 GMT
|
||||
Not After : Jul 6 10:52:41 2046 GMT
|
||||
Subject: C=NL, ST=Some-State, O=ADLINK Technology B.V., CN=CHAM_570 Identity certificate
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: id-ecPublicKey
|
||||
Public-Key: (256 bit)
|
||||
pub:
|
||||
04:9d:b5:7b:f5:fe:63:da:24:e4:0c:26:c5:32:55:
|
||||
55:b3:7f:7a:60:ea:0d:56:2c:0a:85:e0:5b:85:5a:
|
||||
01:1b:69:fc:23:79:98:33:d6:60:d5:d9:ab:1e:1d:
|
||||
7a:1e:c2:5f:ad:30:9b:73:45:40:39:d9:07:f7:59:
|
||||
8d:44:f6:6b:e3
|
||||
ASN1 OID: prime256v1
|
||||
NIST CURVE: P-256
|
||||
X509v3 extensions:
|
||||
X509v3 Basic Constraints:
|
||||
CA:false
|
||||
Netscape Comment:
|
||||
OpenSSL Generated Certificate
|
||||
X509v3 Subject Key Identifier:
|
||||
C6:68:7E:D7:20:B3:51:4B:D4:50:54:26:12:86:BE:9B:EA:55:A1:EA
|
||||
X509v3 Authority Key Identifier:
|
||||
keyid:75:2E:5A:BD:CE:B4:6B:4C:92:D2:BD:42:72:92:4B:27:71:9F:87:B0
|
||||
|
||||
Signature Algorithm: ecdsa-with-SHA256
|
||||
30:45:02:21:00:b2:a7:be:fb:0b:d4:e2:87:b0:2c:c9:b8:fa:
|
||||
10:b0:18:4b:dc:6a:bc:58:55:e8:22:46:93:d8:b1:5b:50:17:
|
||||
77:02:20:2a:cf:42:10:fc:7e:02:39:37:44:4a:cf:9b:a3:9a:
|
||||
55:cb:15:2d:12:86:06:7e:d4:b8:24:7a:57:13:48:b5:69
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICOzCCAeGgAwIBAgICEAAwCgYIKoZIzj0EAwIwZTELMAkGA1UEBhMCTkwxEzAR
|
||||
BgNVBAgMClNvbWUtU3RhdGUxHzAdBgNVBAoMFkFETElOSyBUZWNobm9sb2d5IEIu
|
||||
Vi4xIDAeBgNVBAMMF0NIQU1fNTcwIENBIGNlcnRpZmljYXRlMB4XDTE5MDIxODEw
|
||||
NTI0MVoXDTQ2MDcwNjEwNTI0MVowazELMAkGA1UEBhMCTkwxEzARBgNVBAgMClNv
|
||||
bWUtU3RhdGUxHzAdBgNVBAoMFkFETElOSyBUZWNobm9sb2d5IEIuVi4xJjAkBgNV
|
||||
BAMMHUNIQU1fNTcwIElkZW50aXR5IGNlcnRpZmljYXRlMFkwEwYHKoZIzj0CAQYI
|
||||
KoZIzj0DAQcDQgAEnbV79f5j2iTkDCbFMlVVs396YOoNViwKheBbhVoBG2n8I3mY
|
||||
M9Zg1dmrHh16HsJfrTCbc0VAOdkH91mNRPZr46N7MHkwCQYDVR0TBAIwADAsBglg
|
||||
hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
|
||||
BBYEFMZoftcgs1FL1FBUJhKGvpvqVaHqMB8GA1UdIwQYMBaAFHUuWr3OtGtMktK9
|
||||
QnKSSydxn4ewMAoGCCqGSM49BAMCA0gAMEUCIQCyp777C9Tih7Asybj6ELAYS9xq
|
||||
vFhV6CJGk9ixW1AXdwIgKs9CEPx+Ajk3RErPm6OaVcsVLRKGBn7UuCR6VxNItWk=
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIICFTCCAbygAwIBAgICEAEwCgYIKoZIzj0EAwIwWjELMAkGA1UEBhMCTkwxEzAR
|
||||
BgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5
|
||||
IEx0ZDETMBEGA1UEAwwKQ0hBTTUwMF9DQTAeFw0xODAyMTkxMDMyMjRaFw0xOTAy
|
||||
MTkxMDMyMjRaMGExCzAJBgNVBAYTAk5MMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
|
||||
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxGjAYBgNVBAMMEUNIQU01
|
||||
NjkgdW5zdXAga2V5MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQIDMgAEKt3HYPnDlEOS
|
||||
zYqTzT2patyreLHN2Jty22KXwjaNAjgrwujdPr+MW38DsyBF5Yn9o3sweTAJBgNV
|
||||
HRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZp
|
||||
Y2F0ZTAdBgNVHQ4EFgQUG9MuQz3W/AKA98AyOKhI2af9I+0wHwYDVR0jBBgwFoAU
|
||||
ACsYsaEsZfjfRVrj0IBmcsncVyMwCgYIKoZIzj0EAwIDRwAwRAIgfhisahVmgghI
|
||||
GaaQavdKHpM/OTVODZPzYjky6Am+z08CIBidnuuznXrZtr78oy/tAES/7Lz8P5Iw
|
||||
Q1y5Vo8CdXQQ
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
|||
-----BEGIN PRIVATE KEY-----
|
||||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgP3SnBXzcCc0uUEiG
|
||||
0CPNdcV0hBewOnVoh4d9q9E5U5ihRANCAASdtXv1/mPaJOQMJsUyVVWzf3pg6g1W
|
||||
LAqF4FuFWgEbafwjeZgz1mDV2aseHXoewl+tMJtzRUA52Qf3WY1E9mvj
|
||||
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,5 @@
|
|||
-----BEGIN PRIVATE KEY-----
|
||||
MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQIEVTBTAgEBBBh8p6kwBS7jT86ctN33
|
||||
Vs4vosHh7upPZBWhNAMyAAQq3cdg+cOUQ5LNipPNPalq3Kt4sc3Ym3LbYpfCNo0C
|
||||
OCvC6N0+v4xbfwOzIEXlif0=
|
||||
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,8 @@
|
|||
-----BEGIN EC PRIVATE KEY-----
|
||||
Proc-Type: 4,ENCRYPTED
|
||||
DEK-Info: AES-256-CBC,11055B75D406068EB1FF850646228EA9
|
||||
|
||||
GUnwN8e2gvUkopN3ak+2dK1dSTSKSJguers3h5C+qQDq57By933ijCCjUTu2LY/F
|
||||
ERH6m8UD6H5ij/QDsXLx6tH/dFQ7An+Zao3eD2N2zquGED/OfTQJFv3gBKs4RUtg
|
||||
66dfuv9mNSXt7Rnu9uBNtodm5JGifczdmIPHn0mNY2g=
|
||||
-----END EC PRIVATE KEY-----
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEmTCCA4GgAwIBAgIIZ5gEIUFhO5wwDQYJKoZIhvcNAQELBQAwXzELMAkGA1UE
|
||||
BhMCTkwxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp
|
||||
ZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPQ0hBTTUwMCByb290IGNhMCAXDTE4MDIx
|
||||
MjE1MDUwMFoYDzIyMjIwMjIyMjIyMjAwWjBfMQswCQYDVQQGEwJOTDETMBEGA1UE
|
||||
CBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
|
||||
MRgwFgYDVQQDEw9DSEFNNTAwIHJvb3QgY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
||||
DwAwggEKAoIBAQC6Fa3TheL+UrdZCp9GhU/2WbneP2t/avUa3muwDttPxeI2XU9k
|
||||
ZjBR95mAXme4SPXHk5+YDN319AqIje3oKhzky/ngvKH2GkoJKYxWnuDBfMEHdViz
|
||||
2Q9/xso2ZvH50ukwWa0pfx2/EVV1wRxeQcRd/UVfq3KTJizG0M88mOYvGEAw3LFf
|
||||
zef7k1aCuOofQmBvLukUudcYpMzfyHFp7lQqU4CcrrR5RtmfiUfrWfdGLea2iPDB
|
||||
pJgN8ESOMwEHtOTEBDclYnH9L4t7CHQz+fXXS5IWFsDK9fCMQjnxDsDVeNrNzTYL
|
||||
FaZrMg9S6IUQCEsQWsnq5weS8omOpVLUm9klAgMBAAGjggFVMIIBUTAMBgNVHRME
|
||||
BTADAQH/MB0GA1UdDgQWBBQg2FZB/j8uWDVnJhjwXkX278znSTAfBgNVHSMEGDAW
|
||||
gBQg2FZB/j8uWDVnJhjwXkX278znSTAPBgNVHQ8BAf8EBQMDB/+AMIHvBgNVHSUB
|
||||
Af8EgeQwgeEGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwME
|
||||
BggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
|
||||
KwYBBAGCNwoDAwYKKwYBBAGCNwoDBAYJYIZIAYb4QgQBBgsrBgEEAYI3CgMEAQYI
|
||||
KwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUIAgIGCisGAQQBgjcU
|
||||
AgIGCCsGAQUFBwMJBggrBgEFBQcDDQYIKwYBBQUHAw4GBysGAQUCAwUwDQYJKoZI
|
||||
hvcNAQELBQADggEBAKHmwejWRwGE1wf1k2rG8SNRV/neGsZ6Qfqf6co3TpR/Wi1s
|
||||
iZDvSeT/rbqNBS7z34xnG88NIUwu00y78e8Mfon31ZZbK4Uo7fla9/D3ukdJqPQC
|
||||
LKdbKJjR2kH+KCukY/1rghjJ8/X+t2egBit0LCOdsFCl07Sfksb9kpGUIZSFcYYm
|
||||
geqhjhoNwxazzHiw+QWHC5HG9248JIizBmy1aymNWuMnPudhjHAnPcsIlqMVNq3t
|
||||
Rv9ap7S8JeCxHVRPJvJeCwXWvW3dW/v3xH52Yn/fqRblN1w9Fxz5NhopKx0gj/Jd
|
||||
sw2N4Fk4gaOWEolFpa0bwNw8nAx7moehZpowzfw=
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAuhWt04Xi/lK3WQqfRoVP9lm53j9rf2r1Gt5rsA7bT8XiNl1P
|
||||
ZGYwUfeZgF5nuEj1x5OfmAzd9fQKiI3t6Coc5Mv54Lyh9hpKCSmMVp7gwXzBB3VY
|
||||
s9kPf8bKNmbx+dLpMFmtKX8dvxFVdcEcXkHEXf1FX6tykyYsxtDPPJjmLxhAMNyx
|
||||
X83n+5NWgrjqH0Jgby7pFLnXGKTM38hxae5UKlOAnK60eUbZn4lH61n3Ri3mtojw
|
||||
waSYDfBEjjMBB7TkxAQ3JWJx/S+Lewh0M/n110uSFhbAyvXwjEI58Q7A1Xjazc02
|
||||
CxWmazIPUuiFEAhLEFrJ6ucHkvKJjqVS1JvZJQIDAQABAoIBAFktMHtw60J0A3fB
|
||||
dmkGVDa78y4F+I88g6/XrYXW6NUHAQyKlRSJQFjXrpFtLImNNXPqVA47BFftFusw
|
||||
ETY0kFo5QkuoOnnFSXuwlJeiVhWDosHfQ54UxK+4ZYnCte3CXIwWPbzoNSoutWTU
|
||||
IbMuE1vzlz5s3GCWZ9jzkoz4vT8NrkucEQ2sxvAVWk2//SoQljN+b4BLDdsWl3Bq
|
||||
l+9JR2EzROXrPH5voYUZV17LbnCOmU+6ucxlGu704oqLJBxtNyYKsSEh4KMo4lX4
|
||||
bOZVSct3LXifj5BQmF9vbi5FiJqFGtoY4iBw0IUq05CJ4nsQuW1ZLucXaw1tBRKn
|
||||
S1l/C0ECgYEA9zWVLQtWGrOZ7we7dTbF5ghZ541NjR9NmBFET5lNRU5yDG0poRdh
|
||||
WD2qioGJigV6ZaEoXny0jFqqqqPM5S/sDRtoicK+XlFuhURw0CZCAsisjVhCDGXU
|
||||
+FJRbR+As7NFvb/9itvNE+PD4p39UXObePzM9JnlHSP7Ml0KdJqcQHUCgYEAwLOp
|
||||
Sp9k0CbFy/lQCSBbBiiu6ol/OxSzOBuZsFIbV8ILcn8v5NWdrcArssJBMdLTIaHN
|
||||
nrTxKOOAzFnPW6DeRmWM/NnwizB/a6uo34q6ywmXmgFSQPX86XTVZCdD96nNik0C
|
||||
KaEY2SqJxrnYstVApWRJAwy7T2jxJEj0aEZBH/ECgYEAmYyTuyXWdsFl9N2lp1m9
|
||||
NHOtfDD9oZF2/eSDvLlpEIp4NpW7jM7b7RZojp2FU9CxRN0EGSR2dNOAPHt/sj/A
|
||||
7CdBGIh4/FayQl7Pf8qzp80DuMvAQrkhvphK8W/m3jeVMxZEovKCAD+yFVmy1dvs
|
||||
DwtfNvM8J4yI47B85Q5/zV0CgYArxGKN/VfjYvsH0e9Ys02ZP4JC6MnJ/HCcLMCi
|
||||
aHOnYf5BmhuhqNbwULZcGny+OTkU6XAPPN+NPubRAxDyqb3yVTxJbaKRqok2Rj3L
|
||||
z/GPDfWt1+D7uiMgTxXscnKgfKOfZtA37kv7fwrd5PYP4BmXtwhSNgERDy+94wgH
|
||||
6vT9sQKBgBqsTsdDmBmKLQM/JzQC2AeQo0/ZFZIXdsiCShMbo2XALlaxZDYDu1it
|
||||
M/zkpmWmHncrBnnW3h6ME1ZZj2HGTowDuJvQqR7cZW5jWY3uLpOnEAGeOoKPhfOP
|
||||
IW2pVPZXq3Zl1yn86oG7C7poPRq0PRu+q2HtHP6/M0NgtGBx8F9M
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEQTCCAymgAwIBAgIINpuaAAnrQZIwDQYJKoZIhvcNAQELBQAwXzELMAkGA1UE
|
||||
BhMCTkwxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp
|
||||
ZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPQ0hBTTUwMCByb290IGNhMCAXDTE3MDIy
|
||||
MjIyMjIwMFoYDzIyMjIwMjIyMjIyMjAwWjBcMQswCQYDVQQGEwJOTDETMBEGA1UE
|
||||
CBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
|
||||
MRUwEwYDVQQDEwxDSEFNNTAwIGNlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||
ggEKAoIBAQDCpVhivH/wBIyu74rvQncnSZqKyspN6CvD1pmV9wft5PHhVt9jV79v
|
||||
gSub5LADoRHAgFdv9duYgBr17Ob6uRrIY4B18CcrCjhQcC4gjx8y2jl9PeYm+qYD
|
||||
3o44FYBrBq0QCnrQgKsb/qX9Z+Mw/VUiw65x68W876LEHQQoEgT4kxSuagwBoVRk
|
||||
ePD6fYAKmT4XS3x+O0v+rHESTcsKF6yMadgp7h3eH1b8kJTzSx8JV9Zzq++mxjox
|
||||
qhbBVP5nDze2hhSIeCkCvSrx7efkgKS4AQXa5/Z44GiAu1TfXXUqdic9rxwD0edn
|
||||
ajNElnZe7sjok/0yuqvH+2hSqpNva/zpAgMBAAGjggEAMIH9MAwGA1UdDwQFAwMH
|
||||
/4AwgewGA1UdJQSB5DCB4QYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYI
|
||||
KwYBBQUHAwQGCCsGAQUFBwMIBgorBgEEAYI3AgEVBgorBgEEAYI3AgEWBgorBgEE
|
||||
AYI3CgMBBgorBgEEAYI3CgMDBgorBgEEAYI3CgMEBglghkgBhvhCBAEGCysGAQQB
|
||||
gjcKAwQBBggrBgEFBQcDBQYIKwYBBQUHAwYGCCsGAQUFBwMHBggrBgEFBQgCAgYK
|
||||
KwYBBAGCNxQCAgYIKwYBBQUHAwkGCCsGAQUFBwMNBggrBgEFBQcDDgYHKwYBBQID
|
||||
BTANBgkqhkiG9w0BAQsFAAOCAQEAawdHy0Xw7nTK2ltp91Ion6fJ7hqYuj///zr7
|
||||
Adt6uonpDh/xl3esuwcFimIJrJrHujnGkL0nLddRCikmnzuBMNDWS6yq0/Ckl/YG
|
||||
yjNr44dlX24wo+MVAgkj3/8CyWDZ3a8kBg9QT3bs2SqbjmhTrXN1DRyf9S5vJysE
|
||||
I7V1gTN66BeKL64hOrAlRVrEu8Ds6TWL6Q/YH+61ViZkoLTeSaPjH4nknaFr4C35
|
||||
iji0JhkyfRHRRVPHFnaj25AkxOrSV64qVKoTMjDl5fji5iMGtjm6iJ7q05ml/qDl
|
||||
nLotHXemZNvYhbwUmRzbt4Dls9EMH4VRbP85I94nM5TAvtHVNA==
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIICrjCCAZYCCQDn8i4K9c4ErjANBgkqhkiG9w0BAQsFADBfMQswCQYDVQQGEwJO
|
||||
TDETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
|
||||
cyBQdHkgTHRkMRgwFgYDVQQDDA9DSEFNNTAwIHJvb3QgY2EwHhcNMTgwMjE2MTAy
|
||||
MzM2WhcNMjMwODA5MTAyMzM2WjBXMQswCQYDVQQGEwJOTDETMBEGA1UECAwKU29t
|
||||
ZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRAwDgYD
|
||||
VQQDDAdDSEFNNTY5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS5w0h8L70
|
||||
hkreKchVbTzfz4CrBLY4iADNSqPx9uW7DxjeHyLbKT2eRViY/xPuPXQmfRim01QM
|
||||
sZWKvFr6k9WMsJ6ItNtCyKS/beONqvXOddIu+4IhNzEGs5v4pTJAOzraoZcVmXnf
|
||||
Mr9G/baMYfMG47JR5HaSHDI5esa2STHt4wIDAQABMA0GCSqGSIb3DQEBCwUAA4IB
|
||||
AQBdZ2ijHYH8TkOGBqzsNwnNwPaDb/NA0vAO9T5kSOm8HA8vKHnNza+DeUJN+5P/
|
||||
P4fLK7UZqpQN32MpvXL0068g99RLjAzAsEVn+0FTyc08r9p/KO/dxxdMKeET7Cpv
|
||||
rMpu3W0A/EJptCQsTEZI0iqts7T2qQVXzoDlnUwEt3xdmKYJ9jbEq1UUCeexD3nP
|
||||
LB+JtUtfGevVzIoBjHv0qA3ePA24jDUlx5bxFeoIDC4tEewvUG5ZekftsRdNe3fk
|
||||
3LkwyK+4NN1ZCa2+S5SOAfjZA2o6qXiq/le0vWRgl7AHEgDr6w7xoRsw4K5dQ+0R
|
||||
eKtsBC4XO1GqrNYdKuJb1MhI
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,22 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDljCCAn6gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwXzELMAkGA1UEBhMCTkwx
|
||||
EzARBgNVBAgMCk92ZXJpanNzZWwxEDAOBgNVBAcMB0hlbmdlbG8xDzANBgNVBAoM
|
||||
BkFETElOSzEYMBYGA1UEAwwPQ0hBTTUwMCBSb290IENBMB4XDTE4MDIwOTE2Mjky
|
||||
MVoXDTI4MDIwNzE2MjkyMVowVTELMAkGA1UEBhMCTkwxEzARBgNVBAgMCk92ZXJp
|
||||
anNzZWwxDzANBgNVBAoMBkFETElOSzEgMB4GA1UEAwwXQ0hBTTUwMCBJbnRlcm1l
|
||||
ZGlhdGUgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwucuU/L6N
|
||||
iYxYJ7tyzcdzwXwYbr4GynZE4u2Sd7hcXrQGxTotm9BEhOZWscSGvH+UJSp0Vrb4
|
||||
3zDppiJ76ys6PeSBw1PpxdO97fO+eAE5DoXRj0a9lmnjbsV6waZ2GxgYQNVmKqbI
|
||||
uPDfW+jsmRcTO94s05GWQshHeiqxuEUAv3/Qe2vOhulrg4YDcXrIDWK93cr1EmRX
|
||||
Eq3Ck+Fjwtk5wAk3TANv2XQkVfS80jYAurL8J+XC2kyYB7e8KO92zqlfVXXMC3NI
|
||||
YDcq86bAI4NNMjVE2zIVheMLoOEXaV7KUTYfEQABZl76aWLDxjED9kf371tcrZzJ
|
||||
6xZ1M/rPGNblAgMBAAGjZjBkMB0GA1UdDgQWBBQngrlZqhQptCR4p04zqHamYUx7
|
||||
RTAfBgNVHSMEGDAWgBQrLYI+RHJtx1Pze8MSZbhaOful1DASBgNVHRMBAf8ECDAG
|
||||
AQH/AgEAMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEAfMmiQ0tv
|
||||
o3K3xwSS621tsfkijUTx920hAe1XYY2XKrG7a/MJBhStex5A3AfqPOY9UMihkBl9
|
||||
3hgxOaddX9SAf2eLk2JLhqxZi1U/GVzT5h10AKLA5WUXIK4UGz3JRqhEm7V39t/N
|
||||
G0LCdpWOZueezkfO6eGcAvOKthdd32a3zbn+rzzDHdsjzxhEEv8d8x1Xf4xH2dgk
|
||||
HlpmpvXMfG/1aCzIpWGEPdkB7WR694GiCmh7hnFBiY+h1GFj2l5dThd51QqAlncM
|
||||
u+NmlPCrFZL0ulwRFeo80KOwDpxkqgavDlP9irdWqM9VHybjGu0xFHCeElz9M6od
|
||||
ym/MCh4ax7jDxg==
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,20 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDNzCCAh8CCQDn8i4K9c4ErDANBgkqhkiG9w0BAQsFADBfMQswCQYDVQQGEwJO
|
||||
TDETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
|
||||
cyBQdHkgTHRkMRgwFgYDVTQDDA9DSEFNNTAwIHJvb3QgY2EwHhcNMTgwMjEyMTUw
|
||||
NjUxWhcNMTkwNjI3MTUwNjUxWjBcMQswCQYDVQQGEwJOTDETMBEGA1UECAwKU29t
|
||||
ZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRUwEwYD
|
||||
VQQDDAxDSEFNNTAwIGNlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
||||
AQDRnnNnV3PZrbZwjxk+dkQcO3pK3wMvoDNAHPPiTfXRV2KjLHxsuK7wV+GPHmXo
|
||||
97bot6vBxNQN7hfxoDLL+KBO9s3V+8OX6lOrF7hQ6+6/p9EgRoyNGo21eIzGwc2M
|
||||
aJAKjImNMbM7FDTvhk3u+VTTJtlnKvJM1tgncbEZwRLri/2MEC5XS/O5FQT4AXPr
|
||||
A6bRcGMqCVYtQ0ci6wd18PegA/rSmGSRf/TOd4jZXkxfHD+YOkHcxxz9sX4KnyOg
|
||||
XZm8jDdBc7rxiDep8kIjL06VszJeoQrxjuf8cNZtbol/7ECS5aM2YOx7t0Dc/629
|
||||
V2Q5waRVBV5xVCJ0BzUh8rIFAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAGlkxYLr
|
||||
ZI/XNjDC6RFfSFRoDc+Xpcg+GsJKKbw2+btZvAD8z7ofL01yGru9oi6u2Yy/ZDKT
|
||||
liZ+gtsD8uVyRkS2skq7BvPzvoYErLmSqwlrcCbeX8uHiN7C76ll9PFtSjnwPD//
|
||||
UaNyZM5dJB2eBh4/prclix+RR/FWQzkPqEVLwMcFBmnPZ0mvR2tncjpZq476Qyl9
|
||||
3jcmfms9qBfBPPjCdXqGEDgsTd2PpYRD2WDj/Ctl4rV7B2jnByullLUYIWGu0rYt
|
||||
988waU5i8ie4t/TorBBLqQo/NO9jSXfEqcAnILPnv1QZanKzAAxSg7+FgFrsn359
|
||||
ihiEkx9zFUnPrdA=
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEA0Z5zZ1dz2a22cI8ZPnZEHDt6St8DL6AzQBzz4k310Vdioyx8
|
||||
bLiu8Ffhjx5l6Pe26LerwcTUDe4X8aAyy/igTvbN1fvDl+pTqxe4UOvuv6fRIEaM
|
||||
jRqNtXiMxsHNjGiQCoyJjTGzOxQ074ZN7vlU0ybZZyryTNbYJ3GxGcES64v9jBAu
|
||||
V0vzuRUE+AFz6wOm0XBjKglWLUNHIusHdfD3oAP60phkkX/0zneI2V5MXxw/mDpB
|
||||
3Mcc/bF+Cp8joF2ZvIw3QXO68Yg3qfJCIy9OlbMyXqEK8Y7n/HDWbW6Jf+xAkuWj
|
||||
NmDse7dA3P+tvVdkOcGkVQVecVQidAc1IfKyBQIDAQABAoIBAEddUpzUQTTS11Hq
|
||||
5gVF7lpORYxH8KW+PLSPJtjdAduLjKAQ++tn1OcuhDRdfQSbkUIZhfgqMqerb6tr
|
||||
ht+6fZlknR9E34pQ1LtjD/U83cOSNrhuTFudtrEZoZPpVzl+P8vXnNzdFs/+SSdi
|
||||
6hV5/U8F4u4kyOkwG9cR9eF2wiI+oQ/RBKCXUo3OVs9K27A/OkKsb7coL7yBsgBj
|
||||
lzorS9a/DyHT2eiMKjwCZFyG4A66EkLi6t9JLJ8oTkI2WskXYeVEAbEXE57RWm44
|
||||
2OgTgfsgYgf2ftXq93KD17FN1m77dqp7EPAhjGnRHNq7+0Ykr1EO1nbDfqHG4gS+4o
|
||||
lfP8iwECgYEA58da0R34l93yQnK0mAtoobwvsOjADnBVhBg9L4s2eDs8liUjf0zt
|
||||
7hcMdUJaa7iMuNf3qGtnZtRURc3kSOE429Or7fCAYUr/AaA7+2ekPG1vjMb50tVv
|
||||
se5rwb1hvgMYe2L5ktJJAg+RcmqpY+ncJ+hP/vWwZRxUKvXba50qqEkCgYEA54ZE
|
||||
mJfSueGM/63xlhP71CM4OWtTqkQGp2OmgTOsBI5q/GUXr8vMR8sCEMHAc6HyXzmL
|
||||
x/RnAoa/vTX58rXBk0QjfO9esIHa452697EIaJu5w8skCLDv2e/f+Jg7o/IDyUZs
|
||||
5lqhiEuH9Qc3sx2nhnSYXMZWqwh8OchI7dCSE90CgYEAzrJ1JhpxUJYI7wM2VIWQ
|
||||
GPQnH8BhTj8VtEidgCHJQK2rGUcjgepMIVECtiunUXtyW4GWBedKfmSKhvnXRLs9
|
||||
pqT9JaOeCaYFBiEsfMZvqUY4e/YSYtge1PIHvO40FWzTT23zneDUZPcXQY8nYsfy
|
||||
otBFTt0yIumBkhJRTIYLvakCgYA+CcttvBj6OAcJJ/n5RgeP05QoRqsXj7zcs6YV
|
||||
LtxkKClg0lHjiE+H2U0HYnOISJfijk/3V3UWxzavo7wDHlLtfC+qNZYA4/rcTRKh
|
||||
dm2TYk8HuPJB5e+PTWiNe3VXu+zpzRY3L4fjNqIKtVFmjIasT6fYDEmC8PYgoZtx
|
||||
JhdOfQKBgCD/bDkc+VI6lwQtoQQKiSfQjKGe+6Cw9K/obzWO0uJwBvZrGLXF8tTc
|
||||
MOPIv9OILt7DYxpMXAiHv8HtzH5CFVrZ/nj63Soka/j2yvUdBDrGhyIbsc4pDu+
|
||||
lCFa0ZiT/u5vRAiOkM6GuStH4HxnW9LtwBtiYXtfU7IPExJiAlsq
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEPTCCAyWgAwIBAgIIRmtzSKaI+rowDQYJKoZIhvcNAQELBQAwXzELMAkGA1UE
|
||||
BhMCTkwxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp
|
||||
ZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPQ0hBTTUwMCByb290IGNhMCAXDTE4MDMy
|
||||
MzEyMDEwMFoYDzIyMjIwMjIyMjIyMjAwWjBYMQswCQYDVQQGEwJOTDETMBEGA1UE
|
||||
CBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
|
||||
MREwDwYDVQQDEwhDSEFNLTU3NzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
||||
ggEBAMKlWGK8f/AEjK7viu9CdydJmorKyk3oK8PWmZX3B+3k8eFW32NXv2+BK5vk
|
||||
sAOhEcCAV2/125iAGvXs5vq5GshjgHXwJysKOFBwLiCPHzLaOX095ib6pgPejjgV
|
||||
gGsGrRAKetCAqxv+pf1n4zD9VSLDrnHrxbzvosQdBCgSBPiTFK5qDAGhVGR48Pp9
|
||||
gAqZPhdLfH47S/6scRJNywoXrIxp2CnuHd4fVvyQlPNLHwlX1nOr76bGOjGqFsFU
|
||||
/mcPN7aGFIh4KQK9KvHt5+SApLgBBdrn9njgaIC7VN9ddSp2Jz2vHAPR52dqM0SW
|
||||
dl7uyOiT/TK6q8f7aFKqk29r/OkCAwEAAaOCAQAwgf0wDAYDVR0PBAUDAwf/gDCB
|
||||
7AYDVR0lBIHkMIHhBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEF
|
||||
BQcDBAYIKwYBBQUHAwgGCisGAQQBgjcCARUGCisGAQQBgjcCARYGCisGAQQBgjcK
|
||||
AwEGCisGAQQBgjcKAwMGCisGAQQBgjcKAwQGCWCGSAGG+EIEAQYLKwYBBAGCNwoD
|
||||
BAEGCCsGAQUFBwMFBggrBgEFBQcDBgYIKwYBBQUHAwcGCCsGAQUFCAICBgorBgEE
|
||||
AYI3FAICBggrBgEFBQcDCQYIKwYBBQUHAw0GCCsGAQUFBwMOBgcrBgEFAgMFMA0G
|
||||
CSqGSIb3DQEBCwUAA4IBAQAniERWU9f/ijm9t8xuyOujEKDJl0Ded4El9mM5UYPR
|
||||
ZSnabPNKQjABBS4sVISIYVwfQxGkPgK0MeMBKqs/kWsZ4rp8h5hlZvxFX8H148mo
|
||||
3apNgdc/VylDBW5Ltbrypn/dZh9hFZE8Y/Uvo9HPksVEkjYuFN5v7e8/mwxTcrZ1
|
||||
BAZrTlDTiCR046NN1lUs/7oUaNCruFV7AU6RbGYnSzM6plPJHMRa9nzNeO0uPaHK
|
||||
kNPe+/UGpMi7cpF9w0M5Z1wW+Nq45bBRejFLQkHSjOEeGL2zi7T1HFAHZQydd6Wo
|
||||
zYffGTmyHqIjNArbOWEMYN6s1nqsQS+ifolr0MtfeHad
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEmTCCA4GgAwIBAgIIZ5gEIUFhO5wwDQYJKoZIhvcNAQELBQAwXzELMAkGA1UE
|
||||
BhMCTkwxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp
|
||||
ZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPQ0hBTTUwMCByb290IGNhMCAXDTE4MDIx
|
||||
MjE1MDUwMFoYDzIyMjIwMjIyMjIyMjAwWjBfMQswCQYDVQQGEwJOTDETMBEGA1UE
|
||||
CBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
|
||||
MRgwFgYDVQQDEw9DSEFNNTAwIHJvb3QgY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
||||
DwAwggEKAoIBAQC6Fa3TheL+UrdZCp9GhU/2WbneP2t/avUa3muwDttPxeI2XU9k
|
||||
ZjBR95mAXme4SPXHk5+YDN319AqIje3oKhzky/ngvKH2GkoJKYxWnuDBfMEHdViz
|
||||
2Q9/xso2ZvH50ukwWa0pfx2/EVV1wRxeQcRd/UVfq3KTJizG0M88mOYvGEAw3LFf
|
||||
zef7k1aCuOofQmBvLukUudcYpMzfyHFp7lQqU4CcrrR5RtmfiUfrWfdGLea2iPDB
|
||||
pJgN8ESOMwEHtOTEBDclYnH9L4t7CHQz+fXXS5IWFsDK9fCMQjnxDsDVeNrNzTYL
|
||||
FaZrMg9S6IUQCEsQWsnq5weS8omOpVLUm9klAgMBAAGjggFVMIIBUTAMBgNVHRME
|
||||
BTADAQH/MB0GA1UdDgQWBBQg2FZB/j8uWDVnJhjwXkX278znSTAfBgNVHSMEGDAW
|
||||
gBQg2FZB/j8uWDVnJhjwXkX278znSTAPBgNVHQ8BAf8EBQMDB/+AMIHvBgNVHSUB
|
||||
Af8EgeQwgeEGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwME
|
||||
BggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
|
||||
KwYBBAGCNwoDAwYKKwYBBAGCNwoDBAYJYIZIAYb4QgQBBgsrBgEEAYI3CgMEAQYI
|
||||
KwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUIAgIGCisGAQQBgjcU
|
||||
AgIGCCsGAQUFBwMJBggrBgEFBQcDDQYIKwYBBQUHAw4GBysGAQUCAwUwDQYJKoZI
|
||||
hvcNAQELBQADggEBAKHmwejWRwGE1wf1k2rG8SNRV/neGsZ6Qfqf6co3TpR/Wi1s
|
||||
iZDvSeT/rbqNBS7z34xnG88NIUwu00y78e8Mfon31ZZbK4Uo7fla9/D3ukdJqPQC
|
||||
LKdbKJjR2kH+KCukY/1rghjJ8/X+t2egBit0LCOdsFCl07Sfksb9kpGUIZSFcYYm
|
||||
geqhjhoNwxazzHiw+QWHC5HG9248JIizBmy1aymNWuMnPudhjHAnPcsIlqMVNq3t
|
||||
Rv9ap7S8JeCxHVRPJvJeCwXWvW3dW/v3xH52Yn/fqRblN1w9Fxz5NhopKx0gj/Jd
|
||||
sw2N4Fk4gaOWEolFpa0bwNw8nAx7moehZpowzfw=
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAuhWt04Xi/lK3WQqfRoVP9lm53j9rf2r1Gt5rsA7bT8XiNl1P
|
||||
ZGYwUfeZgF5nuEj1x5OfmAzd9fQKiI3t6Coc5Mv54Lyh9hpKCSmMVp7gwXzBB3VY
|
||||
s9kPf8bKNmbx+dLpMFmtKX8dvxFVdcEcXkHEXf1FX6tykyYsxtDPPJjmLxhAMNyx
|
||||
X83n+5NWgrjqH0Jgby7pFLnXGKTM38hxae5UKlOAnK60eUbZn4lH61n3Ri3mtojw
|
||||
waSYDfBEjjMBB7TkxAQ3JWJx/S+Lewh0M/n110uSFhbAyvXwjEI58Q7A1Xjazc02
|
||||
CxWmazIPUuiFEAhLEFrJ6ucHkvKJjqVS1JvZJQIDAQABAoIBAFktMHtw60J0A3fB
|
||||
dmkGVDa78y4F+I88g6/XrYXW6NUHAQyKlRSJQFjXrpFtLImNNXPqVA47BFftFusw
|
||||
ETY0kFo5QkuoOnnFSXuwlJeiVhWDosHfQ54UxK+4ZYnCte3CXIwWPbzoNSoutWTU
|
||||
IbMuE1vzlz5s3GCWZ9jzkoz4vT8NrkucEQ2sxvAVWk2//SoQljN+b4BLDdsWl3Bq
|
||||
l+9JR2EzROXrPH5voYUZV17LbnCOmU+6ucxlGu704oqLJBxtNyYKsSEh4KMo4lX4
|
||||
bOZVSct3LXifj5BQmF9vbi5FiJqFGtoY4iBw0IUq05CJ4nsQuW1ZLucXaw1tBRKn
|
||||
S1l/C0ECgYEA9zWVLQtWGrOZ7we7dTbF5ghZ541NjR9NmBFET5lNRU5yDG0poRdh
|
||||
WD2qioGJigV6ZaEoXny0jFqqqqPM5S/sDRtoicK+XlFuhURw0CZCAsisjVhCDGXU
|
||||
+FJRbR+As7NFvb/9itvNE+PD4p39UXObePzM9JnlHSP7Ml0KdJqcQHUCgYEAwLOp
|
||||
Sp9k0CbFy/lQCSBbBiiu6ol/OxSzOBuZsFIbV8ILcn8v5NWdrcArssJBMdLTIaHN
|
||||
nrTxKOOAzFnPW6DeRmWM/NnwizB/a6uo34q6ywmXmgFSQPX86XTVZCdD96nNik0C
|
||||
KaEY2SqJxrnYstVApWRJAwy7T2jxJEj0aEZBH/ECgYEAmYyTuyXWdsFl9N2lp1m9
|
||||
NHOtfDD9oZF2/eSDvLlpEIp4NpW7jM7b7RZojp2FU9CxRN0EGSR2dNOAPHt/sj/A
|
||||
7CdBGIh4/FayQl7Pf8qzp80DuMvAQrkhvphK8W/m3jeVMxZEovKCAD+yFVmy1dvs
|
||||
DwtfNvM8J4yI47B85Q5/zV0CgYArxGKN/VfjYvsH0e9Ys02ZP4JC6MnJ/HCcLMCi
|
||||
aHOnYf5BmhuhqNbwULZcGny+OTkU6XAPPN+NPubRAxDyqb3yVTxJbaKRqok2Rj3L
|
||||
z/GPDfWt1+D7uiMgTxXscnKgfKOfZtA37kv7fwrd5PYP4BmXtwhSNgERDy+94wgH
|
||||
6vT9sQKBgBqsTsdDmBmKLQM/JzQC2AeQo0/ZFZIXdsiCShMbo2XALlaxZDYDu1it
|
||||
M/zkpmWmHncrBnnW3h6ME1ZZj2HGTowDuJvQqR7cZW5jWY3uLpOnEAGeOoKPhfOP
|
||||
IW2pVPZXq3Zl1yn86oG7C7poPRq0PRu+q2HtHP6/M0NgtGBx8F9M
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEQTCCAymgAwIBAgIINpuaAAnrQZIwDQYJKoZIhvcNAQELBQAwXzELMAkGA1UE
|
||||
BhMCTkwxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp
|
||||
ZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPQ0hBTTUwMCByb290IGNhMCAXDTE3MDIy
|
||||
MjIyMjIwMFoYDzIyMjIwMjIyMjIyMjAwWjBcMQswCQYDVQQGEwJOTDETMBEGA1UE
|
||||
CBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
|
||||
MRUwEwYDVQQDEwxDSEFNNTAwIGNlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||
ggEKAoIBAQDCpVhivH/wBIyu74rvQncnSZqKyspN6CvD1pmV9wft5PHhVt9jV79v
|
||||
gSub5LADoRHAgFdv9duYgBr17Ob6uRrIY4B18CcrCjhQcC4gjx8y2jl9PeYm+qYD
|
||||
3o44FYBrBq0QCnrQgKsb/qX9Z+Mw/VUiw65x68W876LEHQQoEgT4kxSuagwBoVRk
|
||||
ePD6fYAKmT4XS3x+O0v+rHESTcsKF6yMadgp7h3eH1b8kJTzSx8JV9Zzq++mxjox
|
||||
qhbBVP5nDze2hhSIeCkCvSrx7efkgKS4AQXa5/Z44GiAu1TfXXUqdic9rxwD0edn
|
||||
ajNElnZe7sjok/0yuqvH+2hSqpNva/zpAgMBAAGjggEAMIH9MAwGA1UdDwQFAwMH
|
||||
/4AwgewGA1UdJQSB5DCB4QYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYI
|
||||
KwYBBQUHAwQGCCsGAQUFBwMIBgorBgEEAYI3AgEVBgorBgEEAYI3AgEWBgorBgEE
|
||||
AYI3CgMBBgorBgEEAYI3CgMDBgorBgEEAYI3CgMEBglghkgBhvhCBAEGCysGAQQB
|
||||
gjcKAwQBBggrBgEFBQcDBQYIKwYBBQUHAwYGCCsGAQUFBwMHBggrBgEFBQgCAgYK
|
||||
KwYBBAGCNxQCAgYIKwYBBQUHAwkGCCsGAQUFBwMNBggrBgEFBQcDDgYHKwYBBQID
|
||||
BTANBgkqhkiG9w0BAQsFAAOCAQEAawdHy0Xw7nTK2ltp91Ion6fJ7hqYuj///zr7
|
||||
Adt6uonpDh/xl3esuwcFimIJrJrHujnGkL0nLddRCikmnzuBMNDWS6yq0/Ckl/YG
|
||||
yjNr44dlX24wo+MVAgkj3/8CyWDZ3a8kBg9QT3bs2SqbjmhTrXN1DRyf9S5vJysE
|
||||
I7V1gTN66BeKL64hOrAlRVrEu8Ds6TWL6Q/YH+61ViZkoLTeSaPjH4nknaFr4C35
|
||||
iji0JhkyfRHRRVPHFnaj25AkxOrSV64qVKoTMjDl5fji5iMGtjm6iJ7q05ml/qDl
|
||||
nLotHXemZNvYhbwUmRzbt4Dls9EMH4VRbP85I94nM5TAvtHVNA==
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEAwqVYYrx/8ASMru+K70J3J0maisrKTegrw9aZlfcH7eTx4Vbf
|
||||
Y1e/b4Erm+SwA6ERwIBXb/XbmIAa9ezm+rkayGOAdfAnKwo4UHAuII8fMto5fT3m
|
||||
JvqmA96OOBWAawatEAp60ICrG/6l/WfjMP1VIsOucevFvO+ixB0EKBIE+JMUrmoM
|
||||
AaFUZHjw+n2ACpk+F0t8fjtL/qxxEk3LChesjGnYKe4d3h9W/JCU80sfCVfWc6vv
|
||||
psY6MaoWwVT+Zw83toYUiHgpAr0q8e3n5ICkuAEF2uf2eOBogLtU3111KnYnPa8c
|
||||
A9HnZ2ozRJZ2Xu7I6JP9Mrqrx/toUqqTb2v86QIDAQABAoIBAC1q32DKkx+yMBFx
|
||||
m32QiLUGG6VfBC2BixS7MkMnzRXZYgcuehl4FBc0kLRjfB6cqsO8LqrVN1QyMBhK
|
||||
GutN3c38SbE7RChqzhEW2+yE+Mao3Nk4ZEecHLiyaYT0n25ZtHAVwep823BAzwJ+
|
||||
BykbM45VEpNKbG1VjSktjBa9faNyZiZAEJEjVyla+6R8N4kHV52LbZcLjvJv3IQ2
|
||||
iPYRrmMyI5C23qTni0vy7yJbAXBo3CqgSlwie9FARBWT7Puu7F4mF1O1c/SnTysw
|
||||
Tm3e5FzgfHipQbnRVn0w4rDprPMKmPxMnvf/Wkw0zVgNadp1Tc1I6Yj525DEQ07i
|
||||
2gIn/gECgYEA4jNnY1u2Eu7x3pAQF3dRO0x35boVtuq9iwQk7q+uaZaK4RJRr+0Y
|
||||
T68S3bPnfer6SHvcxtST89Bvs/j/Ky4SOaX037UYjFh6T7OIzPl+MzO1yb+VOBT6
|
||||
D6FVGEJGp8ZAITU1OfJPeTYViUeEC8tHFGoKUCk50FbB6jOf1oKtv/ECgYEA3EnB
|
||||
Y7kSbJJaUuj9ciFUL/pAno86Cim3VjegK1wKgEiyDb610bhoMErovPwfVJbtcttG
|
||||
eKJNuwizkRcVbj+vpjDvqqaP5eMxLl6/Nd4haPMJYzGo88Z8NJpwFRNF2KEWjOpQ
|
||||
2NEvoCeRtVulCJyka2Tpljzw8cOXkxhPOe2UhHkCgYBo3entj0QO7QXm56T+LAvV
|
||||
0PK45xdQEO3EuCwjGAFk5C0IgUSrqeCeeIzniZMltj1IQ1wsNbtNynEu3530t8wt
|
||||
O7oVyFBUKGSz9IjUdkpClJOPr6kPMfJoMqRPtdIpz+hFPPSrI6IikKdVWHloOlp+
|
||||
pVaYqTQrWT1XRY2xli3VEQKBgGySmZN6Cx+h/oywswIGdUT0VdcQhq2to+QFpJba
|
||||
VX6m1cM6hMip2Ag9U3qZ1SNPBBdBBfm9HQybHE3dj713/C2wHuAAGhpXIM1W+20k
|
||||
X1knuC/AsSH9aQhQOf/ZMOq1crTfZBuI9q0782/sjGmzMsKPySU4QhUWruVb7OiD
|
||||
NVkZAoGAEvihW7G+8/iOE40vGHyBqUeopAAWLciTAUIEwM/Oi3BYfNWNTWF/FWNc
|
||||
nMvCZPYigY8C1vO+1iT2Frtd3CIU+f01Q3fJNJoRLlEiKLNZUJRF48OKUqjKSmsi
|
||||
w6pucFO40z05YW7utApj4L82rZnOS0pd1tUI1yexqvj0i4ThJfk=
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEJTCCAw2gAwIBAgIBFzANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxGjAYBgNVBAMTEUlkZW50
|
||||
aXR5IENBIFRlc3QyMSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlzdC5hZGxpbmt0ZWNo
|
||||
LmNvbTAeFw0xODA3MjAwMDAwMDBaFw0yNzA3MTkyMzU5NTlaMG0xCzAJBgNVBAYT
|
||||
Ak5MMQswCQYDVQQIEwJPVjETMBEGA1UEChMKQURMaW5rIElTVDEUMBIGA1UEAxML
|
||||
QWxpY2UgVGVzdDIxJjAkBgkqhkiG9w0BCQEWF2luZm9AaXN0LmFkbGlua3RlY2gu
|
||||
Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Fb60RkFrDsRAIRf
|
||||
LMf2fsiRnw9Agp7yEbUsA4Zg4X+hRhBkk78fFtagLisWo4LbT4DqKzqQXCvVnOn9
|
||||
a6uT0KsVejk2iaLoBy0fotQznudio3rzDpTfzP9eRDFVj8RJnl3JJ8P1DULxH7N0
|
||||
TyDBuKZ1ibBfuKjPffqeCEzYKgAc8NG2FB4m6mXzHhXuKw6W2v0IbHz6KYldsavf
|
||||
04rq7ztw0t67bexSQ4gLSVJEwiohAregm0dLvQnap5xd2qn0yETteTL8Y+Ujym1D
|
||||
WAnwDdwA6+0j2a0wkyzOzYQpZMt95NyZ8kcoqEqO8KAN2HclqfjHlg9iDscbof5x
|
||||
45SQwwIDAQABo4HJMIHGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFL66FT0vnlFE
|
||||
+PKrtV+KhJoLsCOWMB8GA1UdIwQYMBaAFIFGyWkPWvNkBD2SCYj9H+NfnlOLMA8G
|
||||
A1UdDwEB/wQFAwMH/4AwZQYDVR0lAQH/BFswWQYIKwYBBQUHAwEGCCsGAQUFBwMC
|
||||
BggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMIBggrBgEFBQcDCQYIKwYBBQUH
|
||||
Aw0GCCsGAQUFBwMOBgcrBgEFAgMFMA0GCSqGSIb3DQEBCwUAA4IBAQCsBINpBXSp
|
||||
Xe3f5MMObeUXE2VhWZWIjMdDQRFDDjq6u1YR7rbffsCReiCX5zviU2dtVV8VN3MQ
|
||||
k7wp8qEDKwP1ToMIwZGwT4Hfwei1eueJ1vuotgiGe0Gm3otXlGsb0C5otnsu63MM
|
||||
OeFgkpZde3VpIqK9EmhgjWOD8TXc8Me7zBlYSEIaXkkwP0jAKRf5vFgz0WfE5ITx
|
||||
SDKUO0OrcN789flO/OKLAHZ4cqNcxNPkMz7h9VBSgRRRk115HEa8Fe46nl1YpwRG
|
||||
0urHlyAKoUV+J+I3Qy4+SwIDwix978hgGN3bKVyv9q0yAQRzpZ54EJOj4C7lNEpB
|
||||
roGVpY4yYP/B
|
||||
-----END CERTIFICATE-----
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIEJDCCAwygAwIBAgIBAzANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJOTDEL
|
||||
MAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1QxJDAiBgNVBAMTG0lkZW50
|
||||
aXR5IENBIFRlc3QgV2l0aCBDaGFpbjEmMCQGCSqGSIb3DQEJARYXaW5mb0Bpc3Qu
|
||||
YWRsaW5rdGVjaC5jb20wHhcNMTgwNjEzMDAwMDAwWhcNMjcwNjEwMjM1OTU5WjBw
|
||||
MQswCQYDVQQGEwJOTDELMAkGA1UECBMCT1YxEzARBgNVBAoTCkFETGluayBJU1Qx
|
||||
FzAVBgNVBAMTDkJvYiBDaGFpbiBUZXN0MSYwJAYJKoZIhvcNAQkBFhdpbmZvQGlz
|
||||
dC5hZGxpbmt0ZWNoLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
||||
AMHm+qG5afCHFdmp98+Z+POB7vD3WhfghKVugh8FenewuPaaotKxiGAE0kCf8WXU
|
||||
5l4XDR3iBWJsGDHll1yOyL4KW9grwfnfiJMl82uIzKGDiRJbFkXVOLF/DcVLsuqM
|
||||
oRjlk09+nlrg/7xS96itgm6yueW/UOIXpo+ElCHwnrYnpuHHrYM0s7t1ls3QFSyd
|
||||
a3INx+LkM6N/b+veVJF95yfe4GvVBhFpLkWtX4xKgZyMjczvmZ6LVNNSnthPhlZF
|
||||
HmspQyqXrTnGyax3qyoloqh9ibDvAK5pUnzqlv/Dyyt110q3bXFR5A0wqfj0fqtp
|
||||
7Mw4TdTkFQy1n4/Y4EuT8I8CAwEAAaOBuzCBuDAdBgNVHQ4EFgQUQpxLPHT5o/GQ
|
||||
RwdBw2scINXnWlUwHwYDVR0jBBgwFoAUTVVCTRc4ST0XmE+EEsenSudwlwkwDwYD
|
||||
VR0PAQH/BAUDAwf/gDBlBgNVHSUBAf8EWzBZBggrBgEFBQcDAQYIKwYBBQUHAwIG
|
||||
CCsGAQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwgGCCsGAQUFBwMJBggrBgEFBQcD
|
||||
DQYIKwYBBQUHAw4GBysGAQUCAwUwDQYJKoZIhvcNAQELBQADggEBAJwd60WigqbB
|
||||
/6CT0ekvXZdvIV5IaIKiy6KYU0/0ebPVXn0YKp9LQTE6lYCr6hZUcEjBfkFBZhAy
|
||||
KJJOb2sUXAnYqnX/mIipiNb7oHsCHxVCKAwEcmxsS3tGl2CXgpKL8EQQFKJgSrC/
|
||||
uzhf2QESQ0T5Mgni1jXXGf6SAwFAjk+mAM9bMdrtLOX39e5aKrgpZOHmdFke+m/K
|
||||
upxP/M0/omTNNQaSfWDmfDvpdsRD9+mFG12Kzgpue2jut1qeICvSmcQsu2OBYG/Q
|
||||
ZXMx8e8azoX0KB+njf826UcVgDkDmfwN9taOU2lFsmZAvYhpIslNwtH/Htu3zJWO
|
||||
vQxyIh+kxFQ=
|
||||
-----END CERTIFICATE-----
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue