diff --git a/.cirrus.yml b/.cirrus.yml index 32ab5adbd0..2948b6d740 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -612,6 +612,21 @@ container_image_manifest_docker_builder: - arm64_container_image - amd64_container_image +# Once we've published new images in container_image_manifest, remove any untagged +# images from the public ECR repository to stay within free-tier bounds. +public_ecr_cleanup_docker_builder: + cpu: 1 + only_if: > + $CIRRUS_CRON == '' && $CIRRUS_REPO_FULL_NAME == 'zeek/zeek' && $CIRRUS_BRANCH == 'master' + env: + AWS_ACCESS_KEY_ID: ENCRYPTED[!eff52f6442e1bc78bce5b15a23546344df41bf519f6201924cb70c7af12db23f442c0e5f2b3687c2d856ceb11fcb8c49!] + AWS_SECRET_ACCESS_KEY: ENCRYPTED[!748bc302dd196140a5fa8e89c9efd148882dc846d4e723787d2de152eb136fa98e8dea7e6d2d6779d94f72dd3c088228!] + AWS_REGION: us-east-1 + cleanup_script: + - ./ci/public-ecr-cleanup.sh + depends_on: + - container_image_manifest + cluster_testing_docker_builder: cpu: *CPUS memory: *MEMORY diff --git a/.cmake-format.json b/.cmake-format.json new file mode 100644 index 0000000000..ff553dbbe2 --- /dev/null +++ b/.cmake-format.json @@ -0,0 +1,80 @@ +{ + "parse": { + "additional_commands": { + "CheckIPProto": { + "kwargs": { + "_proto": "*" + } + }, + "CheckType": { + "kwargs": { + "_type": "*", + "_alt_type": "*", + "_var": "*" + } + }, + "SetPackageVersion": { + "kwargs": { + "_version": "*" + } + }, + "SetPackageFileName": { + "kwargs": { + "_version": "*" + } + }, + "SetPackageInstallScripts": { + "kwargs": { + "VERSION": "*" + } + }, + "ConfigurePackaging": { + "kwargs": { + "_version": "*" + } + }, + "SetPackageGenerators": {}, + "SetPackageMetadata": {}, + "FindRequiredPackage": { + "kwargs": { + "packageName": "*" + } + }, + "InstallClobberImmune": { + "kwargs": { + "_srcfile": "*", + "_dstfile": "*" + } + }, + "InstallPackageConfigFile": { + "kwargs": { + "_srcfile": "*", + "_dstdir": "*", + "_dstfilename": "*" + } + }, + "InstallShellScript": { + "kwargs": { + "_srcfile": "*", + "_dstfile": "*" + } + }, + "InstallSymLink": { + "kwargs": { + "_filepath": "*", + "_sympath": "*" + } + } + } + }, + "format": { + "line_width": 100, + "tab_size": 4, + "separate_ctrl_name_with_space": true, + "max_subgroups_hwrap": 3, + "line_ending": "unix" + }, + "markup": { + "enable_markup": false + } +} diff --git a/.github/workflows/generate-docs.yml b/.github/workflows/generate-docs.yml index d1ba9ad6d2..515fea1992 100644 --- a/.github/workflows/generate-docs.yml +++ b/.github/workflows/generate-docs.yml @@ -34,7 +34,13 @@ jobs: with: submodules: "recursive" + # Only reset the submodule pointer for scheduled builds. The reason to do + # this is to pick up any merge commits or anything that may have been + # missed in a merge, but not have any actual content. We don't want to do + # it otherwise because PRs should just use the submodule they're pointing + # at. - name: Switch doc submodule to master + if: github.event_name == 'schedule' run: cd doc && git checkout master - name: Fetch Dependencies diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 50844cf58b..4315bdfbb9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,3 +17,9 @@ repos: rev: v0.31.0 hooks: - id: yapf + +- repo: https://github.com/cheshirekow/cmake-format-precommit + rev: v0.6.13 + hooks: + - id: cmake-format + exclude: '^auxil/.*$' diff --git a/CHANGES b/CHANGES index 7b171000fa..7dd2361739 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,169 @@ +6.0.0-dev.533 | 2023-05-09 13:38:37 -0700 + + * core.network_time.broker: Test reliability improvement (Arne Welzel, Corelight) + + I wasn't able to reproduce this locally, but after looking at + -B main-loop,tm for a bit it dawned that if the manager is sending + ticks too fast, the Broker IO source may consume two ticks in one go + before expiring timers and that would explain the observed baseline + differences. + + Solve this by removing the reliance on realtime delays and switch to + a request-reply pattern instead. + +6.0.0-dev.531 | 2023-05-09 13:38:15 -0700 + + * ci: Add public-ecr-vacuum.sh (Arne Welzel, Corelight) + +6.0.0-dev.529 | 2023-05-09 12:54:28 -0700 + + * Updating submodule(s) [nomail] (Tim Wojtulewicz, Corelight) + +6.0.0-dev.527 | 2023-05-09 19:11:00 +0200 + + * GH-2930: zeek.bif: Add log2() and ceil() (Arne Welzel, Corelight) + +6.0.0-dev.525 | 2023-05-09 09:05:51 -0700 + + * Use the same rules as cmake submodule to reformat Zeek (Tim Wojtulewicz, Corelight) + + * Update cmake submodule after reformat (Tim Wojtulewicz, Corelight) + +6.0.0-dev.522 | 2023-05-09 15:19:43 +0200 + + * cluster/supervisor: Multi-logger awareness (Arne Welzel, Corelight) + + When multiple loggers are configured in a Supervisor controlled cluster + configuration, encode extra information into the rotated filename to + identify which logger produced the log. + + This is similar to the approach taken for ZeekControl, re-using the + log_suffix terminology, but as there's only a single zeek-archiver + process and no postprocessors and no other side-channel for additional + information, we encode extra metadata into the filename. zeek-archiver + is extended to recognize the special metadata part of the filename. + + This also solves the issue that multiple loggers in a supervisor setup + overwrite each others log files within a single log-queue directory. + + * Bump zeek-archiver submodule (Arne Welzel, Corelight) + +6.0.0-dev.519 | 2023-05-09 11:03:32 +0200 + + * Fixup Val.h/Val.cc: Actually move ValFromJSON into zeek::detail (Arne Welzel, Corelight) + +6.0.0-dev.518 | 2023-05-09 10:19:46 +0200 + + * Implement from_json bif (Fupeng Zhao) + +6.0.0-dev.516 | 2023-05-05 14:08:15 -0700 + + * BTest baseline updates for -O gen-C++ (Vern Paxson, Corelight) + + * updates to C++ maintenance scripts to better handle uncompilable BTests (Vern Paxson, Corelight) + + * added ZEEK_REPORT_UNCOMPILABLE environment variable for "-O report-uncompilable" (Vern Paxson, Corelight) + + * BTest baseline updates for ZAM (Vern Paxson, Corelight) + +6.0.0-dev.511 | 2023-05-05 21:04:11 +0200 + + * Revert "Skip version.h by default for Zeek sources" (Arne Welzel, Corelight) + + This reverts commit 8246baf25c692b658e7a39527f6652e37f5b5095. + + Actually fails the include_plugins CI test and I had just + opened another related issue. + +6.0.0-dev.510 | 2023-05-05 20:14:21 +0200 + + * Skip version.h by default for Zeek sources (Dominik Charousset, Corelight) + +6.0.0-dev.508 | 2023-05-05 08:48:10 -0700 + + * generate-docs: Only update submodule pointer during scheduled builds (Tim Wojtulewicz, Corelight) + +6.0.0-dev.505 | 2023-05-04 20:08:33 +0200 + + * GH-2998: NTP: Detect out-of-order packets (Arne Welzel, Corelight) + + The NTP mode provides us with the identity of the endpoints. For the + simple CLIENT / SERVER modes, flip the connection if we detect + orig/resp disagreeing with what the message says. This mainly + results in the history getting a ^ and the ntp.log / conn.log + showing the corrected endpoints. + +6.0.0-dev.503 | 2023-05-04 10:56:33 -0700 + + * Include compiler in --show-config output (Dominik Charousset, Corelight) + + * Fix CMake option defaults on Windows (Dominik Charousset, Corelight) + + * Move build defaults from configure to CMake (Dominik Charousset, Corelight) + + Moving the defaults for build variables from the `configure` script to + `CMakeLists.txt` gives the same default behavior on platforms where the + `configure` script is not available (Windows) and also allows a pure + CMake-based work flow (e.g., the standard `cmake -S . -B build`) without + having to manually adjust the defaults. + + The `configure` script also becomes much simpler as a result. + +6.0.0-dev.498 | 2023-05-04 09:30:18 +0200 + + * scripts/smb2-main: Reset script-level state upon smb2_discarded_messages_state() (Arne Welzel, Corelight) + + This is similar to what the external corelight/zeek-smb-clear-state script + does, but leverages the smb2_discarded_messages_state() event instead of + regularly checking on the state of SMB connections. + + The pcap was created using the dperson/samba container image and mounting + a share with Linux's CIFS filesystem, then copying the content of a + directory with 100 files. The test uses a BPF filter to imitate mostly + "half-duplex" traffic. + + * smb2: Limit per-connection read/ioctl/tree state (Arne Welzel, Corelight) + + Users on Slack observed memory growth in an environment with a lot of + SMB traffic. jeprof memory profiling pointed at the offset and fid maps + kept per-connection for smb2 read requests. + + These maps can grow unbounded if responses are seen before requests, there's + packet drops, just one side of the connection is visible, or we fail to parse + responses properly. + + Forcefully wipe out these maps when they grow too large and raise + smb2_discarded_messages_state() to notify script land about this. + +6.0.0-dev.493 | 2023-05-03 11:13:15 -0700 + + * Update Mozilla CA and Google CT lists (Johanna Amann, Corelight) + +6.0.0-dev.491 | 2023-05-03 09:31:36 -0700 + + * Surround string assignments in zeek-config in quotes (Tim Wojtulewicz, Corelight) + +6.0.0-dev.489 | 2023-05-03 09:31:19 -0700 + + * Remove parser error message for bro_init, et al (Tim Wojtulewicz, Corelight) + +6.0.0-dev.487 | 2023-05-03 09:30:55 -0700 + + * Add additional length check to IEEE 802.11 analyzer (Tim Wojtulewicz, Corelight) + +6.0.0-dev.484 | 2023-05-03 14:18:03 +0100 + + * SSL: do not try to disable failed analyzer (Johanna Amann, Corelight) + + Currently, if a TLS/DTLS analyzer fails with a protocol violation, we + will still try to remove the analyzer later, which results in the + following error message: + + error: connection does not have analyzer specified to disable + + Now, instead we don't try removing the analyzer anymore, after a + violation occurred. + 6.0.0-dev.480 | 2023-05-02 20:28:55 +0200 * ip4_hdr: Add DF, MF, offset and sum fields (Arne Welzel, Corelight) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03eab558b8..858fd31ddd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,24 +2,79 @@ # auxil/zeek-aux/plugin-support/skeleton/CMakeLists.txt cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR) -if ( WIN32 ) +if (WIN32) # Enable usage of CMAKE_MSVC_RUNTIME_LIBRARY variable cmake_policy(SET CMP0091 NEW) -endif() +endif () project(Zeek C CXX) +# We want to set ENABLE_DEBUG to ON by default if the build type is Debug. +set(ENABLE_DEBUG_DEFAULT OFF) +if (NOT GENERATOR_IS_MULTI_CONFIG) + string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower) + if (build_type_lower STREQUAL "debug") + set(ENABLE_DEBUG_DEFAULT ON) + endif () + unset(build_type_lower) +endif () + +# On UNIX, install additional Zeek tools by default and build shared objects. +if (NOT WIN32) + set(ZEEK_INSTALL_TOOLS_DEFAULT ON) + option(BUILD_SHARED_LIBS "Build targets as shared libraries." ON) +else () + set(ZEEK_INSTALL_TOOLS_DEFAULT OFF) +endif () + +# CMake options (Boolean flags). +option(ENABLE_DEBUG "Build Zeek with additional debugging support." ${ENABLE_DEBUG_DEFAULT}) +option(ENABLE_JEMALLOC "Link against jemalloc." OFF) +option(ENABLE_PERFTOOLS "Build with support for Google perftools." OFF) +option(ENABLE_ZEEK_UNIT_TESTS "Build the C++ unit tests." ON) +option(INSTALL_AUX_TOOLS "Install additional tools from auxil." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_BTEST "Install btest alongside Zeek." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_BTEST_PCAPS "Install pcap files for testing." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_ZEEKCTL "Install zeekctl." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_ZEEK_ARCHIVER "Install the zeek-archiver." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_ZEEK_CLIENT "Install the zeek-client." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_ZKG "Install zkg." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(PREALLOCATE_PORT_ARRAY "Pre-allocate all ports for zeek::Val." ON) option(ZEEK_STANDALONE "Build Zeek as stand-alone binary?" ON) -option(ENABLE_ZEEK_UNIT_TESTS "Build the C++ (doctest) unit tests?" ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON - CACHE INTERNAL "Write JSON compile commands database") + +# Non-boolean options. +if (NOT WIN32) + if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "/usr/local/zeek" + CACHE PATH "Install directory used by install()." FORCE) + endif () + # On windows, this defaults to "c:/Program Files/${PROJECT_NAME}": + # https://cmake.org/cmake/help/v3.15/variable/CMAKE_INSTALL_PREFIX.html. +endif () + +set(ZEEK_SCRIPT_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/share/zeek" + CACHE PATH "Install directory for Zeek scripts.") + +set(ZEEK_ETC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/etc" + CACHE PATH "Install directory for Zeek configuration files.") + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL + "Whether to write a JSON compile commands database") + set(ZEEK_CXX_STD cxx_std_17 CACHE STRING "The C++ standard to use.") +set(ZEEK_SANITIZERS "" CACHE STRING "Sanitizers to use when building.") + +set(CPACK_SOURCE_IGNORE_FILES "" CACHE STRING "Files to be ignored by CPack") + +set(ZEEK_INCLUDE_PLUGINS "" CACHE STRING "Extra plugins to add to the build.") + +# Look into the build tree for additional CMake modules. list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}) list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}) # Windows: Configure runtime and dependencies -if ( MSVC ) +if (MSVC) # Remove existing runtime flags set(CompilerFlags CMAKE_CXX_FLAGS @@ -29,9 +84,8 @@ if ( MSVC ) CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_RELWITHDEBINFO - ) - foreach(CompilerFlag ${CompilerFlags}) + CMAKE_C_FLAGS_RELWITHDEBINFO) + foreach (CompilerFlag ${CompilerFlags}) string(REGEX REPLACE "[/|-]MDd" "" ${CompilerFlag} "${${CompilerFlag}}") string(REGEX REPLACE "[/|-]MD" "" ${CompilerFlag} "${${CompilerFlag}}") string(REGEX REPLACE "[/|-]MTd" "" ${CompilerFlag} "${${CompilerFlag}}") @@ -39,15 +93,13 @@ if ( MSVC ) string(REGEX REPLACE "[/|-]Zi" "" ${CompilerFlag} "${${CompilerFlag}}") string(REGEX REPLACE "[/|-]W3" "" ${CompilerFlag} "${${CompilerFlag}}") string(REGEX REPLACE "[/|-]W4" "" ${CompilerFlag} "${${CompilerFlag}}") - endforeach() + endforeach () # Set compilation flags for Windows - add_compile_options( - /guard:cf # required by CheckCFlags - /Z7) # required by CheckCFlags + add_compile_options(/guard:cf # required by CheckCFlags + /Z7) # required by CheckCFlags - add_link_options( - /debug:full # required by CheckCFlags + add_link_options(/debug:full # required by CheckCFlags ) # Set always to static runtime @@ -64,22 +116,21 @@ if ( MSVC ) set(OPENSSL_USE_STATIC_LIBS true) set(OPENSSL_MSVC_STATIC_RT true) - if ( ZEEK_STANDALONE ) + if (ZEEK_STANDALONE) include(${CMAKE_SOURCE_DIR}/cmake/conan.cmake) conan_cmake_autodetect(settings) # Install packages from conanfile conan_cmake_install(PATH_OR_REFERENCE ${CMAKE_SOURCE_DIR}/ci/windows/conanfile_windows.txt - BUILD missing - SETTINGS ${settings}) - endif() + BUILD missing SETTINGS ${settings}) + endif () # Set LibPCAP to point to libpcap binaries. - if ( NOT PCAP_ROOT_DIR ) + if (NOT PCAP_ROOT_DIR) find_package(libpcap) set(PCAP_ROOT_DIR "${libpcap_LIB_DIRS}/../") set(PCAP_INCLUDE_DIR ${libpcap_INCLUDES}) set(PCAP_LIBRARY ${libpcap_LIBS}) - endif() + endif () set(LIBPCAP_PCAP_COMPILE_NOPCAP_HAS_ERROR_PARAMETER false) @@ -95,7 +146,8 @@ if ( MSVC ) add_definitions(-DCARES_STATICLIB) add_subdirectory(auxil/libunistd) - set(UNISTD_INCLUDES ${CMAKE_SOURCE_DIR}/auxil/libunistd/unistd ${CMAKE_SOURCE_DIR}/auxil/libunistd/regex) + set(UNISTD_INCLUDES ${CMAKE_SOURCE_DIR}/auxil/libunistd/unistd + ${CMAKE_SOURCE_DIR}/auxil/libunistd/regex) include_directories(BEFORE ${UNISTD_INCLUDES}) # Required for `check_include_files` to operate correctly list(APPEND CMAKE_REQUIRED_INCLUDES ${UNISTD_INCLUDES}) @@ -117,8 +169,8 @@ include(cmake/CommonCMakeConfig.cmake) include(cmake/FindClangTidy.cmake) include(cmake/CheckCompilerArch.cmake) -######################################################################## -## Main targets and utilities. +# ############################################################################## +# Main targets and utilities. # Variable for referring back to Zeek's top-level source dir. Used for plugins # to tell them where to find the Zeek headers. @@ -128,8 +180,8 @@ set(ZEEK_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") # zeek-plugin-create-package.sh. Needed by ZeekPluginConfig.cmake.in. set(ZEEK_PLUGIN_SCRIPTS_PATH "${PROJECT_SOURCE_DIR}/cmake") -# Our C++17 base target for propagating compiler and linker flags. -# Note: for now, we only use it for passing library dependencies around. +# Our C++17 base target for propagating compiler and linker flags. Note: for +# now, we only use it for passing library dependencies around. add_library(zeek_internal INTERFACE) add_library(Zeek::Internal ALIAS zeek_internal) set_target_properties(zeek_internal PROPERTIES EXPORT_NAME Internal) @@ -148,11 +200,11 @@ if (ZEEK_STANDALONE) set_target_properties(zeek_exe PROPERTIES RUNTIME_OUTPUT_NAME zeek) if (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) set_target_properties(zeek_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY src) - endif() + endif () install(TARGETS zeek_exe RUNTIME DESTINATION bin) # Export symbols from zeek executable for use by plugins set_target_properties(zeek_exe PROPERTIES ENABLE_EXPORTS ON) - if ( MSVC ) + if (MSVC) set(WINDOWS_EXPORT_ALL_SYMBOLS ON) endif () # Tell zeek_target_link_libraries to add library dependencies as PRIVATE. @@ -163,7 +215,7 @@ if (ZEEK_STANDALONE) endif () else () add_library(zeek_lib STATIC) -endif() +endif () if (TARGET zeek_lib) target_link_libraries(zeek_lib PRIVATE $) @@ -171,15 +223,15 @@ if (TARGET zeek_lib) set_target_properties(zeek_lib PROPERTIES RUNTIME_OUTPUT_NAME libzeek) if (NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) set_target_properties(zeek_lie PROPERTIES LIBRARY_OUTPUT_DIRECTORY src) - endif() + endif () install(TARGETS zeek_lib LIBRARY DESTINATION lib) # Tell zeek_target_link_libraries to add library dependencies as PRIVATE. set(zeek_lib_access PRIVATE) -endif() +endif () # When building our fuzzers, we also need one extra top-level target that # bundles all of our object libraries and other dependencies. -if ( ZEEK_ENABLE_FUZZERS ) +if (ZEEK_ENABLE_FUZZERS) add_library(zeek_fuzzer_shared SHARED) target_link_libraries(zeek_fuzzer_shared PUBLIC $) # Tell zeek_target_link_libraries to add library dependencies as PUBLIC. @@ -187,15 +239,15 @@ if ( ZEEK_ENABLE_FUZZERS ) endif () # Convenience function for adding library dependencies to the main target(s). -function(zeek_target_link_libraries lib_target) +function (zeek_target_link_libraries lib_target) foreach (name zeek_exe zeek_lib zeek_fuzzer_shared) if (TARGET ${name}) target_link_libraries(${name} ${${name}_access} ${lib_target}) endif () - endforeach() -endfunction() + endforeach () +endfunction () -function(zeek_include_directories) +function (zeek_include_directories) foreach (name zeek_exe zeek_lib zeek_fuzzer_shared) if (TARGET ${name}) target_include_directories(${name} ${${name}_access} ${ARGN}) @@ -204,53 +256,40 @@ function(zeek_include_directories) endfunction () # Convenience function for adding a dependency to the main target(s). -function(zeek_add_dependencies dep) +function (zeek_add_dependencies dep) foreach (name zeek_exe zeek_lib zeek_fuzzer_shared) if (TARGET ${name}) add_dependencies(${name} ${dep}) endif () - endforeach() -endfunction() + endforeach () +endfunction () # Interface library for propagating extra flags and include paths to dynamically # loaded plugins. Also propagates include paths and C++17 mode on the install # interface. add_library(zeek_dynamic_plugin_base INTERFACE) -target_link_libraries(zeek_dynamic_plugin_base - INTERFACE - $) -target_include_directories(zeek_dynamic_plugin_base - INTERFACE - $ - $ - $) +target_link_libraries(zeek_dynamic_plugin_base INTERFACE $) +target_include_directories( + zeek_dynamic_plugin_base + INTERFACE $ $ + $) target_compile_features(zeek_dynamic_plugin_base INTERFACE ${ZEEK_CXX_STD}) add_library(Zeek::DynamicPluginBase ALIAS zeek_dynamic_plugin_base) -set_target_properties( - zeek_dynamic_plugin_base PROPERTIES - EXPORT_NAME DynamicPluginBase) +set_target_properties(zeek_dynamic_plugin_base PROPERTIES EXPORT_NAME DynamicPluginBase) install(TARGETS zeek_dynamic_plugin_base EXPORT ZeekTargets) # On macOS, we need to tell the linker that the modules are allowed to have # undefined symbols. if (CMAKE_SYSTEM_NAME MATCHES "Darwin") - target_link_options( - zeek_dynamic_plugin_base - INTERFACE - -undefined - dynamic_lookup - -Wl,-bind_at_load) + target_link_options(zeek_dynamic_plugin_base INTERFACE -undefined dynamic_lookup + -Wl,-bind_at_load) endif () -function(add_zeek_dynamic_plugin_build_interface_include_directories) - foreach ( path ${ARGV} ) - target_include_directories( - zeek_dynamic_plugin_base - INTERFACE - $ - ) +function (add_zeek_dynamic_plugin_build_interface_include_directories) + foreach (path ${ARGV}) + target_include_directories(zeek_dynamic_plugin_base INTERFACE $) endforeach () -endfunction() +endfunction () add_zeek_dynamic_plugin_build_interface_include_directories( ${PROJECT_SOURCE_DIR}/src/include @@ -261,28 +300,20 @@ add_zeek_dynamic_plugin_build_interface_include_directories( ${CMAKE_BINARY_DIR}/src ${CMAKE_BINARY_DIR}/src/include ${CMAKE_BINARY_DIR}/auxil/binpac/lib - ${CMAKE_BINARY_DIR}/auxil/broker/include -) + ${CMAKE_BINARY_DIR}/auxil/broker/include) # Convenience function for adding an OBJECT library that feeds directly into the # main target(s). # -# Usage: -# zeek_add_subdir_library( -# -# SOURCES ... -# [INCLUDE_DIRS ...] -# [DEPENDENCIES ...] -# [INTERNAL_DEPENDENCIES ...] -# [BIFS ...] -# ) -function(zeek_add_subdir_library name) +# Usage: zeek_add_subdir_library( SOURCES ... [INCLUDE_DIRS ...] +# [DEPENDENCIES ...] [INTERNAL_DEPENDENCIES ...] [BIFS ...] ) +function (zeek_add_subdir_library name) # Parse arguments. set(fn_varargs INCLUDE_DIRS DEPENDENCIES INTERNAL_DEPENDENCIES SOURCES BIFS) cmake_parse_arguments(FN_ARGS "" "" "${fn_varargs}" ${ARGN}) if (NOT FN_ARGS_SOURCES) message(FATAL_ERROR "zeek_add_subdir_library called without any SOURCES") - endif() + endif () # Create target and add the sources. set(target_name "zeek_${name}_obj") @@ -293,82 +324,68 @@ function(zeek_add_subdir_library name) # Take care of compiling BIFs. if (FN_ARGS_BIFS) - foreach ( bif ${FN_ARGS_BIFS} ) - # Generate the target and add the extra dependency. - bif_target(${bif}) + foreach (bif ${FN_ARGS_BIFS}) + # Generate the target and add the extra dependency. + bif_target(${bif}) endforeach () - endif() + endif () # Optionally add include directories and extra dependencies. - if ( FN_ARGS_INCLUDE_DIRS ) - target_include_directories( - ${target_name} - BEFORE - PRIVATE - ${FN_ARGS_INCLUDE_DIRS}) + if (FN_ARGS_INCLUDE_DIRS) + target_include_directories(${target_name} BEFORE PRIVATE ${FN_ARGS_INCLUDE_DIRS}) endif () - if ( FN_ARGS_DEPENDENCIES ) + if (FN_ARGS_DEPENDENCIES) target_link_libraries(${target_name} PRIVATE ${FN_ARGS_DEPENDENCIES}) endif () - if ( FN_ARGS_INTERNAL_DEPENDENCIES ) - add_dependencies(${target_name} ${FN_ARGS_INTERNAL_DEPENDENCIES}) + if (FN_ARGS_INTERNAL_DEPENDENCIES) + add_dependencies(${target_name} ${FN_ARGS_INTERNAL_DEPENDENCIES}) endif () # Feed into the main Zeek target(s). zeek_target_link_libraries(${target_name}) -endfunction() +endfunction () -######################################################################## -## Utility function for forcing CMake to re-run if files change on disk. +# ############################################################################## +# Utility function for forcing CMake to re-run if files change on disk. -function(zeek_watch_files) - set_property( - DIRECTORY - APPEND - PROPERTY CMAKE_CONFIGURE_DEPENDS ${ARGN} - ) -endfunction() +function (zeek_watch_files) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${ARGN}) +endfunction () -######################################################################## -## Create empty __load__.zeek stubs (override pre-existing ones). +# ############################################################################## +# Create empty __load__.zeek stubs (override pre-existing ones). -function(zeek_create_load_script_stubs) +function (zeek_create_load_script_stubs) set(file_comment "# Warning, this is an autogenerated file!\n") - foreach ( fpath ${ARGN} ) + foreach (fpath ${ARGN}) file(WRITE "${CMAKE_BINARY_DIR}/${fpath}" "${file_comment}") zeek_watch_files("${CMAKE_BINARY_DIR}/${fpath}") endforeach () endfunction () # Note: these files are filled from BifCl.cmake via `file(APPEND ...)` -zeek_create_load_script_stubs( - scripts/builtin-plugins/__load__.zeek - scripts/base/bif/plugins/__load__.zeek - scripts/base/bif/__load__.zeek -) +zeek_create_load_script_stubs(scripts/builtin-plugins/__load__.zeek + scripts/base/bif/plugins/__load__.zeek scripts/base/bif/__load__.zeek) -######################################################################## -## Create empty __all__*.cc stubs (override pre-existing ones). +# ############################################################################## +# Create empty __all__*.cc stubs (override pre-existing ones). -function(zeek_create_bif_autogen_stubs) +function (zeek_create_bif_autogen_stubs) set(file_comment "// Warning, this is an autogenerated file!\n") - foreach ( fpath ${ARGN} ) + foreach (fpath ${ARGN}) file(WRITE "${CMAKE_BINARY_DIR}/${fpath}" "${file_comment}") zeek_watch_files("${CMAKE_BINARY_DIR}/${fpath}") endforeach () endfunction () # Note: these files are filled from BifCl.cmake via `file(APPEND ...)`. -zeek_create_bif_autogen_stubs( - src/__all__.bif.cc - src/__all__.bif.init.cc - src/__all__.bif.register.cc -) +zeek_create_bif_autogen_stubs(src/__all__.bif.cc src/__all__.bif.init.cc + src/__all__.bif.register.cc) -######################################################################## -## Project/Build Configuration +# ############################################################################## +# Project/Build Configuration -if ( ZEEK_ENABLE_FUZZERS ) +if (ZEEK_ENABLE_FUZZERS) # Fuzzers use shared lib to save disk space, so need -fPIC on everything set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif () @@ -380,15 +397,15 @@ else () add_definitions(-DDOCTEST_CONFIG_DISABLE) endif () -if ( ENABLE_CCACHE ) +if (ENABLE_CCACHE) find_program(CCACHE_PROGRAM ccache) - if ( NOT CCACHE_PROGRAM ) + if (NOT CCACHE_PROGRAM) message(FATAL_ERROR "ccache not found") endif () message(STATUS "Using ccache: ${CCACHE_PROGRAM}") - set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM}) + set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM}) set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM}) endif () @@ -403,57 +420,59 @@ if (NOT ZEEK_MAN_INSTALL_PATH) set(ZEEK_MAN_INSTALL_PATH ${ZEEK_ROOT_DIR}/share/man) endif () -# sanitize the Zeek script install directory into an absolute path -# (CMake is confused by ~ as a representation of home directory) -get_filename_component(ZEEK_SCRIPT_INSTALL_PATH ${ZEEK_SCRIPT_INSTALL_PATH} - ABSOLUTE) +# sanitize the Zeek script install directory into an absolute path (CMake is +# confused by ~ as a representation of home directory) +get_filename_component(ZEEK_SCRIPT_INSTALL_PATH ${ZEEK_SCRIPT_INSTALL_PATH} ABSOLUTE) -# A folder for library-like Zeek-specific things: Python modules, Zeek -# plugins, etc. +# A folder for library-like Zeek-specific things: Python modules, Zeek plugins, +# etc. set(ZEEK_LIBDIR_PATH ${CMAKE_INSTALL_FULL_LIBDIR}/zeek) if (NOT ZEEK_PLUGIN_DIR) - set(ZEEK_PLUGIN_DIR ${ZEEK_LIBDIR_PATH}/plugins - CACHE STRING "Installation path for plugins" FORCE) -endif() + set(ZEEK_PLUGIN_DIR ${ZEEK_LIBDIR_PATH}/plugins CACHE STRING "Installation path for plugins" + FORCE) +endif () set(cmake_binary_dir "${CMAKE_BINARY_DIR}") set(cmake_current_binary_dir "${CMAKE_CURRENT_BINARY_DIR}") set(cmake_install_prefix "${CMAKE_INSTALL_PREFIX}") set(cmake_source_dir "${CMAKE_SOURCE_DIR}") set(zeek_script_install_path "${ZEEK_SCRIPT_INSTALL_PATH}") -if ( MSVC ) - # This has to happen before we modify the paths below so that - # the pure Windows paths are stored in the output file. +if (MSVC) + # This has to happen before we modify the paths below so that the pure Windows + # paths are stored in the output file. configure_file(zeek-path-dev.bat.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.bat) string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_binary_dir "${cmake_binary_dir}") - string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_current_binary_dir "${cmake_current_binary_dir}") - string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_install_prefix "${cmake_install_prefix}") + string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_current_binary_dir + "${cmake_current_binary_dir}") + string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_install_prefix + "${cmake_install_prefix}") string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_source_dir "${cmake_source_dir}") - string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" zeek_script_install_path "${zeek_script_install_path}") + string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" zeek_script_install_path + "${zeek_script_install_path}") endif () # Set the path where we install the ZeekConfig.cmake file and related files. set(ZEEK_CMAKE_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/zeek/cmake") -if ( NOT ZEEK_ETC_INSTALL_DIR ) +if (NOT ZEEK_ETC_INSTALL_DIR) set(ZEEK_ETC_INSTALL_DIR ${ZEEK_ROOT_DIR}/etc) endif () -if ( NOT ZEEK_STATE_DIR ) +if (NOT ZEEK_STATE_DIR) set(ZEEK_STATE_DIR ${ZEEK_ROOT_DIR}/var/lib) endif () -if ( NOT ZEEK_SPOOL_DIR ) +if (NOT ZEEK_SPOOL_DIR) set(ZEEK_SPOOL_DIR ${ZEEK_ROOT_DIR}/spool) endif () -if ( NOT ZEEK_LOG_DIR ) +if (NOT ZEEK_LOG_DIR) set(ZEEK_LOG_DIR ${ZEEK_ROOT_DIR}/logs) endif () -if ( NOT MSVC ) +if (NOT MSVC) set(HAVE_SUPERVISOR true) endif () @@ -464,25 +483,28 @@ install(DIRECTORY DESTINATION ${ZEEK_LOG_DIR}) configure_file(zeek-path-dev.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev) -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.sh - "export ZEEKPATH=`${cmake_binary_dir}/zeek-path-dev`\n" - "export ZEEK_PLUGIN_PATH=\"${cmake_binary_dir}/src\":$\{ZEEK_PLUGIN_PATH\}\n" - "export PATH=\"${cmake_binary_dir}\":\"${cmake_binary_dir}/src\":\"${cmake_binary_dir}/auxil/spicy/spicy/bin\":\"${cmake_binary_dir}/src/builtin-plugins/spicy-plugin/bin\":$\{PATH\}\n" - "export SPICY_PATH=`${cmake_binary_dir}/spicy-path`\n" - "export HILTI_CXX_INCLUDE_DIRS=`${cmake_binary_dir}/hilti-cxx-include-dirs`\n") +file( + WRITE ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.sh + "export ZEEKPATH=`${cmake_binary_dir}/zeek-path-dev`\n" + "export ZEEK_PLUGIN_PATH=\"${cmake_binary_dir}/src\":$\{ZEEK_PLUGIN_PATH\}\n" + "export PATH=\"${cmake_binary_dir}\":\"${cmake_binary_dir}/src\":\"${cmake_binary_dir}/auxil/spicy/spicy/bin\":\"${cmake_binary_dir}/src/builtin-plugins/spicy-plugin/bin\":$\{PATH\}\n" + "export SPICY_PATH=`${cmake_binary_dir}/spicy-path`\n" + "export HILTI_CXX_INCLUDE_DIRS=`${cmake_binary_dir}/hilti-cxx-include-dirs`\n") -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.csh - "setenv ZEEKPATH `${cmake_binary_dir}/zeek-path-dev`\n" - "setenv ZEEK_PLUGIN_PATH \"${cmake_binary_dir}/src\":$\{ZEEK_PLUGIN_PATH\}\n" - "setenv PATH \"${cmake_binary_dir}\":\"${cmake_binary_dir}/src\":\"${cmake_binary_dir}/auxil/spicy/spicy/bin\":\"${cmake_binary_dir}/src/builtin-plugins/spicy-plugin/bin\":$\{PATH\}\n" - "setenv SPICY_PATH \"`${cmake_binary_dir}/spicy-path`\"\n" - "setenv HILTI_CXX_INCLUDE_DIRS \"`${cmake_binary_dir}/hilti-cxx-include-dirs`\"\n") +file( + WRITE ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.csh + "setenv ZEEKPATH `${cmake_binary_dir}/zeek-path-dev`\n" + "setenv ZEEK_PLUGIN_PATH \"${cmake_binary_dir}/src\":$\{ZEEK_PLUGIN_PATH\}\n" + "setenv PATH \"${cmake_binary_dir}\":\"${cmake_binary_dir}/src\":\"${cmake_binary_dir}/auxil/spicy/spicy/bin\":\"${cmake_binary_dir}/src/builtin-plugins/spicy-plugin/bin\":$\{PATH\}\n" + "setenv SPICY_PATH \"`${cmake_binary_dir}/spicy-path`\"\n" + "setenv HILTI_CXX_INCLUDE_DIRS \"`${cmake_binary_dir}/hilti-cxx-include-dirs`\"\n") file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" VERSION LIMIT_COUNT 1) -execute_process(COMMAND grep "^constexpr int PLUGIN_API_VERSION" - INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/Plugin.h - OUTPUT_VARIABLE API_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process( + COMMAND grep "^constexpr int PLUGIN_API_VERSION" + INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/Plugin.h + OUTPUT_VARIABLE API_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) string(REGEX MATCH "^constexpr int PLUGIN_API_VERSION = ([0-9]+);" API_VERSION "${API_VERSION}") set(API_VERSION "${CMAKE_MATCH_1}") @@ -500,15 +522,16 @@ set(VERSION_C_IDENT "${VERSION}_plugin_${API_VERSION}") string(REGEX REPLACE "-[0-9]*$" "_git" VERSION_C_IDENT "${VERSION_C_IDENT}") string(REGEX REPLACE "[^a-zA-Z0-9_\$]" "_" VERSION_C_IDENT "${VERSION_C_IDENT}") -if(ENABLE_DEBUG) +if (ENABLE_DEBUG) set(VERSION_C_IDENT "${VERSION_C_IDENT}_debug") target_compile_definitions(zeek_internal INTERFACE DEBUG) target_compile_definitions(zeek_dynamic_plugin_base INTERFACE DEBUG) -endif() +endif () -if ( NOT BINARY_PACKAGING_MODE ) - macro(_make_install_dir_symlink _target _link) - install(CODE " +if (NOT BINARY_PACKAGING_MODE) + macro (_make_install_dir_symlink _target _link) + install( + CODE " if ( \"\$ENV{DESTDIR}\" STREQUAL \"\" ) if ( EXISTS \"${_target}\" AND NOT EXISTS \"${_link}\" ) message(STATUS \"WARNING: installed ${_link} as symlink to ${_target}\") @@ -517,84 +540,91 @@ if ( NOT BINARY_PACKAGING_MODE ) endif () endif () ") - endmacro() + endmacro () - if ( "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local/zeek" ) - # If we're installing into the default prefix, check if the - # old default prefix already exists and symlink to it. - # This is done to help keep custom user configuration/installation - # if they're upgrading from a version before Zeek 3.0. + if ("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local/zeek") + # If we're installing into the default prefix, check if the old default + # prefix already exists and symlink to it. This is done to help keep custom + # user configuration/installation if they're upgrading from a version before + # Zeek 3.0. _make_install_dir_symlink("/usr/local/bro" "/usr/local/zeek") endif () - # Check whether we need to symlink directories used by versions - # before Zeek 3.0. - _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/include/bro" "${CMAKE_INSTALL_PREFIX}/include/zeek") - _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/share/bro" "${CMAKE_INSTALL_PREFIX}/share/zeek") + # Check whether we need to symlink directories used by versions before Zeek + # 3.0. + _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/include/bro" + "${CMAKE_INSTALL_PREFIX}/include/zeek") + _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/share/bro" + "${CMAKE_INSTALL_PREFIX}/share/zeek") _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/lib/bro" "${CMAKE_INSTALL_FULL_LIBDIR}/zeek") endif () -if ( ZEEK_SANITIZERS ) +if (ZEEK_SANITIZERS) # Check the thread library info early as setting compiler flags seems to - # interfere with the detection and cause CMAKE_THREAD_LIBS_INIT to not - # include -lpthread when it should. + # interfere with the detection and cause CMAKE_THREAD_LIBS_INIT to not include + # -lpthread when it should. find_package(Threads) string(REPLACE "," " " _sanitizer_args "${ZEEK_SANITIZERS}") separate_arguments(_sanitizer_args) set(ZEEK_SANITIZERS "") - foreach ( _sanitizer ${_sanitizer_args} ) - if ( ZEEK_SANITIZERS ) + foreach (_sanitizer ${_sanitizer_args}) + if (ZEEK_SANITIZERS) set(ZEEK_SANITIZERS "${ZEEK_SANITIZERS},") endif () - if ( _sanitizer STREQUAL "thread" ) + if (_sanitizer STREQUAL "thread") set(ZEEK_TSAN true) endif () - if ( NOT _sanitizer STREQUAL "undefined" ) + if (NOT _sanitizer STREQUAL "undefined") set(ZEEK_SANITIZERS "${ZEEK_SANITIZERS}${_sanitizer}") continue() endif () - if ( NOT DEFINED ZEEK_SANITIZER_UB_CHECKS ) - if ( DEFINED ENV{ZEEK_TAILORED_UB_CHECKS} ) + if (NOT DEFINED ZEEK_SANITIZER_UB_CHECKS) + if (DEFINED ENV{ZEEK_TAILORED_UB_CHECKS}) # list(APPEND _check_list "alignment") # TODO: fix associated errors list(APPEND _check_list "bool") # list(APPEND _check_list "builtin") # Not implemented in older GCCs - list(APPEND _check_list "bounds") # Covers both array/local bounds options below + list(APPEND _check_list "bounds") # Covers both array/local bounds + # options below # list(APPEND _check_list "array-bounds") # Not implemented by GCC - # list(APPEND _check_list "local-bounds") # Not normally part of "undefined" + # list(APPEND _check_list "local-bounds") # Not normally part of + # "undefined" list(APPEND _check_list "enum") list(APPEND _check_list "float-cast-overflow") list(APPEND _check_list "float-divide-by-zero") # list(APPEND _check_list "function") # Not implemented by GCC - # list(APPEND _check_list "implicit-unsigned-integer-truncation") # Not truly UB - # list(APPEND _check_list "implicit-signed-integer-truncation") # Not truly UB - # list(APPEND _check_list "implicit-integer-sign-change") # Not truly UB + # list(APPEND _check_list "implicit-unsigned-integer-truncation") # Not + # truly UB list(APPEND _check_list "implicit-signed-integer-truncation") + # # Not truly UB list(APPEND _check_list "implicit-integer-sign-change") + # # Not truly UB list(APPEND _check_list "integer-divide-by-zero") list(APPEND _check_list "nonnull-attribute") list(APPEND _check_list "null") - # list(APPEND _check_list "nullability-arg") # Not normally part of "undefined" - # list(APPEND _check_list "nullability-assign") # Not normally part of "undefined" - # list(APPEND _check_list "nullability-return") # Not normally part of "undefined" - # list(APPEND _check_list "objc-cast") # Not truly UB - # list(APPEND _check_list "pointer-overflow") # Not implemented in older GCCs + # list(APPEND _check_list "nullability-arg") # Not normally part of + # "undefined" list(APPEND _check_list "nullability-assign") # Not + # normally part of "undefined" list(APPEND _check_list + # "nullability-return") # Not normally part of "undefined" list(APPEND + # _check_list "objc-cast") # Not truly UB list(APPEND _check_list + # "pointer-overflow") # Not implemented in older GCCs list(APPEND _check_list "return") list(APPEND _check_list "returns-nonnull-attribute") list(APPEND _check_list "shift") - # list(APPEND _check_list "unsigned-shift-base") # Not implemented by GCC + # list(APPEND _check_list "unsigned-shift-base") # Not implemented by + # GCC list(APPEND _check_list "signed-integer-overflow") list(APPEND _check_list "unreachable") # list(APPEND _check_list "unsigned-integer-overflow") # Not truly UB list(APPEND _check_list "vla-bound") list(APPEND _check_list "vptr") - # Clang complains if this one is defined and the optimizer is set to -O0. We - # only set that optimization level if NO_OPTIMIZATIONS is passed, so disable - # the option if that's set. - if ( NOT DEFINED ENV{NO_OPTIMIZATIONS} ) + # Clang complains if this one is defined and the optimizer is set to + # -O0. We only set that optimization level if NO_OPTIMIZATIONS is + # passed, so disable the option if that's set. + if (NOT DEFINED ENV{NO_OPTIMIZATIONS}) list(APPEND _check_list "object-size") endif () @@ -610,52 +640,54 @@ if ( ZEEK_SANITIZERS ) set(_sanitizer_flags "-fsanitize=${ZEEK_SANITIZERS}") - # The linker command used by check_cxx_compiler_flag requires you to also pass the sanitizer to - # it or it fails. The best way to do this is to set CMAKE_REQUIRED_LINK_OPTIONS, but save off a - # copy of it so it can be reset back to what it was previously afterwards. + # The linker command used by check_cxx_compiler_flag requires you to also pass + # the sanitizer to it or it fails. The best way to do this is to set + # CMAKE_REQUIRED_LINK_OPTIONS, but save off a copy of it so it can be reset + # back to what it was previously afterwards. set(_temp_link_options ${CMAKE_REQUIRED_LINK_OPTIONS}) list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${_sanitizer_flags}) include(CheckCXXCompilerFlag) check_cxx_compiler_flag(${_sanitizer_flags} COMPILER_SUPPORTS_SANITIZERS) - if ( NOT COMPILER_SUPPORTS_SANITIZERS ) - message(FATAL_ERROR "Invalid sanitizer compiler flags: ${_sanitizer_flags}") - endif() + if (NOT COMPILER_SUPPORTS_SANITIZERS) + message(FATAL_ERROR "Invalid sanitizer compiler flags: ${_sanitizer_flags}") + endif () set(CMAKE_REQUIRED_LINK_OPTIONS ${_temp_link_options}) - if ( ZEEK_SANITIZER_UB_CHECKS ) - set(_sanitizer_flags "${_sanitizer_flags} -fno-sanitize-recover=${ZEEK_SANITIZER_UB_CHECKS}") + if (ZEEK_SANITIZER_UB_CHECKS) + set(_sanitizer_flags + "${_sanitizer_flags} -fno-sanitize-recover=${ZEEK_SANITIZER_UB_CHECKS}") endif () set(_sanitizer_flags "${_sanitizer_flags} -fno-omit-frame-pointer") set(_sanitizer_flags "${_sanitizer_flags} -fno-optimize-sibling-calls") - if ( NOT DEFINED ZEEK_SANITIZER_OPTIMIZATIONS ) - if ( DEFINED ENV{NO_OPTIMIZATIONS} ) + if (NOT DEFINED ZEEK_SANITIZER_OPTIMIZATIONS) + if (DEFINED ENV{NO_OPTIMIZATIONS}) # Using -O1 is generally the suggestion to get more reasonable - # performance. The one downside is it that the compiler may - # optimize out code that otherwise generates an error/leak in a -O0 - # build, but that should be rare and users mostly will not be - # running unoptimized builds in production anyway. + # performance. The one downside is it that the compiler may optimize out + # code that otherwise generates an error/leak in a -O0 build, but that + # should be rare and users mostly will not be running unoptimized builds + # in production anyway. set(ZEEK_SANITIZER_OPTIMIZATIONS false CACHE INTERNAL "" FORCE) else () set(ZEEK_SANITIZER_OPTIMIZATIONS true CACHE INTERNAL "" FORCE) endif () endif () - if ( ZEEK_SANITIZER_OPTIMIZATIONS ) + if (ZEEK_SANITIZER_OPTIMIZATIONS) set(_sanitizer_flags "${_sanitizer_flags} -O1") endif () - # Technically, the we also need to use the compiler to drive linking and - # give the sanitizer flags there, too. However, CMake, by default, uses - # the compiler for linking and so the automatically flags get used. See + # Technically, the we also need to use the compiler to drive linking and give + # the sanitizer flags there, too. However, CMake, by default, uses the + # compiler for linking and so the automatically flags get used. See # https://cmake.org/pipermail/cmake/2014-August/058268.html set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_sanitizer_flags}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_sanitizer_flags}") -endif() +endif () -######################################################################## -## Dependency Configuration +# ############################################################################## +# Dependency Configuration include(FindRequiredPackage) @@ -675,14 +707,14 @@ FindRequiredPackage(FLEX) FindRequiredPackage(BISON) FindRequiredPackage(PCAP) FindRequiredPackage(OpenSSL) -if ( NOT MSVC ) +if (NOT MSVC) FindRequiredPackage(BIND) endif () FindRequiredPackage(ZLIB) # Forward user-defined hint for OpenSSL to the plugins. Use a cache variable to -# make sure this variable survives CMake re-runs. -# Note: This variable is picked up in ZeekPluginConfig.cmake.in. +# make sure this variable survives CMake re-runs. Note: This variable is picked +# up in ZeekPluginConfig.cmake.in. if (OPENSSL_ROOT_DIR) set(ZeekOpenSSLHint "${OPENSSL_ROOT_DIR}" CACHE INTERNAL "" FORCE) elseif (DEFINED ENV{OPENSSL_ROOT_DIR}) @@ -690,18 +722,17 @@ elseif (DEFINED ENV{OPENSSL_ROOT_DIR}) endif () # Forward PKG_CONFIG_PATH to the plugins. Use a cache variable to make sure this -# variable survives CMake re-runs. -# Note: This variable is picked up in ZeekPluginConfig.cmake.in. +# variable survives CMake re-runs. Note: This variable is picked up in +# ZeekPluginConfig.cmake.in. if (DEFINED ENV{PKG_CONFIG_PATH}) set(ZeekPkgConfigPath "$ENV{PKG_CONFIG_PATH}" CACHE INTERNAL "" FORCE) endif () -# Installation directory for the distribution's Python modules. An -# override via configure's --python-dir wins, specifying a directory -# explicitly. Next is --python-prefix, which includes a versioned -# Python folder as the --prefix option in distutils does. Next -# consider a distutils --home style override via --python-home, and -# finally default to "zeek/python" in our libdir. +# Installation directory for the distribution's Python modules. An override via +# configure's --python-dir wins, specifying a directory explicitly. Next is +# --python-prefix, which includes a versioned Python folder as the --prefix +# option in distutils does. Next consider a distutils --home style override via +# --python-home, and finally default to "zeek/python" in our libdir. if (ZEEK_PYTHON_DIR) set(py_mod_install_dir ${ZEEK_PYTHON_DIR}) elseif (ZEEK_PYTHON_PREFIX) @@ -712,25 +743,25 @@ elseif (ZEEK_PYTHON_HOME) else () set(py_mod_install_dir ${ZEEK_LIBDIR_PATH}/python) endif () -set(PY_MOD_INSTALL_DIR ${py_mod_install_dir} - CACHE STRING "Installation path for Python modules" FORCE) +set(PY_MOD_INSTALL_DIR ${py_mod_install_dir} CACHE STRING "Installation path for Python modules" + FORCE) if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/auxil/binpac/CMakeLists.txt) set(ENABLE_STATIC_ONLY_SAVED ${ENABLE_STATIC_ONLY}) - if ( MSVC ) + if (MSVC) set(BUILD_STATIC_BINPAC true) - endif() + endif () - if ( BUILD_STATIC_BINPAC ) - set(ENABLE_STATIC_ONLY true) - endif() + if (BUILD_STATIC_BINPAC) + set(ENABLE_STATIC_ONLY true) + endif () add_subdirectory(auxil/binpac) set(ENABLE_STATIC_ONLY ${ENABLE_STATIC_ONLY_SAVED}) - # FIXME: avoid hard-coding a path for multi-config generator support. - # See the TODO in ZeekPluginConfig.cmake.in. + # FIXME: avoid hard-coding a path for multi-config generator support. See the + # TODO in ZeekPluginConfig.cmake.in. set(BINPAC_EXE_PATH "${CMAKE_BINARY_DIR}/auxil/binpac/src/binpac${CMAKE_EXECUTABLE_SUFFIX}") endif () FindRequiredPackage(BinPAC) @@ -738,22 +769,21 @@ FindRequiredPackage(BinPAC) # Add an alias (used by our plugin setup). add_executable(Zeek::BinPAC ALIAS binpac) -if ( NOT BIFCL_EXE_PATH ) +if (NOT BIFCL_EXE_PATH) add_subdirectory(auxil/bifcl) add_executable(Zeek::BifCl ALIAS bifcl) - # FIXME: avoid hard-coding a path for multi-config generator support. - # See the TODO in ZeekPluginConfig.cmake.in. + # FIXME: avoid hard-coding a path for multi-config generator support. See the + # TODO in ZeekPluginConfig.cmake.in. set(BIFCL_EXE_PATH "${CMAKE_BINARY_DIR}/auxil/bifcl/bifcl${CMAKE_EXECUTABLE_SUFFIX}") set(_bifcl_exe_path "included") -else ( ) +else () add_executable(Zeek::BifCl IMPORTED) - set_property(TARGET Zeek::BifCl PROPERTY - IMPORTED_LOCATION "${BIFCL_EXE_PATH}") + set_property(TARGET Zeek::BifCl PROPERTY IMPORTED_LOCATION "${BIFCL_EXE_PATH}") set(_bifcl_exe_path "BIFCL_EXE_PATH") endif () -if ( NOT GEN_ZAM_EXE_PATH ) - add_subdirectory(auxil/gen-zam) +if (NOT GEN_ZAM_EXE_PATH) + add_subdirectory(auxil/gen-zam) endif () if (ENABLE_JEMALLOC) @@ -761,20 +791,20 @@ if (ENABLE_JEMALLOC) if (DEFINED JEMALLOC_ROOT_DIR) # Look for jemalloc at a specific path find_package(JeMalloc) - else() + else () # jemalloc is in the base system set(JEMALLOC_FOUND true) - endif() - else() + endif () + else () find_package(JeMalloc) - endif() + endif () if (NOT JEMALLOC_FOUND) message(FATAL_ERROR "Could not find requested JeMalloc") - endif() + endif () endif () -if ( BISON_VERSION AND BISON_VERSION VERSION_LESS 2.5 ) +if (BISON_VERSION AND BISON_VERSION VERSION_LESS 2.5) set(MISSING_PREREQS true) list(APPEND MISSING_PREREQ_DESCS " Could not find prerequisite package Bison >= 2.5, found: ${BISON_VERSION}") @@ -789,12 +819,12 @@ endif () set(ZEEK_PYTHON_MIN 3.5.0) -if ( PYTHON_VERSION_STRING VERSION_LESS ${ZEEK_PYTHON_MIN} ) +if (PYTHON_VERSION_STRING VERSION_LESS ${ZEEK_PYTHON_MIN}) message(FATAL_ERROR "Python ${ZEEK_PYTHON_MIN} or greater is required.") endif () add_subdirectory(auxil/paraglob) -if ( MSVC ) +if (MSVC) cmake_policy(SET CMP0079 NEW) target_link_libraries(paraglob shlwapi) set(BROKER_DISABLE_TOOLS true) @@ -802,56 +832,54 @@ endif () set(zeekdeps ${zeekdeps} paraglob) # Note: Broker gets some special attention in ZeekConfig.cmake.in. -if ( Broker_ROOT ) - find_package(Broker REQUIRED CONFIG) - list(APPEND zeekdeps ${BROKER_LIBRARY}) - set(broker_includes ${BROKER_INCLUDE_DIR}) - set(ZEEK_HAS_EXTERNAL_BROKER ON) - set(ZEEK_HAS_STATIC_BROKER OFF) -else () - if ( ZEEK_SANITIZERS ) - set(BROKER_SANITIZERS ${ZEEK_SANITIZERS}) - endif () - - set(ENABLE_STATIC_ONLY_SAVED ${ENABLE_STATIC_ONLY}) - if ( MSVC ) - set(BUILD_STATIC_BROKER true) - endif() - - if ( BUILD_STATIC_BROKER ) - set(ENABLE_STATIC_ONLY true) - endif() - - add_subdirectory(auxil/broker) - set(ENABLE_STATIC_ONLY ${ENABLE_STATIC_ONLY_SAVED}) - - if ( BUILD_STATIC_BROKER ) - list(APPEND zeekdeps broker_static) - else() - list(APPEND zeekdeps broker) - endif() - - set( - broker_includes - ${CMAKE_CURRENT_SOURCE_DIR}/auxil/broker/include - ${CMAKE_CURRENT_BINARY_DIR}/auxil/broker/include) - - if (BUILD_STATIC_BROKER) - set(ZEEK_HAS_STATIC_BROKER ON) - else () +if (Broker_ROOT) + find_package(Broker REQUIRED CONFIG) + list(APPEND zeekdeps ${BROKER_LIBRARY}) + set(broker_includes ${BROKER_INCLUDE_DIR}) + set(ZEEK_HAS_EXTERNAL_BROKER ON) set(ZEEK_HAS_STATIC_BROKER OFF) - endif () - set(ZEEK_HAS_EXTERNAL_BROKER OFF) +else () + if (ZEEK_SANITIZERS) + set(BROKER_SANITIZERS ${ZEEK_SANITIZERS}) + endif () - # Tell plugins where to find the Broker CMake package in the source tree. - # This variable is picked up in ZeekPluginConfig.cmake.in. - set(ZEEK_PLUGIN_BROKER_PATH "${CMAKE_CURRENT_BINARY_DIR}/auxil/broker") + set(ENABLE_STATIC_ONLY_SAVED ${ENABLE_STATIC_ONLY}) + if (MSVC) + set(BUILD_STATIC_BROKER true) + endif () + + if (BUILD_STATIC_BROKER) + set(ENABLE_STATIC_ONLY true) + endif () + + add_subdirectory(auxil/broker) + set(ENABLE_STATIC_ONLY ${ENABLE_STATIC_ONLY_SAVED}) + + if (BUILD_STATIC_BROKER) + list(APPEND zeekdeps broker_static) + else () + list(APPEND zeekdeps broker) + endif () + + set(broker_includes ${CMAKE_CURRENT_SOURCE_DIR}/auxil/broker/include + ${CMAKE_CURRENT_BINARY_DIR}/auxil/broker/include) + + if (BUILD_STATIC_BROKER) + set(ZEEK_HAS_STATIC_BROKER ON) + else () + set(ZEEK_HAS_STATIC_BROKER OFF) + endif () + set(ZEEK_HAS_EXTERNAL_BROKER OFF) + + # Tell plugins where to find the Broker CMake package in the source tree. This + # variable is picked up in ZeekPluginConfig.cmake.in. + set(ZEEK_PLUGIN_BROKER_PATH "${CMAKE_CURRENT_BINARY_DIR}/auxil/broker") endif () -if ( NOT DISABLE_SPICY ) +if (NOT DISABLE_SPICY) set(USE_SPICY_ANALYZERS yes) - if ( NOT SPICY_ROOT_DIR ) + if (NOT SPICY_ROOT_DIR) set(HAVE_SPICY yes) # evaluated by Spicy plugin build add_subdirectory(auxil/spicy) @@ -875,26 +903,19 @@ if ( NOT DISABLE_SPICY ) set(SPICY_LIBRARY_RT_DEBUG spicy-rt-debug) # Needed only for logging from CMake configure phase. + get_directory_property(SPICY_VERSION DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy + DEFINITION SPICY_VERSION) get_directory_property( - SPICY_VERSION - DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy - DEFINITION SPICY_VERSION) - get_directory_property( - SPICY_VERSION_NUMBER - DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy - DEFINITION SPICY_VERSION_NUMBER) - get_directory_property( - SPICY_PREFIX - DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy - DEFINITION CMAKE_INSTALL_PREFIX) - get_directory_property( - SPICY_BUILD_MODE - DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy - DEFINITION CMAKE_BUILD_TYPE) + SPICY_VERSION_NUMBER DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy DEFINITION + SPICY_VERSION_NUMBER) + get_directory_property(SPICY_PREFIX DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy + DEFINITION CMAKE_INSTALL_PREFIX) + get_directory_property(SPICY_BUILD_MODE DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy + DEFINITION CMAKE_BUILD_TYPE) set(SPICYC "") endif () - if ( NOT SPICY_PLUGIN_PATH ) + if (NOT SPICY_PLUGIN_PATH) set(_spicy_plugin "included") set(SPICY_PLUGIN_PATH ${CMAKE_SOURCE_DIR}/auxil/spicy-plugin) endif () @@ -909,13 +930,8 @@ endif () set(USE_SPICY_ANALYZERS "${USE_SPICY_ANALYZERS}" CACHE BOOL "Use built-in Spicy analyzers") include(BuiltInSpicyAnalyzer) -include_directories(BEFORE - ${PCAP_INCLUDE_DIR} - ${BIND_INCLUDE_DIR} - ${BinPAC_INCLUDE_DIR} - ${ZLIB_INCLUDE_DIR} - ${JEMALLOC_INCLUDE_DIR} -) +include_directories(BEFORE ${PCAP_INCLUDE_DIR} ${BIND_INCLUDE_DIR} ${BinPAC_INCLUDE_DIR} + ${ZLIB_INCLUDE_DIR} ${JEMALLOC_INCLUDE_DIR}) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/auxil/rapidjson/include/rapidjson DESTINATION include/zeek/3rdparty/rapidjson/include) @@ -926,10 +942,12 @@ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/auxil/filesystem/include/ghc # Create 3rdparty/ghc within the build directory so that the include for # "zeek/3rdparty/ghc/filesystem.hpp" works within the build tree. execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory - "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/") -execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink - "${CMAKE_CURRENT_SOURCE_DIR}/auxil/filesystem/include/ghc" - "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/ghc") + "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/") +execute_process( + COMMAND + "${CMAKE_COMMAND}" -E create_symlink + "${CMAKE_CURRENT_SOURCE_DIR}/auxil/filesystem/include/ghc" + "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/ghc") # Optional Dependencies @@ -942,23 +960,23 @@ if (LIBMMDB_FOUND) endif () set(USE_KRB5 false) -if ( ${CMAKE_SYSTEM_NAME} MATCHES Linux ) - find_package(LibKrb5) - if (LIBKRB5_FOUND) - set(USE_KRB5 true) - include_directories(BEFORE ${LibKrb5_INCLUDE_DIR}) - list(APPEND OPTLIBS ${LibKrb5_LIBRARY}) - endif () +if (${CMAKE_SYSTEM_NAME} MATCHES Linux) + find_package(LibKrb5) + if (LIBKRB5_FOUND) + set(USE_KRB5 true) + include_directories(BEFORE ${LibKrb5_INCLUDE_DIR}) + list(APPEND OPTLIBS ${LibKrb5_LIBRARY}) + endif () endif () set(HAVE_PERFTOOLS false) set(USE_PERFTOOLS_DEBUG false) set(USE_PERFTOOLS_TCMALLOC false) -if ( ENABLE_PERFTOOLS ) - find_package(GooglePerftools) +if (ENABLE_PERFTOOLS) + find_package(GooglePerftools) - if ( GOOGLEPERFTOOLS_FOUND OR TCMALLOC_FOUND ) + if (GOOGLEPERFTOOLS_FOUND OR TCMALLOC_FOUND) set(HAVE_PERFTOOLS true) set(USE_PERFTOOLS_TCMALLOC true) @@ -971,44 +989,44 @@ if ( ENABLE_PERFTOOLS ) # Link in tcmalloc. list(APPEND OPTLIBS ${GooglePerftools_LIBRARIES}) endif () - else() + else () message(FATAL_ERROR "Could not find requested Google Perftools.") endif () endif () -# Making sure any non-standard OpenSSL includes get searched earlier -# than other dependencies which tend to be in standard system locations -# and thus cause the system OpenSSL headers to still be picked up even -# if one specifies --with-openssl (which may be common). +# Making sure any non-standard OpenSSL includes get searched earlier than other +# dependencies which tend to be in standard system locations and thus cause the +# system OpenSSL headers to still be picked up even if one specifies +# --with-openssl (which may be common). include_directories(BEFORE ${OPENSSL_INCLUDE_DIR}) # Determine if libfts is external to libc, i.e. musl find_package(FTS) -if ( FTS_FOUND ) +if (FTS_FOUND) list(APPEND OPTLIBS ${FTS_LIBRARY}) include_directories(BEFORE ${FTS_INCLUDE_DIR}) endif () -# Any headers that are possibly bundled in the Zeek source-tree and that are supposed -# to have priority over any preexisting/system-wide headers need to appear early in -# compiler search path. +# Any headers that are possibly bundled in the Zeek source-tree and that are +# supposed to have priority over any preexisting/system-wide headers need to +# appear early in compiler search path. include_directories(BEFORE ${broker_includes}) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/auxil/highwayhash) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/auxil/paraglob/include) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/auxil/rapidjson/include) -set(zeekdeps ${zeekdeps} +set(zeekdeps + ${zeekdeps} ${BinPAC_LIBRARY} ${PCAP_LIBRARY} ${OPENSSL_LIBRARIES} ${BIND_LIBRARY} ${ZLIB_LIBRARY} ${JEMALLOC_LIBRARIES} - ${OPTLIBS} -) + ${OPTLIBS}) -######################################################################## -## System Introspection +# ############################################################################## +# System Introspection include(TestBigEndian) test_big_endian(WORDS_BIGENDIAN) @@ -1029,19 +1047,19 @@ include(FindKqueue) include(FindCAres) include_directories(BEFORE "auxil/out_ptr/include") -if ( (OPENSSL_VERSION VERSION_EQUAL "1.1.0") OR (OPENSSL_VERSION VERSION_GREATER "1.1.0") ) - set(ZEEK_HAVE_OPENSSL_1_1 true CACHE INTERNAL "" FORCE) -endif() -if ( (OPENSSL_VERSION VERSION_EQUAL "3.0.0") OR (OPENSSL_VERSION VERSION_GREATER "3.0.0") ) - set(ZEEK_HAVE_OPENSSL_3_0 true CACHE INTERNAL "" FORCE) -endif() +if ((OPENSSL_VERSION VERSION_EQUAL "1.1.0") OR (OPENSSL_VERSION VERSION_GREATER "1.1.0")) + set(ZEEK_HAVE_OPENSSL_1_1 true CACHE INTERNAL "" FORCE) +endif () +if ((OPENSSL_VERSION VERSION_EQUAL "3.0.0") OR (OPENSSL_VERSION VERSION_GREATER "3.0.0")) + set(ZEEK_HAVE_OPENSSL_3_0 true CACHE INTERNAL "" FORCE) +endif () # Tell the plugin code that we're building as part of the main tree. set(ZEEK_PLUGIN_INTERNAL_BUILD true CACHE INTERNAL "" FORCE) -if ( ${CMAKE_SYSTEM_NAME} MATCHES Linux ) - if ( NOT DISABLE_AF_PACKET ) - if ( NOT AF_PACKET_PLUGIN_PATH ) +if (${CMAKE_SYSTEM_NAME} MATCHES Linux) + if (NOT DISABLE_AF_PACKET) + if (NOT AF_PACKET_PLUGIN_PATH) set(AF_PACKET_PLUGIN_PATH ${CMAKE_SOURCE_DIR}/auxil/zeek-af_packet-plugin) endif () @@ -1049,13 +1067,16 @@ if ( ${CMAKE_SYSTEM_NAME} MATCHES Linux ) endif () endif () -if ( NOT DISABLE_JAVASCRIPT ) +if (NOT DISABLE_JAVASCRIPT) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/auxil/zeekjs/cmake) find_package(Nodejs) - if ( NODEJS_FOUND ) - if ( ${NODEJS_VERSION} VERSION_LESS "16.13.0" ) - message(STATUS "Node.js version ${NODEJS_VERSION} is too old, need 16.13 or later. Not enabling JavaScript support.") + if (NODEJS_FOUND) + if (${NODEJS_VERSION} VERSION_LESS "16.13.0") + message( + STATUS + "Node.js version ${NODEJS_VERSION} is too old, need 16.13 or later. Not enabling JavaScript support." + ) set(ZEEK_HAVE_JAVASCRIPT no) else () set(ZEEKJS_PLUGIN_PATH ${CMAKE_SOURCE_DIR}/auxil/zeekjs) @@ -1069,14 +1090,16 @@ endif () set(ZEEK_HAVE_JAVASCRIPT ${ZEEK_HAVE_JAVASCRIPT} CACHE INTERNAL "Zeek has JavaScript support") -set(DEFAULT_ZEEKPATH_PATHS . ${ZEEK_SCRIPT_INSTALL_PATH} ${ZEEK_SCRIPT_INSTALL_PATH}/policy ${ZEEK_SCRIPT_INSTALL_PATH}/site ${ZEEK_SCRIPT_INSTALL_PATH}/builtin-plugins) -if ( MSVC ) +set(DEFAULT_ZEEKPATH_PATHS + . ${ZEEK_SCRIPT_INSTALL_PATH} ${ZEEK_SCRIPT_INSTALL_PATH}/policy + ${ZEEK_SCRIPT_INSTALL_PATH}/site ${ZEEK_SCRIPT_INSTALL_PATH}/builtin-plugins) +if (MSVC) list(JOIN DEFAULT_ZEEKPATH_PATHS ";" DEFAULT_ZEEKPATH) else () list(JOIN DEFAULT_ZEEKPATH_PATHS ":" DEFAULT_ZEEKPATH) endif () -if ( NOT BINARY_PACKAGING_MODE ) +if (NOT BINARY_PACKAGING_MODE) set(ZEEK_DIST ${PROJECT_SOURCE_DIR}) endif () @@ -1088,131 +1111,134 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zeek-config.h.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-config.h) include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zeek-config.h DESTINATION include/zeek) -execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink - "." - "${CMAKE_CURRENT_BINARY_DIR}/zeek") +execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink "." "${CMAKE_CURRENT_BINARY_DIR}/zeek") -if ( BinPAC_ROOT_DIR ) - set(ZEEK_CONFIG_BINPAC_ROOT_DIR ${BinPAC_ROOT_DIR}) +if (BinPAC_ROOT_DIR) + set(ZEEK_CONFIG_BINPAC_ROOT_DIR ${BinPAC_ROOT_DIR}) else () - set(ZEEK_CONFIG_BINPAC_ROOT_DIR ${ZEEK_ROOT_DIR}) + set(ZEEK_CONFIG_BINPAC_ROOT_DIR ${ZEEK_ROOT_DIR}) endif () -if ( BROKER_ROOT_DIR ) - set(ZEEK_CONFIG_BROKER_ROOT_DIR ${BROKER_ROOT_DIR}) +if (BROKER_ROOT_DIR) + set(ZEEK_CONFIG_BROKER_ROOT_DIR ${BROKER_ROOT_DIR}) else () - set(ZEEK_CONFIG_BROKER_ROOT_DIR ${ZEEK_ROOT_DIR}) + set(ZEEK_CONFIG_BROKER_ROOT_DIR ${ZEEK_ROOT_DIR}) endif () -if ( PCAP_INCLUDE_DIR ) +if (PCAP_INCLUDE_DIR) set(ZEEK_CONFIG_PCAP_INCLUDE_DIR ${PCAP_INCLUDE_DIR}) endif () -if ( ZLIB_INCLUDE_DIR ) +if (ZLIB_INCLUDE_DIR) set(ZEEK_CONFIG_ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIR}) endif () -if ( OPENSSL_INCLUDE_DIR ) +if (OPENSSL_INCLUDE_DIR) set(ZEEK_CONFIG_OPENSSL_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR}) endif () -if ( LibKrb5_INCLUDE_DIR ) +if (LibKrb5_INCLUDE_DIR) set(ZEEK_CONFIG_LibKrb5_INCLUDE_DIR ${LibKrb5_INCLUDE_DIR}) endif () -if ( GooglePerftools_INCLUDE_DIR ) +if (GooglePerftools_INCLUDE_DIR) set(ZEEK_CONFIG_GooglePerftools_INCLUDE_DIR ${GooglePerftools_INCLUDE_DIR}) endif () set(ZEEK_CONFIG_BTEST_TOOLS_DIR ${ZEEK_ROOT_DIR}/share/btest) install(DIRECTORY DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zeek-config.in - ${CMAKE_CURRENT_BINARY_DIR}/zeek-config @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zeek-config.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-config + @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/zeek-config DESTINATION bin) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake DESTINATION share/zeek - USE_SOURCE_PERMISSIONS - PATTERN ".git" EXCLUDE) +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake + DESTINATION share/zeek + USE_SOURCE_PERMISSIONS + PATTERN ".git" EXCLUDE) -if ( NOT MSVC ) - # Install wrapper script for Bro-to-Zeek renaming. - include(InstallShellScript) - include(InstallSymlink) +if (NOT MSVC) + # Install wrapper script for Bro-to-Zeek renaming. + include(InstallShellScript) + include(InstallSymlink) endif () -######################################################################## -## zkg configuration +# ############################################################################## +# zkg configuration -if ( INSTALL_ZKG ) - # An etc/zkg directory for zkg's config file simplifies zkg's - # config file code. +if (INSTALL_ZKG) + # An etc/zkg directory for zkg's config file simplifies zkg's config file + # code. set(ZEEK_ZKG_CONFIG_DIR "${ZEEK_ETC_INSTALL_DIR}/zkg") set(ZEEK_ZKG_STATE_DIR "${ZEEK_STATE_DIR}/zkg") - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/zkg-config.in - ${CMAKE_CURRENT_BINARY_DIR}/zkg-config @ONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zkg-config.in ${CMAKE_CURRENT_BINARY_DIR}/zkg-config + @ONLY) install(DIRECTORY DESTINATION var/lib/zkg) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zkg-config - DESTINATION ${ZEEK_ZKG_CONFIG_DIR} RENAME config) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zkg-config DESTINATION ${ZEEK_ZKG_CONFIG_DIR} + RENAME config) endif () -######################################################################## -## Look for external plugins to build in +# ############################################################################## +# Look for external plugins to build in string(REPLACE "," " " _build_in_plugins "${ZEEK_INCLUDE_PLUGINS}") separate_arguments(_build_in_plugins) -foreach(plugin_dir ${_build_in_plugins}) - if ( NOT IS_ABSOLUTE "${plugin_dir}/CMakeLists.txt" ) - message(FATAL_ERROR "Plugins to build in need to be defined with absolute path! ${plugin_dir}") - endif() +foreach (plugin_dir ${_build_in_plugins}) + if (NOT IS_ABSOLUTE "${plugin_dir}/CMakeLists.txt") + message( + FATAL_ERROR "Plugins to build in need to be defined with absolute path! ${plugin_dir}") + endif () - if ( NOT EXISTS "${plugin_dir}/CMakeLists.txt" ) - message(FATAL_ERROR "No plugin found at ${plugin_dir}!") - endif() + if (NOT EXISTS "${plugin_dir}/CMakeLists.txt") + message(FATAL_ERROR "No plugin found at ${plugin_dir}!") + endif () get_filename_component(plugin_name ${plugin_dir} NAME) - # Create a list of plugin directories that will then be added in the src/CMakeLists.txt + # Create a list of plugin directories that will then be added in the + # src/CMakeLists.txt list(APPEND BUILTIN_PLUGIN_LIST ${plugin_dir}) message(STATUS " Building in plugin: ${plugin_name} (${plugin_dir})") - if ( "${ZEEK_BUILTIN_PLUGINS}" STREQUAL "" ) + if ("${ZEEK_BUILTIN_PLUGINS}" STREQUAL "") set(ZEEK_BUILTIN_PLUGINS ${plugin_name}) else () set(ZEEK_BUILTIN_PLUGINS "${ZEEK_BUILTIN_PLUGINS}, ${plugin_name}") endif () -endforeach() +endforeach () -######################################################################## -## Populate the ZEEK_BUILD_INFO for use in src/version.c.in +# ############################################################################## +# Populate the ZEEK_BUILD_INFO for use in src/version.c.in -if ( WIN32 ) - # Windows installs Python to C:\Python311\python, but doesn't create a version - # or symlink to python3. Call python with the script directly since the shebang - # in the script won't work here. - execute_process(COMMAND "python" "${PROJECT_SOURCE_DIR}/ci/collect-repo-info.py" "${ZEEK_INCLUDE_PLUGINS}" - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" - OUTPUT_VARIABLE ZEEK_BUILD_INFO - RESULT_VARIABLE ZEEK_BUILD_INFO_RESULT - OUTPUT_STRIP_TRAILING_WHITESPACE) -else() - execute_process(COMMAND "${PROJECT_SOURCE_DIR}/ci/collect-repo-info.py" "${ZEEK_INCLUDE_PLUGINS}" - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" - OUTPUT_VARIABLE ZEEK_BUILD_INFO - RESULT_VARIABLE ZEEK_BUILD_INFO_RESULT - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() +if (WIN32) + # Windows installs Python to C:\Python311\python, but doesn't create a version + # or symlink to python3. Call python with the script directly since the + # shebang in the script won't work here. + execute_process( + COMMAND "python" "${PROJECT_SOURCE_DIR}/ci/collect-repo-info.py" "${ZEEK_INCLUDE_PLUGINS}" + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE ZEEK_BUILD_INFO + RESULT_VARIABLE ZEEK_BUILD_INFO_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) +else () + execute_process( + COMMAND "${PROJECT_SOURCE_DIR}/ci/collect-repo-info.py" "${ZEEK_INCLUDE_PLUGINS}" + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE ZEEK_BUILD_INFO + RESULT_VARIABLE ZEEK_BUILD_INFO_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) +endif () -if ( NOT ZEEK_BUILD_INFO_RESULT EQUAL "0" ) - message(FATAL_ERROR "Could not collect repository info") +if (NOT ZEEK_BUILD_INFO_RESULT EQUAL "0") + message(FATAL_ERROR "Could not collect repository info") endif () # string(JSON ... ) requires CMake 3.19, but then we could do something like: -# string(JSON ZEEK_BUILD_INFO SET "${ZEEK_BUILD_INFO}" -# compile_options cxx_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BuildType}}") +# string(JSON ZEEK_BUILD_INFO SET "${ZEEK_BUILD_INFO}" compile_options cxx_flags +# "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BuildType}}") -######################################################################## -## Recurse on sub-directories +# ############################################################################## +# Recurse on sub-directories add_subdirectory(src) add_subdirectory(scripts) @@ -1221,30 +1247,30 @@ add_subdirectory(testing) include(CheckOptionalBuildSources) -CheckOptionalBuildSources(auxil/btest BTest INSTALL_BTEST) -CheckOptionalBuildSources(auxil/package-manager ZKG INSTALL_ZKG) -CheckOptionalBuildSources(auxil/zeekctl ZeekControl INSTALL_ZEEKCTL) -CheckOptionalBuildSources(auxil/zeek-aux Zeek-Aux INSTALL_AUX_TOOLS) -CheckOptionalBuildSources(auxil/zeek-archiver ZeekArchiver INSTALL_ZEEK_ARCHIVER) -CheckOptionalBuildSources(auxil/zeek-client ZeekClient INSTALL_ZEEK_CLIENT) +checkoptionalbuildsources(auxil/btest BTest INSTALL_BTEST) +checkoptionalbuildsources(auxil/package-manager ZKG INSTALL_ZKG) +checkoptionalbuildsources(auxil/zeekctl ZeekControl INSTALL_ZEEKCTL) +checkoptionalbuildsources(auxil/zeek-aux Zeek-Aux INSTALL_AUX_TOOLS) +checkoptionalbuildsources(auxil/zeek-archiver ZeekArchiver INSTALL_ZEEK_ARCHIVER) +checkoptionalbuildsources(auxil/zeek-client ZeekClient INSTALL_ZEEK_CLIENT) -if ( NOT DISABLE_SPICY ) - # The `zeek` binary implicitly depends on the driver object file built - # as part of `spicy`; make that dependency explicit. +if (NOT DISABLE_SPICY) + # The `zeek` binary implicitly depends on the driver object file built as part + # of `spicy`; make that dependency explicit. zeek_add_dependencies(spicyz) - if ( NOT SPICY_ROOT_DIR ) + if (NOT SPICY_ROOT_DIR) # Make sure we build targets of spicy-plugin after the `spicy` target. add_dependencies(plugin-Zeek-Spicy spicy) add_dependencies(spicyz spicy) - # Also install spicy-plugin's CMake files into Zeek's global `cmake/` folder. + # Also install spicy-plugin's CMake files into Zeek's global `cmake/` + # folder. # # NOTE: We do not install spicy-plugin's `FindZeek.cmake` since another # version of this file is already provided by Zeek. install(FILES auxil/spicy-plugin/cmake/ZeekSpicyAnalyzerSupport.cmake - auxil/spicy-plugin/cmake/FindSpicy.cmake - DESTINATION share/zeek/cmake) + auxil/spicy-plugin/cmake/FindSpicy.cmake DESTINATION share/zeek/cmake) endif () endif () @@ -1252,28 +1278,28 @@ endif () # scripts work in any build configuration. If we do not include Spicy these # files have no actual effect. # -# Spicy JIT relies on the path of the current executable to figure out -# whether it is run from a build or an install tree. This assumption -# gets broken for e.g., `spicyz` when running from the build tree -# (probably fixable), and also when JIT'ing directly from a `zeek` -# invocation (much harder to fix). Instead we generate shell -# definitions to support running and using Spicy or spicy-plugin -# functionality in the build tree, including JIT'ing directly from +# Spicy JIT relies on the path of the current executable to figure out whether +# it is run from a build or an install tree. This assumption gets broken for +# e.g., `spicyz` when running from the build tree (probably fixable), and also +# when JIT'ing directly from a `zeek` invocation (much harder to fix). Instead +# we generate shell definitions to support running and using Spicy or +# spicy-plugin functionality in the build tree, including JIT'ing directly from # Zeek. configure_file(${CMAKE_SOURCE_DIR}/auxil/spicy/spicy-path.in ${CMAKE_BINARY_DIR}/spicy-path @ONLY) -configure_file(${CMAKE_SOURCE_DIR}/auxil/spicy/hilti-cxx-include-dirs.in ${CMAKE_BINARY_DIR}/hilti-cxx-include-dirs @ONLY) +configure_file(${CMAKE_SOURCE_DIR}/auxil/spicy/hilti-cxx-include-dirs.in + ${CMAKE_BINARY_DIR}/hilti-cxx-include-dirs @ONLY) -######################################################################## -## Packaging Setup +# ############################################################################## +# Packaging Setup -if ( INSTALL_ZEEKCTL OR INSTALL_ZKG OR INSTALL_ZEEK_CLIENT ) +if (INSTALL_ZEEKCTL OR INSTALL_ZKG OR INSTALL_ZEEK_CLIENT) # CPack RPM Generator may not automatically detect this set(CPACK_RPM_PACKAGE_REQUIRES "python >= ${ZEEK_PYTHON_MIN}") endif () -# If this CMake project is a sub-project of another, we will not -# configure the generic packaging because CPack will fail in the case -# that the parent project has already configured packaging +# If this CMake project is a sub-project of another, we will not configure the +# generic packaging because CPack will fail in the case that the parent project +# has already configured packaging if ("${PROJECT_SOURCE_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") include(ConfigurePackaging) ConfigurePackaging(${VERSION}) @@ -1282,22 +1308,18 @@ endif () # Refers back to the "distribution prefix". This is the source tree when # referring to Zeek from the build directory and the "share" directory under the # install preifx otherwise. -set(ZEEK_DIST_PREFIX - $ - $) +set(ZEEK_DIST_PREFIX $ + $) # Generate extra config file for the dynamic plugins. configure_file(src/ZeekPluginConfig.cmake.in ZeekPluginConfig.cmake @ONLY) # Write the CMake package and version files. configure_package_config_file( - "${CMAKE_CURRENT_SOURCE_DIR}/src/ZeekConfig.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake" - INSTALL_DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}") -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake" - VERSION ${ZEEK_VERSION_NUMBER} - COMPATIBILITY ExactVersion) + "${CMAKE_CURRENT_SOURCE_DIR}/src/ZeekConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake" INSTALL_DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}") +write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake" + VERSION ${ZEEK_VERSION_NUMBER} COMPATIBILITY ExactVersion) # Write the CMake targets file. export(EXPORT ZeekTargets FILE ZeekTargets.cmake NAMESPACE Zeek::) @@ -1307,66 +1329,63 @@ configure_file(src/ZeekPluginBootstrap.cmake.in ZeekPluginBootstrap.cmake @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ZeekPluginBootstrap.cmake" DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}") -install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake" - DESTINATION - "${ZEEK_CMAKE_CONFIG_DIR}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake" + DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}") -install( - EXPORT ZeekTargets - DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}" - NAMESPACE Zeek::) +install(EXPORT ZeekTargets DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}" NAMESPACE Zeek::) -######################################################################## -## Build Summary +# ############################################################################## +# Build Summary if (CMAKE_BUILD_TYPE) string(TOUPPER ${CMAKE_BUILD_TYPE} BuildType) endif () -if ( INSTALL_BTEST_PCAPS ) +if (INSTALL_BTEST_PCAPS) set(_install_btest_tools_msg "all") else () set(_install_btest_tools_msg "no pcaps") endif () set(_binpac_exe_path "included") -if ( BINPAC_EXE_PATH ) +if (BINPAC_EXE_PATH) set(_binpac_exe_path ${BINPAC_EXE_PATH}) endif () set(_gen_zam_exe_path "included") -if ( GEN_ZAM_EXE_PATH ) +if (GEN_ZAM_EXE_PATH) set(_gen_zam_exe_path ${GEN_ZAM_EXE_PATH}) endif () set(_spicy "included") -if ( DISABLE_SPICY ) +if (DISABLE_SPICY) set(_spicy "disabled") -elseif ( SPICY_ROOT_DIR ) +elseif (SPICY_ROOT_DIR) set(_spicy "external (${SPICY_ROOT_DIR})") endif () -if ( DISABLE_SPICY ) +if (DISABLE_SPICY) set(_spicy_plugin "disabled") -elseif ( "${_spicy_plugin}" STREQUAL "" ) +elseif ("${_spicy_plugin}" STREQUAL "") set(_spicy_plugin "external (${SPICY_PLUGIN_PATH})") endif () -if ( ZEEK_LEGACY_ANALYZERS ) +if (ZEEK_LEGACY_ANALYZERS) list(JOIN ZEEK_LEGACY_ANALYZERS ", " _legacy_analyzers) - set(_legacy_analyzers "\n - Using unmaintained legacy analyzers for: ${_legacy_analyzers}") + set(_legacy_analyzers + "\n - Using unmaintained legacy analyzers for: ${_legacy_analyzers}") endif () -if ( ZEEK_SKIPPED_ANALYZERS ) +if (ZEEK_SKIPPED_ANALYZERS) list(JOIN ZEEK_SKIPPED_ANALYZERS ", " _skipped_analyzers) set(_skipped_analyzers "\n - Skipping analyzers: ${_skipped_analyzers}") endif () -if ( ZEEK_LEGACY_ANALYZERS OR ZEEK_SKIPPED_ANALYZERS ) - set(_analyzer_warning "\n\n[Warning] Some analyzers are not available due to lack of built-in Spicy support:${_legacy_analyzers}${_skipped_analyzers}") +if (ZEEK_LEGACY_ANALYZERS OR ZEEK_SKIPPED_ANALYZERS) + set(_analyzer_warning + "\n\n[Warning] Some analyzers are not available due to lack of built-in Spicy support:${_legacy_analyzers}${_skipped_analyzers}" + ) endif () message( @@ -1419,7 +1438,6 @@ message( "\nFuzz Engine: ${ZEEK_FUZZING_ENGINE}" "${_analyzer_warning}" "\n" - "\n================================================================\n" -) + "\n================================================================\n") include(UserChangedWarning) diff --git a/NEWS b/NEWS index 5fef32d1e9..5e258b4324 100644 --- a/NEWS +++ b/NEWS @@ -59,6 +59,11 @@ Breaking Changes - The IRC_Data analyzer declaration has been moved to protocols/irc/IRC.h. +- The error message returned when using ``bro_init``, ``bro_done``, and + ``bro_script_loaded`` events is now removed. removed. Usage of these events + has returned that error during script parsing for a few years, and time has + come to finally remove it. + New Functionality ----------------- @@ -86,6 +91,19 @@ New Functionality To disable this functionality, pass ``--disable-javascript`` to configure. +- A new bif ``from_json()`` can be used to parse JSON strings into records. + + type A: record { a: addr; }; + local p = from_json({\"a\": \"192.168.0.1\"}", A); + if ( p$valid ) + print (p$v as A) + + Implicit conversion from JSON to Zeek types is implemented for bool, int, count, + real, interval (number as seconds) and time (number as unix timestamp), port + (strings in "80/tcp" notation), patterns, addr, subnet, enum, sets, vectors + and records similar to the rules of the input framework. Optional or default + record fields are allowed to be missing or null in the input. + - Zeek now provides native "Community ID" support with a new bif called ``community_id_v1()``. Two policy scripts ``protocols/conn/community-id-logging`` and ``frameworks/notice/community-id`` extend the respective logs with a @@ -104,13 +122,17 @@ New Functionality stats.11:18:57-11:19:00-logger-2.log.gz Previously, in a multi-logger setup, individual logger processes would overwrite - each others log files during rotation, causing data loss. + each other's log files during rotation, causing data loss. For setups with a single logger, there's no change in behavior. The naming of the final logs can be customized by providing an alternative ``make-archive-name`` script and using the new ``ZEEK_ARG_LOG_SUFFIX`` environment variable. +- A supervisor controlled Zeek cluster is now multi-logger aware. This avoids + loggers overwriting each other's log files within a single log-queue directory. + By default, a logger's name is appended to the rotated logs by zeek-archiver. + - Introduce a new command-line option ``-V`` / ``--build-info``. It produces verbose output in JSON format about the repository state and any included plugins. @@ -211,6 +233,13 @@ New Functionality messages being correctly parsed and raising the typical SSL/TLS events, the biggest visible change is the newly added ``ssl_extension_connection_id`` event. +- The NTP analyzer now recognizes when client and server mode messages disagree + with the notion of "originator" and "responder" and flips the connection. This + can happen in packet loss or packet re-ordering scenarios. Such connections will + have a ``^`` added to their history. + +- New bifs for ``ceil()`` and ``log2()`` have been added. + Changed Functionality --------------------- @@ -310,8 +339,20 @@ Changed Functionality - Libpcap based packet source now avoids the 32bit wraparound of link and dropped packet counters as reported by users. -- The ``ssl_history`` field of ``ssl.log`` now correctly logs Hello Retry Request - messages. Before, they were incorrectly logged as Server Hellos. +- The `ssl_history` field in ssl.log indicates that the letter `j` is reserved + for hello retry requests. However, this logging was never fully implemented; + instead, hello retry requests were logged like as a server hello (with the letter + `s`). This oversight was fixed, and hello retry requests are now correctly logged. + +- When per-connection SMB parser state (read offsets, tree ids, ...) exceeds + ``SMB::max_pending_messages`` (default 1000), Zeek discards such per-connection + state and raises a new ``smb2_discarded_messages_state()`` event. This event is + used to reset script-layer SMB state. This change provides protection against + unbounded state growth due to partial or one-sided SMB connections. + + Setting ``SMB::max_pending_messages`` to 0 can be used to switch back to the + previous behavior of not discarding state. Setting ``SMB::enable_state_clear`` + to ``F`` skips the script-layer state clearing logic. Removed Functionality --------------------- diff --git a/VERSION b/VERSION index 817388faca..484b8ddaa3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.0.0-dev.480 +6.0.0-dev.533 diff --git a/auxil/bifcl b/auxil/bifcl index b6f138be79..4ad7a29722 160000 --- a/auxil/bifcl +++ b/auxil/bifcl @@ -1 +1 @@ -Subproject commit b6f138be79f7d4408302b1297b0c63092b019773 +Subproject commit 4ad7a297223121b91c94caea6d28ca8888ec6dc1 diff --git a/auxil/binpac b/auxil/binpac index e820c29116..e4c7b7027d 160000 --- a/auxil/binpac +++ b/auxil/binpac @@ -1 +1 @@ -Subproject commit e820c29116a50a18079e783f47b96111eb7b5b0b +Subproject commit e4c7b7027d6053c66d8c278a8dbb9a7c2bac09ad diff --git a/auxil/broker b/auxil/broker index 4fc4c31592..000834f60a 160000 --- a/auxil/broker +++ b/auxil/broker @@ -1 +1 @@ -Subproject commit 4fc4c31592c4823d675314bc981931de9e246057 +Subproject commit 000834f60ab7540041c431a3657c23c7476e368d diff --git a/auxil/btest b/auxil/btest index f1183514cd..0c3cafb2ed 160000 --- a/auxil/btest +++ b/auxil/btest @@ -1 +1 @@ -Subproject commit f1183514cd12468d34cb01b147c8d1859a657c31 +Subproject commit 0c3cafb2ed638f88a446732fa03d90af9bcf796c diff --git a/auxil/filesystem b/auxil/filesystem index 3e5b930d96..8a2edd6d92 160000 --- a/auxil/filesystem +++ b/auxil/filesystem @@ -1 +1 @@ -Subproject commit 3e5b930d9690ef6b87dd034916598e0771f8688d +Subproject commit 8a2edd6d92ed820521d42c94d179462bf06b5ed3 diff --git a/auxil/gen-zam b/auxil/gen-zam index 8534f719a0..94eb4798e5 160000 --- a/auxil/gen-zam +++ b/auxil/gen-zam @@ -1 +1 @@ -Subproject commit 8534f719a0a384769383bbd4ad71c9eb2084823d +Subproject commit 94eb4798e5cb1b749e42c84f2d4034c16f6cb9db diff --git a/auxil/libunistd b/auxil/libunistd index 8011410a8a..2766a0c45a 160000 --- a/auxil/libunistd +++ b/auxil/libunistd @@ -1 +1 @@ -Subproject commit 8011410a8a2ba9b57a544d20efd077f83ecb7eda +Subproject commit 2766a0c45a6dbcdcf26cd1209a73a13323854961 diff --git a/auxil/package-manager b/auxil/package-manager index 5ade27d716..e1d8271af1 160000 --- a/auxil/package-manager +++ b/auxil/package-manager @@ -1 +1 @@ -Subproject commit 5ade27d716fd65342be592abf277eea114fefaa7 +Subproject commit e1d8271af1f499b3d072c99ae717d2593f551645 diff --git a/auxil/zeek-archiver b/auxil/zeek-archiver index 2b40a6bafe..e36862b3a6 160000 --- a/auxil/zeek-archiver +++ b/auxil/zeek-archiver @@ -1 +1 @@ -Subproject commit 2b40a6bafedbbf3fba16d292fd9fe8ba6e9de1bf +Subproject commit e36862b3a6e70bf8557885e12e74cbc91507a693 diff --git a/auxil/zeek-aux b/auxil/zeek-aux index fd326e9ced..1f16b5047b 160000 --- a/auxil/zeek-aux +++ b/auxil/zeek-aux @@ -1 +1 @@ -Subproject commit fd326e9ced4c078f19ddd32e0afcbe1fe4817a3c +Subproject commit 1f16b5047b7478cd38eeb8cae7e11479932135fe diff --git a/auxil/zeekctl b/auxil/zeekctl index 7178d15edb..98301f5433 160000 --- a/auxil/zeekctl +++ b/auxil/zeekctl @@ -1 +1 @@ -Subproject commit 7178d15edb4c737a5d6c28d100c0e457b7afed58 +Subproject commit 98301f54336144272d17439ea43b889ffd79a65f diff --git a/ci/public-ecr-cleanup.sh b/ci/public-ecr-cleanup.sh new file mode 100755 index 0000000000..7a1f7c809e --- /dev/null +++ b/ci/public-ecr-cleanup.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# +# Script to batch-delete all untagged images from ECR public repositories, +# defaulting to the zeek/zeek-dev repository. +# First scans for manifest list images that are referencing other images and +# deletes them, then deletes all remaining untagged images. +set -eu + +if ! command -v aws >/dev/null; then + echo "missing aws command" >&2 + exit 1 +fi + +REGISTRY_ID=${REGISTRY_ID:-103243056077} +REPOSITORY_NAME=${REPOSITORY_NAME:-zeek-dev} +BATCH_DELETE_SIZE=${BATCH_DELETE_SIZE:-50} + +# Chunk up "$1" into BATCH_DELETE_SIZE entries and batch-delete them at once +# via aws batch-delete. +# +# Expected input looks as follows to keep things simple: +# +# imageDigest=sha256:db6...366 +# imageDigest=sha256:2ad...9b0 +# +function batch_delete { + while read -r batch; do + if [ -z "${batch}" ]; then + break + fi + + echo "Deleting ${batch}" + aws ecr-public batch-delete-image \ + --registry-id "${REGISTRY_ID}" \ + --repository-name "${REPOSITORY_NAME}" \ + --image-ids ${batch} + + done < <(xargs -L ${BATCH_DELETE_SIZE} <<<"$1") +} + +# Find all untagged manifest lists with the following media types: +# +# application/vnd.docker.distribution.manifest.list.v2+json +# application/vnd.oci.image.index.v1+json +# +# These reference other images, so we need to delete them first as +# otherwise the referenced images can not be deleted. +IMAGE_DIGESTS=$(aws ecr-public describe-images \ + --registry-id "${REGISTRY_ID}" \ + --repository-name "${REPOSITORY_NAME}" \ + --query 'imageDetails[?!imageTags && (contains(imageManifestMediaType, `manifest.list.v2`) || contains(imageManifestMediaType, `image.index.v1`))].{imageDigest: join(`=`, [`imageDigest`, imageDigest])}' \ + --output text) + +batch_delete "${IMAGE_DIGESTS}" + +# Now find all untagged manifests that are left. +IMAGE_DIGESTS=$(aws ecr-public describe-images \ + --registry-id "${REGISTRY_ID}" \ + --repository-name "${REPOSITORY_NAME}" \ + --query 'imageDetails[?!imageTags].{imageDigest: join(`=`, [`imageDigest`, imageDigest])}' \ + --output text) + +batch_delete "${IMAGE_DIGESTS}" diff --git a/cmake b/cmake index 70c6180afc..a90d691796 160000 --- a/cmake +++ b/cmake @@ -1 +1 @@ -Subproject commit 70c6180afcc06767d0ab031d7c36cb0dd6503094 +Subproject commit a90d69179607c5083158f926be6d37f3db18f110 diff --git a/configure b/configure index b9d9e16cb9..98ce48c08c 100755 --- a/configure +++ b/configure @@ -12,6 +12,9 @@ command="$0 $*" usage="\ Usage: $0 [OPTION]... [VAR=VALUE]... + -h, --help display this help and exit + --show-config display the most relevant config parameters of an existing build + Build Options: --cmake=PATH custom path to a CMake binary --builddir=DIR place build files in directory [build] @@ -149,42 +152,10 @@ append_cache_entry() { CMakeCacheEntries="$CMakeCacheEntries -D $1:$2=$3" } -# Function to remove a CMake cache entry definition from the -# CMakeCacheEntries variable -# $1 is the cache entry variable name -remove_cache_entry() { - CMakeCacheEntries="$CMakeCacheEntries -U $1" - - # Even with -U, cmake still warns by default if - # added previously with -D. - CMakeCacheEntries="$CMakeCacheEntries --no-warn-unused-cli" -} - # set defaults builddir=build -prefix=/usr/local/zeek CMakeCacheEntries="" display_cmake=0 -append_cache_entry CMAKE_INSTALL_PREFIX PATH $prefix -append_cache_entry ZEEK_ROOT_DIR PATH $prefix -append_cache_entry ZEEK_SCRIPT_INSTALL_PATH STRING $prefix/share/zeek -append_cache_entry ZEEK_ETC_INSTALL_DIR PATH $prefix/etc -append_cache_entry ENABLE_DEBUG BOOL false -append_cache_entry ENABLE_PERFTOOLS BOOL false -append_cache_entry ENABLE_JEMALLOC BOOL false -append_cache_entry ENABLE_ZEEK_UNIT_TESTS BOOL true -append_cache_entry BUILD_SHARED_LIBS BOOL true -append_cache_entry INSTALL_AUX_TOOLS BOOL true -append_cache_entry INSTALL_BTEST BOOL true -append_cache_entry INSTALL_BTEST_PCAPS BOOL true -append_cache_entry INSTALL_ZEEK_ARCHIVER BOOL true -append_cache_entry INSTALL_ZEEK_CLIENT BOOL true -append_cache_entry INSTALL_ZEEKCTL BOOL true -append_cache_entry INSTALL_ZKG BOOL true -append_cache_entry CPACK_SOURCE_IGNORE_FILES STRING -append_cache_entry ZEEK_SANITIZERS STRING "" -append_cache_entry ZEEK_INCLUDE_PLUGINS STRING "" -append_cache_entry PREALLOCATE_PORT_ARRAY BOOL true # parse arguments while [ $# -ne 0 ]; do @@ -198,6 +169,14 @@ while [ $# -ne 0 ]; do echo "${usage}" 1>&2 exit 1 ;; + --show-config) + if [ ! -f "$builddir/CMakeCache.txt" ]; then + echo "Error: no CMake build found under '$builddir'." 1>&2 + exit 1 + fi + grep -E "^ENABLE_|^ZEEK_|^INSTALL_|^CMAKE_INSTALL_PRE|^CMAKE_C.*_FLAGS|^CMAKE_C.*_COMPILER|^CMAKE_.*_LINKER_FLAGS|^CMAKE_BUILD" "$builddir/CMakeCache.txt" | grep -v ':INTERNAL' + exit 0 + ;; -D) shift if [ $# -eq 0 ]; then @@ -217,10 +196,6 @@ while [ $# -ne 0 ]; do ;; --build-type=*) append_cache_entry CMAKE_BUILD_TYPE STRING $optarg - - if [ $(echo "$optarg" | tr [:upper:] [:lower:]) = "debug" ]; then - append_cache_entry ENABLE_DEBUG BOOL true - fi ;; --generator=*) CMakeGenerator="$optarg" @@ -235,9 +210,7 @@ while [ $# -ne 0 ]; do append_cache_entry ZEEK_INCLUDE_PLUGINS STRING \"$optarg\" ;; --prefix=*) - prefix=$optarg append_cache_entry CMAKE_INSTALL_PREFIX PATH $optarg - append_cache_entry ZEEK_ROOT_DIR PATH $optarg ;; --libdir=*) append_cache_entry CMAKE_INSTALL_LIBDIR PATH $optarg @@ -454,14 +427,6 @@ if [ -z "$CMakeCommand" ]; then fi fi -if [ "$user_set_scriptdir" != "true" ]; then - append_cache_entry ZEEK_SCRIPT_INSTALL_PATH STRING $prefix/share/zeek -fi - -if [ "$user_set_conffilesdir" != "true" ]; then - append_cache_entry ZEEK_ETC_INSTALL_DIR PATH $prefix/etc -fi - if [ -d $builddir ]; then # If build directory exists, check if it has a CMake cache if [ -f $builddir/CMakeCache.txt ]; then diff --git a/doc b/doc index f3f85f68ec..6da8036beb 160000 --- a/doc +++ b/doc @@ -1 +1 @@ -Subproject commit f3f85f68ecec844e5770900aa871361627451ae1 +Subproject commit 6da8036bebf01361acee8b15fc3239ccea3e15b4 diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 6a8a3d1bd9..48caa17846 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,5 +1,5 @@ - -install(DIRECTORY . DESTINATION ${ZEEK_MAN_INSTALL_PATH}/man8 FILES_MATCHING - PATTERN "*.8" -) - +install( + DIRECTORY . + DESTINATION ${ZEEK_MAN_INSTALL_PATH}/man8 + FILES_MATCHING + PATTERN "*.8") diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 168eba704b..313877f6e1 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,22 +1,22 @@ include(InstallPackageConfigFile) -install(DIRECTORY ./ DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH} FILES_MATCHING - PATTERN "site/local*" EXCLUDE - PATTERN "*.zeek" - PATTERN "*.sig" - PATTERN "*.fp" -) +install( + DIRECTORY ./ + DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH} + FILES_MATCHING + PATTERN "site/local*" EXCLUDE + PATTERN "*.zeek" + PATTERN "*.sig" + PATTERN "*.fp") -# Install local script as a config file since it's meant to be modified directly. -InstallPackageConfigFile( - ${CMAKE_CURRENT_SOURCE_DIR}/site/local.zeek - ${ZEEK_SCRIPT_INSTALL_PATH}/site - local.zeek) +# Install local script as a config file since it's meant to be modified +# directly. +InstallPackageConfigFile(${CMAKE_CURRENT_SOURCE_DIR}/site/local.zeek + ${ZEEK_SCRIPT_INSTALL_PATH}/site local.zeek) # Substitute values in templated script files, and install them. -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/base/misc/installation.zeek.in - ${CMAKE_CURRENT_BINARY_DIR}/base/misc/installation.zeek @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/base/misc/installation.zeek.in + ${CMAKE_CURRENT_BINARY_DIR}/base/misc/installation.zeek @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/base/misc/installation.zeek - DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/base/misc) + DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/base/misc) diff --git a/scripts/base/frameworks/cluster/nodes/logger.zeek b/scripts/base/frameworks/cluster/nodes/logger.zeek index 1021cee100..9dedac27a0 100644 --- a/scripts/base/frameworks/cluster/nodes/logger.zeek +++ b/scripts/base/frameworks/cluster/nodes/logger.zeek @@ -22,6 +22,32 @@ redef Log::default_rotation_interval = 1 hrs; ## Alarm summary mail interval. redef Log::default_mail_alarms_interval = 24 hrs; +## Generic log metadata rendered into the filename that zeek-archiver may interpret. +## This is populated with a log_suffix entry within zeek_init() when multiple +## logger nodes are defined in cluster-layout.zeek. +global log_metadata: table[string] of string; + +## Encode the given table as zeek-archiver understood metadata part. +function encode_log_metadata(tbl: table[string] of string): string + { + local metadata_vec: vector of string; + for ( k, v in log_metadata ) + { + if ( |v| == 0 ) # Assume concious decision to skip this entry. + next; + + if ( /[,=]/ in k || /[,=]/ in v ) + { + Reporter::warning(fmt("Invalid log_metadata: k='%s' v='%s'", k, v)); + next; + } + + metadata_vec += fmt("%s=%s", strip(k), strip(v)); + } + + return join_string_vec(metadata_vec, ","); + } + ## This function will rotate logs in a format compatible with zeek-archiver. ## If you're using the Supervisor framework, this function will be used, ## if not, you can set :zeek:see:`Log::rotation_format_func` to this function. @@ -30,6 +56,10 @@ function archiver_rotation_format_func(ri: Log::RotationFmtInfo): Log::RotationP local open_str = strftime(Log::default_rotation_date_format, ri$open); local close_str = strftime(Log::default_rotation_date_format, ri$close); local base = fmt("%s__%s__%s__", ri$path, open_str, close_str); + + if ( |log_metadata| > 0 ) + base = fmt("%s%s__", base, encode_log_metadata(log_metadata)); + local rval = Log::RotationPath($file_basename=base); return rval; } @@ -42,6 +72,14 @@ redef Log::rotation_format_func = archiver_rotation_format_func; redef LogAscii::enable_leftover_log_rotation = T; +event zeek_init() + { + if ( "log_suffix" in log_metadata ) + return; + + if ( Cluster::get_node_count(Cluster::LOGGER) > 1 ) + log_metadata["log_suffix"] = Cluster::node; + } @else ## Use the cluster's archive logging script. diff --git a/scripts/base/frameworks/notice/weird.zeek b/scripts/base/frameworks/notice/weird.zeek index 47a6b6dde0..919f683123 100644 --- a/scripts/base/frameworks/notice/weird.zeek +++ b/scripts/base/frameworks/notice/weird.zeek @@ -210,6 +210,7 @@ export { ["spontaneous_FIN"] = ACTION_IGNORE, ["spontaneous_RST"] = ACTION_IGNORE, ["SMB_parsing_error"] = ACTION_LOG, + ["SMB_discarded_messages_state"] = ACTION_LOG, ["no_smb_session_using_parsesambamsg"] = ACTION_LOG, ["smb_andx_command_failed_to_parse"] = ACTION_LOG, ["smb_tree_connect_andx_response_without_tree"] = ACTION_LOG_PER_CONN, diff --git a/scripts/base/init-bare.zeek b/scripts/base/init-bare.zeek index 2723c8bc2d..b044892ed8 100644 --- a/scripts/base/init-bare.zeek +++ b/scripts/base/init-bare.zeek @@ -1094,6 +1094,14 @@ type entropy_test_result: record { serial_correlation: double; ##< Serial correlation coefficient. }; +## Return type for from_json BIF. +## +## .. zeek:see:: from_json +type from_json_result: record { + v: any &optional; ##< Parsed value. + valid: bool; ##< True if parsing was successful. +}; + # TCP values for :zeek:see:`endpoint` *state* field. # todo:: these should go into an enum to make them autodoc'able. const TCP_INACTIVE = 0; ##< Endpoint is still inactive. @@ -2988,6 +2996,16 @@ export { ## ## .. zeek:see:: smb_pipe_connect_heuristic const SMB::pipe_filenames: set[string] &redef; + + ## The maximum number of messages for which to retain state + ## about offsets, fids, or tree ids within the parser. When + ## the limit is reached, internal parser state is discarded + ## and :zeek:see:`smb2_discarded_messages_state` raised. + ## + ## Setting this to zero will disable the functionality. + ## + ## .. zeek:see:: smb2_discarded_messages_state + const SMB::max_pending_messages = 1000 &redef; } module SMB1; diff --git a/scripts/base/protocols/smb/main.zeek b/scripts/base/protocols/smb/main.zeek index ed129f8ce1..91e27acffa 100644 --- a/scripts/base/protocols/smb/main.zeek +++ b/scripts/base/protocols/smb/main.zeek @@ -44,6 +44,13 @@ export { PRINT_CLOSE, }; + ## Whether to reset a connection's SMB script state whenever a + ## :zeek:see:`smb2_discarded_messages_state` event is raised. + ## + ## This setting protects from unbounded script state growth in + ## environments with high capture loss or traffic anomalies. + option enable_clear_script_state = T; + ## This record is for the smb_files.log type FileInfo: record { ## Time when the file was first discovered. diff --git a/scripts/base/protocols/smb/smb2-main.zeek b/scripts/base/protocols/smb/smb2-main.zeek index 8ccaa2df84..31f0a7704a 100644 --- a/scripts/base/protocols/smb/smb2-main.zeek +++ b/scripts/base/protocols/smb/smb2-main.zeek @@ -1,3 +1,5 @@ +@load base/frameworks/notice/weird + @load ./main module SMB2; @@ -344,3 +346,25 @@ event smb2_close_request(c: connection, hdr: SMB2::Header, file_id: SMB2::GUID) #Reporter::warning("attempting to close an unknown file!"); } } + +event smb2_discarded_messages_state(c: connection, state: string) + { + if ( ! c?$smb_state ) + return; + + local addl = fmt("state=%s fid_map=%s tid_map=%s pending_cmds=%s pipe_map=%s", + state, |c$smb_state$fid_map|, |c$smb_state$tid_map|, + |c$smb_state$pending_cmds|, |c$smb_state$pipe_map|); + Reporter::conn_weird("SMB_discarded_messages_state", c, addl, "SMB2"); + + if ( ! SMB::enable_clear_script_state ) + return; + + # Wipe out script-level state for this connection. + c$smb_state$fid_map = table(); + c$smb_state$pending_cmds = table(); + # Not expected to grow overly large and the original + # zeek-smb-clear-state package didn't reset these either. + # c$smb_state$tid_map = table(); + # c$smb_state$pipe_map = table(); + } diff --git a/scripts/base/protocols/ssl/ct-list.zeek b/scripts/base/protocols/ssl/ct-list.zeek index 2b38a9c99d..be2663b5f5 100644 --- a/scripts/base/protocols/ssl/ct-list.zeek +++ b/scripts/base/protocols/ssl/ct-list.zeek @@ -1,44 +1,35 @@ # # Do not edit this file. This file is automatically generated by gen-ct-list.pl -# File generated at Thu Oct 6 13:17:02 2022 +# File generated at Wed May 3 10:30:21 2023 # File generated from https://www.gstatic.com/ct/log_list/v3/log_list.json -# Source file generated at: 2022-10-05T12:55:24Z -# Source file version: 13.6 +# Source file generated at: 2023-05-02T12:55:51Z +# Source file version: 20.60 # @load base/protocols/ssl module SSL; redef ct_logs += { -["\x29\x79\xbe\xf0\x9e\x39\x39\x21\xf0\x56\x73\x9f\x63\xa5\x77\xe5\xbe\x57\x7d\x9c\x60\x0a\xf8\xf9\x4d\x5d\x26\x5c\x25\x5d\xc7\x84"] = CTInfo($description="Google 'Argon2022' log", $operator="Google", $url="https://ct.googleapis.com/logs/argon2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x78\x83\xdc\xe9\xf1\xa6\xb8\x18\x3a\x00\x99\x2f\xff\x3e\xcd\x15\xc9\x26\x1e\xf7\xff\x3a\xa9\xa3\x72\x16\x49\xeb\x09\xb6\xa8\xdd\xb4\xd2\x47\x91\x0e\x0d\xf9\xd9\xd5\xa9\x8b\xb0\x87\x9d\x25\x79\xd4\x1a\x50\x60\x08\xf5\x09\x06\x39\x26\xe4\x40\xc2\xba\xc3\xc2"), ["\xe8\x3e\xd0\xda\x3e\xf5\x06\x35\x32\xe7\x57\x28\xbc\x89\x6b\xc9\x03\xd3\xcb\xd1\x11\x6b\xec\xeb\x69\xe1\x77\x7d\x6d\x06\xbd\x6e"] = CTInfo($description="Google 'Argon2023' log", $operator="Google", $url="https://ct.googleapis.com/logs/argon2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xd0\x90\x8f\x64\x52\x4e\x42\xac\x84\xb6\x2e\x4c\xf2\x3d\x77\x00\xb3\x77\x08\x05\x47\xaa\x45\x4c\xe3\x2c\x8e\x70\xa5\x82\xbb\x6c\xb2\x7b\x9c\x98\x7a\xa0\xe9\x11\x76\x28\x00\xb2\x20\xb4\xcd\xd3\x98\x7b\x4d\x96\x27\xe6\xb7\xee\x22\x6a\xd1\xb0\x2e\x91\x77\x78"), ["\xee\xcd\xd0\x64\xd5\xdb\x1a\xce\xc5\x5c\xb7\x9d\xb4\xcd\x13\xa2\x32\x87\x46\x7c\xbc\xec\xde\xc3\x51\x48\x59\x46\x71\x1f\xb5\x9b"] = CTInfo($description="Google 'Argon2024' log", $operator="Google", $url="https://ct.googleapis.com/logs/us1/argon2024/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x1d\xb9\x6c\xa9\xcb\x69\x94\xc5\x5c\xe6\xb6\xa6\x03\xbb\xd2\xb8\xdc\x54\x43\x17\x28\x99\x0c\x06\x01\x50\x1d\x9d\x64\xc0\x59\x46\x2b\xdc\xc8\x03\x1d\x05\xb4\x2d\xa8\x09\xf7\x99\x41\xed\x04\xfb\xe5\x57\xba\x26\x04\xf6\x11\x52\xce\x14\x65\x3b\x2f\x76\x2b\xc0"), -["\x46\xa5\x55\xeb\x75\xfa\x91\x20\x30\xb5\xa2\x89\x69\xf4\xf3\x7d\x11\x2c\x41\x74\xbe\xfd\x49\xb8\x85\xab\xf2\xfc\x70\xfe\x6d\x47"] = CTInfo($description="Google 'Xenon2022' log", $operator="Google", $url="https://ct.googleapis.com/logs/xenon2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xf9\x64\xbd\x15\x2c\x40\x62\x50\x95\x13\x38\x3c\xc7\x21\xb0\x3a\xb9\x8f\xa2\x7a\x15\xd7\x89\xd6\x8e\x31\x13\x00\x87\x59\xbc\xbb\xee\x90\xfc\xc8\x58\x13\x0a\xbf\xab\x43\x36\x54\x23\xa4\x81\xcd\xad\x47\x14\xb7\x58\xa0\x44\xfa\x6a\xa0\xa0\xd7\xc3\x63\x1e\x2b"), ["\xad\xf7\xbe\xfa\x7c\xff\x10\xc8\x8b\x9d\x3d\x9c\x1e\x3e\x18\x6a\xb4\x67\x29\x5d\xcf\xb1\x0c\x24\xca\x85\x86\x34\xeb\xdc\x82\x8a"] = CTInfo($description="Google 'Xenon2023' log", $operator="Google", $url="https://ct.googleapis.com/logs/xenon2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x72\x16\x3e\x0b\xef\xef\xce\x3e\x60\xdd\x95\xcb\x63\x7a\xb9\xa9\x8d\x4a\x6f\x6c\xdc\x61\x80\xa6\x45\x5e\x2f\x83\xac\x94\xf3\x85\x88\xd0\xa5\x74\xd0\x7b\x8e\xff\xc5\xee\x42\xa2\xf0\x2d\x93\xe3\xc2\xd0\xb2\x99\xe2\xe1\x42\xe9\xd2\xc6\x00\x27\x69\x74\xae\xce"), ["\x76\xff\x88\x3f\x0a\xb6\xfb\x95\x51\xc2\x61\xcc\xf5\x87\xba\x34\xb4\xa4\xcd\xbb\x29\xdc\x68\x42\x0a\x9f\xe6\x67\x4c\x5a\x3a\x74"] = CTInfo($description="Google 'Xenon2024' log", $operator="Google", $url="https://ct.googleapis.com/logs/eu1/xenon2024/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xb9\x60\xe0\x34\x1e\x35\xe4\x65\x00\x93\x4f\x90\x09\xbd\x5a\xec\x44\xdd\x8c\x0f\xce\xed\x11\x3e\x2a\x59\x46\x9a\x31\xb6\xc7\x99\xf7\xdc\xef\x3d\xcd\x8f\x86\xc2\x35\xa5\x3e\xdc\x29\xba\xbb\xf2\x54\xe2\xa8\x0c\x83\x08\x51\x06\xde\x21\x6d\x36\x50\x8e\x38\x4d"), ["\x29\x3c\x51\x96\x54\xc8\x39\x65\xba\xaa\x50\xfc\x58\x07\xd4\xb7\x6f\xbf\x58\x7a\x29\x72\xdc\xa4\xc3\x0c\xf4\xe5\x45\x47\xf4\x78"] = CTInfo($description="Google 'Icarus' log", $operator="Google", $url="https://ct.googleapis.com/icarus/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x4e\xd2\xbc\xbf\xb3\x08\x0a\xf7\xb9\xea\xa4\xc7\x1c\x38\x61\x04\xeb\x95\xe0\x89\x54\x68\x44\xb1\x66\xbc\x82\x7e\x4f\x50\x6c\x6f\x5c\xa3\xf0\xaa\x3e\xf4\xec\x80\xf0\xdb\x0a\x9a\x7a\xa0\x5b\x72\x00\x7c\x25\x0e\x19\xef\xaf\xb2\x62\x8d\x74\x43\xf4\x26\xf6\x14"), ["\xa4\xb9\x09\x90\xb4\x18\x58\x14\x87\xbb\x13\xa2\xcc\x67\x70\x0a\x3c\x35\x98\x04\xf9\x1b\xdf\xb8\xe3\x77\xcd\x0e\xc8\x0d\xdc\x10"] = CTInfo($description="Google 'Pilot' log", $operator="Google", $url="https://ct.googleapis.com/pilot/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x7d\xa8\x4b\x12\x29\x80\xa3\x3d\xad\xd3\x5a\x77\xb8\xcc\xe2\x88\xb3\xa5\xfd\xf1\xd3\x0c\xcd\x18\x0c\xe8\x41\x46\xe8\x81\x01\x1b\x15\xe1\x4b\xf1\x1b\x62\xdd\x36\x0a\x08\x18\xba\xed\x0b\x35\x84\xd0\x9e\x40\x3c\x2d\x9e\x9b\x82\x65\xbd\x1f\x04\x10\x41\x4c\xa0"), ["\xee\x4b\xbd\xb7\x75\xce\x60\xba\xe1\x42\x69\x1f\xab\xe1\x9e\x66\xa3\x0f\x7e\x5f\xb0\x72\xd8\x83\x00\xc4\x7b\x89\x7a\xa8\xfd\xcb"] = CTInfo($description="Google 'Rocketeer' log", $operator="Google", $url="https://ct.googleapis.com/rocketeer/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x20\x5b\x18\xc8\x3c\xc1\x8b\xb3\x31\x08\x00\xbf\xa0\x90\x57\x2b\xb7\x47\x8c\x6f\xb5\x68\xb0\x8e\x90\x78\xe9\xa0\x73\xea\x4f\x28\x21\x2e\x9c\xc0\xf4\x16\x1b\xaa\xf9\xd5\xd7\xa9\x80\xc3\x4e\x2f\x52\x3c\x98\x01\x25\x46\x24\x25\x28\x23\x77\x2d\x05\xc2\x40\x7a"), ["\xbb\xd9\xdf\xbc\x1f\x8a\x71\xb5\x93\x94\x23\x97\xaa\x92\x7b\x47\x38\x57\x95\x0a\xab\x52\xe8\x1a\x90\x96\x64\x36\x8e\x1e\xd1\x85"] = CTInfo($description="Google 'Skydiver' log", $operator="Google", $url="https://ct.googleapis.com/skydiver/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x12\x6c\x86\x0e\xf6\x17\xb1\x12\x6c\x37\x25\xd2\xad\x87\x3d\x0e\x31\xec\x21\xad\xb1\xcd\xbe\x14\x47\xb6\x71\x56\x85\x7a\x9a\xb7\x3d\x89\x90\x7b\xc6\x32\x3a\xf8\xda\xce\x8b\x01\xfe\x3f\xfc\x71\x91\x19\x8e\x14\x6e\x89\x7a\x5d\xb4\xab\x7e\xe1\x4e\x1e\x7c\xac"), -["\x41\xc8\xca\xb1\xdf\x22\x46\x4a\x10\xc6\xa1\x3a\x09\x42\x87\x5e\x4e\x31\x8b\x1b\x03\xeb\xeb\x4b\xc7\x68\xf0\x90\x62\x96\x06\xf6"] = CTInfo($description="Cloudflare 'Nimbus2022' Log", $operator="Cloudflare", $url="https://ct.cloudflare.com/logs/nimbus2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x48\xb2\x47\x4e\x50\x32\x72\x62\x4a\x0d\x0c\x48\xbf\xad\x29\x64\x6f\x20\xdf\x79\x52\x63\x16\x29\x0a\x2e\x60\xb5\xe2\x3a\x1c\xb7\xaf\x59\xb1\x55\x09\xdb\x59\xc7\xe9\xbd\x6f\xed\x0b\xaf\x05\x96\x97\xff\x3b\x9a\x43\x4d\xeb\x11\x34\x33\x8a\xe7\xac\x83\xc0\xff"), ["\x7a\x32\x8c\x54\xd8\xb7\x2d\xb6\x20\xea\x38\xe0\x52\x1e\xe9\x84\x16\x70\x32\x13\x85\x4d\x3b\xd2\x2b\xc1\x3a\x57\xa3\x52\xeb\x52"] = CTInfo($description="Cloudflare 'Nimbus2023' Log", $operator="Cloudflare", $url="https://ct.cloudflare.com/logs/nimbus2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x8b\xff\x2d\x92\x18\xcb\x46\x9d\x12\x5e\xb9\x59\x75\x3c\xcd\x91\x37\x7a\x1e\xa9\x9c\x99\x78\x83\x27\x3d\xdf\x01\xd5\x8b\x80\xe8\x63\x9a\xfe\x26\xa2\x1b\xd1\x87\x05\xee\x97\xd6\xe0\x5b\x43\x83\x81\x1c\x02\xf5\x41\x80\x80\x7f\xef\xa4\x61\xcf\xbc\x84\xb5\xa8"), ["\xda\xb6\xbf\x6b\x3f\xb5\xb6\x22\x9f\x9b\xc2\xbb\x5c\x6b\xe8\x70\x91\x71\x6c\xbb\x51\x84\x85\x34\xbd\xa4\x3d\x30\x48\xd7\xfb\xab"] = CTInfo($description="Cloudflare 'Nimbus2024' Log", $operator="Cloudflare", $url="https://ct.cloudflare.com/logs/nimbus2024/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x77\xb1\x9b\x7b\x8f\xe6\x8b\x35\xfe\x3a\x92\x29\x2d\xac\x8a\x8d\x51\x8a\x25\xfc\x93\xb6\xd7\xa0\x8b\x29\x37\x71\x1d\x33\xca\xcc\x33\xea\x28\xb9\x1f\xe2\xac\xc3\xa9\x5d\xdd\x97\xbe\xf6\x9e\x94\x25\xdd\x36\x81\xd1\xeb\x5d\x29\xc3\x2b\x44\xf1\x5b\xca\x15\x48"), -["\x56\x14\x06\x9a\x2f\xd7\xc2\xec\xd3\xf5\xe1\xbd\x44\xb2\x3e\xc7\x46\x76\xb9\xbc\x99\x11\x5c\xc0\xef\x94\x98\x55\xd6\x89\xd0\xdd"] = CTInfo($description="DigiCert Log Server", $operator="DigiCert", $url="https://ct1.digicert-ct.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x02\x46\xc5\xbe\x1b\xbb\x82\x40\x16\xe8\xc1\xd2\xac\x19\x69\x13\x59\xf8\xf8\x70\x85\x46\x40\xb9\x38\xb0\x23\x82\xa8\x64\x4c\x7f\xbf\xbb\x34\x9f\x4a\x5f\x28\x8a\xcf\x19\xc4\x00\xf6\x36\x06\x93\x65\xed\x4c\xf5\xa9\x21\x62\x5a\xd8\x91\xeb\x38\x24\x40\xac\xe8"), -["\x87\x75\xbf\xe7\x59\x7c\xf8\x8c\x43\x99\x5f\xbd\xf3\x6e\xff\x56\x8d\x47\x56\x36\xff\x4a\xb5\x60\xc1\xb4\xea\xff\x5e\xa0\x83\x0f"] = CTInfo($description="DigiCert Log Server 2", $operator="DigiCert", $url="https://ct2.digicert-ct.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xcc\x5d\x39\x2f\x66\xb8\x4c\x7f\xc1\x2e\x03\xa1\x34\xa3\xe8\x8a\x86\x02\xae\x4a\x11\xc6\xf7\x26\x6a\x37\x9b\xf0\x38\xf8\x5d\x09\x8d\x63\xe8\x31\x6b\x86\x66\xcf\x79\xb3\x25\x3c\x1e\xdf\x78\xb4\xa8\xc5\x69\xfa\xb7\xf0\x82\x79\x62\x43\xf6\xcc\xfe\x81\x66\x84"), -["\x22\x45\x45\x07\x59\x55\x24\x56\x96\x3f\xa1\x2f\xf1\xf7\x6d\x86\xe0\x23\x26\x63\xad\xc0\x4b\x7f\x5d\xc6\x83\x5c\x6e\xe2\x0f\x02"] = CTInfo($description="DigiCert Yeti2022 Log", $operator="DigiCert", $url="https://yeti2022.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x9f\xf8\xd8\x1d\xde\xfb\x5b\x51\xb5\xfb\x5d\xf5\xb5\xde\x66\x11\xb0\x9d\x5f\xfd\x6f\xfc\xa8\x98\x5b\x98\x4f\x2d\xc3\x91\x3a\xfb\xfe\xc4\x0f\x0d\xc3\x60\x43\x8c\x1e\xf2\xf9\x11\xb2\xba\xd0\xf6\xbc\xa5\xd2\xb6\x9f\xf9\x5c\x87\xa2\x7d\xfc\xd4\x7d\xd6\x13\x26"), ["\x35\xcf\x19\x1b\xbf\xb1\x6c\x57\xbf\x0f\xad\x4c\x6d\x42\xcb\xbb\xb6\x27\x20\x26\x51\xea\x3f\xe1\x2a\xef\xa8\x03\xc3\x3b\xd6\x4c"] = CTInfo($description="DigiCert Yeti2023 Log", $operator="DigiCert", $url="https://yeti2023.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x7d\x0d\x03\xb1\xd5\x98\x8a\xdc\xf0\x15\x3b\xc6\xdc\x5e\x0d\x6e\x3f\x0d\xbf\x95\xc8\x55\x8c\xd0\xa6\x4c\x96\xb1\x4e\x27\xb9\x26\x25\x99\xcc\x2b\x02\x9e\xa6\xd3\xdd\x9f\xb1\xd5\xc4\xc3\xac\x35\x04\x07\x87\x97\x36\xaa\xad\x28\x0d\x7f\x2b\xd9\x68\x9f\x72\xd1"), ["\x48\xb0\xe3\x6b\xda\xa6\x47\x34\x0f\xe5\x6a\x02\xfa\x9d\x30\xeb\x1c\x52\x01\xcb\x56\xdd\x2c\x81\xd9\xbb\xbf\xab\x39\xd8\x84\x73"] = CTInfo($description="DigiCert Yeti2024 Log", $operator="DigiCert", $url="https://yeti2024.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x57\xb8\xc1\x6f\x30\xa4\x7f\x2e\xe4\xf0\xd0\xd9\x60\x62\x13\x95\xe3\x7a\xe3\x4e\x53\xc3\xb3\xb8\x73\x85\xc1\x18\x0d\x23\x0e\x58\x84\xd2\x78\xef\x9b\xb3\x1e\x2c\x1a\xde\xc1\x8f\x81\x1b\x19\x44\x58\xb7\x00\x77\x60\x20\x1a\x72\xd8\x82\xde\xae\x9e\xb1\xc6\x4b"), ["\x7d\x59\x1e\x12\xe1\x78\x2a\x7b\x1c\x61\x67\x7c\x5e\xfd\xf8\xd0\x87\x5c\x14\xa0\x4e\x95\x9e\xb9\x03\x2f\xd9\x0e\x8c\x2e\x79\xb8"] = CTInfo($description="DigiCert Yeti2025 Log", $operator="DigiCert", $url="https://yeti2025.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xdf\x95\x00\x5e\x10\xc1\x01\xf7\x37\xe3\x10\x74\xd1\xff\xb2\xca\x90\xed\x32\x99\x5f\x0c\x39\xfe\xa1\xd1\x13\x11\xac\xd1\xb3\x73\x93\x20\xc2\x13\x3c\x4c\xb5\x7a\x52\x86\x86\x3d\xe3\x95\x24\x7c\xd8\x91\x98\x48\x3b\xf0\xf0\xdf\x21\xf1\xb0\x81\x5a\x59\x25\x43"), -["\x51\xa3\xb0\xf5\xfd\x01\x79\x9c\x56\x6d\xb8\x37\x78\x8f\x0c\xa4\x7a\xcc\x1b\x27\xcb\xf7\x9e\x88\x42\x9a\x0d\xfe\xd4\x8b\x05\xe5"] = CTInfo($description="DigiCert Nessie2022 Log", $operator="DigiCert", $url="https://nessie2022.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x27\x24\xdd\x68\x03\x28\xcb\xfe\x63\xbe\x0e\x11\x47\x4d\x7d\x17\x68\xa1\x11\x5d\x4c\x71\xc9\x41\x28\xc7\xb6\xa2\x4b\x97\xec\xc0\xaf\xfc\x2f\x3b\xbf\xe9\xf1\xb1\xfc\xf5\x01\xff\xa9\xfb\x49\x40\x0c\x63\x24\x98\xd7\x79\x2e\xa6\x55\xab\x16\xc6\xbe\x51\xd8\x71"), ["\xb3\x73\x77\x07\xe1\x84\x50\xf8\x63\x86\xd6\x05\xa9\xdc\x11\x09\x4a\x79\x2d\xb1\x67\x0c\x0b\x87\xdc\xf0\x03\x0e\x79\x36\xa5\x9a"] = CTInfo($description="DigiCert Nessie2023 Log", $operator="DigiCert", $url="https://nessie2023.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x11\x7b\xbc\x89\x0c\x12\x09\x14\x9f\xd8\x26\xc8\x4c\x6a\x54\xa4\x1b\x45\x56\xdf\x3e\x23\x42\x14\xd1\xdd\x42\xdf\xa2\xdf\x7b\x5f\x9f\x6f\x07\x5a\x23\x46\x79\x16\x4b\x5f\x33\x67\xc1\xa0\x8d\x5b\x5c\x17\x75\xf2\x4d\xa0\x80\xa1\x98\x1a\x07\x59\x06\x02\xca\x4e"), ["\x73\xd9\x9e\x89\x1b\x4c\x96\x78\xa0\x20\x7d\x47\x9d\xe6\xb2\xc6\x1c\xd0\x51\x5e\x71\x19\x2a\x8c\x6b\x80\x10\x7a\xc1\x77\x72\xb5"] = CTInfo($description="DigiCert Nessie2024 Log", $operator="DigiCert", $url="https://nessie2024.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x2d\xfc\xa2\x7b\x36\xbf\x56\x91\xe9\xfe\x3f\xe8\x3d\xfc\xc3\xa7\xe0\x61\x52\xea\x2c\xe9\x05\xa3\x9f\x27\x17\x81\x05\x70\x6b\x81\x61\x44\x8a\xf8\x3b\x10\x80\x42\xed\x03\x2f\x00\x50\x21\xfc\x41\x54\x84\xa3\x54\xd5\x2e\xb2\x7a\x16\x4b\x2a\x1f\x2b\x66\x04\x2b"), ["\xe6\xd2\x31\x63\x40\x77\x8c\xc1\x10\x41\x06\xd7\x71\xb9\xce\xc1\xd2\x40\xf6\x96\x84\x86\xfb\xba\x87\x32\x1d\xfd\x1e\x37\x8e\x50"] = CTInfo($description="DigiCert Nessie2025 Log", $operator="DigiCert", $url="https://nessie2025.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xf2\xf0\xf0\xa7\x8b\x81\x2e\x09\x39\x3b\x9f\x42\xda\x38\x44\x5f\xb4\xcc\xed\x36\xbb\xd8\x43\x7f\x16\x49\x57\x87\x04\x7f\xa5\x01\x34\xf7\xe8\x68\x3f\xb7\x78\x1f\x60\x66\x2d\x67\x9a\x75\x80\xb7\x53\xa7\x85\xd5\xbc\xab\x47\x06\x55\xdb\xb5\xdf\x88\xa1\x6f\x38"), -["\x05\x9c\x01\xd3\x20\xe0\x07\x84\x13\x95\x80\x49\x8d\x11\x7c\x90\x32\x66\xaf\xaf\x72\x50\xb5\xaf\x3b\x46\xa4\x3e\x11\x84\x0d\x4a"] = CTInfo($description="DigiCert Yeti2022-2 Log", $operator="DigiCert", $url="https://yeti2022-2.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x1d\x69\x5e\x3f\x0a\xf2\x71\x77\xcd\x9d\x5d\xc3\x34\x49\x00\xee\x60\x77\xe1\x72\x76\x74\xa8\x7c\x5c\x7d\x09\xf2\x32\x1d\x05\x7e\x2e\xfe\x5b\x31\xd5\x3a\xfd\x73\x34\x6e\x49\x14\x4e\x50\x58\x96\x5a\xc4\xc7\xf4\xbe\x05\x64\xa4\xf7\xd7\xe5\xb1\x6d\x33\x0c\xc3"), ["\x55\x81\xd4\xc2\x16\x90\x36\x01\x4a\xea\x0b\x9b\x57\x3c\x53\xf0\xc0\xe4\x38\x78\x70\x25\x08\x17\x2f\xa3\xaa\x1d\x07\x13\xd3\x0c"] = CTInfo($description="Sectigo 'Sabre' CT log", $operator="Sectigo", $url="https://sabre.ct.comodo.com/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xf2\x6f\xd2\x89\x0f\x3f\xc5\xf8\x87\x1e\xab\x65\xb3\xd9\xbb\x17\x23\x8c\x06\x0e\x09\x55\x96\x3d\x0a\x08\xa2\xc5\x71\xb3\xd1\xa9\x2f\x28\x3e\x83\x10\xbf\x12\xd0\x44\x66\x15\xef\x54\xe1\x98\x80\xd0\xce\x24\x6d\x3e\x67\x9a\xe9\x37\x23\xce\x52\x93\x86\xda\x80"), ["\x6f\x53\x76\xac\x31\xf0\x31\x19\xd8\x99\x00\xa4\x51\x15\xff\x77\x15\x1c\x11\xd9\x02\xc1\x00\x29\x06\x8d\xb2\x08\x9a\x37\xd9\x13"] = CTInfo($description="Sectigo 'Mammoth' CT log", $operator="Sectigo", $url="https://mammoth.ct.comodo.com/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xef\xe4\x7d\x74\x2e\x15\x15\xb6\xe9\xbb\x23\x8b\xfb\x2c\xb5\xe1\xc7\x80\x98\x47\xfb\x40\x69\x68\xfc\x49\xad\x61\x4e\x83\x47\x3c\x1a\xb7\x8d\xdf\xff\x7b\x30\xb4\xba\xff\x2f\xcb\xa0\x14\xe3\xad\xd5\x85\x3f\x44\x59\x8c\x8c\x60\x8b\xd7\xb8\xb1\xbf\xae\x8c\x67"), -["\xdf\xa5\x5e\xab\x68\x82\x4f\x1f\x6c\xad\xee\xb8\x5f\x4e\x3e\x5a\xea\xcd\xa2\x12\xa4\x6a\x5e\x8e\x3b\x12\xc0\x20\x44\x5c\x2a\x73"] = CTInfo($description="Let's Encrypt 'Oak2022' log", $operator="Let's Encrypt", $url="https://oak.ct.letsencrypt.org/2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x86\x3c\xb1\x0d\x52\x23\x5a\xde\x6e\xf6\xc0\x7f\xa3\x64\xbc\xad\xc1\x89\xda\x97\x59\x4c\x60\x3c\xf8\x8a\x57\x84\x8f\xed\xbc\xa0\x63\x12\x51\x84\xe6\xbd\xdd\x7b\x8c\x80\x7d\xe3\x8f\x86\xa4\xea\xa9\xcf\xa8\xee\xf3\xe0\x5e\x70\xe0\xbb\xf6\xbd\xfc\x1f\x91\x2e"), ["\xb7\x3e\xfb\x24\xdf\x9c\x4d\xba\x75\xf2\x39\xc5\xba\x58\xf4\x6c\x5d\xfc\x42\xcf\x7a\x9f\x35\xc4\x9e\x1d\x09\x81\x25\xed\xb4\x99"] = CTInfo($description="Let's Encrypt 'Oak2023' log", $operator="Let's Encrypt", $url="https://oak.ct.letsencrypt.org/2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xb3\x3d\x0e\x78\xbe\xe3\xad\x5c\x44\x5c\x9b\xbe\xa3\x84\x16\x41\x82\xca\xca\x89\x17\x1e\x23\xce\x38\xa5\x54\x2f\x7f\xd3\x34\x51\x6a\xb9\x5c\xc3\x49\xea\xfb\x91\x9d\xe0\x8a\x3c\x73\x06\x9f\x7c\x65\x38\x11\x80\xc4\x9a\x5a\x00\xa6\x67\xc3\x83\xef\x89\x85\x51"), ["\x3b\x53\x77\x75\x3e\x2d\xb9\x80\x4e\x8b\x30\x5b\x06\xfe\x40\x3b\x67\xd8\x4f\xc3\xf4\xc7\xbd\x00\x0d\x2d\x72\x6f\xe1\xfa\xd4\x17"] = CTInfo($description="Let's Encrypt 'Oak2024H1' log", $operator="Let's Encrypt", $url="https://oak.ct.letsencrypt.org/2024h1/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x56\x43\xd7\x7e\x7b\xd4\x72\xb7\xba\xa9\x51\xbd\x36\x93\xb7\xe9\xb5\x92\x0f\xea\x5e\xb7\x45\xa3\x92\xfd\xc9\xa5\x3c\x80\xac\x1a\x20\xef\x25\x2f\xb8\xe1\x20\xf7\xa8\x3a\x2e\x07\x8d\xe6\xeb\xa4\xe2\x7d\x24\x63\x9f\x46\xbf\x94\x73\x52\x8d\x96\xae\xa9\x26\xfd"), ["\x3f\x17\x4b\x4f\xd7\x22\x47\x58\x94\x1d\x65\x1c\x84\xbe\x0d\x12\xed\x90\x37\x7f\x1f\x85\x6a\xeb\xc1\xbf\x28\x85\xec\xf8\x64\x6e"] = CTInfo($description="Let's Encrypt 'Oak2024H2' log", $operator="Let's Encrypt", $url="https://oak.ct.letsencrypt.org/2024h2/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xd7\x73\xd6\x53\x47\xe9\xf3\xc9\xd5\x7c\x16\xc2\xd6\x8f\x70\x65\xfa\xf2\x51\x36\xa9\x13\x80\x2f\xed\xf9\x94\xd3\x5a\x8b\xe8\x4f\x33\xcf\xc3\xd3\x89\xd4\x5f\x5a\x66\x89\xba\x20\x1f\x71\xcb\xca\xbb\x9f\x9f\xf3\x5c\x2d\x1e\xa3\x81\x59\xaf\x92\xb3\x6d\x30\x68"), -["\xc3\x65\xf9\xb3\x65\x4f\x32\x83\xc7\x9d\xa9\x8e\x93\xd7\x41\x8f\x5b\xab\x7b\xe3\x25\x2c\x98\xe1\xd2\xf0\x4b\xb9\xeb\x42\x7d\x23"] = CTInfo($description="Trust Asia Log2022", $operator="TrustAsia", $url="https://ct.trustasia.com/log2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xbb\x52\xf2\x16\xcf\x92\x0b\xce\x79\xe6\x54\x6d\xc2\x37\x53\xa4\xf5\xf9\x3a\xa9\xb3\x05\xec\x1d\xbd\x16\xec\x30\xac\x2e\xf8\x79\x62\x35\x15\x8e\x1a\xd8\x16\x2e\xe4\x48\x6b\xf6\xc6\x13\xf1\x96\x2e\x5c\x10\xfe\x19\x1e\xa8\x18\xb8\x0f\x2d\xc3\xa4\x86\x51\x97"), ["\xe8\x7e\xa7\x66\x0b\xc2\x6c\xf6\x00\x2e\xf5\x72\x5d\x3f\xe0\xe3\x31\xb9\x39\x3b\xb9\x2f\xbf\x58\xeb\x3b\x90\x49\xda\xf5\x43\x5a"] = CTInfo($description="Trust Asia Log2023", $operator="TrustAsia", $url="https://ct.trustasia.com/log2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xa4\x11\x52\xdb\x17\x41\x4e\x90\xd4\x56\x51\x12\x30\x52\xf8\x9b\x03\xcf\x4c\x9f\xf8\x2e\x38\xb5\xf1\x5a\xba\xfa\x38\xb9\xd2\x8f\x1a\x81\xda\x95\xcc\x33\xec\x21\x28\x66\xc6\x56\x3e\x60\x36\x21\x20\xd9\xd4\xac\x5d\xfa\x5c\x19\xa1\x05\x7d\xfe\x20\x23\xfc\xf5"), +["\x87\x4f\xb5\x0d\xc0\x29\xd9\x93\x1d\xe5\x73\xe9\xf2\x89\x9e\x8e\x45\x33\xb3\x92\xd3\x8b\x0a\x46\x25\x74\xbf\x0f\xee\xb2\xfc\x1e"] = CTInfo($description="Trust Asia Log2024-2", $operator="TrustAsia", $url="https://ct2024.trustasia.com/log2024/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xa7\x64\xe2\x79\x81\x3f\x61\xd7\xec\xc6\xf8\x65\x28\x1d\xa0\xb4\x66\x33\xc3\x25\xd5\x0a\x95\x78\x9c\x8f\xfe\xa4\x2a\xd8\x8f\x7e\x72\xe0\xfe\xa8\x7f\xf8\xb1\x2d\x85\xc0\x8e\x12\x74\x0d\x2f\x8c\xab\xd7\x7f\x7a\x1e\xd9\x84\x33\x39\xe8\xfd\x89\x5f\x96\x48\x08"), }; diff --git a/scripts/base/protocols/ssl/main.zeek b/scripts/base/protocols/ssl/main.zeek index 8f8c163953..5b71ebf8b7 100644 --- a/scripts/base/protocols/ssl/main.zeek +++ b/scripts/base/protocols/ssl/main.zeek @@ -528,5 +528,9 @@ event analyzer_violation_info(atype: AllAnalyzers::Tag, info: AnalyzerViolationI { if ( atype == Analyzer::ANALYZER_SSL || atype == Analyzer::ANALYZER_DTLS ) if ( info$c?$ssl ) - finish(info$c, T); + { + # analyzer errored out; prevent us from trying to remove it later + delete info$c$ssl$analyzer_id; + finish(info$c, F); + } } diff --git a/scripts/base/protocols/ssl/mozilla-ca-list.zeek b/scripts/base/protocols/ssl/mozilla-ca-list.zeek index 160ae25452..3321bd6e80 100644 --- a/scripts/base/protocols/ssl/mozilla-ca-list.zeek +++ b/scripts/base/protocols/ssl/mozilla-ca-list.zeek @@ -1,6 +1,6 @@ # Don't edit! This file is automatically generated. -# Generated at: 2022-04-28 12:57:26 +0100 -# Generated from: NSS 3.78 +# Generated at: 2023-05-03 10:29:01 +0100 +# Generated from: NSS 3.89 # # The original source file comes with this licensing statement: # @@ -30,7 +30,6 @@ redef root_certs += { ["CN=SecureTrust CA,O=SecureTrust Corporation,C=US"] = "\x30\x82\x03\xB8\x30\x82\x02\xA0\xA0\x03\x02\x01\x02\x02\x10\x0C\xF0\x8E\x5C\x08\x16\xA5\xAD\x42\x7F\xF0\xEB\x27\x18\x59\xD0\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x20\x30\x1E\x06\x03\x55\x04\x0A\x13\x17\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x6F\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x31\x17\x30\x15\x06\x03\x55\x04\x03\x13\x0E\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x41\x30\x1E\x17\x0D\x30\x36\x31\x31\x30\x37\x31\x39\x33\x31\x31\x38\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x31\x39\x34\x30\x35\x35\x5A\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x20\x30\x1E\x06\x03\x55\x04\x0A\x13\x17\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x6F\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x31\x17\x30\x15\x06\x03\x55\x04\x03\x13\x0E\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x41\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xAB\xA4\x81\xE5\x95\xCD\xF5\xF6\x14\x8E\xC2\x4F\xCA\xD4\xE2\x78\x95\x58\x9C\x41\xE1\x0D\x99\x40\x24\x17\x39\x91\x33\x66\xE9\xBE\xE1\x83\xAF\x62\x5C\x89\xD1\xFC\x24\x5B\x61\xB3\xE0\x11\x11\x41\x1C\x1D\x6E\xF0\xB8\xBB\xF8\xDE\xA7\x81\xBA\xA6\x48\xC6\x9F\x1D\xBD\xBE\x8E\xA9\x41\x3E\xB8\x94\xED\x29\x1A\xD4\x8E\xD2\x03\x1D\x03\xEF\x6D\x0D\x67\x1C\x57\xD7\x06\xAD\xCA\xC8\xF5\xFE\x0E\xAF\x66\x25\x48\x04\x96\x0B\x5D\xA3\xBA\x16\xC3\x08\x4F\xD1\x46\xF8\x14\x5C\xF2\xC8\x5E\x01\x99\x6D\xFD\x88\xCC\x86\xA8\xC1\x6F\x31\x42\x6C\x52\x3E\x68\xCB\xF3\x19\x34\xDF\xBB\x87\x18\x56\x80\x26\xC4\xD0\xDC\xC0\x6F\xDF\xDE\xA0\xC2\x91\x16\xA0\x64\x11\x4B\x44\xBC\x1E\xF6\xE7\xFA\x63\xDE\x66\xAC\x76\xA4\x71\xA3\xEC\x36\x94\x68\x7A\x77\xA4\xB1\xE7\x0E\x2F\x81\x7A\xE2\xB5\x72\x86\xEF\xA2\x6B\x8B\xF0\x0F\xDB\xD3\x59\x3F\xBA\x72\xBC\x44\x24\x9C\xE3\x73\xB3\xF7\xAF\x57\x2F\x42\x26\x9D\xA9\x74\xBA\x00\x52\xF2\x4B\xCD\x53\x7C\x47\x0B\x36\x85\x0E\x66\xA9\x08\x97\x16\x34\x57\xC1\x66\xF7\x80\xE3\xED\x70\x54\xC7\x93\xE0\x2E\x28\x15\x59\x87\xBA\xBB\x02\x03\x01\x00\x01\xA3\x81\x9D\x30\x81\x9A\x30\x13\x06\x09\x2B\x06\x01\x04\x01\x82\x37\x14\x02\x04\x06\x1E\x04\x00\x43\x00\x41\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x01\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x42\x32\xB6\x16\xFA\x04\xFD\xFE\x5D\x4B\x7A\xC3\xFD\xF7\x4C\x40\x1D\x5A\x43\xAF\x30\x34\x06\x03\x55\x1D\x1F\x04\x2D\x30\x2B\x30\x29\xA0\x27\xA0\x25\x86\x23\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x65\x63\x75\x72\x65\x74\x72\x75\x73\x74\x2E\x63\x6F\x6D\x2F\x53\x54\x43\x41\x2E\x63\x72\x6C\x30\x10\x06\x09\x2B\x06\x01\x04\x01\x82\x37\x15\x01\x04\x03\x02\x01\x00\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x30\xED\x4F\x4A\xE1\x58\x3A\x52\x72\x5B\xB5\xA6\xA3\x65\x18\xA6\xBB\x51\x3B\x77\xE9\x9D\xEA\xD3\x9F\x5C\xE0\x45\x65\x7B\x0D\xCA\x5B\xE2\x70\x50\xB2\x94\x05\x14\xAE\x49\xC7\x8D\x41\x07\x12\x73\x94\x7E\x0C\x23\x21\xFD\xBC\x10\x7F\x60\x10\x5A\x72\xF5\x98\x0E\xAC\xEC\xB9\x7F\xDD\x7A\x6F\x5D\xD3\x1C\xF4\xFF\x88\x05\x69\x42\xA9\x05\x71\xC8\xB7\xAC\x26\xE8\x2E\xB4\x8C\x6A\xFF\x71\xDC\xB8\xB1\xDF\x99\xBC\x7C\x21\x54\x2B\xE4\x58\xA2\xBB\x57\x29\xAE\x9E\xA9\xA3\x19\x26\x0F\x99\x2E\x08\xB0\xEF\xFD\x69\xCF\x99\x1A\x09\x8D\xE3\xA7\x9F\x2B\xC9\x36\x34\x7B\x24\xB3\x78\x4C\x95\x17\xA4\x06\x26\x1E\xB6\x64\x52\x36\x5F\x60\x67\xD9\x9C\xC5\x05\x74\x0B\xE7\x67\x23\xD2\x08\xFC\x88\xE9\xAE\x8B\x7F\xE1\x30\xF4\x37\x7E\xFD\xC6\x32\xDA\x2D\x9E\x44\x30\x30\x6C\xEE\x07\xDE\xD2\x34\xFC\xD2\xFF\x40\xF6\x4B\xF4\x66\x46\x06\x54\xA6\xF2\x32\x0A\x63\x26\x30\x6B\x9B\xD1\xDC\x8B\x47\xBA\xE1\xB9\xD5\x62\xD0\xA2\xA0\xF4\x67\x05\x78\x29\x63\x1A\x6F\x04\xD6\xF8\xC6\x4C\xA3\x9A\xB1\x37\xB4\x8D\xE5\x28\x4B\x1D\x9E\x2C\xC2\xB8\x68\xBC\xED\x02\xEE\x31", ["CN=Secure Global CA,O=SecureTrust Corporation,C=US"] = "\x30\x82\x03\xBC\x30\x82\x02\xA4\xA0\x03\x02\x01\x02\x02\x10\x07\x56\x22\xA4\xE8\xD4\x8A\x89\x4D\xF4\x13\xC8\xF0\xF8\xEA\xA5\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x4A\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x20\x30\x1E\x06\x03\x55\x04\x0A\x13\x17\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x6F\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x31\x19\x30\x17\x06\x03\x55\x04\x03\x13\x10\x53\x65\x63\x75\x72\x65\x20\x47\x6C\x6F\x62\x61\x6C\x20\x43\x41\x30\x1E\x17\x0D\x30\x36\x31\x31\x30\x37\x31\x39\x34\x32\x32\x38\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x31\x39\x35\x32\x30\x36\x5A\x30\x4A\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x20\x30\x1E\x06\x03\x55\x04\x0A\x13\x17\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x6F\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x31\x19\x30\x17\x06\x03\x55\x04\x03\x13\x10\x53\x65\x63\x75\x72\x65\x20\x47\x6C\x6F\x62\x61\x6C\x20\x43\x41\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xAF\x35\x2E\xD8\xAC\x6C\x55\x69\x06\x71\xE5\x13\x68\x24\xB3\x4F\xD8\xCC\x21\x47\xF8\xF1\x60\x38\x89\x89\x03\xE9\xBD\xEA\x5E\x46\x53\x09\xDC\x5C\xF5\x5A\xE8\xF7\x45\x2A\x02\xEB\x31\x61\xD7\x29\x33\x4C\xCE\xC7\x7C\x0A\x37\x7E\x0F\xBA\x32\x98\xE1\x1D\x97\xAF\x8F\xC7\xDC\xC9\x38\x96\xF3\xDB\x1A\xFC\x51\xED\x68\xC6\xD0\x6E\xA4\x7C\x24\xD1\xAE\x42\xC8\x96\x50\x63\x2E\xE0\xFE\x75\xFE\x98\xA7\x5F\x49\x2E\x95\xE3\x39\x33\x64\x8E\x1E\xA4\x5F\x90\xD2\x67\x3C\xB2\xD9\xFE\x41\xB9\x55\xA7\x09\x8E\x72\x05\x1E\x8B\xDD\x44\x85\x82\x42\xD0\x49\xC0\x1D\x60\xF0\xD1\x17\x2C\x95\xEB\xF6\xA5\xC1\x92\xA3\xC5\xC2\xA7\x08\x60\x0D\x60\x04\x10\x96\x79\x9E\x16\x34\xE6\xA9\xB6\xFA\x25\x45\x39\xC8\x1E\x65\xF9\x93\xF5\xAA\xF1\x52\xDC\x99\x98\x3D\xA5\x86\x1A\x0C\x35\x33\xFA\x4B\xA5\x04\x06\x15\x1C\x31\x80\xEF\xAA\x18\x6B\xC2\x7B\xD7\xDA\xCE\xF9\x33\x20\xD5\xF5\xBD\x6A\x33\x2D\x81\x04\xFB\xB0\x5C\xD4\x9C\xA3\xE2\x5C\x1D\xE3\xA9\x42\x75\x5E\x7B\xD4\x77\xEF\x39\x54\xBA\xC9\x0A\x18\x1B\x12\x99\x49\x2F\x88\x4B\xFD\x50\x62\xD1\x73\xE7\x8F\x7A\x43\x02\x03\x01\x00\x01\xA3\x81\x9D\x30\x81\x9A\x30\x13\x06\x09\x2B\x06\x01\x04\x01\x82\x37\x14\x02\x04\x06\x1E\x04\x00\x43\x00\x41\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x01\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xAF\x44\x04\xC2\x41\x7E\x48\x83\xDB\x4E\x39\x02\xEC\xEC\x84\x7A\xE6\xCE\xC9\xA4\x30\x34\x06\x03\x55\x1D\x1F\x04\x2D\x30\x2B\x30\x29\xA0\x27\xA0\x25\x86\x23\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x65\x63\x75\x72\x65\x74\x72\x75\x73\x74\x2E\x63\x6F\x6D\x2F\x53\x47\x43\x41\x2E\x63\x72\x6C\x30\x10\x06\x09\x2B\x06\x01\x04\x01\x82\x37\x15\x01\x04\x03\x02\x01\x00\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x63\x1A\x08\x40\x7D\xA4\x5E\x53\x0D\x77\xD8\x7A\xAE\x1F\x0D\x0B\x51\x16\x03\xEF\x18\x7C\xC8\xE3\xAF\x6A\x58\x93\x14\x60\x91\xB2\x84\xDC\x88\x4E\xBE\x39\x8A\x3A\xF3\xE6\x82\x89\x5D\x01\x37\xB3\xAB\x24\xA4\x15\x0E\x92\x35\x5A\x4A\x44\x5E\x4E\x57\xFA\x75\xCE\x1F\x48\xCE\x66\xF4\x3C\x40\x26\x92\x98\x6C\x1B\xEE\x24\x46\x0C\x17\xB3\x52\xA5\xDB\xA5\x91\x91\xCF\x37\xD3\x6F\xE7\x27\x08\x3A\x4E\x19\x1F\x3A\xA7\x58\x5C\x17\xCF\x79\x3F\x8B\xE4\xA7\xD3\x26\x23\x9D\x26\x0F\x58\x69\xFC\x47\x7E\xB2\xD0\x8D\x8B\x93\xBF\x29\x4F\x43\x69\x74\x76\x67\x4B\xCF\x07\x8C\xE6\x02\xF7\xB5\xE1\xB4\x43\xB5\x4B\x2D\x14\x9F\xF9\xDC\x26\x0D\xBF\xA6\x47\x74\x06\xD8\x88\xD1\x3A\x29\x30\x84\xCE\xD2\x39\x80\x62\x1B\xA8\xC7\x57\x49\xBC\x6A\x55\x51\x67\x15\x4A\xBE\x35\x07\xE4\xD5\x75\x98\x37\x79\x30\x14\xDB\x29\x9D\x6C\xC5\x69\xCC\x47\x55\xA2\x30\xF7\xCC\x5C\x7F\xC2\xC3\x98\x1C\x6B\x4E\x16\x80\xEB\x7A\x78\x65\x45\xA2\x00\x1A\xAF\x0C\x0D\x55\x64\x34\x48\xB8\x92\xB9\xF1\xB4\x50\x29\xF2\x4F\x23\x1F\xDA\x6C\xAC\x1F\x44\xE1\xDD\x23\x78\x51\x5B\xC7\x16", ["CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB"] = "\x30\x82\x04\x1D\x30\x82\x03\x05\xA0\x03\x02\x01\x02\x02\x10\x4E\x81\x2D\x8A\x82\x65\xE0\x0B\x02\xEE\x3E\x35\x02\x46\xE5\x3D\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x81\x81\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x42\x31\x1B\x30\x19\x06\x03\x55\x04\x08\x13\x12\x47\x72\x65\x61\x74\x65\x72\x20\x4D\x61\x6E\x63\x68\x65\x73\x74\x65\x72\x31\x10\x30\x0E\x06\x03\x55\x04\x07\x13\x07\x53\x61\x6C\x66\x6F\x72\x64\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x13\x11\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x41\x20\x4C\x69\x6D\x69\x74\x65\x64\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x36\x31\x32\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x32\x33\x35\x39\x35\x39\x5A\x30\x81\x81\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x42\x31\x1B\x30\x19\x06\x03\x55\x04\x08\x13\x12\x47\x72\x65\x61\x74\x65\x72\x20\x4D\x61\x6E\x63\x68\x65\x73\x74\x65\x72\x31\x10\x30\x0E\x06\x03\x55\x04\x07\x13\x07\x53\x61\x6C\x66\x6F\x72\x64\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x13\x11\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x41\x20\x4C\x69\x6D\x69\x74\x65\x64\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xD0\x40\x8B\x8B\x72\xE3\x91\x1B\xF7\x51\xC1\x1B\x54\x04\x98\xD3\xA9\xBF\xC1\xE6\x8A\x5D\x3B\x87\xFB\xBB\x88\xCE\x0D\xE3\x2F\x3F\x06\x96\xF0\xA2\x29\x50\x99\xAE\xDB\x3B\xA1\x57\xB0\x74\x51\x71\xCD\xED\x42\x91\x4D\x41\xFE\xA9\xC8\xD8\x6A\x86\x77\x44\xBB\x59\x66\x97\x50\x5E\xB4\xD4\x2C\x70\x44\xCF\xDA\x37\x95\x42\x69\x3C\x30\xC4\x71\xB3\x52\xF0\x21\x4D\xA1\xD8\xBA\x39\x7C\x1C\x9E\xA3\x24\x9D\xF2\x83\x16\x98\xAA\x16\x7C\x43\x9B\x15\x5B\xB7\xAE\x34\x91\xFE\xD4\x62\x26\x18\x46\x9A\x3F\xEB\xC1\xF9\xF1\x90\x57\xEB\xAC\x7A\x0D\x8B\xDB\x72\x30\x6A\x66\xD5\xE0\x46\xA3\x70\xDC\x68\xD9\xFF\x04\x48\x89\x77\xDE\xB5\xE9\xFB\x67\x6D\x41\xE9\xBC\x39\xBD\x32\xD9\x62\x02\xF1\xB1\xA8\x3D\x6E\x37\x9C\xE2\x2F\xE2\xD3\xA2\x26\x8B\xC6\xB8\x55\x43\x88\xE1\x23\x3E\xA5\xD2\x24\x39\x6A\x47\xAB\x00\xD4\xA1\xB3\xA9\x25\xFE\x0D\x3F\xA7\x1D\xBA\xD3\x51\xC1\x0B\xA4\xDA\xAC\x38\xEF\x55\x50\x24\x05\x65\x46\x93\x34\x4F\x2D\x8D\xAD\xC6\xD4\x21\x19\xD2\x8E\xCA\x05\x61\x71\x07\x73\x47\xE5\x8A\x19\x12\xBD\x04\x4D\xCE\x4E\x9C\xA5\x48\xAC\xBB\x26\xF7\x02\x03\x01\x00\x01\xA3\x81\x8E\x30\x81\x8B\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x0B\x58\xE5\x8B\xC6\x4C\x15\x37\xA4\x40\xA9\x30\xA9\x21\xBE\x47\x36\x5A\x56\xFF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x49\x06\x03\x55\x1D\x1F\x04\x42\x30\x40\x30\x3E\xA0\x3C\xA0\x3A\x86\x38\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x63\x6F\x6D\x6F\x64\x6F\x63\x61\x2E\x63\x6F\x6D\x2F\x43\x4F\x4D\x4F\x44\x4F\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x3E\x98\x9E\x9B\xF6\x1B\xE9\xD7\x39\xB7\x78\xAE\x1D\x72\x18\x49\xD3\x87\xE4\x43\x82\xEB\x3F\xC9\xAA\xF5\xA8\xB5\xEF\x55\x7C\x21\x52\x65\xF9\xD5\x0D\xE1\x6C\xF4\x3E\x8C\x93\x73\x91\x2E\x02\xC4\x4E\x07\x71\x6F\xC0\x8F\x38\x61\x08\xA8\x1E\x81\x0A\xC0\x2F\x20\x2F\x41\x8B\x91\xDC\x48\x45\xBC\xF1\xC6\xDE\xBA\x76\x6B\x33\xC8\x00\x2D\x31\x46\x4C\xED\xE7\x9D\xCF\x88\x94\xFF\x33\xC0\x56\xE8\x24\x86\x26\xB8\xD8\x38\x38\xDF\x2A\x6B\xDD\x12\xCC\xC7\x3F\x47\x17\x4C\xA2\xC2\x06\x96\x09\xD6\xDB\xFE\x3F\x3C\x46\x41\xDF\x58\xE2\x56\x0F\x3C\x3B\xC1\x1C\x93\x35\xD9\x38\x52\xAC\xEE\xC8\xEC\x2E\x30\x4E\x94\x35\xB4\x24\x1F\x4B\x78\x69\xDA\xF2\x02\x38\xCC\x95\x52\x93\xF0\x70\x25\x59\x9C\x20\x67\xC4\xEE\xF9\x8B\x57\x61\xF4\x92\x76\x7D\x3F\x84\x8D\x55\xB7\xE8\xE5\xAC\xD5\xF1\xF5\x19\x56\xA6\x5A\xFB\x90\x1C\xAF\x93\xEB\xE5\x1C\xD4\x67\x97\x5D\x04\x0E\xBE\x0B\x83\xA6\x17\x83\xB9\x30\x12\xA0\xC5\x33\x15\x05\xB9\x0D\xFB\xC7\x05\x76\xE3\xD8\x4A\x8D\xFC\x34\x17\xA3\xC6\x21\x28\xBE\x30\x45\x31\x1E\xC7\x78\xBE\x58\x61\x38\xAC\x3B\xE2\x01\x65", - ["CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US"] = "\x30\x82\x03\xE6\x30\x82\x02\xCE\xA0\x03\x02\x01\x02\x02\x10\x57\xCB\x33\x6F\xC2\x5C\x16\xE6\x47\x16\x17\xE3\x90\x31\x68\xE0\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x62\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x21\x30\x1F\x06\x03\x55\x04\x0A\x13\x18\x4E\x65\x74\x77\x6F\x72\x6B\x20\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x20\x4C\x2E\x4C\x2E\x43\x2E\x31\x30\x30\x2E\x06\x03\x55\x04\x03\x13\x27\x4E\x65\x74\x77\x6F\x72\x6B\x20\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x36\x31\x32\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x32\x33\x35\x39\x35\x39\x5A\x30\x62\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x21\x30\x1F\x06\x03\x55\x04\x0A\x13\x18\x4E\x65\x74\x77\x6F\x72\x6B\x20\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x20\x4C\x2E\x4C\x2E\x43\x2E\x31\x30\x30\x2E\x06\x03\x55\x04\x03\x13\x27\x4E\x65\x74\x77\x6F\x72\x6B\x20\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xE4\xBC\x7E\x92\x30\x6D\xC6\xD8\x8E\x2B\x0B\xBC\x46\xCE\xE0\x27\x96\xDE\xDE\xF9\xFA\x12\xD3\x3C\x33\x73\xB3\x04\x2F\xBC\x71\x8C\xE5\x9F\xB6\x22\x60\x3E\x5F\x5D\xCE\x09\xFF\x82\x0C\x1B\x9A\x51\x50\x1A\x26\x89\xDD\xD5\x61\x5D\x19\xDC\x12\x0F\x2D\x0A\xA2\x43\x5D\x17\xD0\x34\x92\x20\xEA\x73\xCF\x38\x2C\x06\x26\x09\x7A\x72\xF7\xFA\x50\x32\xF8\xC2\x93\xD3\x69\xA2\x23\xCE\x41\xB1\xCC\xE4\xD5\x1F\x36\xD1\x8A\x3A\xF8\x8C\x63\xE2\x14\x59\x69\xED\x0D\xD3\x7F\x6B\xE8\xB8\x03\xE5\x4F\x6A\xE5\x98\x63\x69\x48\x05\xBE\x2E\xFF\x33\xB6\xE9\x97\x59\x69\xF8\x67\x19\xAE\x93\x61\x96\x44\x15\xD3\x72\xB0\x3F\xBC\x6A\x7D\xEC\x48\x7F\x8D\xC3\xAB\xAA\x71\x2B\x53\x69\x41\x53\x34\xB5\xB0\xB9\xC5\x06\x0A\xC4\xB0\x45\xF5\x41\x5D\x6E\x89\x45\x7B\x3D\x3B\x26\x8C\x74\xC2\xE5\xD2\xD1\x7D\xB2\x11\xD4\xFB\x58\x32\x22\x9A\x80\xC9\xDC\xFD\x0C\xE9\x7F\x5E\x03\x97\xCE\x3B\x00\x14\x87\x27\x70\x38\xA9\x8E\x6E\xB3\x27\x76\x98\x51\xE0\x05\xE3\x21\xAB\x1A\xD5\x85\x22\x3C\x29\xB5\x9A\x16\xC5\x80\xA8\xF4\xBB\x6B\x30\x8F\x2F\x46\x02\xA2\xB1\x0C\x22\xE0\xD3\x02\x03\x01\x00\x01\xA3\x81\x97\x30\x81\x94\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x21\x30\xC9\xFB\x00\xD7\x4E\x98\xDA\x87\xAA\x2A\xD0\xA7\x2E\xB1\x40\x31\xA7\x4C\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x52\x06\x03\x55\x1D\x1F\x04\x4B\x30\x49\x30\x47\xA0\x45\xA0\x43\x86\x41\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x6E\x65\x74\x73\x6F\x6C\x73\x73\x6C\x2E\x63\x6F\x6D\x2F\x4E\x65\x74\x77\x6F\x72\x6B\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xBB\xAE\x4B\xE7\xB7\x57\xEB\x7F\xAA\x2D\xB7\x73\x47\x85\x6A\xC1\xE4\xA5\x1D\xE4\xE7\x3C\xE9\xF4\x59\x65\x77\xB5\x7A\x5B\x5A\x8D\x25\x36\xE0\x7A\x97\x2E\x38\xC0\x57\x60\x83\x98\x06\x83\x9F\xB9\x76\x7A\x6E\x50\xE0\xBA\x88\x2C\xFC\x45\xCC\x18\xB0\x99\x95\x51\x0E\xEC\x1D\xB8\x88\xFF\x87\x50\x1C\x82\xC2\xE3\xE0\x32\x80\xBF\xA0\x0B\x47\xC8\xC3\x31\xEF\x99\x67\x32\x80\x4F\x17\x21\x79\x0C\x69\x5C\xDE\x5E\x34\xAE\x02\xB5\x26\xEA\x50\xDF\x7F\x18\x65\x2C\xC9\xF2\x63\xE1\xA9\x07\xFE\x7C\x71\x1F\x6B\x33\x24\x6A\x1E\x05\xF7\x05\x68\xC0\x6A\x12\xCB\x2E\x5E\x61\xCB\xAE\x28\xD3\x7E\xC2\xB4\x66\x91\x26\x5F\x3C\x2E\x24\x5F\xCB\x58\x0F\xEB\x28\xEC\xAF\x11\x96\xF3\xDC\x7B\x6F\xC0\xA7\x88\xF2\x53\x77\xB3\x60\x5E\xAE\xAE\x28\xDA\x35\x2C\x6F\x34\x45\xD3\x26\xE1\xDE\xEC\x5B\x4F\x27\x6B\x16\x7C\xBD\x44\x04\x18\x82\xB3\x89\x79\x17\x10\x71\x3D\x7A\xA2\x16\x4E\xF5\x01\xCD\xA4\x6C\x65\x68\xA1\x49\x76\x5C\x43\xC9\xD8\xBC\x36\x67\x6C\xA5\x94\xB5\xD4\xCC\xB9\xBD\x6A\x35\x56\x21\xDE\xD8\xC3\xEB\xFB\xCB\xA4\x60\x4C\xB0\x55\xA0\xA0\x7B\x57\xB2", ["CN=COMODO ECC Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB"] = "\x30\x82\x02\x89\x30\x82\x02\x0F\xA0\x03\x02\x01\x02\x02\x10\x1F\x47\xAF\xAA\x62\x00\x70\x50\x54\x4C\x01\x9E\x9B\x63\x99\x2A\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x81\x85\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x42\x31\x1B\x30\x19\x06\x03\x55\x04\x08\x13\x12\x47\x72\x65\x61\x74\x65\x72\x20\x4D\x61\x6E\x63\x68\x65\x73\x74\x65\x72\x31\x10\x30\x0E\x06\x03\x55\x04\x07\x13\x07\x53\x61\x6C\x66\x6F\x72\x64\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x13\x11\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x41\x20\x4C\x69\x6D\x69\x74\x65\x64\x31\x2B\x30\x29\x06\x03\x55\x04\x03\x13\x22\x43\x4F\x4D\x4F\x44\x4F\x20\x45\x43\x43\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x38\x30\x33\x30\x36\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x32\x33\x35\x39\x35\x39\x5A\x30\x81\x85\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x42\x31\x1B\x30\x19\x06\x03\x55\x04\x08\x13\x12\x47\x72\x65\x61\x74\x65\x72\x20\x4D\x61\x6E\x63\x68\x65\x73\x74\x65\x72\x31\x10\x30\x0E\x06\x03\x55\x04\x07\x13\x07\x53\x61\x6C\x66\x6F\x72\x64\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x13\x11\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x41\x20\x4C\x69\x6D\x69\x74\x65\x64\x31\x2B\x30\x29\x06\x03\x55\x04\x03\x13\x22\x43\x4F\x4D\x4F\x44\x4F\x20\x45\x43\x43\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\x03\x47\x7B\x2F\x75\xC9\x82\x15\x85\xFB\x75\xE4\x91\x16\xD4\xAB\x62\x99\xF5\x3E\x52\x0B\x06\xCE\x41\x00\x7F\x97\xE1\x0A\x24\x3C\x1D\x01\x04\xEE\x3D\xD2\x8D\x09\x97\x0C\xE0\x75\xE4\xFA\xFB\x77\x8A\x2A\xF5\x03\x60\x4B\x36\x8B\x16\x23\x16\xAD\x09\x71\xF4\x4A\xF4\x28\x50\xB4\xFE\x88\x1C\x6E\x3F\x6C\x2F\x2F\x09\x59\x5B\xA5\x5B\x0B\x33\x99\xE2\xC3\x3D\x89\xF9\x6A\x2C\xEF\xB2\xD3\x06\xE9\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x75\x71\xA7\x19\x48\x19\xBC\x9D\x9D\xEA\x41\x47\xDF\x94\xC4\x48\x77\x99\xD3\x79\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x31\x00\xEF\x03\x5B\x7A\xAC\xB7\x78\x0A\x72\xB7\x88\xDF\xFF\xB5\x46\x14\x09\x0A\xFA\xA0\xE6\x7D\x08\xC6\x1A\x87\xBD\x18\xA8\x73\xBD\x26\xCA\x60\x0C\x9D\xCE\x99\x9F\xCF\x5C\x0F\x30\xE1\xBE\x14\x31\xEA\x02\x30\x14\xF4\x93\x3C\x49\xA7\x33\x7A\x90\x46\x47\xB3\x63\x7D\x13\x9B\x4E\xB7\x6F\x18\x37\x80\x53\xFE\xDD\x20\xE0\x35\x9A\x36\xD1\xC7\x01\xB9\xE6\xDC\xDD\xF3\xFF\x1D\x2C\x3A\x16\x57\xD9\x92\x39\xD6", ["CN=Certigna,O=Dhimyotis,C=FR"] = "\x30\x82\x03\xA8\x30\x82\x02\x90\xA0\x03\x02\x01\x02\x02\x09\x00\xFE\xDC\xE3\x01\x0F\xC9\x48\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x34\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x52\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x44\x68\x69\x6D\x79\x6F\x74\x69\x73\x31\x11\x30\x0F\x06\x03\x55\x04\x03\x0C\x08\x43\x65\x72\x74\x69\x67\x6E\x61\x30\x1E\x17\x0D\x30\x37\x30\x36\x32\x39\x31\x35\x31\x33\x30\x35\x5A\x17\x0D\x32\x37\x30\x36\x32\x39\x31\x35\x31\x33\x30\x35\x5A\x30\x34\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x52\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x44\x68\x69\x6D\x79\x6F\x74\x69\x73\x31\x11\x30\x0F\x06\x03\x55\x04\x03\x0C\x08\x43\x65\x72\x74\x69\x67\x6E\x61\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xC8\x68\xF1\xC9\xD6\xD6\xB3\x34\x75\x26\x82\x1E\xEC\xB4\xBE\xEA\x5C\xE1\x26\xED\x11\x47\x61\xE1\xA2\x7C\x16\x78\x40\x21\xE4\x60\x9E\x5A\xC8\x63\xE1\xC4\xB1\x96\x92\xFF\x18\x6D\x69\x23\xE1\x2B\x62\xF7\xDD\xE2\x36\x2F\x91\x07\xB9\x48\xCF\x0E\xEC\x79\xB6\x2C\xE7\x34\x4B\x70\x08\x25\xA3\x3C\x87\x1B\x19\xF2\x81\x07\x0F\x38\x90\x19\xD3\x11\xFE\x86\xB4\xF2\xD1\x5E\x1E\x1E\x96\xCD\x80\x6C\xCE\x3B\x31\x93\xB6\xF2\xA0\xD0\xA9\x95\x12\x7D\xA5\x9A\xCC\x6B\xC8\x84\x56\x8A\x33\xA9\xE7\x22\x15\x53\x16\xF0\xCC\x17\xEC\x57\x5F\xE9\xA2\x0A\x98\x09\xDE\xE3\x5F\x9C\x6F\xDC\x48\xE3\x85\x0B\x15\x5A\xA6\xBA\x9F\xAC\x48\xE3\x09\xB2\xF7\xF4\x32\xDE\x5E\x34\xBE\x1C\x78\x5D\x42\x5B\xCE\x0E\x22\x8F\x4D\x90\xD7\x7D\x32\x18\xB3\x0B\x2C\x6A\xBF\x8E\x3F\x14\x11\x89\x20\x0E\x77\x14\xB5\x3D\x94\x08\x87\xF7\x25\x1E\xD5\xB2\x60\x00\xEC\x6F\x2A\x28\x25\x6E\x2A\x3E\x18\x63\x17\x25\x3F\x3E\x44\x20\x16\xF6\x26\xC8\x25\xAE\x05\x4A\xB4\xE7\x63\x2C\xF3\x8C\x16\x53\x7E\x5C\xFB\x11\x1A\x08\xC1\x46\x62\x9F\x22\xB8\xF1\xC2\x8D\x69\xDC\xFA\x3A\x58\x06\xDF\x02\x03\x01\x00\x01\xA3\x81\xBC\x30\x81\xB9\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x1A\xED\xFE\x41\x39\x90\xB4\x24\x59\xBE\x01\xF2\x52\xD5\x45\xF6\x5A\x39\xDC\x11\x30\x64\x06\x03\x55\x1D\x23\x04\x5D\x30\x5B\x80\x14\x1A\xED\xFE\x41\x39\x90\xB4\x24\x59\xBE\x01\xF2\x52\xD5\x45\xF6\x5A\x39\xDC\x11\xA1\x38\xA4\x36\x30\x34\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x52\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x44\x68\x69\x6D\x79\x6F\x74\x69\x73\x31\x11\x30\x0F\x06\x03\x55\x04\x03\x0C\x08\x43\x65\x72\x74\x69\x67\x6E\x61\x82\x09\x00\xFE\xDC\xE3\x01\x0F\xC9\x48\xFF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x11\x06\x09\x60\x86\x48\x01\x86\xF8\x42\x01\x01\x04\x04\x03\x02\x00\x07\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x85\x03\x1E\x92\x71\xF6\x42\xAF\xE1\xA3\x61\x9E\xEB\xF3\xC0\x0F\xF2\xA5\xD4\xDA\x95\xE6\xD6\xBE\x68\x36\x3D\x7E\x6E\x1F\x4C\x8A\xEF\xD1\x0F\x21\x6D\x5E\xA5\x52\x63\xCE\x12\xF8\xEF\x2A\xDA\x6F\xEB\x37\xFE\x13\x02\xC7\xCB\x3B\x3E\x22\x6B\xDA\x61\x2E\x7F\xD4\x72\x3D\xDD\x30\xE1\x1E\x4C\x40\x19\x8C\x0F\xD7\x9C\xD1\x83\x30\x7B\x98\x59\xDC\x7D\xC6\xB9\x0C\x29\x4C\xA1\x33\xA2\xEB\x67\x3A\x65\x84\xD3\x96\xE2\xED\x76\x45\x70\x8F\xB5\x2B\xDE\xF9\x23\xD6\x49\x6E\x3C\x14\xB5\xC6\x9F\x35\x1E\x50\xD0\xC1\x8F\x6A\x70\x44\x02\x62\xCB\xAE\x1D\x68\x41\xA7\xAA\x57\xE8\x53\xAA\x07\xD2\x06\xF6\xD5\x14\x06\x0B\x91\x03\x75\x2C\x6C\x72\xB5\x61\x95\x9A\x0D\x8B\xB9\x0D\xE7\xF5\xDF\x54\xCD\xDE\xE6\xD8\xD6\x09\x08\x97\x63\xE5\xC1\x2E\xB0\xB7\x44\x26\xC0\x26\xC0\xAF\x55\x30\x9E\x3B\xD5\x36\x2A\x19\x04\xF4\x5C\x1E\xFF\xCF\x2C\xB7\xFF\xD0\xFD\x87\x40\x11\xD5\x11\x23\xBB\x48\xC0\x21\xA9\xA4\x28\x2D\xFD\x15\xF8\xB0\x4E\x2B\xF4\x30\x5B\x21\xFC\x11\x91\x34\xBE\x41\xEF\x7B\x9D\x97\x75\xFF\x97\x95\xC0\x96\x58\x2F\xEA\xBB\x46\xD7\xBB\xE4\xD9\x2E", ["OU=ePKI Root Certification Authority,O=Chunghwa Telecom Co.\, Ltd.,C=TW"] = "\x30\x82\x05\xB0\x30\x82\x03\x98\xA0\x03\x02\x01\x02\x02\x10\x15\xC8\xBD\x65\x47\x5C\xAF\xB8\x97\x00\x5E\xE4\x06\xD2\xBC\x9D\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x5E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x57\x31\x23\x30\x21\x06\x03\x55\x04\x0A\x0C\x1A\x43\x68\x75\x6E\x67\x68\x77\x61\x20\x54\x65\x6C\x65\x63\x6F\x6D\x20\x43\x6F\x2E\x2C\x20\x4C\x74\x64\x2E\x31\x2A\x30\x28\x06\x03\x55\x04\x0B\x0C\x21\x65\x50\x4B\x49\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x34\x31\x32\x32\x30\x30\x32\x33\x31\x32\x37\x5A\x17\x0D\x33\x34\x31\x32\x32\x30\x30\x32\x33\x31\x32\x37\x5A\x30\x5E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x57\x31\x23\x30\x21\x06\x03\x55\x04\x0A\x0C\x1A\x43\x68\x75\x6E\x67\x68\x77\x61\x20\x54\x65\x6C\x65\x63\x6F\x6D\x20\x43\x6F\x2E\x2C\x20\x4C\x74\x64\x2E\x31\x2A\x30\x28\x06\x03\x55\x04\x0B\x0C\x21\x65\x50\x4B\x49\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xE1\x25\x0F\xEE\x8D\xDB\x88\x33\x75\x67\xCD\xAD\x1F\x7D\x3A\x4E\x6D\x9D\xD3\x2F\x14\xF3\x63\x74\xCB\x01\x21\x6A\x37\xEA\x84\x50\x07\x4B\x26\x5B\x09\x43\x6C\x21\x9E\x6A\xC8\xD5\x03\xF5\x60\x69\x8F\xCC\xF0\x22\xE4\x1F\xE7\xF7\x6A\x22\x31\xB7\x2C\x15\xF2\xE0\xFE\x00\x6A\x43\xFF\x87\x65\xC6\xB5\x1A\xC1\xA7\x4C\x6D\x22\x70\x21\x8A\x31\xF2\x97\x74\x89\x09\x12\x26\x1C\x9E\xCA\xD9\x12\xA2\x95\x3C\xDA\xE9\x67\xBF\x08\xA0\x64\xE3\xD6\x42\xB7\x45\xEF\x97\xF4\xF6\xF5\xD7\xB5\x4A\x15\x02\x58\x7D\x98\x58\x4B\x60\xBC\xCD\xD7\x0D\x9A\x13\x33\x53\xD1\x61\xF9\x7A\xD5\xD7\x78\xB3\x9A\x33\xF7\x00\x86\xCE\x1D\x4D\x94\x38\xAF\xA8\xEC\x78\x51\x70\x8A\x5C\x10\x83\x51\x21\xF7\x11\x3D\x34\x86\x5E\xE5\x48\xCD\x97\x81\x82\x35\x4C\x19\xEC\x65\xF6\x6B\xC5\x05\xA1\xEE\x47\x13\xD6\xB3\x21\x27\x94\x10\x0A\xD9\x24\x3B\xBA\xBE\x44\x13\x46\x30\x3F\x97\x3C\xD8\xD7\xD7\x6A\xEE\x3B\x38\xE3\x2B\xD4\x97\x0E\xB9\x1B\xE7\x07\x49\x7F\x37\x2A\xF9\x77\x78\xCF\x54\xED\x5B\x46\x9D\xA3\x80\x0E\x91\x43\xC1\xD6\x5B\x5F\x14\xBA\x9F\xA6\x8D\x24\x47\x40\x59\xBF\x72\x38\xB2\x36\x6C\x37\xFF\x99\xD1\x5D\x0E\x59\x0A\xAB\x69\xF7\xC0\xB2\x04\x45\x7A\x54\x00\xAE\xBE\x53\xF6\xB5\xE7\xE1\xF8\x3C\xA3\x31\xD2\xA9\xFE\x21\x52\x64\xC5\xA6\x67\xF0\x75\x07\x06\x94\x14\x81\x55\xC6\x27\xE4\x01\x8F\x17\xC1\x6A\x71\xD7\xBE\x4B\xFB\x94\x58\x7D\x7E\x11\x33\xB1\x42\xF7\x62\x6C\x18\xD6\xCF\x09\x68\x3E\x7F\x6C\xF6\x1E\x8F\x62\xAD\xA5\x63\xDB\x09\xA7\x1F\x22\x42\x41\x1E\x6F\x99\x8A\x3E\xD7\xF9\x3F\x40\x7A\x79\xB0\xA5\x01\x92\xD2\x9D\x3D\x08\x15\xA5\x10\x01\x2D\xB3\x32\x76\xA8\x95\x0D\xB3\x7A\x9A\xFB\x07\x10\x78\x11\x6F\xE1\x8F\xC7\xBA\x0F\x25\x1A\x74\x2A\xE5\x1C\x98\x41\x99\xDF\x21\x87\xE8\x95\x06\x6A\x0A\xB3\x6A\x47\x76\x65\xF6\x3A\xCF\x8F\x62\x17\x19\x7B\x0A\x28\xCD\x1A\xD2\x83\x1E\x21\xC7\x2C\xBF\xBE\xFF\x61\x68\xB7\x67\x1B\xBB\x78\x4D\x8D\xCE\x67\xE5\xE4\xC1\x8E\xB7\x23\x66\xE2\x9D\x90\x75\x34\x98\xA9\x36\x2B\x8A\x9A\x94\xB9\x9D\xEC\xCC\x8A\xB1\xF8\x25\x89\x5C\x5A\xB6\x2F\x8C\x1F\x6D\x79\x24\xA7\x52\x68\xC3\x84\x35\xE2\x66\x8D\x63\x0E\x25\x4D\xD5\x19\xB2\xE6\x79\x37\xA7\x22\x9D\x54\x31\x02\x03\x01\x00\x01\xA3\x6A\x30\x68\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x1E\x0C\xF7\xB6\x67\xF2\xE1\x92\x26\x09\x45\xC0\x55\x39\x2E\x77\x3F\x42\x4A\xA2\x30\x0C\x06\x03\x55\x1D\x13\x04\x05\x30\x03\x01\x01\xFF\x30\x39\x06\x04\x67\x2A\x07\x00\x04\x31\x30\x2F\x30\x2D\x02\x01\x00\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x30\x07\x06\x05\x67\x2A\x03\x00\x00\x04\x14\x45\xB0\xC2\xC7\x0A\x56\x7C\xEE\x5B\x78\x0C\x95\xF9\x18\x53\xC1\xA6\x1C\xD8\x10\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00\x09\xB3\x83\x53\x59\x01\x3E\x95\x49\xB9\xF1\x81\xBA\xF9\x76\x20\x23\xB5\x27\x60\x74\xD4\x6A\x99\x34\x5E\x6C\x00\x53\xD9\x9F\xF2\xA6\xB1\x24\x07\x44\x6A\x2A\xC6\xA5\x8E\x78\x12\xE8\x47\xD9\x58\x1B\x13\x2A\x5E\x79\x9B\x9F\x0A\x2A\x67\xA6\x25\x3F\x06\x69\x56\x73\xC3\x8A\x66\x48\xFB\x29\x81\x57\x74\x06\xCA\x9C\xEA\x28\xE8\x38\x67\x26\x2B\xF1\xD5\xB5\x3F\x65\x93\xF8\x36\x5D\x8E\x8D\x8D\x40\x20\x87\x19\xEA\xEF\x27\xC0\x3D\xB4\x39\x0F\x25\x7B\x68\x50\x74\x55\x9C\x0C\x59\x7D\x5A\x3D\x41\x94\x25\x52\x08\xE0\x47\x2C\x15\x31\x19\xD5\xBF\x07\x55\xC6\xBB\x12\xB5\x97\xF4\x5F\x83\x85\xBA\x71\xC1\xD9\x6C\x81\x11\x76\x0A\x0A\xB0\xBF\x82\x97\xF7\xEA\x3D\xFA\xFA\xEC\x2D\xA9\x28\x94\x3B\x56\xDD\xD2\x51\x2E\xAE\xC0\xBD\x08\x15\x8C\x77\x52\x34\x96\xD6\x9B\xAC\xD3\x1D\x8E\x61\x0F\x35\x7B\x9B\xAE\x39\x69\x0B\x62\x60\x40\x20\x36\x8F\xAF\xFB\x36\xEE\x2D\x08\x4A\x1D\xB8\xBF\x9B\x5C\xF8\xEA\xA5\x1B\xA0\x73\xA6\xD8\xF8\x6E\xE0\x33\x04\x5F\x68\xAA\x27\x87\xED\xD9\xC1\x90\x9C\xED\xBD\xE3\x6A\x35\xAF\x63\xDF\xAB\x18\xD9\xBA\xE6\xE9\x4A\xEA\x50\x8A\x0F\x61\x93\x1E\xE2\x2D\x19\xE2\x30\x94\x35\x92\x5D\x0E\xB6\x07\xAF\x19\x80\x8F\x47\x90\x51\x4B\x2E\x4D\xDD\x85\xE2\xD2\x0A\x52\x0A\x17\x9A\xFC\x1A\xB0\x50\x02\xE5\x01\xA3\x63\x37\x21\x4C\x44\xC4\x9B\x51\x99\x11\x0E\x73\x9C\x06\x8F\x54\x2E\xA7\x28\x5E\x44\x39\x87\x56\x2D\x37\xBD\x85\x44\x94\xE1\x0C\x4B\x2C\x9C\xC3\x92\x85\x34\x61\xCB\x0F\xB8\x9B\x4A\x43\x52\xFE\x34\x3A\x7D\xB8\xE9\x29\xDC\x76\xA9\xC8\x30\xF8\x14\x71\x80\xC6\x1E\x36\x48\x74\x22\x41\x5C\x87\x82\xE8\x18\x71\x8B\x41\x89\x44\xE7\x7E\x58\x5B\xA8\xB8\x8D\x13\xE9\xA7\x6C\xC3\x47\xED\xB3\x1A\x9D\x62\xAE\x8D\x82\xEA\x94\x9E\xDD\x59\x10\xC3\xAD\xDD\xE2\x4D\xE3\x31\xD5\xC7\xEC\xE8\xF2\xB0\xFE\x92\x1E\x16\x0A\x1A\xFC\xD9\xF3\xF8\x27\xB6\xC9\xBE\x1D\xB4\x6C\x64\x90\x7F\xF4\xE4\xC4\x5B\xD7\x37\xAE\x42\x0E\xDD\xA4\x1A\x6F\x7C\x88\x54\xC5\x16\x6E\xE1\x7A\x68\x2E\xF8\x3A\xBF\x0D\xA4\x3C\x89\x3B\x78\xA7\x4E\x63\x83\x04\x21\x08\x67\x8D\xF2\x82\x49\xD0\x5B\xFD\xB1\xCD\x0F\x83\x84\xD4\x3E\x20\x85\xF7\x4A\x3D\x2B\x9C\xFD\x2A\x0A\x09\x4D\xEA\x81\xF8\x11\x9C", @@ -52,8 +51,6 @@ redef root_certs += { ["CN=Certum Trusted Network CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL"] = "\x30\x82\x03\xBB\x30\x82\x02\xA3\xA0\x03\x02\x01\x02\x02\x03\x04\x44\xC0\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x7E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x50\x4C\x31\x22\x30\x20\x06\x03\x55\x04\x0A\x13\x19\x55\x6E\x69\x7A\x65\x74\x6F\x20\x54\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x69\x65\x73\x20\x53\x2E\x41\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x0B\x13\x1E\x43\x65\x72\x74\x75\x6D\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x43\x65\x72\x74\x75\x6D\x20\x54\x72\x75\x73\x74\x65\x64\x20\x4E\x65\x74\x77\x6F\x72\x6B\x20\x43\x41\x30\x1E\x17\x0D\x30\x38\x31\x30\x32\x32\x31\x32\x30\x37\x33\x37\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x31\x32\x30\x37\x33\x37\x5A\x30\x7E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x50\x4C\x31\x22\x30\x20\x06\x03\x55\x04\x0A\x13\x19\x55\x6E\x69\x7A\x65\x74\x6F\x20\x54\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x69\x65\x73\x20\x53\x2E\x41\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x0B\x13\x1E\x43\x65\x72\x74\x75\x6D\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x43\x65\x72\x74\x75\x6D\x20\x54\x72\x75\x73\x74\x65\x64\x20\x4E\x65\x74\x77\x6F\x72\x6B\x20\x43\x41\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xE3\xFB\x7D\xA3\x72\xBA\xC2\xF0\xC9\x14\x87\xF5\x6B\x01\x4E\xE1\x6E\x40\x07\xBA\x6D\x27\x5D\x7F\xF7\x5B\x2D\xB3\x5A\xC7\x51\x5F\xAB\xA4\x32\xA6\x61\x87\xB6\x6E\x0F\x86\xD2\x30\x02\x97\xF8\xD7\x69\x57\xA1\x18\x39\x5D\x6A\x64\x79\xC6\x01\x59\xAC\x3C\x31\x4A\x38\x7C\xD2\x04\xD2\x4B\x28\xE8\x20\x5F\x3B\x07\xA2\xCC\x4D\x73\xDB\xF3\xAE\x4F\xC7\x56\xD5\x5A\xA7\x96\x89\xFA\xF3\xAB\x68\xD4\x23\x86\x59\x27\xCF\x09\x27\xBC\xAC\x6E\x72\x83\x1C\x30\x72\xDF\xE0\xA2\xE9\xD2\xE1\x74\x75\x19\xBD\x2A\x9E\x7B\x15\x54\x04\x1B\xD7\x43\x39\xAD\x55\x28\xC5\xE2\x1A\xBB\xF4\xC0\xE4\xAE\x38\x49\x33\xCC\x76\x85\x9F\x39\x45\xD2\xA4\x9E\xF2\x12\x8C\x51\xF8\x7C\xE4\x2D\x7F\xF5\xAC\x5F\xEB\x16\x9F\xB1\x2D\xD1\xBA\xCC\x91\x42\x77\x4C\x25\xC9\x90\x38\x6F\xDB\xF0\xCC\xFB\x8E\x1E\x97\x59\x3E\xD5\x60\x4E\xE6\x05\x28\xED\x49\x79\x13\x4B\xBA\x48\xDB\x2F\xF9\x72\xD3\x39\xCA\xFE\x1F\xD8\x34\x72\xF5\xB4\x40\xCF\x31\x01\xC3\xEC\xDE\x11\x2D\x17\x5D\x1F\xB8\x50\xD1\x5E\x19\xA7\x69\xDE\x07\x33\x28\xCA\x50\x95\xF9\xA7\x54\xCB\x54\x86\x50\x45\xA9\xF9\x49\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x08\x76\xCD\xCB\x07\xFF\x24\xF6\xC5\xCD\xED\xBB\x90\xBC\xE2\x84\x37\x46\x75\xF7\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xA6\xA8\xAD\x22\xCE\x01\x3D\xA6\xA3\xFF\x62\xD0\x48\x9D\x8B\x5E\x72\xB0\x78\x44\xE3\xDC\x1C\xAF\x09\xFD\x23\x48\xFA\xBD\x2A\xC4\xB9\x55\x04\xB5\x10\xA3\x8D\x27\xDE\x0B\x82\x63\xD0\xEE\xDE\x0C\x37\x79\x41\x5B\x22\xB2\xB0\x9A\x41\x5C\xA6\x70\xE0\xD4\xD0\x77\xCB\x23\xD3\x00\xE0\x6C\x56\x2F\xE1\x69\x0D\x0D\xD9\xAA\xBF\x21\x81\x50\xD9\x06\xA5\xA8\xFF\x95\x37\xD0\xAA\xFE\xE2\xB3\xF5\x99\x2D\x45\x84\x8A\xE5\x42\x09\xD7\x74\x02\x2F\xF7\x89\xD8\x99\xE9\xBC\x27\xD4\x47\x8D\xBA\x0D\x46\x1C\x77\xCF\x14\xA4\x1C\xB9\xA4\x31\xC4\x9C\x28\x74\x03\x34\xFF\x33\x19\x26\xA5\xE9\x0D\x74\xB7\x3E\x97\xC6\x76\xE8\x27\x96\xA3\x66\xDD\xE1\xAE\xF2\x41\x5B\xCA\x98\x56\x83\x73\x70\xE4\x86\x1A\xD2\x31\x41\xBA\x2F\xBE\x2D\x13\x5A\x76\x6F\x4E\xE8\x4E\x81\x0E\x3F\x5B\x03\x22\xA0\x12\xBE\x66\x58\x11\x4A\xCB\x03\xC4\xB4\x2A\x2A\x2D\x96\x17\xE0\x39\x54\xBC\x48\xD3\x76\x27\x9D\x9A\x2D\x06\xA6\xC9\xEC\x39\xD2\xAB\xDB\x9F\x9A\x0B\x27\x02\x35\x29\xB1\x40\x95\xE7\xF9\xE8\x9C\x55\x88\x19\x46\xD6\xB7\x34\xF5\x7E\xCE\x39\x9A\xD9\x38\xF1\x51\xF7\x4F\x2C", ["CN=TWCA Root Certification Authority,OU=Root CA,O=TAIWAN-CA,C=TW"] = "\x30\x82\x03\x7B\x30\x82\x02\x63\xA0\x03\x02\x01\x02\x02\x01\x01\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x5F\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x57\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x54\x41\x49\x57\x41\x4E\x2D\x43\x41\x31\x10\x30\x0E\x06\x03\x55\x04\x0B\x0C\x07\x52\x6F\x6F\x74\x20\x43\x41\x31\x2A\x30\x28\x06\x03\x55\x04\x03\x0C\x21\x54\x57\x43\x41\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x38\x30\x38\x32\x38\x30\x37\x32\x34\x33\x33\x5A\x17\x0D\x33\x30\x31\x32\x33\x31\x31\x35\x35\x39\x35\x39\x5A\x30\x5F\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x57\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x54\x41\x49\x57\x41\x4E\x2D\x43\x41\x31\x10\x30\x0E\x06\x03\x55\x04\x0B\x0C\x07\x52\x6F\x6F\x74\x20\x43\x41\x31\x2A\x30\x28\x06\x03\x55\x04\x03\x0C\x21\x54\x57\x43\x41\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xB0\x7E\x72\xB8\xA4\x03\x94\xE6\xA7\xDE\x09\x38\x91\x4A\x11\x40\x87\xA7\x7C\x59\x64\x14\x7B\xB5\x11\x10\xDD\xFE\xBF\xD5\xC0\xBB\x56\xE2\x85\x25\xF4\x35\x72\x0F\xF8\x53\xD0\x41\xE1\x44\x01\xC2\xB4\x1C\xC3\x31\x42\x16\x47\x85\x33\x22\x76\xB2\x0A\x6F\x0F\xE5\x25\x50\x4F\x85\x86\xBE\xBF\x98\x2E\x10\x67\x1E\xBE\x11\x05\x86\x05\x90\xC4\x59\xD0\x7C\x78\x10\xB0\x80\x5C\xB7\xE1\xC7\x2B\x75\xCB\x7C\x9F\xAE\xB5\xD1\x9D\x23\x37\x63\xA7\xDC\x42\xA2\x2D\x92\x04\x1B\x50\xC1\x7B\xB8\x3E\x1B\xC9\x56\x04\x8B\x2F\x52\x9B\xAD\xA9\x56\xE9\xC1\xFF\xAD\xA9\x58\x87\x30\xB6\x81\xF7\x97\x45\xFC\x19\x57\x3B\x2B\x6F\xE4\x47\xF4\x99\x45\xFE\x1D\xF1\xF8\x97\xA3\x88\x1D\x37\x1C\x5C\x8F\xE0\x76\x25\x9A\x50\xF8\xA0\x54\xFF\x44\x90\x76\x23\xD2\x32\xC6\xC3\xAB\x06\xBF\xFC\xFB\xBF\xF3\xAD\x7D\x92\x62\x02\x5B\x29\xD3\x35\xA3\x93\x9A\x43\x64\x60\x5D\xB2\xFA\x32\xFF\x3B\x04\xAF\x4D\x40\x6A\xF9\xC7\xE3\xEF\x23\xFD\x6B\xCB\xE5\x0F\x8B\x38\x0D\xEE\x0A\xFC\xFE\x0F\x98\x9F\x30\x31\xDD\x6C\x52\x65\xF9\x8B\x81\xBE\x22\xE1\x1C\x58\x03\xBA\x91\x1B\x89\x07\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x6A\x38\x5B\x26\x8D\xDE\x8B\x5A\xF2\x4F\x7A\x54\x83\x19\x18\xE3\x08\x35\xA6\xBA\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x3C\xD5\x77\x3D\xDA\xDF\x89\xBA\x87\x0C\x08\x54\x6A\x20\x50\x92\xBE\xB0\x41\x3D\xB9\x26\x64\x83\x0A\x2F\xE8\x40\xC0\x97\x28\x27\x82\x30\x4A\xC9\x93\xFF\x6A\xE7\xA6\x00\x7F\x89\x42\x9A\xD6\x11\xE5\x53\xCE\x2F\xCC\xF2\xDA\x05\xC4\xFE\xE2\x50\xC4\x3A\x86\x7D\xCC\xDA\x7E\x10\x09\x3B\x92\x35\x2A\x53\xB2\xFE\xEB\x2B\x05\xD9\x6C\x5D\xE6\xD0\xEF\xD3\x6A\x66\x9E\x15\x28\x85\x7A\xE8\x82\x00\xAC\x1E\xA7\x09\x69\x56\x42\xD3\x68\x51\x18\xBE\x54\x9A\xBF\x44\x41\xBA\x49\xBE\x20\xBA\x69\x5C\xEE\xB8\x77\xCD\xCE\x6C\x1F\xAD\x83\x96\x18\x7D\x0E\xB5\x14\x39\x84\xF1\x28\xE9\x2D\xA3\x9E\x7B\x1E\x7A\x72\x5A\x83\xB3\x79\x6F\xEF\xB4\xFC\xD0\x0A\xA5\x58\x4F\x46\xDF\xFB\x6D\x79\x59\xF2\x84\x22\x52\xAE\x0F\xCC\xFB\x7C\x3B\xE7\x6A\xCA\x47\x61\xC3\x7A\xF8\xD3\x92\x04\x1F\xB8\x20\x84\xE1\x36\x54\x16\xC7\x40\xDE\x3B\x8A\x73\xDC\xDF\xC6\x09\x4C\xDF\xEC\xDA\xFF\xD4\x53\x42\xA1\xC9\xF2\x62\x1D\x22\x83\x3C\x97\xC5\xF9\x19\x62\x27\xAC\x65\x22\xD7\xD3\x3C\xC6\xE5\x8E\xB2\x53\xCC\x49\xCE\xBC\x30\xFE\x7B\x0E\x33\x90\xFB\xED\xD2\x14\x91\x1F\x07\xAF", ["OU=Security Communication RootCA2,O=SECOM Trust Systems CO.\,LTD.,C=JP"] = "\x30\x82\x03\x77\x30\x82\x02\x5F\xA0\x03\x02\x01\x02\x02\x01\x00\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x5D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x0B\x13\x1E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x43\x41\x32\x30\x1E\x17\x0D\x30\x39\x30\x35\x32\x39\x30\x35\x30\x30\x33\x39\x5A\x17\x0D\x32\x39\x30\x35\x32\x39\x30\x35\x30\x30\x33\x39\x5A\x30\x5D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x0B\x13\x1E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x43\x41\x32\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xD0\x15\x39\x52\xB1\x52\xB3\xBA\xC5\x59\x82\xC4\x5D\x52\xAE\x3A\x43\x65\x80\x4B\xC7\xF2\x96\xBC\xDB\x36\x97\xD6\xA6\x64\x8C\xA8\x5E\xF0\xE3\x0A\x1C\xF7\xDF\x97\x3D\x4B\xAE\xF6\x5D\xEC\x21\xB5\x41\xAB\xCD\xB9\x7E\x76\x9F\xBE\xF9\x3E\x36\x34\xA0\x3B\xC1\xF6\x31\x11\x45\x74\x93\x3D\x57\x80\xC5\xF9\x89\x99\xCA\xE5\xAB\x6A\xD4\xB5\xDA\x41\x90\x10\xC1\xD6\xD6\x42\x89\xC2\xBF\xF4\x38\x12\x95\x4C\x54\x05\xF7\x36\xE4\x45\x83\x7B\x14\x65\xD6\xDC\x0C\x4D\xD1\xDE\x7E\x0C\xAB\x3B\xC4\x15\xBE\x3A\x56\xA6\x5A\x6F\x76\x69\x52\xA9\x7A\xB9\xC8\xEB\x6A\x9A\x5D\x52\xD0\x2D\x0A\x6B\x35\x16\x09\x10\x84\xD0\x6A\xCA\x3A\x06\x00\x37\x47\xE4\x7E\x57\x4F\x3F\x8B\xEB\x67\xB8\x88\xAA\xC5\xBE\x53\x55\xB2\x91\xC4\x7D\xB9\xB0\x85\x19\x06\x78\x2E\xDB\x61\x1A\xFA\x85\xF5\x4A\x91\xA1\xE7\x16\xD5\x8E\xA2\x39\xDF\x94\xB8\x70\x1F\x28\x3F\x8B\xFC\x40\x5E\x63\x83\x3C\x83\x2A\x1A\x99\x6B\xCF\xDE\x59\x6A\x3B\xFC\x6F\x16\xD7\x1F\xFD\x4A\x10\xEB\x4E\x82\x16\x3A\xAC\x27\x0C\x53\xF1\xAD\xD5\x24\xB0\x6B\x03\x50\xC1\x2D\x3C\x16\xDD\x44\x34\x27\x1A\x75\xFB\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x0A\x85\xA9\x77\x65\x05\x98\x7C\x40\x81\xF8\x0F\x97\x2C\x38\xF1\x0A\xEC\x3C\xCF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x4C\x3A\xA3\x44\xAC\xB9\x45\xB1\xC7\x93\x7E\xC8\x0B\x0A\x42\xDF\x64\xEA\x1C\xEE\x59\x6C\x08\xBA\x89\x5F\x6A\xCA\x4A\x95\x9E\x7A\x8F\x07\xC5\xDA\x45\x72\x82\x71\x0E\x3A\xD2\xCC\x6F\xA7\xB4\xA1\x23\xBB\xF6\x24\x9F\xCB\x17\xFE\x8C\xA6\xCE\xC2\xD2\xDB\xCC\x8D\xFC\x71\xFC\x03\x29\xC1\x6C\x5D\x33\x5F\x64\xB6\x65\x3B\x89\x6F\x18\x76\x78\xF5\xDC\xA2\x48\x1F\x19\x3F\x8E\x93\xEB\xF1\xFA\x17\xEE\xCD\x4E\xE3\x04\x12\x55\xD6\xE5\xE4\xDD\xFB\x3E\x05\x7C\xE2\x1D\x5E\xC6\xA7\xBC\x97\x4F\x68\x3A\xF5\xE9\x2E\x0A\x43\xB6\xAF\x57\x5C\x62\x68\x7C\xB7\xFD\xA3\x8A\x84\xA0\xAC\x62\xBE\x2B\x09\x87\x34\xF0\x6A\x01\xBB\x9B\x29\x56\x3C\xFE\x00\x37\xCF\x23\x6C\xF1\x4E\xAA\xB6\x74\x46\x12\x6C\x91\xEE\x34\xD5\xEC\x9A\x91\xE7\x44\xBE\x90\x31\x72\xD5\x49\x02\xF6\x02\xE5\xF4\x1F\xEB\x7C\xD9\x96\x55\xA9\xFF\xEC\x8A\xF9\x99\x47\xFF\x35\x5A\x02\xAA\x04\xCB\x8A\x5B\x87\x71\x29\x91\xBD\xA4\xB4\x7A\x0D\xBD\x9A\xF5\x57\x23\x00\x07\x21\x17\x3F\x4A\x39\xD1\x05\x49\x0B\xA7\xB6\x37\x81\xA5\x5D\x8C\xAA\x33\x5E\x81\x28\x7C\xA7\x7D\x27\xEB\x00\xAE\x8D\x37", - ["CN=EC-ACC,OU=Jerarquia Entitats de Certificacio Catalanes,OU=Vegeu https://www.catcert.net/verarrel (c)03,OU=Serveis Publics de Certificacio,O=Agencia Catalana de Certificacio (NIF Q-0801176-I),C=ES"] = "\x30\x82\x05\x56\x30\x82\x04\x3E\xA0\x03\x02\x01\x02\x02\x10\xEE\x2B\x3D\xEB\xD4\x21\xDE\x14\xA8\x62\xAC\x04\xF3\xDD\xC4\x01\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x81\xF3\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x45\x53\x31\x3B\x30\x39\x06\x03\x55\x04\x0A\x13\x32\x41\x67\x65\x6E\x63\x69\x61\x20\x43\x61\x74\x61\x6C\x61\x6E\x61\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x20\x28\x4E\x49\x46\x20\x51\x2D\x30\x38\x30\x31\x31\x37\x36\x2D\x49\x29\x31\x28\x30\x26\x06\x03\x55\x04\x0B\x13\x1F\x53\x65\x72\x76\x65\x69\x73\x20\x50\x75\x62\x6C\x69\x63\x73\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x31\x35\x30\x33\x06\x03\x55\x04\x0B\x13\x2C\x56\x65\x67\x65\x75\x20\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x2F\x76\x65\x72\x61\x72\x72\x65\x6C\x20\x28\x63\x29\x30\x33\x31\x35\x30\x33\x06\x03\x55\x04\x0B\x13\x2C\x4A\x65\x72\x61\x72\x71\x75\x69\x61\x20\x45\x6E\x74\x69\x74\x61\x74\x73\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x20\x43\x61\x74\x61\x6C\x61\x6E\x65\x73\x31\x0F\x30\x0D\x06\x03\x55\x04\x03\x13\x06\x45\x43\x2D\x41\x43\x43\x30\x1E\x17\x0D\x30\x33\x30\x31\x30\x37\x32\x33\x30\x30\x30\x30\x5A\x17\x0D\x33\x31\x30\x31\x30\x37\x32\x32\x35\x39\x35\x39\x5A\x30\x81\xF3\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x45\x53\x31\x3B\x30\x39\x06\x03\x55\x04\x0A\x13\x32\x41\x67\x65\x6E\x63\x69\x61\x20\x43\x61\x74\x61\x6C\x61\x6E\x61\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x20\x28\x4E\x49\x46\x20\x51\x2D\x30\x38\x30\x31\x31\x37\x36\x2D\x49\x29\x31\x28\x30\x26\x06\x03\x55\x04\x0B\x13\x1F\x53\x65\x72\x76\x65\x69\x73\x20\x50\x75\x62\x6C\x69\x63\x73\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x31\x35\x30\x33\x06\x03\x55\x04\x0B\x13\x2C\x56\x65\x67\x65\x75\x20\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x2F\x76\x65\x72\x61\x72\x72\x65\x6C\x20\x28\x63\x29\x30\x33\x31\x35\x30\x33\x06\x03\x55\x04\x0B\x13\x2C\x4A\x65\x72\x61\x72\x71\x75\x69\x61\x20\x45\x6E\x74\x69\x74\x61\x74\x73\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x20\x43\x61\x74\x61\x6C\x61\x6E\x65\x73\x31\x0F\x30\x0D\x06\x03\x55\x04\x03\x13\x06\x45\x43\x2D\x41\x43\x43\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xB3\x22\xC7\x4F\xE2\x97\x42\x95\x88\x47\x83\x40\xF6\x1D\x17\xF3\x83\x73\x24\x1E\x51\xF3\x98\x8A\xC3\x92\xB8\xFF\x40\x90\x05\x70\x87\x60\xC9\x00\xA9\xB5\x94\x65\x19\x22\x15\x17\xC2\x43\x6C\x66\x44\x9A\x0D\x04\x3E\x39\x6F\xA5\x4B\x7A\xAA\x63\xB7\x8A\x44\x9D\xD9\x63\x91\x84\x66\xE0\x28\x0F\xBA\x42\xE3\x6E\x8E\xF7\x14\x27\x93\x69\xEE\x91\x0E\xA3\x5F\x0E\xB1\xEB\x66\xA2\x72\x4F\x12\x13\x86\x65\x7A\x3E\xDB\x4F\x07\xF4\xA7\x09\x60\xDA\x3A\x42\x99\xC7\xB2\x7F\xB3\x16\x95\x1C\xC7\xF9\x34\xB5\x94\x85\xD5\x99\x5E\xA0\x48\xA0\x7E\xE7\x17\x65\xB8\xA2\x75\xB8\x1E\xF3\xE5\x42\x7D\xAF\xED\xF3\x8A\x48\x64\x5D\x82\x14\x93\xD8\xC0\xE4\xFF\xB3\x50\x72\xF2\x76\xF6\xB3\x5D\x42\x50\x79\xD0\x94\x3E\x6B\x0C\x00\xBE\xD8\x6B\x0E\x4E\x2A\xEC\x3E\xD2\xCC\x82\xA2\x18\x65\x33\x13\x77\x9E\x9A\x5D\x1A\x13\xD8\xC3\xDB\x3D\xC8\x97\x7A\xEE\x70\xED\xA7\xE6\x7C\xDB\x71\xCF\x2D\x94\x62\xDF\x6D\xD6\xF5\x38\xBE\x3F\xA5\x85\x0A\x19\xB8\xA8\xD8\x09\x75\x42\x70\xC4\xEA\xEF\xCB\x0E\xC8\x34\xA8\x12\x22\x98\x0C\xB8\x13\x94\xB6\x4B\xEC\xF0\xD0\x90\xE7\x27\x02\x03\x01\x00\x01\xA3\x81\xE3\x30\x81\xE0\x30\x1D\x06\x03\x55\x1D\x11\x04\x16\x30\x14\x81\x12\x65\x63\x5F\x61\x63\x63\x40\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xA0\xC3\x8B\x44\xAA\x37\xA5\x45\xBF\x97\x80\x5A\xD1\xF1\x78\xA2\x9B\xE9\x5D\x8D\x30\x7F\x06\x03\x55\x1D\x20\x04\x78\x30\x76\x30\x74\x06\x0B\x2B\x06\x01\x04\x01\xF5\x78\x01\x03\x01\x0A\x30\x65\x30\x2C\x06\x08\x2B\x06\x01\x05\x05\x07\x02\x01\x16\x20\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x2F\x76\x65\x72\x61\x72\x72\x65\x6C\x30\x35\x06\x08\x2B\x06\x01\x05\x05\x07\x02\x02\x30\x29\x1A\x27\x56\x65\x67\x65\x75\x20\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x2F\x76\x65\x72\x61\x72\x72\x65\x6C\x20\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xA0\x48\x5B\x82\x01\xF6\x4D\x48\xB8\x39\x55\x35\x9C\x80\x7A\x53\x99\xD5\x5A\xFF\xB1\x71\x3B\xCC\x39\x09\x94\x5E\xD6\xDA\xEF\xBE\x01\x5B\x5D\xD3\x1E\xD8\xFD\x7D\x4F\xCD\xA0\x41\xE0\x34\x93\xBF\xCB\xE2\x86\x9C\x37\x92\x90\x56\x1C\xDC\xEB\x29\x05\xE5\xC4\x9E\xC7\x35\xDF\x8A\x0C\xCD\xC5\x21\x43\xE9\xAA\x88\xE5\x35\xC0\x19\x42\x63\x5A\x02\x5E\xA4\x48\x18\x3A\x85\x6F\xDC\x9D\xBC\x3F\x9D\x9C\xC1\x87\xB8\x7A\x61\x08\xE9\x77\x0B\x7F\x70\xAB\x7A\xDD\xD9\x97\x2C\x64\x1E\x85\xBF\xBC\x74\x96\xA1\xC3\x7A\x12\xEC\x0C\x1A\x6E\x83\x0C\x3C\xE8\x72\x46\x9F\xFB\x48\xD5\x5E\x97\xE6\xB1\xA1\xF8\xE4\xEF\x46\x25\x94\x9C\x89\xDB\x69\x38\xBE\xEC\x5C\x0E\x56\xC7\x65\x51\xE5\x50\x88\x88\xBF\x42\xD5\x2B\x3D\xE5\xF9\xBA\x9E\x2E\xB3\xCA\xF4\x73\x92\x02\x0B\xBE\x4C\x66\xEB\x20\xFE\xB9\xCB\xB5\x99\x7F\xE6\xB6\x13\xFA\xCA\x4B\x4D\xD9\xEE\x53\x46\x06\x3B\xC6\x4E\xAD\x93\x5A\x81\x7E\x6C\x2A\x4B\x6A\x05\x45\x8C\xF2\x21\xA4\x31\x90\x87\x6C\x65\x9C\x9D\xA5\x60\x95\x3A\x52\x7F\xF5\xD1\xAB\x08\x6E\xF3\xEE\x5B\xF9\x88\x3D\x7E\xB8\x6F\x6E\x03\xE4\x42", - ["CN=Hellenic Academic and Research Institutions RootCA 2011,O=Hellenic Academic and Research Institutions Cert. Authority,C=GR"] = "\x30\x82\x04\x31\x30\x82\x03\x19\xA0\x03\x02\x01\x02\x02\x01\x00\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x81\x95\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x52\x31\x44\x30\x42\x06\x03\x55\x04\x0A\x13\x3B\x48\x65\x6C\x6C\x65\x6E\x69\x63\x20\x41\x63\x61\x64\x65\x6D\x69\x63\x20\x61\x6E\x64\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x69\x6F\x6E\x73\x20\x43\x65\x72\x74\x2E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x40\x30\x3E\x06\x03\x55\x04\x03\x13\x37\x48\x65\x6C\x6C\x65\x6E\x69\x63\x20\x41\x63\x61\x64\x65\x6D\x69\x63\x20\x61\x6E\x64\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x69\x6F\x6E\x73\x20\x52\x6F\x6F\x74\x43\x41\x20\x32\x30\x31\x31\x30\x1E\x17\x0D\x31\x31\x31\x32\x30\x36\x31\x33\x34\x39\x35\x32\x5A\x17\x0D\x33\x31\x31\x32\x30\x31\x31\x33\x34\x39\x35\x32\x5A\x30\x81\x95\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x52\x31\x44\x30\x42\x06\x03\x55\x04\x0A\x13\x3B\x48\x65\x6C\x6C\x65\x6E\x69\x63\x20\x41\x63\x61\x64\x65\x6D\x69\x63\x20\x61\x6E\x64\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x69\x6F\x6E\x73\x20\x43\x65\x72\x74\x2E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x40\x30\x3E\x06\x03\x55\x04\x03\x13\x37\x48\x65\x6C\x6C\x65\x6E\x69\x63\x20\x41\x63\x61\x64\x65\x6D\x69\x63\x20\x61\x6E\x64\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x69\x6F\x6E\x73\x20\x52\x6F\x6F\x74\x43\x41\x20\x32\x30\x31\x31\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xA9\x53\x00\xE3\x2E\xA6\xF6\x8E\xFA\x60\xD8\x2D\x95\x3E\xF8\x2C\x2A\x54\x4E\xCD\xB9\x84\x61\x94\x58\x4F\x8F\x3D\x8B\xE4\x43\xF3\x75\x89\x8D\x51\xE4\xC3\x37\xD2\x8A\x88\x4D\x79\x1E\xB7\x12\xDD\x43\x78\x4A\x8A\x92\xE6\xD7\x48\xD5\x0F\xA4\x3A\x29\x44\x35\xB8\x07\xF6\x68\x1D\x55\xCD\x38\x51\xF0\x8C\x24\x31\x85\xAF\x83\xC9\x7D\xE9\x77\xAF\xED\x1A\x7B\x9D\x17\xF9\xB3\x9D\x38\x50\x0F\xA6\x5A\x79\x91\x80\xAF\x37\xAE\xA6\xD3\x31\xFB\xB5\x26\x09\x9D\x3C\x5A\xEF\x51\xC5\x2B\xDF\x96\x5D\xEB\x32\x1E\x02\xDA\x70\x49\xEC\x6E\x0C\xC8\x9A\x37\x8D\xF7\xF1\x36\x60\x4B\x26\x2C\x82\x9E\xD0\x78\xF3\x0D\x0F\x63\xA4\x51\x30\xE1\xF9\x2B\x27\x12\x07\xD8\xEA\xBD\x18\x62\x98\xB0\x59\x37\x7D\xBE\xEE\xF3\x20\x51\x42\x5A\x83\xEF\x93\xBA\x69\x15\xF1\x62\x9D\x9F\x99\x39\x82\xA1\xB7\x74\x2E\x8B\xD4\xC5\x0B\x7B\x2F\xF0\xC8\x0A\xDA\x3D\x79\x0A\x9A\x93\x1C\xA5\x28\x72\x73\x91\x43\x9A\xA7\xD1\x4D\x85\x84\xB9\xA9\x74\x8F\x14\x40\xC7\xDC\xDE\xAC\x41\x64\x6C\xB4\x19\x9B\x02\x63\x6D\x24\x64\x8F\x44\xB2\x25\xEA\xCE\x5D\x74\x0C\x63\x32\x5C\x8D\x87\xE5\x02\x03\x01\x00\x01\xA3\x81\x89\x30\x81\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x01\x06\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xA6\x91\x42\xFD\x13\x61\x4A\x23\x9E\x08\xA4\x29\xE5\xD8\x13\x04\x23\xEE\x41\x25\x30\x47\x06\x03\x55\x1D\x1E\x04\x40\x30\x3E\xA0\x3C\x30\x05\x82\x03\x2E\x67\x72\x30\x05\x82\x03\x2E\x65\x75\x30\x06\x82\x04\x2E\x65\x64\x75\x30\x06\x82\x04\x2E\x6F\x72\x67\x30\x05\x81\x03\x2E\x67\x72\x30\x05\x81\x03\x2E\x65\x75\x30\x06\x81\x04\x2E\x65\x64\x75\x30\x06\x81\x04\x2E\x6F\x72\x67\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x1F\xEF\x79\x41\xE1\x7B\x6E\x3F\xB2\x8C\x86\x37\x42\x4A\x4E\x1C\x37\x1E\x8D\x66\xBA\x24\x81\xC9\x4F\x12\x0F\x21\xC0\x03\x97\x86\x25\x6D\x5D\xD3\x22\x29\xA8\x6C\xA2\x0D\xA9\xEB\x3D\x06\x5B\x99\x3A\xC7\xCC\xC3\x9A\x34\x7F\xAB\x0E\xC8\x4E\x1C\xE1\xFA\xE4\xDC\xCD\x0D\xBE\xBF\x24\xFE\x6C\xE7\x6B\xC2\x0D\xC8\x06\x9E\x4E\x8D\x61\x28\xA6\x6A\xFD\xE5\xF6\x62\xEA\x18\x3C\x4E\xA0\x53\x9D\xB2\x3A\x9C\xEB\xA5\x9C\x91\x16\xB6\x4D\x82\xE0\x0C\x05\x48\xA9\x6C\xF5\xCC\xF8\xCB\x9D\x49\xB4\xF0\x02\xA5\xFD\x70\x03\xED\x8A\x21\xA5\xAE\x13\x86\x49\xC3\x33\x73\xBE\x87\x3B\x74\x8B\x17\x45\x26\x4C\x16\x91\x83\xFE\x67\x7D\xCD\x4D\x63\x67\xFA\xF3\x03\x12\x96\x78\x06\x8D\xB1\x67\xED\x8E\x3F\xBE\x9F\x4F\x02\xF5\xB3\x09\x2F\xF3\x4C\x87\xDF\x2A\xCB\x95\x7C\x01\xCC\xAC\x36\x7A\xBF\xA2\x73\x7A\xF7\x8F\xC1\xB5\x9A\xA1\x14\xB2\x8F\x33\x9F\x0D\xEF\x22\xDC\x66\x7B\x84\xBD\x45\x17\x06\x3D\x3C\xCA\xB9\x77\x34\x8F\xCA\xEA\xCF\x3F\x31\x3E\xE3\x88\xE3\x80\x49\x25\xC8\x97\xB5\x9D\x9A\x99\x4D\xB0\x3C\xF8\x4A\x00\x9B\x64\xDD\x9F\x39\x4B\xD1\x27\xD7\xB8", ["CN=Actalis Authentication Root CA,O=Actalis S.p.A./03358520967,L=Milan,C=IT"] = "\x30\x82\x05\xBB\x30\x82\x03\xA3\xA0\x03\x02\x01\x02\x02\x08\x57\x0A\x11\x97\x42\xC4\xE3\xCC\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x6B\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x49\x54\x31\x0E\x30\x0C\x06\x03\x55\x04\x07\x0C\x05\x4D\x69\x6C\x61\x6E\x31\x23\x30\x21\x06\x03\x55\x04\x0A\x0C\x1A\x41\x63\x74\x61\x6C\x69\x73\x20\x53\x2E\x70\x2E\x41\x2E\x2F\x30\x33\x33\x35\x38\x35\x32\x30\x39\x36\x37\x31\x27\x30\x25\x06\x03\x55\x04\x03\x0C\x1E\x41\x63\x74\x61\x6C\x69\x73\x20\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x31\x31\x30\x39\x32\x32\x31\x31\x32\x32\x30\x32\x5A\x17\x0D\x33\x30\x30\x39\x32\x32\x31\x31\x32\x32\x30\x32\x5A\x30\x6B\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x49\x54\x31\x0E\x30\x0C\x06\x03\x55\x04\x07\x0C\x05\x4D\x69\x6C\x61\x6E\x31\x23\x30\x21\x06\x03\x55\x04\x0A\x0C\x1A\x41\x63\x74\x61\x6C\x69\x73\x20\x53\x2E\x70\x2E\x41\x2E\x2F\x30\x33\x33\x35\x38\x35\x32\x30\x39\x36\x37\x31\x27\x30\x25\x06\x03\x55\x04\x03\x0C\x1E\x41\x63\x74\x61\x6C\x69\x73\x20\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xA7\xC6\xC4\xA5\x29\xA4\x2C\xEF\xE5\x18\xC5\xB0\x50\xA3\x6F\x51\x3B\x9F\x0A\x5A\xC9\xC2\x48\x38\x0A\xC2\x1C\xA0\x18\x7F\x91\xB5\x87\xB9\x40\x3F\xDD\x1D\x68\x1F\x08\x83\xD5\x2D\x1E\x88\xA0\xF8\x8F\x56\x8F\x6D\x99\x02\x92\x90\x16\xD5\x5F\x08\x6C\x89\xD7\xE1\xAC\xBC\x20\xC2\xB1\xE0\x83\x51\x8A\x69\x4D\x00\x96\x5A\x6F\x2F\xC0\x44\x7E\xA3\x0E\xE4\x91\xCD\x58\xEE\xDC\xFB\xC7\x1E\x45\x47\xDD\x27\xB9\x08\x01\x9F\xA6\x21\x1D\xF5\x41\x2D\x2F\x4C\xFD\x28\xAD\xE0\x8A\xAD\x22\xB4\x56\x65\x8E\x86\x54\x8F\x93\x43\x29\xDE\x39\x46\x78\xA3\x30\x23\xBA\xCD\xF0\x7D\x13\x57\xC0\x5D\xD2\x83\x6B\x48\x4C\xC4\xAB\x9F\x80\x5A\x5B\x3A\xBD\xC9\xA7\x22\x3F\x80\x27\x33\x5B\x0E\xB7\x8A\x0C\x5D\x07\x37\x08\xCB\x6C\xD2\x7A\x47\x22\x44\x35\xC5\xCC\xCC\x2E\x8E\xDD\x2A\xED\xB7\x7D\x66\x0D\x5F\x61\x51\x22\x55\x1B\xE3\x46\xE3\xE3\x3D\xD0\x35\x62\x9A\xDB\xAF\x14\xC8\x5B\xA1\xCC\x89\x1B\xE1\x30\x26\xFC\xA0\x9B\x1F\x81\xA7\x47\x1F\x04\xEB\xA3\x39\x92\x06\x9F\x99\xD3\xBF\xD3\xEA\x4F\x50\x9C\x19\xFE\x96\x87\x1E\x3C\x65\xF6\xA3\x18\x24\x83\x86\x10\xE7\x54\x3E\xA8\x3A\x76\x24\x4F\x81\x21\xC5\xE3\x0F\x02\xF8\x93\x94\x47\x20\xBB\xFE\xD4\x0E\xD3\x68\xB9\xDD\xC4\x7A\x84\x82\xE3\x53\x54\x79\xDD\xDB\x9C\xD2\xF2\x07\x9B\x2E\xB6\xBC\x3E\xED\x85\x6D\xEF\x25\x11\xF2\x97\x1A\x42\x61\xF7\x4A\x97\xE8\x8B\xB1\x10\x07\xFA\x65\x81\xB2\xA2\x39\xCF\xF7\x3C\xFF\x18\xFB\xC6\xF1\x5A\x8B\x59\xE2\x02\xAC\x7B\x92\xD0\x4E\x14\x4F\x59\x45\xF6\x0C\x5E\x28\x5F\xB0\xE8\x3F\x45\xCF\xCF\xAF\x9B\x6F\xFB\x84\xD3\x77\x5A\x95\x6F\xAC\x94\x84\x9E\xEE\xBC\xC0\x4A\x8F\x4A\x93\xF8\x44\x21\xE2\x31\x45\x61\x50\x4E\x10\xD8\xE3\x35\x7C\x4C\x19\xB4\xDE\x05\xBF\xA3\x06\x9F\xC8\xB5\xCD\xE4\x1F\xD7\x17\x06\x0D\x7A\x95\x74\x55\x0D\x68\x1A\xFC\x10\x1B\x62\x64\x9D\x6D\xE0\x95\xA0\xC3\x94\x07\x57\x0D\x14\xE6\xBD\x05\xFB\xB8\x9F\xE6\xDF\x8B\xE2\xC6\xE7\x7E\x96\xF6\x53\xC5\x80\x34\x50\x28\x58\xF0\x12\x50\x71\x17\x30\xBA\xE6\x78\x63\xBC\xF4\xB2\xAD\x9B\x2B\xB2\xFE\xE1\x39\x8C\x5E\xBA\x0B\x20\x94\xDE\x7B\x83\xB8\xFF\xE3\x56\x8D\xB7\x11\xE9\x3B\x8C\xF2\xB1\xC1\x5D\x9D\xA4\x0B\x4C\x2B\xD9\xB2\x18\xF5\xB5\x9F\x4B\x02\x03\x01\x00\x01\xA3\x63\x30\x61\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x52\xD8\x88\x3A\xC8\x9F\x78\x66\xED\x89\xF3\x7B\x38\x70\x94\xC9\x02\x02\x36\xD0\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\x52\xD8\x88\x3A\xC8\x9F\x78\x66\xED\x89\xF3\x7B\x38\x70\x94\xC9\x02\x02\x36\xD0\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x0B\x7B\x72\x87\xC0\x60\xA6\x49\x4C\x88\x58\xE6\x1D\x88\xF7\x14\x64\x48\xA6\xD8\x58\x0A\x0E\x4F\x13\x35\xDF\x35\x1D\xD4\xED\x06\x31\xC8\x81\x3E\x6A\xD5\xDD\x3B\x1A\x32\xEE\x90\x3D\x11\xD2\x2E\xF4\x8E\xC3\x63\x2E\x23\x66\xB0\x67\xBE\x6F\xB6\xC0\x13\x39\x60\xAA\xA2\x34\x25\x93\x75\x52\xDE\xA7\x9D\xAD\x0E\x87\x89\x52\x71\x6A\x16\x3C\x19\x1D\x83\xF8\x9A\x29\x65\xBE\xF4\x3F\x9A\xD9\xF0\xF3\x5A\x87\x21\x71\x80\x4D\xCB\xE0\x38\x9B\x3F\xBB\xFA\xE0\x30\x4D\xCF\x86\xD3\x65\x10\x19\x18\xD1\x97\x02\xB1\x2B\x72\x42\x68\xAC\xA0\xBD\x4E\x5A\xDA\x18\xBF\x6B\x98\x81\xD0\xFD\x9A\xBE\x5E\x15\x48\xCD\x11\x15\xB9\xC0\x29\x5C\xB4\xE8\x88\xF7\x3E\x36\xAE\xB7\x62\xFD\x1E\x62\xDE\x70\x78\x10\x1C\x48\x5B\xDA\xBC\xA4\x38\xBA\x67\xED\x55\x3E\x5E\x57\xDF\xD4\x03\x40\x4C\x81\xA4\xD2\x4F\x63\xA7\x09\x42\x09\x14\xFC\x00\xA9\xC2\x80\x73\x4F\x2E\xC0\x40\xD9\x11\x7B\x48\xEA\x7A\x02\xC0\xD3\xEB\x28\x01\x26\x58\x74\xC1\xC0\x73\x22\x6D\x93\x95\xFD\x39\x7D\xBB\x2A\xE3\xF6\x82\xE3\x2C\x97\x5F\x4E\x1F\x91\x94\xFA\xFE\x2C\xA3\xD8\x76\x1A\xB8\x4D\xB2\x38\x4F\x9B\xFA\x1D\x48\x60\x79\x26\xE2\xF3\xFD\xA9\xD0\x9A\xE8\x70\x8F\x49\x7A\xD6\xE5\xBD\x0A\x0E\xDB\x2D\xF3\x8D\xBF\xEB\xE3\xA4\x7D\xCB\xC7\x95\x71\xE8\xDA\xA3\x7C\xC5\xC2\xF8\x74\x92\x04\x1B\x86\xAC\xA4\x22\x53\x40\xB6\xAC\xFE\x4C\x76\xCF\xFB\x94\x32\xC0\x35\x9F\x76\x3F\x6E\xE5\x90\x6E\xA0\xA6\x26\xA2\xB8\x2C\xBE\xD1\x2B\x85\xFD\xA7\x68\xC8\xBA\x01\x2B\xB1\x6C\x74\x1D\xB8\x73\x95\xE7\xEE\xB7\xC7\x25\xF0\x00\x4C\x00\xB2\x7E\xB6\x0B\x8B\x1C\xF3\xC0\x50\x9E\x25\xB9\xE0\x08\xDE\x36\x66\xFF\x37\xA5\xD1\xBB\x54\x64\x2C\xC9\x27\xB5\x4B\x92\x7E\x65\xFF\xD3\x2D\xE1\xB9\x4E\xBC\x7F\xA4\x41\x21\x90\x41\x77\xA6\x39\x1F\xEA\x9E\xE3\x9F\xD0\x66\x6F\x05\xEC\xAA\x76\x7E\xBF\x6B\x16\xA0\xEB\xB5\xC7\xFC\x92\x54\x2F\x2B\x11\x27\x25\x37\x78\x4C\x51\x6A\xB0\xF3\xCC\x58\x5D\x14\xF1\x6A\x48\x15\xFF\xC2\x07\xB6\xB1\x8D\x0F\x8E\x5C\x50\x46\xB3\x3D\xBF\x01\x98\x4F\xB2\x59\x54\x47\x3E\x34\x7B\x78\x6D\x56\x93\x2E\x73\xEA\x66\x28\x78\xCD\x1D\x14\xBF\xA0\x8F\x2F\x2E\xB8\x2E\x8E\xF2\x14\x8A\xCC\xE9\xB5\x7C\xFB\x6C\x9D\x0C\xA5\xE1\x96", ["CN=Buypass Class 2 Root CA,O=Buypass AS-983163327,C=NO"] = "\x30\x82\x05\x59\x30\x82\x03\x41\xA0\x03\x02\x01\x02\x02\x01\x02\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4F\x31\x1D\x30\x1B\x06\x03\x55\x04\x0A\x0C\x14\x42\x75\x79\x70\x61\x73\x73\x20\x41\x53\x2D\x39\x38\x33\x31\x36\x33\x33\x32\x37\x31\x20\x30\x1E\x06\x03\x55\x04\x03\x0C\x17\x42\x75\x79\x70\x61\x73\x73\x20\x43\x6C\x61\x73\x73\x20\x32\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x31\x30\x31\x30\x32\x36\x30\x38\x33\x38\x30\x33\x5A\x17\x0D\x34\x30\x31\x30\x32\x36\x30\x38\x33\x38\x30\x33\x5A\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4F\x31\x1D\x30\x1B\x06\x03\x55\x04\x0A\x0C\x14\x42\x75\x79\x70\x61\x73\x73\x20\x41\x53\x2D\x39\x38\x33\x31\x36\x33\x33\x32\x37\x31\x20\x30\x1E\x06\x03\x55\x04\x03\x0C\x17\x42\x75\x79\x70\x61\x73\x73\x20\x43\x6C\x61\x73\x73\x20\x32\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xD7\xC7\x5E\xF7\xC1\x07\xD4\x77\xFB\x43\x21\xF4\xF4\xF5\x69\xE4\xEE\x32\x01\xDB\xA3\x86\x1F\xE4\x59\x0D\xBA\xE7\x75\x83\x52\xEB\xEA\x1C\x61\x15\x48\xBB\x1D\x07\xCA\x8C\xAE\xB0\xDC\x96\x9D\xEA\xC3\x60\x92\x86\x82\x28\x73\x9C\x56\x06\xFF\x4B\x64\xF0\x0C\x2A\x37\x49\xB5\xE5\xCF\x0C\x7C\xEE\xF1\x4A\xBB\x73\x30\x65\xF3\xD5\x2F\x83\xB6\x7E\xE3\xE7\xF5\x9E\xAB\x60\xF9\xD3\xF1\x9D\x92\x74\x8A\xE4\x1C\x96\xAC\x5B\x80\xE9\xB5\xF4\x31\x87\xA3\x51\xFC\xC7\x7E\xA1\x6F\x8E\x53\x77\xD4\x97\xC1\x55\x33\x92\x3E\x18\x2F\x75\xD4\xAD\x86\x49\xCB\x95\xAF\x54\x06\x6C\xD8\x06\x13\x8D\x5B\xFF\xE1\x26\x19\x59\xC0\x24\xBA\x81\x71\x79\x90\x44\x50\x68\x24\x94\x5F\xB8\xB3\x11\xF1\x29\x41\x61\xA3\x41\xCB\x23\x36\xD5\xC1\xF1\x32\x50\x10\x4E\x7F\xF4\x86\x93\xEC\x84\xD3\x8E\xBC\x4B\xBF\x5C\x01\x4E\x07\x3D\xDC\x14\x8A\x94\x0A\xA4\xEA\x73\xFB\x0B\x51\xE8\x13\x07\x18\xFA\x0E\xF1\x2B\xD1\x54\x15\x7D\x3C\xE1\xF7\xB4\x19\x42\x67\x62\x5E\x77\xE0\xA2\x55\xEC\xB6\xD9\x69\x17\xD5\x3A\xAF\x44\xED\x4A\xC5\x9E\xE4\x7A\x27\x7C\xE5\x75\xD7\xAA\xCB\x25\xE7\xDF\x6B\x0A\xDB\x0F\x4D\x93\x4E\xA8\xA0\xCD\x7B\x2E\xF2\x59\x01\x6A\xB7\x0D\xB8\x07\x81\x7E\x8B\x38\x1B\x38\xE6\x0A\x57\x99\x3D\xEE\x21\xE8\xA3\xF5\x0C\x16\xDD\x8B\xEC\x34\x8E\x9C\x2A\x1C\x00\x15\x17\x8D\x68\x83\xD2\x70\x9F\x18\x08\xCD\x11\x68\xD5\xC9\x6B\x52\xCD\xC4\x46\x8F\xDC\xB5\xF3\xD8\x57\x73\x1E\xE9\x94\x39\x04\xBF\xD3\xDE\x38\xDE\xB4\x53\xEC\x69\x1C\xA2\x7E\xC4\x8F\xE4\x1B\x70\xAD\xF2\xA2\xF9\xFB\xF7\x16\x64\x66\x69\x9F\x49\x51\xA2\xE2\x15\x18\x67\x06\x4A\x7F\xD5\x6C\xB5\x4D\xB3\x33\xE0\x61\xEB\x5D\xBE\xE9\x98\x0F\x32\xD7\x1D\x4B\x3C\x2E\x5A\x01\x52\x91\x09\xF2\xDF\xEA\x8D\xD8\x06\x40\x63\xAA\x11\xE4\xFE\xC3\x37\x9E\x14\x52\x3F\xF4\xE2\xCC\xF2\x61\x93\xD1\xFD\x67\x6B\xD7\x52\xAE\xBF\x68\xAB\x40\x43\xA0\x57\x35\x53\x78\xF0\x53\xF8\x61\x42\x07\x64\xC6\xD7\x6F\x9B\x4C\x38\x0D\x63\xAC\x62\xAF\x36\x8B\xA2\x73\x0A\x0D\xF5\x21\xBD\x74\xAA\x4D\xEA\x72\x03\x49\xDB\xC7\x5F\x1D\x62\x63\xC7\xFD\xDD\x91\xEC\x33\xEE\xF5\x6D\xB4\x6E\x30\x68\xDE\xC8\xD6\x26\xB0\x75\x5E\x7B\xB4\x07\x20\x98\xA1\x76\x32\xB8\x4D\x6C\x4F\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xC9\x80\x77\xE0\x62\x92\x82\xF5\x46\x9C\xF3\xBA\xF7\x4C\xC3\xDE\xB8\xA3\xAD\x39\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x53\x5F\x21\xF5\xBA\xB0\x3A\x52\x39\x2C\x92\xB0\x6C\x00\xC9\xEF\xCE\x20\xEF\x06\xF2\x96\x9E\xE9\xA4\x74\x7F\x7A\x16\xFC\xB7\xF5\xB6\xFB\x15\x1B\x3F\xAB\xA6\xC0\x72\x5D\x10\xB1\x71\xEE\xBC\x4F\xE3\xAD\xAC\x03\x6D\x2E\x71\x2E\xAF\xC4\xE3\xAD\xA3\xBD\x0C\x11\xA7\xB4\xFF\x4A\xB2\x7B\x10\x10\x1F\xA7\x57\x41\xB2\xC0\xAE\xF4\x2C\x59\xD6\x47\x10\x88\xF3\x21\x51\x29\x30\xCA\x60\x86\xAF\x46\xAB\x1D\xED\x3A\x5B\xB0\x94\xDE\x44\xE3\x41\x08\xA2\xC1\xEC\x1D\xD6\xFD\x4F\xB6\xD6\x47\xD0\x14\x0B\xCA\xE6\xCA\xB5\x7B\x77\x7E\x41\x1F\x5E\x83\xC7\xB6\x8C\x39\x96\xB0\x3F\x96\x81\x41\x6F\x60\x90\xE2\xE8\xF9\xFB\x22\x71\xD9\x7D\xB3\x3D\x46\xBF\xB4\x84\xAF\x90\x1C\x0F\x8F\x12\x6A\xAF\xEF\xEE\x1E\x7A\xAE\x02\x4A\x8A\x17\x2B\x76\xFE\xAC\x54\x89\x24\x2C\x4F\x3F\xB6\xB2\xA7\x4E\x8C\xA8\x91\x97\xFB\x29\xC6\x7B\x5C\x2D\xB9\xCB\x66\xB6\xB7\xA8\x5B\x12\x51\x85\xB5\x09\x7E\x62\x78\x70\xFE\xA9\x6A\x60\xB6\x1D\x0E\x79\x0C\xFD\xCA\xEA\x24\x80\x72\xC3\x97\x3F\xF2\x77\xAB\x43\x22\x0A\xC7\xEB\xB6\x0C\x84\x82\x2C\x80\x6B\x41\x8A\x08\xC0\xEB\xA5\x6B\xDF\x99\x12\xCB\x8A\xD5\x5E\x80\x0C\x91\xE0\x26\x08\x36\x48\xC5\xFA\x38\x11\x35\xFF\x25\x83\x2D\xF2\x7A\xBF\xDA\xFD\x8E\xFE\xA5\xCB\x45\x2C\x1F\xC4\x88\x53\xAE\x77\x0E\xD9\x9A\x76\xC5\x8E\x2C\x1D\xA3\xBA\xD5\xEC\x32\xAE\xC0\xAA\xAC\xF7\xD1\x7A\x4D\xEB\xD4\x07\xE2\x48\xF7\x22\x8E\xB0\xA4\x9F\x6A\xCE\x8E\xB2\xB2\x60\xF4\xA3\x22\xD0\x23\xEB\x94\x5A\x7A\x69\xDD\x0F\xBF\x40\x57\xAC\x6B\x59\x50\xD9\xA3\x99\xE1\x6E\xFE\x8D\x01\x79\x27\x23\x15\xDE\x92\x9D\x7B\x09\x4D\x5A\xE7\x4B\x48\x30\x5A\x18\xE6\x0A\x6D\xE6\x8F\xE0\xD2\xBB\xE6\xDF\x7C\x6E\x21\x82\xC1\x68\x39\x4D\xB4\x98\x58\x66\x62\xCC\x4A\x90\x5E\xC3\xFA\x27\x04\xB1\x79\x15\x74\x99\xCC\xBE\xAD\x20\xDE\x26\x60\x1C\xEB\x56\x51\xA6\xA3\xEA\xE4\xA3\x3F\xA7\xFF\x61\xDC\xF1\x5A\x4D\x6C\x32\x23\x43\xEE\xAC\xA8\xEE\xEE\x4A\x12\x09\x3C\x5D\x71\xC2\xBE\x79\xFA\xC2\x87\x68\x1D\x0B\xFD\x5C\x69\xCC\x06\xD0\x9A\x7D\x54\x99\x2A\xC9\x39\x1A\x19\xAF\x4B\x2A\x43\xF3\x63\x5D\x5A\x58\xE2\x2F\xE3\x1D\xE4\xA9\xD6\xD0\x0A\xD0\x9E\xBF\xD7\x81\x09\xF1\xC9\xC7\x26\x0D\xAC\x98\x16\x56\xA0", ["CN=Buypass Class 3 Root CA,O=Buypass AS-983163327,C=NO"] = "\x30\x82\x05\x59\x30\x82\x03\x41\xA0\x03\x02\x01\x02\x02\x01\x02\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4F\x31\x1D\x30\x1B\x06\x03\x55\x04\x0A\x0C\x14\x42\x75\x79\x70\x61\x73\x73\x20\x41\x53\x2D\x39\x38\x33\x31\x36\x33\x33\x32\x37\x31\x20\x30\x1E\x06\x03\x55\x04\x03\x0C\x17\x42\x75\x79\x70\x61\x73\x73\x20\x43\x6C\x61\x73\x73\x20\x33\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x31\x30\x31\x30\x32\x36\x30\x38\x32\x38\x35\x38\x5A\x17\x0D\x34\x30\x31\x30\x32\x36\x30\x38\x32\x38\x35\x38\x5A\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4F\x31\x1D\x30\x1B\x06\x03\x55\x04\x0A\x0C\x14\x42\x75\x79\x70\x61\x73\x73\x20\x41\x53\x2D\x39\x38\x33\x31\x36\x33\x33\x32\x37\x31\x20\x30\x1E\x06\x03\x55\x04\x03\x0C\x17\x42\x75\x79\x70\x61\x73\x73\x20\x43\x6C\x61\x73\x73\x20\x33\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xA5\xDA\x0A\x95\x16\x50\xE3\x95\xF2\x5E\x9D\x76\x31\x06\x32\x7A\x9B\xF1\x10\x76\xB8\x00\x9A\xB5\x52\x36\xCD\x24\x47\xB0\x9F\x18\x64\xBC\x9A\xF6\xFA\xD5\x79\xD8\x90\x62\x4C\x22\x2F\xDE\x38\x3D\xD6\xE0\xA8\xE9\x1C\x2C\xDB\x78\x11\xE9\x8E\x68\x51\x15\x72\xC7\xF3\x33\x87\xE4\xA0\x5D\x0B\x5C\xE0\x57\x07\x2A\x30\xF5\xCD\xC4\x37\x77\x28\x4D\x18\x91\xE6\xBF\xD5\x52\xFD\x71\x2D\x70\x3E\xE7\xC6\xC4\x8A\xE3\xF0\x28\x0B\xF4\x76\x98\xA1\x8B\x87\x55\xB2\x3A\x13\xFC\xB7\x3E\x27\x37\x8E\x22\xE3\xA8\x4F\x2A\xEF\x60\xBB\x3D\xB7\x39\xC3\x0E\x01\x47\x99\x5D\x12\x4F\xDB\x43\xFA\x57\xA1\xED\xF9\x9D\xBE\x11\x47\x26\x5B\x13\x98\xAB\x5D\x16\x8A\xB0\x37\x1C\x57\x9D\x45\xFF\x88\x96\x36\xBF\xBB\xCA\x07\x7B\x6F\x87\x63\xD7\xD0\x32\x6A\xD6\x5D\x6C\x0C\xF1\xB3\x6E\x39\xE2\x6B\x31\x2E\x39\x00\x27\x14\xDE\x38\xC0\xEC\x19\x66\x86\x12\xE8\x9D\x72\x16\x13\x64\x52\xC7\xA9\x37\x1C\xFD\x82\x30\xED\x84\x18\x1D\xF4\xAE\x5C\xFF\x70\x13\x00\xEB\xB1\xF5\x33\x7A\x4B\xD6\x55\xF8\x05\x8D\x4B\x69\xB0\xF5\xB3\x28\x36\x5C\x14\xC4\x51\x73\x4D\x6B\x0B\xF1\x34\x07\xDB\x17\x39\xD7\xDC\x28\x7B\x6B\xF5\x9F\xF3\x2E\xC1\x4F\x17\x2A\x10\xF3\xCC\xCA\xE8\xEB\xFD\x6B\xAB\x2E\x9A\x9F\x2D\x82\x6E\x04\xD4\x52\x01\x93\x2D\x3D\x86\xFC\x7E\xFC\xDF\xEF\x42\x1D\xA6\x6B\xEF\xB9\x20\xC6\xF7\xBD\xA0\xA7\x95\xFD\xA7\xE6\x89\x24\xD8\xCC\x8C\x34\x6C\xE2\x23\x2F\xD9\x12\x1A\x21\xB9\x55\x91\x6F\x0B\x91\x79\x19\x0C\xAD\x40\x88\x0B\x70\xE2\x7A\xD2\x0E\xD8\x68\x48\xBB\x82\x13\x39\x10\x58\xE9\xD8\x2A\x07\xC6\x12\xDB\x58\xDB\xD2\x3B\x55\x10\x47\x05\x15\x67\x62\x7E\x18\x63\xA6\x46\x3F\x09\x0E\x54\x32\x5E\xBF\x0D\x62\x7A\x27\xEF\x80\xE8\xDB\xD9\x4B\x06\x5A\x37\x5A\x25\xD0\x08\x12\x77\xD4\x6F\x09\x50\x97\x3D\xC8\x1D\xC3\xDF\x8C\x45\x30\x56\xC6\xD3\x64\xAB\x66\xF3\xC0\x5E\x96\x9C\xC3\xC4\xEF\xC3\x7C\x6B\x8B\x3A\x79\x7F\xB3\x49\xCF\x3D\xE2\x89\x9F\xA0\x30\x4B\x85\xB9\x9C\x94\x24\x79\x8F\x7D\x6B\xA9\x45\x68\x0F\x2B\xD0\xF1\xDA\x1C\xCB\x69\xB8\xCA\x49\x62\x6D\xC8\xD0\x63\x62\xDD\x60\x0F\x58\xAA\x8F\xA1\xBC\x05\xA5\x66\xA2\xCF\x1B\x76\xB2\x84\x64\xB1\x4C\x39\x52\xC0\x30\xBA\xF0\x8C\x4B\x02\xB0\xB6\xB7\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x47\xB8\xCD\xFF\xE5\x6F\xEE\xF8\xB2\xEC\x2F\x4E\x0E\xF9\x25\xB0\x8E\x3C\x6B\xC3\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x00\x20\x23\x41\x35\x04\x90\xC2\x40\x62\x60\xEF\xE2\x35\x4C\xD7\x3F\xAC\xE2\x34\x90\xB8\xA1\x6F\x76\xFA\x16\x16\xA4\x48\x37\x2C\xE9\x90\xC2\xF2\x3C\xF8\x0A\x9F\xD8\x81\xE5\xBB\x5B\xDA\x25\x2C\xA4\xA7\x55\x71\x24\x32\xF6\xC8\x0B\xF2\xBC\x6A\xF8\x93\xAC\xB2\x07\xC2\x5F\x9F\xDB\xCC\xC8\x8A\xAA\xBE\x6A\x6F\xE1\x49\x10\xCC\x31\xD7\x80\xBB\xBB\xC8\xD8\xA2\x0E\x64\x57\xEA\xA2\xF5\xC2\xA9\x31\x15\xD2\x20\x6A\xEC\xFC\x22\x01\x28\xCF\x86\xB8\x80\x1E\xA9\xCC\x11\xA5\x3C\xF2\x16\xB3\x47\x9D\xFC\xD2\x80\x21\xC4\xCB\xD0\x47\x70\x41\xA1\xCA\x83\x19\x08\x2C\x6D\xF2\x5D\x77\x9C\x8A\x14\x13\xD4\x36\x1C\x92\xF0\xE5\x06\x37\xDC\xA6\xE6\x90\x9B\x38\x8F\x5C\x6B\x1B\x46\x86\x43\x42\x5F\x3E\x01\x07\x53\x54\x5D\x65\x7D\xF7\x8A\x73\xA1\x9A\x54\x5A\x1F\x29\x43\x14\x27\xC2\x85\x0F\xB5\x88\x7B\x1A\x3B\x94\xB7\x1D\x60\xA7\xB5\x9C\xE7\x29\x69\x57\x5A\x9B\x93\x7A\x43\x30\x1B\x03\xD7\x62\xC8\x40\xA6\xAA\xFC\x64\xE4\x4A\xD7\x91\x53\x01\xA8\x20\x88\x6E\x9C\x5F\x44\xB9\xCB\x60\x81\x34\xEC\x6F\xD3\x7D\xDA\x48\x5F\xEB\xB4\x90\xBC\x2D\xA9\x1C\x0B\xAC\x1C\xD5\xA2\x68\x20\x80\x04\xD6\xFC\xB1\x8F\x2F\xBB\x4A\x31\x0D\x4A\x86\x1C\xEB\xE2\x36\x29\x26\xF5\xDA\xD8\xC4\xF2\x75\x61\xCF\x7E\xAE\x76\x63\x4A\x7A\x40\x65\x93\x87\xF8\x1E\x80\x8C\x86\xE5\x86\xD6\x8F\x0E\xFC\x53\x2C\x60\xE8\x16\x61\x1A\xA2\x3E\x43\x7B\xCD\x39\x60\x54\x6A\xF5\xF2\x89\x26\x01\x68\x83\x48\xA2\x33\xE8\xC9\x04\x91\xB2\x11\x34\x11\x3E\xEA\xD0\x43\x19\x1F\x03\x93\x90\x0C\xFF\x51\x3D\x57\xF4\x41\x6E\xE1\xCB\xA0\xBE\xEB\xC9\x63\xCD\x6D\xCC\xE4\xF8\x36\xAA\x68\x9D\xED\xBD\x5D\x97\x70\x44\x0D\xB6\x0E\x35\xDC\xE1\x0C\x5D\xBB\xA0\x51\x94\xCB\x7E\x16\xEB\x11\x2F\xA3\x92\x45\xC8\x4C\x71\xD9\xBC\xC9\x99\x52\x57\x46\x2F\x50\xCF\xBD\x35\x69\xF4\x3D\x15\xCE\x06\xA5\x2C\x0F\x3E\xF6\x81\xBA\x94\xBB\xC3\xBB\xBF\x65\x78\xD2\x86\x79\xFF\x49\x3B\x1A\x83\x0C\xF0\xDE\x78\xEC\xC8\xF2\x4D\x4C\x1A\xDE\x82\x29\xF8\xC1\x5A\xDA\xED\xEE\xE6\x27\x5E\xE8\x45\xD0\x9D\x1C\x51\xA8\x68\xAB\x44\xE3\xD0\x8B\x6A\xE3\xF8\x3B\xBB\xDC\x4D\xD7\x64\xF2\x51\xBE\xE6\xAA\xAB\x5A\xE9\x31\xEE\x06\xBC\x73\xBF\x13\x62\x0A\x9F\xC7\xB9\x97", @@ -79,7 +76,6 @@ redef root_certs += { ["CN=USERTrust RSA Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US"] = "\x30\x82\x05\xDE\x30\x82\x03\xC6\xA0\x03\x02\x01\x02\x02\x10\x01\xFD\x6D\x30\xFC\xA3\xCA\x51\xA8\x1B\xBC\x64\x0E\x35\x03\x2D\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x30\x81\x88\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x13\x30\x11\x06\x03\x55\x04\x08\x13\x0A\x4E\x65\x77\x20\x4A\x65\x72\x73\x65\x79\x31\x14\x30\x12\x06\x03\x55\x04\x07\x13\x0B\x4A\x65\x72\x73\x65\x79\x20\x43\x69\x74\x79\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x13\x15\x54\x68\x65\x20\x55\x53\x45\x52\x54\x52\x55\x53\x54\x20\x4E\x65\x74\x77\x6F\x72\x6B\x31\x2E\x30\x2C\x06\x03\x55\x04\x03\x13\x25\x55\x53\x45\x52\x54\x72\x75\x73\x74\x20\x52\x53\x41\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x31\x30\x30\x32\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x32\x33\x35\x39\x35\x39\x5A\x30\x81\x88\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x13\x30\x11\x06\x03\x55\x04\x08\x13\x0A\x4E\x65\x77\x20\x4A\x65\x72\x73\x65\x79\x31\x14\x30\x12\x06\x03\x55\x04\x07\x13\x0B\x4A\x65\x72\x73\x65\x79\x20\x43\x69\x74\x79\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x13\x15\x54\x68\x65\x20\x55\x53\x45\x52\x54\x52\x55\x53\x54\x20\x4E\x65\x74\x77\x6F\x72\x6B\x31\x2E\x30\x2C\x06\x03\x55\x04\x03\x13\x25\x55\x53\x45\x52\x54\x72\x75\x73\x74\x20\x52\x53\x41\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\x80\x12\x65\x17\x36\x0E\xC3\xDB\x08\xB3\xD0\xAC\x57\x0D\x76\xED\xCD\x27\xD3\x4C\xAD\x50\x83\x61\xE2\xAA\x20\x4D\x09\x2D\x64\x09\xDC\xCE\x89\x9F\xCC\x3D\xA9\xEC\xF6\xCF\xC1\xDC\xF1\xD3\xB1\xD6\x7B\x37\x28\x11\x2B\x47\xDA\x39\xC6\xBC\x3A\x19\xB4\x5F\xA6\xBD\x7D\x9D\xA3\x63\x42\xB6\x76\xF2\xA9\x3B\x2B\x91\xF8\xE2\x6F\xD0\xEC\x16\x20\x90\x09\x3E\xE2\xE8\x74\xC9\x18\xB4\x91\xD4\x62\x64\xDB\x7F\xA3\x06\xF1\x88\x18\x6A\x90\x22\x3C\xBC\xFE\x13\xF0\x87\x14\x7B\xF6\xE4\x1F\x8E\xD4\xE4\x51\xC6\x11\x67\x46\x08\x51\xCB\x86\x14\x54\x3F\xBC\x33\xFE\x7E\x6C\x9C\xFF\x16\x9D\x18\xBD\x51\x8E\x35\xA6\xA7\x66\xC8\x72\x67\xDB\x21\x66\xB1\xD4\x9B\x78\x03\xC0\x50\x3A\xE8\xCC\xF0\xDC\xBC\x9E\x4C\xFE\xAF\x05\x96\x35\x1F\x57\x5A\xB7\xFF\xCE\xF9\x3D\xB7\x2C\xB6\xF6\x54\xDD\xC8\xE7\x12\x3A\x4D\xAE\x4C\x8A\xB7\x5C\x9A\xB4\xB7\x20\x3D\xCA\x7F\x22\x34\xAE\x7E\x3B\x68\x66\x01\x44\xE7\x01\x4E\x46\x53\x9B\x33\x60\xF7\x94\xBE\x53\x37\x90\x73\x43\xF3\x32\xC3\x53\xEF\xDB\xAA\xFE\x74\x4E\x69\xC7\x6B\x8C\x60\x93\xDE\xC4\xC7\x0C\xDF\xE1\x32\xAE\xCC\x93\x3B\x51\x78\x95\x67\x8B\xEE\x3D\x56\xFE\x0C\xD0\x69\x0F\x1B\x0F\xF3\x25\x26\x6B\x33\x6D\xF7\x6E\x47\xFA\x73\x43\xE5\x7E\x0E\xA5\x66\xB1\x29\x7C\x32\x84\x63\x55\x89\xC4\x0D\xC1\x93\x54\x30\x19\x13\xAC\xD3\x7D\x37\xA7\xEB\x5D\x3A\x6C\x35\x5C\xDB\x41\xD7\x12\xDA\xA9\x49\x0B\xDF\xD8\x80\x8A\x09\x93\x62\x8E\xB5\x66\xCF\x25\x88\xCD\x84\xB8\xB1\x3F\xA4\x39\x0F\xD9\x02\x9E\xEB\x12\x4C\x95\x7C\xF3\x6B\x05\xA9\x5E\x16\x83\xCC\xB8\x67\xE2\xE8\x13\x9D\xCC\x5B\x82\xD3\x4C\xB3\xED\x5B\xFF\xDE\xE5\x73\xAC\x23\x3B\x2D\x00\xBF\x35\x55\x74\x09\x49\xD8\x49\x58\x1A\x7F\x92\x36\xE6\x51\x92\x0E\xF3\x26\x7D\x1C\x4D\x17\xBC\xC9\xEC\x43\x26\xD0\xBF\x41\x5F\x40\xA9\x44\x44\xF4\x99\xE7\x57\x87\x9E\x50\x1F\x57\x54\xA8\x3E\xFD\x74\x63\x2F\xB1\x50\x65\x09\xE6\x58\x42\x2E\x43\x1A\x4C\xB4\xF0\x25\x47\x59\xFA\x04\x1E\x93\xD4\x26\x46\x4A\x50\x81\xB2\xDE\xBE\x78\xB7\xFC\x67\x15\xE1\xC9\x57\x84\x1E\x0F\x63\xD6\xE9\x62\xBA\xD6\x5F\x55\x2E\xEA\x5C\xC6\x28\x08\x04\x25\x39\xB8\x0E\x2B\xA9\xF2\x4C\x97\x1C\x07\x3F\x0D\x52\xF5\xED\xEF\x2F\x82\x0F\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x53\x79\xBF\x5A\xAA\x2B\x4A\xCF\x54\x80\xE1\xD8\x9B\xC0\x9D\xF2\xB2\x03\x66\xCB\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x03\x82\x02\x01\x00\x5C\xD4\x7C\x0D\xCF\xF7\x01\x7D\x41\x99\x65\x0C\x73\xC5\x52\x9F\xCB\xF8\xCF\x99\x06\x7F\x1B\xDA\x43\x15\x9F\x9E\x02\x55\x57\x96\x14\xF1\x52\x3C\x27\x87\x94\x28\xED\x1F\x3A\x01\x37\xA2\x76\xFC\x53\x50\xC0\x84\x9B\xC6\x6B\x4E\xBA\x8C\x21\x4F\xA2\x8E\x55\x62\x91\xF3\x69\x15\xD8\xBC\x88\xE3\xC4\xAA\x0B\xFD\xEF\xA8\xE9\x4B\x55\x2A\x06\x20\x6D\x55\x78\x29\x19\xEE\x5F\x30\x5C\x4B\x24\x11\x55\xFF\x24\x9A\x6E\x5E\x2A\x2B\xEE\x0B\x4D\x9F\x7F\xF7\x01\x38\x94\x14\x95\x43\x07\x09\xFB\x60\xA9\xEE\x1C\xAB\x12\x8C\xA0\x9A\x5E\xA7\x98\x6A\x59\x6D\x8B\x3F\x08\xFB\xC8\xD1\x45\xAF\x18\x15\x64\x90\x12\x0F\x73\x28\x2E\xC5\xE2\x24\x4E\xFC\x58\xEC\xF0\xF4\x45\xFE\x22\xB3\xEB\x2F\x8E\xD2\xD9\x45\x61\x05\xC1\x97\x6F\xA8\x76\x72\x8F\x8B\x8C\x36\xAF\xBF\x0D\x05\xCE\x71\x8D\xE6\xA6\x6F\x1F\x6C\xA6\x71\x62\xC5\xD8\xD0\x83\x72\x0C\xF1\x67\x11\x89\x0C\x9C\x13\x4C\x72\x34\xDF\xBC\xD5\x71\xDF\xAA\x71\xDD\xE1\xB9\x6C\x8C\x3C\x12\x5D\x65\xDA\xBD\x57\x12\xB6\x43\x6B\xFF\xE5\xDE\x4D\x66\x11\x51\xCF\x99\xAE\xEC\x17\xB6\xE8\x71\x91\x8C\xDE\x49\xFE\xDD\x35\x71\xA2\x15\x27\x94\x1C\xCF\x61\xE3\x26\xBB\x6F\xA3\x67\x25\x21\x5D\xE6\xDD\x1D\x0B\x2E\x68\x1B\x3B\x82\xAF\xEC\x83\x67\x85\xD4\x98\x51\x74\xB1\xB9\x99\x80\x89\xFF\x7F\x78\x19\x5C\x79\x4A\x60\x2E\x92\x40\xAE\x4C\x37\x2A\x2C\xC9\xC7\x62\xC8\x0E\x5D\xF7\x36\x5B\xCA\xE0\x25\x25\x01\xB4\xDD\x1A\x07\x9C\x77\x00\x3F\xD0\xDC\xD5\xEC\x3D\xD4\xFA\xBB\x3F\xCC\x85\xD6\x6F\x7F\xA9\x2D\xDF\xB9\x02\xF7\xF5\x97\x9A\xB5\x35\xDA\xC3\x67\xB0\x87\x4A\xA9\x28\x9E\x23\x8E\xFF\x5C\x27\x6B\xE1\xB0\x4F\xF3\x07\xEE\x00\x2E\xD4\x59\x87\xCB\x52\x41\x95\xEA\xF4\x47\xD7\xEE\x64\x41\x55\x7C\x8D\x59\x02\x95\xDD\x62\x9D\xC2\xB9\xEE\x5A\x28\x74\x84\xA5\x9B\xB7\x90\xC7\x0C\x07\xDF\xF5\x89\x36\x74\x32\xD6\x28\xC1\xB0\xB0\x0B\xE0\x9C\x4C\xC3\x1C\xD6\xFC\xE3\x69\xB5\x47\x46\x81\x2F\xA2\x82\xAB\xD3\x63\x44\x70\xC4\x8D\xFF\x2D\x33\xBA\xAD\x8F\x7B\xB5\x70\x88\xAE\x3E\x19\xCF\x40\x28\xD8\xFC\xC8\x90\xBB\x5D\x99\x22\xF5\x52\xE6\x58\xC5\x1F\x88\x31\x43\xEE\x88\x1D\xD7\xC6\x8E\x3C\x43\x6A\x1D\xA7\x18\xDE\x7D\x3D\x16\xF1\x62\xF9\xCA\x90\xA8\xFD", ["CN=USERTrust ECC Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US"] = "\x30\x82\x02\x8F\x30\x82\x02\x15\xA0\x03\x02\x01\x02\x02\x10\x5C\x8B\x99\xC5\x5A\x94\xC5\xD2\x71\x56\xDE\xCD\x89\x80\xCC\x26\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x81\x88\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x13\x30\x11\x06\x03\x55\x04\x08\x13\x0A\x4E\x65\x77\x20\x4A\x65\x72\x73\x65\x79\x31\x14\x30\x12\x06\x03\x55\x04\x07\x13\x0B\x4A\x65\x72\x73\x65\x79\x20\x43\x69\x74\x79\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x13\x15\x54\x68\x65\x20\x55\x53\x45\x52\x54\x52\x55\x53\x54\x20\x4E\x65\x74\x77\x6F\x72\x6B\x31\x2E\x30\x2C\x06\x03\x55\x04\x03\x13\x25\x55\x53\x45\x52\x54\x72\x75\x73\x74\x20\x45\x43\x43\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x31\x30\x30\x32\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x32\x33\x35\x39\x35\x39\x5A\x30\x81\x88\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x13\x30\x11\x06\x03\x55\x04\x08\x13\x0A\x4E\x65\x77\x20\x4A\x65\x72\x73\x65\x79\x31\x14\x30\x12\x06\x03\x55\x04\x07\x13\x0B\x4A\x65\x72\x73\x65\x79\x20\x43\x69\x74\x79\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x13\x15\x54\x68\x65\x20\x55\x53\x45\x52\x54\x52\x55\x53\x54\x20\x4E\x65\x74\x77\x6F\x72\x6B\x31\x2E\x30\x2C\x06\x03\x55\x04\x03\x13\x25\x55\x53\x45\x52\x54\x72\x75\x73\x74\x20\x45\x43\x43\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\x1A\xAC\x54\x5A\xA9\xF9\x68\x23\xE7\x7A\xD5\x24\x6F\x53\xC6\x5A\xD8\x4B\xAB\xC6\xD5\xB6\xD1\xE6\x73\x71\xAE\xDD\x9C\xD6\x0C\x61\xFD\xDB\xA0\x89\x03\xB8\x05\x14\xEC\x57\xCE\xEE\x5D\x3F\xE2\x21\xB3\xCE\xF7\xD4\x8A\x79\xE0\xA3\x83\x7E\x2D\x97\xD0\x61\xC4\xF1\x99\xDC\x25\x91\x63\xAB\x7F\x30\xA3\xB4\x70\xE2\xC7\xA1\x33\x9C\xF3\xBF\x2E\x5C\x53\xB1\x5F\xB3\x7D\x32\x7F\x8A\x34\xE3\x79\x79\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x3A\xE1\x09\x86\xD4\xCF\x19\xC2\x96\x76\x74\x49\x76\xDC\xE0\x35\xC6\x63\x63\x9A\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x30\x36\x67\xA1\x16\x08\xDC\xE4\x97\x00\x41\x1D\x4E\xBE\xE1\x63\x01\xCF\x3B\xAA\x42\x11\x64\xA0\x9D\x94\x39\x02\x11\x79\x5C\x7B\x1D\xFA\x64\xB9\xEE\x16\x42\xB3\xBF\x8A\xC2\x09\xC4\xEC\xE4\xB1\x4D\x02\x31\x00\xE9\x2A\x61\x47\x8C\x52\x4A\x4B\x4E\x18\x70\xF6\xD6\x44\xD6\x6E\xF5\x83\xBA\x6D\x58\xBD\x24\xD9\x56\x48\xEA\xEF\xC4\xA2\x46\x81\x88\x6A\x3A\x46\xD1\xA9\x9B\x4D\xC9\x61\xDA\xD1\x5D\x57\x6A\x18", ["CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R5"] = "\x30\x82\x02\x1E\x30\x82\x01\xA4\xA0\x03\x02\x01\x02\x02\x11\x60\x59\x49\xE0\x26\x2E\xBB\x55\xF9\x0A\x77\x8A\x71\xF9\x4A\xD8\x6C\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x50\x31\x24\x30\x22\x06\x03\x55\x04\x0B\x13\x1B\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x20\x45\x43\x43\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x2D\x20\x52\x35\x31\x13\x30\x11\x06\x03\x55\x04\x0A\x13\x0A\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x31\x13\x30\x11\x06\x03\x55\x04\x03\x13\x0A\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x30\x1E\x17\x0D\x31\x32\x31\x31\x31\x33\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x38\x30\x31\x31\x39\x30\x33\x31\x34\x30\x37\x5A\x30\x50\x31\x24\x30\x22\x06\x03\x55\x04\x0B\x13\x1B\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x20\x45\x43\x43\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x2D\x20\x52\x35\x31\x13\x30\x11\x06\x03\x55\x04\x0A\x13\x0A\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x31\x13\x30\x11\x06\x03\x55\x04\x03\x13\x0A\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\x47\x45\x0E\x96\xFB\x7D\x5D\xBF\xE9\x39\xD1\x21\xF8\x9F\x0B\xB6\xD5\x7B\x1E\x92\x3A\x48\x59\x1C\xF0\x62\x31\x2D\xC0\x7A\x28\xFE\x1A\xA7\x5C\xB3\xB6\xCC\x97\xE7\x45\xD4\x58\xFA\xD1\x77\x6D\x43\xA2\xC0\x87\x65\x34\x0A\x1F\x7A\xDD\xEB\x3C\x33\xA1\xC5\x9D\x4D\xA4\x6F\x41\x95\x38\x7F\xC9\x1E\x84\xEB\xD1\x9E\x49\x92\x87\x94\x87\x0C\x3A\x85\x4A\x66\x9F\x9D\x59\x93\x4D\x97\x61\x06\x86\x4A\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x3D\xE6\x29\x48\x9B\xEA\x07\xCA\x21\x44\x4A\x26\xDE\x6E\xDE\xD2\x83\xD0\x9F\x59\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x31\x00\xE5\x69\x12\xC9\x6E\xDB\xC6\x31\xBA\x09\x41\xE1\x97\xF8\xFB\xFD\x9A\xE2\x7D\x12\xC9\xED\x7C\x64\xD3\xCB\x05\x25\x8B\x56\xD9\xA0\xE7\x5E\x5D\x4E\x0B\x83\x9C\x5B\x76\x29\xA0\x09\x26\x21\x6A\x62\x02\x30\x71\xD2\xB5\x8F\x5C\xEA\x3B\xE1\x78\x09\x85\xA8\x75\x92\x3B\xC8\x5C\xFD\x48\xEF\x0D\x74\x22\xA8\x08\xE2\x6E\xC5\x49\xCE\xC7\x0C\xBC\xA7\x61\x69\xF1\xF7\x3B\xE1\x2A\xCB\xF9\x2B\xF3\x66\x90\x37", - ["CN=Staat der Nederlanden EV Root CA,O=Staat der Nederlanden,C=NL"] = "\x30\x82\x05\x70\x30\x82\x03\x58\xA0\x03\x02\x01\x02\x02\x04\x00\x98\x96\x8D\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x58\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4C\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x0C\x15\x53\x74\x61\x61\x74\x20\x64\x65\x72\x20\x4E\x65\x64\x65\x72\x6C\x61\x6E\x64\x65\x6E\x31\x29\x30\x27\x06\x03\x55\x04\x03\x0C\x20\x53\x74\x61\x61\x74\x20\x64\x65\x72\x20\x4E\x65\x64\x65\x72\x6C\x61\x6E\x64\x65\x6E\x20\x45\x56\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x31\x30\x31\x32\x30\x38\x31\x31\x31\x39\x32\x39\x5A\x17\x0D\x32\x32\x31\x32\x30\x38\x31\x31\x31\x30\x32\x38\x5A\x30\x58\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4C\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x0C\x15\x53\x74\x61\x61\x74\x20\x64\x65\x72\x20\x4E\x65\x64\x65\x72\x6C\x61\x6E\x64\x65\x6E\x31\x29\x30\x27\x06\x03\x55\x04\x03\x0C\x20\x53\x74\x61\x61\x74\x20\x64\x65\x72\x20\x4E\x65\x64\x65\x72\x6C\x61\x6E\x64\x65\x6E\x20\x45\x56\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xE3\xC7\x7E\x89\xF9\x24\x4B\x3A\xD2\x33\x83\x35\x2C\x69\xEC\xDC\x09\xA4\xE3\x51\xA8\x25\x2B\x79\xB8\x08\x3D\xE0\x91\xBA\x84\x85\xC6\x85\xA4\xCA\xE6\xC9\x2E\x53\xA4\xC9\x24\x1E\xFD\x55\x66\x71\x5D\x2C\xC5\x60\x68\x04\xB7\xD9\xC2\x52\x26\x38\x88\xA4\xD6\x3B\x40\xA6\xC2\xCD\x3F\xCD\x98\x93\xB3\x54\x14\x58\x96\x55\xD5\x50\xFE\x86\xAD\xA4\x63\x7F\x5C\x87\xF6\x8E\xE6\x27\x92\x67\x17\x92\x02\x03\x2C\xDC\xD6\x66\x74\xED\xDD\x67\xFF\xC1\x61\x8D\x63\x4F\x0F\x9B\x6D\x17\x30\x26\xEF\xAB\xD2\x1F\x10\xA0\xF9\xC5\x7F\x16\x69\x81\x03\x47\xED\x1E\x68\x8D\x72\xA1\x4D\xB2\x26\xC6\xBA\x6C\x5F\x6D\xD6\xAF\xD1\xB1\x13\x8E\xA9\xAD\xF3\x5E\x69\x75\x26\x18\x3E\x41\x2B\x21\x7F\xEE\x8B\x5D\x07\x06\x9D\x43\xC4\x29\x0A\x2B\xFC\x2A\x3E\x86\xCB\x3C\x83\x3A\xF9\xC9\x0D\xDA\xC5\x99\xE2\xBC\x78\x41\x33\x76\xE1\xBF\x2F\x5D\xE5\xA4\x98\x50\x0C\x15\xDD\xE0\xFA\x9C\x7F\x38\x68\xD0\xB2\xA6\x7A\xA7\xD1\x31\xBD\x7E\x8A\x58\x27\x43\xB3\xBA\x33\x91\xD3\xA7\x98\x15\x5C\x9A\xE6\xD3\x0F\x75\xD9\xFC\x41\x98\x97\x3E\xAA\x25\xDB\x8F\x92\x2E\xB0\x7B\x0C\x5F\xF1\x63\xA9\x37\xF9\x9B\x75\x69\x4C\x28\x26\x25\xDA\xD5\xF2\x12\x70\x45\x55\xE3\xDF\x73\x5E\x37\xF5\x21\x6C\x90\x8E\x35\x5A\xC9\xD3\x23\xEB\xD3\xC0\xBE\x78\xAC\x42\x28\x58\x66\xA5\x46\x6D\x70\x02\xD7\x10\xF9\x4B\x54\xFC\x5D\x86\x4A\x87\xCF\x7F\xCA\x45\xAC\x11\x5A\xB5\x20\x51\x8D\x2F\x88\x47\x97\x39\xC0\xCF\xBA\xC0\x42\x01\x40\x99\x48\x21\x0B\x6B\xA7\xD2\xFD\x96\xD5\xD1\xBE\x46\x9D\x49\xE0\x0B\xA6\xA0\x22\x4E\x38\xD0\xC1\x3C\x30\xBC\x70\x8F\x2C\x75\xCC\xD0\xC5\x8C\x51\x3B\x3D\x94\x08\x64\x26\x61\x7D\xB9\xC3\x65\x8F\x14\x9C\x21\xD0\xAA\xFD\x17\x72\x03\x8F\xBD\x9B\x8C\xE6\x5E\x53\x9E\xB9\x9D\xEF\x82\xBB\xE1\xBC\xE2\x72\x41\x5B\x21\x94\xD3\x45\x37\x94\xD1\xDF\x09\x39\x5D\xE7\x23\xAA\x9A\x1D\xCA\x6D\xA8\x0A\x86\x85\x8A\x82\xBE\x42\x07\xD6\xF2\x38\x82\x73\xDA\x87\x5B\xE5\x3C\xD3\x9E\x3E\xA7\x3B\x9E\xF4\x03\xB3\xF9\xF1\x7D\x13\x74\x02\xFF\xBB\xA1\xE5\xFA\x00\x79\x1C\xA6\x66\x41\x88\x5C\x60\x57\xA6\x2E\x09\xC4\xBA\xFD\x9A\xCF\xA7\x1F\x40\xC3\xBB\xCC\x5A\x0A\x55\x4B\x3B\x38\x76\x51\xB8\x63\x8B\x84\x94\x16\xE6\x56\xF3\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xFE\xAB\x00\x90\x98\x9E\x24\xFC\xA9\xCC\x1A\x8A\xFB\x27\xB8\xBF\x30\x6E\xA8\x3B\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\xCF\x77\x2C\x6E\x56\xBE\x4E\xB3\xB6\x84\x00\x94\xAB\x47\xC9\x0D\xD2\x76\xC7\x86\x9F\x1D\x07\xD3\xB6\xB4\xBB\x08\x78\xAF\x69\xD2\x0B\x49\xDE\x33\xC5\xAC\xAD\xC2\x88\x02\x7D\x06\xB7\x35\x02\xC1\x60\xC9\xBF\xC4\xE8\x94\xDE\xD4\xD3\xA9\x13\x25\x5A\xFE\x6E\xA2\xAE\x7D\x05\xDC\x7D\xF3\x6C\xF0\x7E\xA6\x8D\xEE\xD9\xD7\xCE\x58\x17\xE8\xA9\x29\xAE\x73\x48\x87\xE7\x9B\xCA\x6E\x29\xA1\x64\x5F\x19\x13\xF7\xAE\x06\x10\xFF\x51\xC6\x9B\x4D\x55\x25\x4F\x93\x99\x10\x01\x53\x75\xF1\x13\xCE\xC7\xA6\x41\x41\xD2\xBF\x88\xA5\x7F\x45\xFC\xAC\xB8\xA5\xB5\x33\x0C\x82\xC4\xFB\x07\xF6\x6A\xE5\x25\x84\x5F\x06\xCA\xC1\x86\x39\x11\xDB\x58\xCD\x77\x3B\x2C\xC2\x4C\x0F\x5E\x9A\xE3\xF0\xAB\x3E\x61\x1B\x50\x24\xC2\xC0\xF4\xF1\x19\xF0\x11\x29\xB6\xA5\x18\x02\x9B\xD7\x63\x4C\x70\x8C\x47\xA3\x03\x43\x5C\xB9\x5D\x46\xA0\x0D\x6F\xFF\x59\x8E\xBE\xDD\x9F\x72\xC3\x5B\x2B\xDF\x8C\x5B\xCE\xE5\x0C\x46\x6C\x92\xB2\x0A\xA3\x4C\x54\x42\x18\x15\x12\x18\xBD\xDA\xFC\xBA\x74\x6E\xFF\xC1\xB6\xA0\x64\xD8\xA9\x5F\x55\xAE\x9F\x5C\x6A\x76\x96\xD8\x73\x67\x87\xFB\x4D\x7F\x5C\xEE\x69\xCA\x73\x10\xFB\x8A\xA9\xFD\x9E\xBD\x36\x38\x49\x49\x87\xF4\x0E\x14\xF0\xE9\x87\xB8\x3F\xA7\x4F\x7A\x5A\x8E\x79\xD4\x93\xE4\xBB\x68\x52\x84\xAC\x6C\xE9\xF3\x98\x70\x55\x72\x32\xF9\x34\xAB\x2B\x49\xB5\xCD\x20\x62\xE4\x3A\x7A\x67\x63\xAB\x96\xDC\x6D\xAE\x97\xEC\xFC\x9F\x76\x56\x88\x2E\x66\xCF\x5B\xB6\xC9\xA4\xB0\xD7\x05\xBA\xE1\x27\x2F\x93\xBB\x26\x2A\xA2\x93\xB0\x1B\xF3\x8E\xBE\x1D\x40\xA3\xB9\x36\x8F\x3E\x82\x1A\x1A\x5E\x88\xEA\x50\xF8\x59\xE2\x83\x46\x29\x0B\xE3\x44\x5C\xE1\x95\xB6\x69\x90\x9A\x14\x6F\x97\xAE\x81\xCF\x68\xEF\x99\x9A\xBE\xB5\xE7\xE1\x7F\xF8\xFA\x13\x47\x16\x4C\xCC\x6D\x08\x40\xE7\x8B\x78\x6F\x50\x82\x44\x50\x3F\x66\x06\x8A\xAB\x43\x84\x56\x4A\x0F\x20\x2D\x86\x0E\xF5\xD2\xDB\xD2\x7A\x8A\x4B\xCD\xA5\xE8\x4E\xF1\x5E\x26\x25\x01\x59\x23\xA0\x7E\xD2\xF6\x7E\x21\x57\xD7\x27\xBC\x15\x57\x4C\xA4\x46\xC1\xE0\x83\x1E\x0C\x4C\x4D\x1F\x4F\x06\x19\xE2\xF9\xA8\xF4\x3A\x82\xA1\xB2\x79\x43\x79\xD6\xAD\x6F\x7A\x27\x90\x03\xA4\xEA\x24\x87\x3F\xD9\xBD\xD9\xE9\xF2\x5F\x50\x49\x1C\xEE\xEC\xD7\x2E", ["CN=IdenTrust Commercial Root CA 1,O=IdenTrust,C=US"] = "\x30\x82\x05\x60\x30\x82\x03\x48\xA0\x03\x02\x01\x02\x02\x10\x0A\x01\x42\x80\x00\x00\x01\x45\x23\xC8\x44\xB5\x00\x00\x00\x02\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x4A\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x20\x43\x6F\x6D\x6D\x65\x72\x63\x69\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x30\x1E\x17\x0D\x31\x34\x30\x31\x31\x36\x31\x38\x31\x32\x32\x33\x5A\x17\x0D\x33\x34\x30\x31\x31\x36\x31\x38\x31\x32\x32\x33\x5A\x30\x4A\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x20\x43\x6F\x6D\x6D\x65\x72\x63\x69\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xA7\x50\x19\xDE\x3F\x99\x3D\xD4\x33\x46\xF1\x6F\x51\x61\x82\xB2\xA9\x4F\x8F\x67\x89\x5D\x84\xD9\x53\xDD\x0C\x28\xD9\xD7\xF0\xFF\xAE\x95\x43\x72\x99\xF9\xB5\x5D\x7C\x8A\xC1\x42\xE1\x31\x50\x74\xD1\x81\x0D\x7C\xCD\x9B\x21\xAB\x43\xE2\xAC\xAD\x5E\x86\x6E\xF3\x09\x8A\x1F\x5A\x32\xBD\xA2\xEB\x94\xF9\xE8\x5C\x0A\xEC\xFF\x98\xD2\xAF\x71\xB3\xB4\x53\x9F\x4E\x87\xEF\x92\xBC\xBD\xEC\x4F\x32\x30\x88\x4B\x17\x5E\x57\xC4\x53\xC2\xF6\x02\x97\x8D\xD9\x62\x2B\xBF\x24\x1F\x62\x8D\xDF\xC3\xB8\x29\x4B\x49\x78\x3C\x93\x60\x88\x22\xFC\x99\xDA\x36\xC8\xC2\xA2\xD4\x2C\x54\x00\x67\x35\x6E\x73\xBF\x02\x58\xF0\xA4\xDD\xE5\xB0\xA2\x26\x7A\xCA\xE0\x36\xA5\x19\x16\xF5\xFD\xB7\xEF\xAE\x3F\x40\xF5\x6D\x5A\x04\xFD\xCE\x34\xCA\x24\xDC\x74\x23\x1B\x5D\x33\x13\x12\x5D\xC4\x01\x25\xF6\x30\xDD\x02\x5D\x9F\xE0\xD5\x47\xBD\xB4\xEB\x1B\xA1\xBB\x49\x49\xD8\x9F\x5B\x02\xF3\x8A\xE4\x24\x90\xE4\x62\x4F\x4F\xC1\xAF\x8B\x0E\x74\x17\xA8\xD1\x72\x88\x6A\x7A\x01\x49\xCC\xB4\x46\x79\xC6\x17\xB1\xDA\x98\x1E\x07\x59\xFA\x75\x21\x85\x65\xDD\x90\x56\xCE\xFB\xAB\xA5\x60\x9D\xC4\x9D\xF9\x52\xB0\x8B\xBD\x87\xF9\x8F\x2B\x23\x0A\x23\x76\x3B\xF7\x33\xE1\xC9\x00\xF3\x69\xF9\x4B\xA2\xE0\x4E\xBC\x7E\x93\x39\x84\x07\xF7\x44\x70\x7E\xFE\x07\x5A\xE5\xB1\xAC\xD1\x18\xCC\xF2\x35\xE5\x49\x49\x08\xCA\x56\xC9\x3D\xFB\x0F\x18\x7D\x8B\x3B\xC1\x13\xC2\x4D\x8F\xC9\x4F\x0E\x37\xE9\x1F\xA1\x0E\x6A\xDF\x62\x2E\xCB\x35\x06\x51\x79\x2C\xC8\x25\x38\xF4\xFA\x4B\xA7\x89\x5C\x9C\xD2\xE3\x0D\x39\x86\x4A\x74\x7C\xD5\x59\x87\xC2\x3F\x4E\x0C\x5C\x52\xF4\x3D\xF7\x52\x82\xF1\xEA\xA3\xAC\xFD\x49\x34\x1A\x28\xF3\x41\x88\x3A\x13\xEE\xE8\xDE\xFF\x99\x1D\x5F\xBA\xCB\xE8\x1E\xF2\xB9\x50\x60\xC0\x31\xD3\x73\xE5\xEF\xBE\xA0\xED\x33\x0B\x74\xBE\x20\x20\xC4\x67\x6C\xF0\x08\x03\x7A\x55\x80\x7F\x46\x4E\x96\xA7\xF4\x1E\x3E\xE1\xF6\xD8\x09\xE1\x33\x64\x2B\x63\xD7\x32\x5E\x9F\xF9\xC0\x7B\x0F\x78\x6F\x97\xBC\x93\x9A\xF9\x9C\x12\x90\x78\x7A\x80\x87\x15\xD7\x72\x74\x9C\x55\x74\x78\xB1\xBA\xE1\x6E\x70\x04\xBA\x4F\xA0\xBA\x68\xC3\x7B\xFF\x31\xF0\x73\x3D\x3D\x94\x2A\xB1\x0B\x41\x0E\xA0\xFE\x4D\x88\x65\x6B\x79\x33\xB4\xD7\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xED\x44\x19\xC0\xD3\xF0\x06\x8B\xEE\xA4\x7B\xBE\x42\xE7\x26\x54\xC8\x8E\x36\x76\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x0D\xAE\x90\x32\xF6\xA6\x4B\x7C\x44\x76\x19\x61\x1E\x27\x28\xCD\x5E\x54\xEF\x25\xBC\xE3\x08\x90\xF9\x29\xD7\xAE\x68\x08\xE1\x94\x00\x58\xEF\x2E\x2E\x7E\x53\x52\x8C\xB6\x5C\x07\xEA\x88\xBA\x99\x8B\x50\x94\xD7\x82\x80\xDF\x61\x09\x00\x93\xAD\x0D\x14\xE6\xCE\xC1\xF2\x37\x94\x78\xB0\x5F\x9C\xB3\xA2\x73\xB8\x8F\x05\x93\x38\xCD\x8D\x3E\xB0\xB8\xFB\xC0\xCF\xB1\xF2\xEC\x2D\x2D\x1B\xCC\xEC\xAA\x9A\xB3\xAA\x60\x82\x1B\x2D\x3B\xC3\x84\x3D\x57\x8A\x96\x1E\x9C\x75\xB8\xD3\x30\xCD\x60\x08\x83\x90\xD3\x8E\x54\xF1\x4D\x66\xC0\x5D\x74\x03\x40\xA3\xEE\x85\x7E\xC2\x1F\x77\x9C\x06\xE8\xC1\xA7\x18\x5D\x52\x95\xED\xC9\xDD\x25\x9E\x6D\xFA\xA9\xED\xA3\x3A\x34\xD0\x59\x7B\xDA\xED\x50\xF3\x35\xBF\xED\xEB\x14\x4D\x31\xC7\x60\xF4\xDA\xF1\x87\x9C\xE2\x48\xE2\xC6\xC5\x37\xFB\x06\x10\xFA\x75\x59\x66\x31\x47\x29\xDA\x76\x9A\x1C\xE9\x82\xAE\xEF\x9A\xB9\x51\xF7\x88\x23\x9A\x69\x95\x62\x3C\xE5\x55\x80\x36\xD7\x54\x02\xFF\xF1\xB9\x5D\xCE\xD4\x23\x6F\xD8\x45\x84\x4A\x5B\x65\xEF\x89\x0C\xDD\x14\xA7\x20\xCB\x18\xA5\x25\xB4\x0D\xF9\x01\xF0\xA2\xD2\xF4\x00\xC8\x74\x8E\xA1\x2A\x48\x8E\x65\xDB\x13\xC4\xE2\x25\x17\x7D\xEB\xBE\x87\x5B\x17\x20\x54\x51\x93\x4A\x53\x03\x0B\xEC\x5D\xCA\x33\xED\x62\xFD\x45\xC7\x2F\x5B\xDC\x58\xA0\x80\x39\xE6\xFA\xD7\xFE\x13\x14\xA6\xED\x3D\x94\x4A\x42\x74\xD4\xC3\x77\x59\x73\xCD\x8F\x46\xBE\x55\x38\xEF\xFA\xE8\x91\x32\xEA\x97\x58\x04\x22\xDE\x38\xC3\xCC\xBC\x6D\xC9\x33\x3A\x6A\x0A\x69\x3F\xA0\xC8\xEA\x72\x8F\x8C\x63\x86\x23\xBD\x6D\x3C\x96\x9E\x95\xE0\x49\x4C\xAA\xA2\xB9\x2A\x1B\x9C\x36\x81\x78\xED\xC3\xE8\x46\xE2\x26\x59\x44\x75\x1E\xD9\x75\x89\x51\xCD\x10\x84\x9D\x61\x60\xCB\x5D\xF9\x97\x22\x4D\x8E\x98\xE6\xE3\x7F\xF6\x5B\xBB\xAE\xCD\xCA\x4A\x81\x6B\x5E\x0B\xF3\x51\xE1\x74\x2B\xE9\x7E\x27\xA7\xD9\x99\x49\x4E\xF8\xA5\x80\xDB\x25\x0F\x1C\x63\x62\x8A\xC9\x33\x67\x6B\x3C\x10\x83\xC6\xAD\xDE\xA8\xCD\x16\x8E\x8D\xF0\x07\x37\x71\x9F\xF2\xAB\xFC\x41\xF5\xC1\x8B\xEC\x00\x37\x5D\x09\xE5\x4E\x80\xEF\xFA\xB1\x5C\x38\x06\xA5\x1B\x4A\xE1\xDC\x38\x2D\x3C\xDC\xAB\x1F\x90\x1A\xD5\x4A\x9C\xEE\xD1\x70\x6C\xCC\xEE\xF4\x57\xF8\x18\xBA\x84\x6E\x87", ["CN=IdenTrust Public Sector Root CA 1,O=IdenTrust,C=US"] = "\x30\x82\x05\x66\x30\x82\x03\x4E\xA0\x03\x02\x01\x02\x02\x10\x0A\x01\x42\x80\x00\x00\x01\x45\x23\xCF\x46\x7C\x00\x00\x00\x02\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x4D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x31\x2A\x30\x28\x06\x03\x55\x04\x03\x13\x21\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x20\x50\x75\x62\x6C\x69\x63\x20\x53\x65\x63\x74\x6F\x72\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x30\x1E\x17\x0D\x31\x34\x30\x31\x31\x36\x31\x37\x35\x33\x33\x32\x5A\x17\x0D\x33\x34\x30\x31\x31\x36\x31\x37\x35\x33\x33\x32\x5A\x30\x4D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x31\x2A\x30\x28\x06\x03\x55\x04\x03\x13\x21\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x20\x50\x75\x62\x6C\x69\x63\x20\x53\x65\x63\x74\x6F\x72\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xB6\x22\x94\xFC\xA4\x48\xAF\xE8\x47\x6B\x0A\xFB\x27\x76\xE4\xF2\x3F\x8A\x3B\x7A\x4A\x2C\x31\x2A\x8C\x8D\xB0\xA9\xC3\x31\x6B\xA8\x77\x76\x84\x26\xB6\xAC\x81\x42\x0D\x08\xEB\x55\x58\xBB\x7A\xF8\xBC\x65\x7D\xF2\xA0\x6D\x8B\xA8\x47\xE9\x62\x76\x1E\x11\xEE\x08\x14\xD1\xB2\x44\x16\xF4\xEA\xD0\xFA\x1E\x2F\x5E\xDB\xCB\x73\x41\xAE\xBC\x00\xB0\x4A\x2B\x40\xB2\xAC\xE1\x3B\x4B\xC2\x2D\x9D\xE4\xA1\x9B\xEC\x1A\x3A\x1E\xF0\x08\xB3\xD0\xE4\x24\x35\x07\x9F\x9C\xB4\xC9\x52\x6D\xDB\x07\xCA\x8F\xB5\x5B\xF0\x83\xF3\x4F\xC7\x2D\xA5\xC8\xAD\xCB\x95\x20\xA4\x31\x28\x57\x58\x5A\xE4\x8D\x1B\x9A\xAB\x9E\x0D\x0C\xF2\x0A\x33\x39\x22\x39\x0A\x97\x2E\xF3\x53\x77\xB9\x44\x45\xFD\x84\xCB\x36\x20\x81\x59\x2D\x9A\x6F\x6D\x48\x48\x61\xCA\x4C\xDF\x53\xD1\xAF\x52\xBC\x44\x9F\xAB\x2F\x6B\x83\x72\xEF\x75\x80\xDA\x06\x33\x1B\x5D\xC8\xDA\x63\xC6\x4D\xCD\xAC\x66\x31\xCD\xD1\xDE\x3E\x87\x10\x36\xE1\xB9\xA4\x7A\xEF\x60\x50\xB2\xCB\xCA\xA6\x56\xE0\x37\xAF\xAB\x34\x13\x39\x25\xE8\x39\x66\xE4\x98\x7A\xAA\x12\x98\x9C\x59\x66\x86\x3E\xAD\xF1\xB0\xCA\x3E\x06\x0F\x7B\xF0\x11\x4B\x37\xA0\x44\x6D\x7B\xCB\xA8\x8C\x71\xF4\xD5\xB5\x91\x36\xCC\xF0\x15\xC6\x2B\xDE\x51\x17\xB1\x97\x4C\x50\x3D\xB1\x95\x59\x7C\x05\x7D\x2D\x21\xD5\x00\xBF\x01\x67\xA2\x5E\x7B\xA6\x5C\xF2\xF7\x22\xF1\x90\x0D\x93\xDB\xAA\x44\x51\x66\xCC\x7D\x76\x03\xEB\x6A\xA8\x2A\x38\x19\x97\x76\x0D\x6B\x8A\x61\xF9\xBC\xF6\xEE\x76\xFD\x70\x2B\xDD\x29\x3C\xF8\x0A\x1E\x5B\x42\x1C\x8B\x56\x2F\x55\x1B\x1C\xA1\x2E\xB5\xC7\x16\xE6\xF8\xAA\x3C\x92\x8E\x69\xB6\x01\xC1\xB5\x86\x9D\x89\x0F\x0B\x38\x94\x54\xE8\xEA\xDC\x9E\x3D\x25\xBC\x53\x26\xED\xD5\xAB\x39\xAA\xC5\x40\x4C\x54\xAB\xB2\xB4\xD9\xD9\xF8\xD7\x72\xDB\x1C\xBC\x6D\xBD\x65\x5F\xEF\x88\x35\x2A\x66\x2F\xEE\xF6\xB3\x65\xF0\x33\x8D\x7C\x98\x41\x69\x46\x0F\x43\x1C\x69\xFA\x9B\xB5\xD0\x61\x6A\xCD\xCA\x4B\xD9\x4C\x90\x46\xAB\x15\x59\xA1\x47\x54\x29\x2E\x83\x28\x5F\x1C\xC2\xA2\xAB\x72\x17\x00\x06\x8E\x45\xEC\x8B\xE2\x33\x3D\x7F\xDA\x19\x44\xE4\x62\x72\xC3\xDF\x22\xC6\xF2\x56\xD4\xDD\x5F\x95\x72\xED\x6D\x5F\xF7\x48\x03\x5B\xFD\xC5\x2A\xA0\xF6\x73\x23\x84\x10\x1B\x01\xE7\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xE3\x71\xE0\x9E\xD8\xA7\x42\xD9\xDB\x71\x91\x6B\x94\x93\xEB\xC3\xA3\xD1\x14\xA3\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x47\xFA\xDD\x0A\xB0\x11\x91\x38\xAD\x4D\x5D\xF7\xE5\x0E\x97\x54\x19\x82\x48\x87\x54\x8C\xAA\x64\x99\xD8\x5A\xFE\x88\x01\xC5\x58\xA5\x99\xB1\x23\x54\x23\xB7\x6A\x1D\x20\x57\xE5\x01\x62\x41\x17\xD3\x09\xDB\x75\xCB\x6E\x54\x90\x75\xFE\x1A\x9F\x81\x0A\xC2\xDD\xD7\xF7\x09\xD0\x5B\x72\x15\xE4\x1E\x09\x6A\x3D\x33\xF3\x21\x9A\xE6\x15\x7E\xAD\x51\xD5\x0D\x10\xED\x7D\x42\xC0\x8F\xEE\xC0\x9A\x08\xD5\x41\xD6\x5C\x0E\x21\x69\x6E\x80\x61\x0E\x15\xC0\xB8\xCF\xC5\x49\x12\x52\xCC\xBE\x3A\xCC\xD4\x2E\x38\x05\xDE\x35\xFD\x1F\x6F\xB8\x80\x68\x98\x3D\x4D\xA0\xCA\x40\x65\xD2\x73\x7C\xF5\x8B\xD9\x0A\x95\x3F\xD8\x3F\x23\x6D\x1A\xD1\x2A\x24\x19\xD9\x85\xB3\x17\xEF\x78\x6E\xA9\x58\xD1\x23\xD3\xC7\x13\xED\x72\x25\x7F\x5D\xB1\x73\x70\xD0\x7F\x06\x97\x09\x84\x29\x80\x61\x1D\xFA\x5E\xFF\x73\xAC\xA0\xE3\x89\xB8\x1C\x71\x15\xC6\xDE\x31\x7F\x12\xDC\xE1\x6D\x9B\xAF\xE7\xE8\x9F\x75\x78\x4C\xAB\x46\x3B\x9A\xCE\xBF\x05\x18\x5D\x4D\x15\x3C\x16\x9A\x19\x50\x04\x9A\xB2\x9A\x6F\x65\x8B\x52\x5F\x3C\x58\x04\x28\x25\xC0\x66\x61\x31\x7E\xB9\xE0\x75\xB9\x1A\xA8\x81\xD6\x72\x17\xB3\xC5\x03\x31\x35\x11\x78\x78\xA2\xE0\xE9\x30\x8C\x7F\x80\xDF\x58\xDF\x3C\xBA\x27\x96\xE2\x80\x34\x6D\xE3\x98\xD3\x64\x27\xAC\x48\x7E\x28\x77\x5C\xC6\x25\x61\x25\xF8\x85\x0C\x65\xFA\xC4\x32\x2F\xA5\x98\x05\xE4\xF8\x0B\x67\x16\x16\xC6\x82\xB8\x32\x19\xF9\xF9\xB9\x79\xDC\x1F\xCD\xEB\xAF\xAB\x0E\xDD\x1B\xDB\x45\xE4\x7A\xE7\x02\xE2\x95\x5D\xFC\x69\xF0\x53\x69\x61\x95\x75\x79\x0B\x5E\x55\xE6\x38\x1C\x94\xA9\x59\x33\x9E\xC8\x71\x74\x79\x7F\x51\x89\xB6\xC8\x6A\xB8\x30\xC8\x6A\x38\xC3\x6E\x9E\xE1\x37\x16\xEA\x05\x62\x4C\x5B\x12\x47\xED\xA7\xB4\xB3\x58\x56\xC7\x49\xF3\x7F\x12\x68\x09\x31\x71\xF0\x6D\xF8\x4E\x47\xFB\xD6\x85\xEE\xC5\x58\x40\x19\xA4\x1D\xA7\xF9\x4B\x43\x37\xDC\x68\x5A\x4F\xCF\xEB\xC2\x64\x74\xDE\xB4\x15\xD9\xF4\x54\x54\x1A\x2F\x1C\xD7\x97\x71\x54\x90\x8E\xD9\x20\x9D\x53\x2B\x7F\xAB\x8F\xE2\xEA\x30\xBC\x50\x37\xEF\xF1\x47\xB5\x7D\x7C\x2C\x04\xEC\x68\x9D\xB4\x49\x44\x10\xF4\x72\x4B\x1C\x64\xE7\xFC\xE6\x6B\x90\xDD\x69\x7D\x69\xFD\x00\x56\xA5\xB7\xAC\xB6\xAD\xB7\xCA\x3E\x01\xEF\x9C", ["CN=Entrust Root Certification Authority - G2,OU=(c) 2009 Entrust\, Inc. - for authorized use only,OU=See www.entrust.net/legal-terms,O=Entrust\, Inc.,C=US"] = "\x30\x82\x04\x3E\x30\x82\x03\x26\xA0\x03\x02\x01\x02\x02\x04\x4A\x53\x8C\x28\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x81\xBE\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x16\x30\x14\x06\x03\x55\x04\x0A\x13\x0D\x45\x6E\x74\x72\x75\x73\x74\x2C\x20\x49\x6E\x63\x2E\x31\x28\x30\x26\x06\x03\x55\x04\x0B\x13\x1F\x53\x65\x65\x20\x77\x77\x77\x2E\x65\x6E\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x6C\x65\x67\x61\x6C\x2D\x74\x65\x72\x6D\x73\x31\x39\x30\x37\x06\x03\x55\x04\x0B\x13\x30\x28\x63\x29\x20\x32\x30\x30\x39\x20\x45\x6E\x74\x72\x75\x73\x74\x2C\x20\x49\x6E\x63\x2E\x20\x2D\x20\x66\x6F\x72\x20\x61\x75\x74\x68\x6F\x72\x69\x7A\x65\x64\x20\x75\x73\x65\x20\x6F\x6E\x6C\x79\x31\x32\x30\x30\x06\x03\x55\x04\x03\x13\x29\x45\x6E\x74\x72\x75\x73\x74\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x20\x2D\x20\x47\x32\x30\x1E\x17\x0D\x30\x39\x30\x37\x30\x37\x31\x37\x32\x35\x35\x34\x5A\x17\x0D\x33\x30\x31\x32\x30\x37\x31\x37\x35\x35\x35\x34\x5A\x30\x81\xBE\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x16\x30\x14\x06\x03\x55\x04\x0A\x13\x0D\x45\x6E\x74\x72\x75\x73\x74\x2C\x20\x49\x6E\x63\x2E\x31\x28\x30\x26\x06\x03\x55\x04\x0B\x13\x1F\x53\x65\x65\x20\x77\x77\x77\x2E\x65\x6E\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x6C\x65\x67\x61\x6C\x2D\x74\x65\x72\x6D\x73\x31\x39\x30\x37\x06\x03\x55\x04\x0B\x13\x30\x28\x63\x29\x20\x32\x30\x30\x39\x20\x45\x6E\x74\x72\x75\x73\x74\x2C\x20\x49\x6E\x63\x2E\x20\x2D\x20\x66\x6F\x72\x20\x61\x75\x74\x68\x6F\x72\x69\x7A\x65\x64\x20\x75\x73\x65\x20\x6F\x6E\x6C\x79\x31\x32\x30\x30\x06\x03\x55\x04\x03\x13\x29\x45\x6E\x74\x72\x75\x73\x74\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x20\x2D\x20\x47\x32\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xBA\x84\xB6\x72\xDB\x9E\x0C\x6B\xE2\x99\xE9\x30\x01\xA7\x76\xEA\x32\xB8\x95\x41\x1A\xC9\xDA\x61\x4E\x58\x72\xCF\xFE\xF6\x82\x79\xBF\x73\x61\x06\x0A\xA5\x27\xD8\xB3\x5F\xD3\x45\x4E\x1C\x72\xD6\x4E\x32\xF2\x72\x8A\x0F\xF7\x83\x19\xD0\x6A\x80\x80\x00\x45\x1E\xB0\xC7\xE7\x9A\xBF\x12\x57\x27\x1C\xA3\x68\x2F\x0A\x87\xBD\x6A\x6B\x0E\x5E\x65\xF3\x1C\x77\xD5\xD4\x85\x8D\x70\x21\xB4\xB3\x32\xE7\x8B\xA2\xD5\x86\x39\x02\xB1\xB8\xD2\x47\xCE\xE4\xC9\x49\xC4\x3B\xA7\xDE\xFB\x54\x7D\x57\xBE\xF0\xE8\x6E\xC2\x79\xB2\x3A\x0B\x55\xE2\x50\x98\x16\x32\x13\x5C\x2F\x78\x56\xC1\xC2\x94\xB3\xF2\x5A\xE4\x27\x9A\x9F\x24\xD7\xC6\xEC\xD0\x9B\x25\x82\xE3\xCC\xC2\xC4\x45\xC5\x8C\x97\x7A\x06\x6B\x2A\x11\x9F\xA9\x0A\x6E\x48\x3B\x6F\xDB\xD4\x11\x19\x42\xF7\x8F\x07\xBF\xF5\x53\x5F\x9C\x3E\xF4\x17\x2C\xE6\x69\xAC\x4E\x32\x4C\x62\x77\xEA\xB7\xE8\xE5\xBB\x34\xBC\x19\x8B\xAE\x9C\x51\xE7\xB7\x7E\xB5\x53\xB1\x33\x22\xE5\x6D\xCF\x70\x3C\x1A\xFA\xE2\x9B\x67\xB6\x83\xF4\x8D\xA5\xAF\x62\x4C\x4D\xE0\x58\xAC\x64\x34\x12\x03\xF8\xB6\x8D\x94\x63\x24\xA4\x71\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x6A\x72\x26\x7A\xD0\x1E\xEF\x7D\xE7\x3B\x69\x51\xD4\x6C\x8D\x9F\x90\x12\x66\xAB\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x79\x9F\x1D\x96\xC6\xB6\x79\x3F\x22\x8D\x87\xD3\x87\x03\x04\x60\x6A\x6B\x9A\x2E\x59\x89\x73\x11\xAC\x43\xD1\xF5\x13\xFF\x8D\x39\x2B\xC0\xF2\xBD\x4F\x70\x8C\xA9\x2F\xEA\x17\xC4\x0B\x54\x9E\xD4\x1B\x96\x98\x33\x3C\xA8\xAD\x62\xA2\x00\x76\xAB\x59\x69\x6E\x06\x1D\x7E\xC4\xB9\x44\x8D\x98\xAF\x12\xD4\x61\xDB\x0A\x19\x46\x47\xF3\xEB\xF7\x63\xC1\x40\x05\x40\xA5\xD2\xB7\xF4\xB5\x9A\x36\xBF\xA9\x88\x76\x88\x04\x55\x04\x2B\x9C\x87\x7F\x1A\x37\x3C\x7E\x2D\xA5\x1A\xD8\xD4\x89\x5E\xCA\xBD\xAC\x3D\x6C\xD8\x6D\xAF\xD5\xF3\x76\x0F\xCD\x3B\x88\x38\x22\x9D\x6C\x93\x9A\xC4\x3D\xBF\x82\x1B\x65\x3F\xA6\x0F\x5D\xAA\xFC\xE5\xB2\x15\xCA\xB5\xAD\xC6\xBC\x3D\xD0\x84\xE8\xEA\x06\x72\xB0\x4D\x39\x32\x78\xBF\x3E\x11\x9C\x0B\xA4\x9D\x9A\x21\xF3\xF0\x9B\x0B\x30\x78\xDB\xC1\xDC\x87\x43\xFE\xBC\x63\x9A\xCA\xC5\xC2\x1C\xC9\xC7\x8D\xFF\x3B\x12\x58\x08\xE6\xB6\x3D\xEC\x7A\x2C\x4E\xFB\x83\x96\xCE\x0C\x3C\x69\x87\x54\x73\xA4\x73\xC2\x93\xFF\x51\x10\xAC\x15\x54\x01\xD8\xFC\x05\xB1\x89\xA1\x7F\x74\x83\x9A\x49\xD7\xDC\x4E\x7B\x8A\x48\x6F\x8B\x45\xF6", @@ -146,4 +142,12 @@ redef root_certs += { ["CN=Telia Root CA v2,O=Telia Finland Oyj,C=FI"] = "\x30\x82\x05\x74\x30\x82\x03\x5C\xA0\x03\x02\x01\x02\x02\x0F\x01\x67\x5F\x27\xD6\xFE\x7A\xE3\xE4\xAC\xBE\x09\x5B\x05\x9E\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x44\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x49\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x0C\x11\x54\x65\x6C\x69\x61\x20\x46\x69\x6E\x6C\x61\x6E\x64\x20\x4F\x79\x6A\x31\x19\x30\x17\x06\x03\x55\x04\x03\x0C\x10\x54\x65\x6C\x69\x61\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x76\x32\x30\x1E\x17\x0D\x31\x38\x31\x31\x32\x39\x31\x31\x35\x35\x35\x34\x5A\x17\x0D\x34\x33\x31\x31\x32\x39\x31\x31\x35\x35\x35\x34\x5A\x30\x44\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x49\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x0C\x11\x54\x65\x6C\x69\x61\x20\x46\x69\x6E\x6C\x61\x6E\x64\x20\x4F\x79\x6A\x31\x19\x30\x17\x06\x03\x55\x04\x03\x0C\x10\x54\x65\x6C\x69\x61\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x76\x32\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xB2\xD0\x3F\x07\xBC\xE2\x7B\xD0\x6B\x99\xF8\xE2\x77\x69\xE7\xCE\x9D\xA4\x03\xBC\x82\x6D\xA1\xFE\x81\x65\x1F\x4C\x27\xAC\x8E\x00\xBA\x16\x7B\xEB\x30\x6A\x00\xC0\xB3\x74\x68\x7E\xB2\xAF\xC7\xD5\x62\xB3\x7A\x3F\x50\xCA\x8C\x36\x44\x24\x63\xD2\x36\xE9\x0C\x85\xF6\x43\x76\xD5\x4C\xA1\x60\x72\x67\xE2\x28\x33\xA5\xCB\x31\xB8\x3A\x22\x23\x34\xB8\x7D\xBD\x56\x22\x40\x9D\xEA\xF4\x7B\x03\xAD\x68\xFC\xB2\x81\x4F\x98\xD0\x74\xEA\x8D\xE5\x7D\xCD\x63\xC3\xA3\xF6\xDE\x92\xC2\x58\x19\xE0\x96\xBB\xC5\xC4\xA9\x3D\xA5\x74\x96\xFE\xAF\xF9\x89\xAA\xBD\x95\x17\x54\xD8\x78\x44\xF1\x0C\x77\x15\x92\xE0\x98\x42\xA7\xA4\xD6\xAA\x20\x92\xCD\xC1\xA0\xB3\x96\xB2\x3A\x84\x42\x8D\x7D\xD5\x95\xE4\xD6\xDB\xE9\x62\xC4\x58\xB3\x79\xC5\x8C\xD3\x35\x33\x83\x9F\x75\xA1\x52\x27\x61\x38\xF1\x59\x3D\x8E\x50\xE0\xBD\x79\x3C\xE7\x6C\x96\xFE\x5E\xD9\x02\x65\xB4\x8E\x5C\xD0\x11\x34\xDF\x5D\xBF\x52\xA7\x81\x00\xC3\x7F\x99\x45\x99\x15\xD5\x17\xC8\x0A\x53\xEC\x63\xF3\x99\x7D\xCC\x69\x12\x86\xC2\x17\xF0\x01\x9E\xBF\x84\xBC\xD1\x52\xCB\x1B\x92\x66\xCE\xA4\x53\xE5\xA1\xBF\xC4\xDB\x09\xD6\xE6\x89\x56\x2B\xC8\xE3\x7C\xDE\xE3\xFF\x89\xE5\x35\x6E\x28\xE8\x6C\x0B\x23\x51\xA9\x25\x05\xEB\x48\xF8\xDD\xB1\xCA\xFA\x6C\x08\x51\xEF\xB7\x18\x6C\x44\xCA\x26\xE1\x73\xC6\x89\x06\x81\xE5\x8A\xAC\xB0\xE2\x29\xC6\xB9\x24\xB3\x6B\x44\x11\xF4\xA5\x43\xC2\x4C\x43\xE5\x70\x36\x8C\xB6\x33\x57\x7A\x95\x2E\x82\xA0\xF4\x5C\x10\xB3\x61\x83\xF6\x02\x05\x86\x2E\x7C\x2D\x6C\xDC\x03\x46\x6E\x35\x93\xD5\x7A\x95\x2F\xDE\x20\xD8\x5B\x7E\x94\x90\x04\x6A\xBA\x59\x3D\x04\x05\x75\x9D\x37\xA2\x0E\x2E\x3D\xEB\xC1\xA4\x52\x83\xFE\xD0\x6B\xD4\x66\x8E\xDC\xC6\xE9\x12\x4E\x1D\x2A\x57\xAA\x10\xBC\x7C\x5E\x82\x7D\xA6\xA6\xC9\xF2\x2D\xB9\xF5\x17\x27\xAD\xD1\x0E\x89\x54\x2B\x95\xFA\xC0\xAD\x1D\x98\x14\x78\x33\x42\x86\x0A\xA9\x73\xB5\xFB\x74\x0D\xB7\x1B\x30\x19\xC4\x5A\x0E\x1C\x27\xB7\xDA\x18\xD0\xFF\x8A\xC8\x05\xBA\xF1\xAA\x1C\xA2\x37\xB7\xE6\x48\xA4\x46\x2C\x94\xEA\xA8\x76\x62\x47\x8B\x10\x53\x07\x48\x57\x6C\xE2\x92\x4D\xB6\xAE\x05\xCB\xDC\xC1\x4A\x5E\x8F\xAC\x3D\x19\x4E\xC2\xED\x60\x75\x2B\xDB\xC1\xCA\x42\xD5\x02\x03\x01\x00\x01\xA3\x63\x30\x61\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\x72\xAC\xE4\x33\x79\xAA\x45\x87\xF6\xFD\xAC\x1D\x9E\xD6\xC7\x2F\x86\xD8\x24\x39\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x72\xAC\xE4\x33\x79\xAA\x45\x87\xF6\xFD\xAC\x1D\x9E\xD6\xC7\x2F\x86\xD8\x24\x39\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\xA0\x3B\x59\xA7\x09\x94\x3E\x36\x84\xD2\x7E\x2F\x39\xA5\x96\x97\xFA\x11\xAD\xFC\x67\xF3\x71\x09\xF2\xB2\x89\x84\x67\x44\xAF\xB9\xEF\xED\x96\xEC\x9C\x64\xDB\x32\x30\x6F\x67\x9A\xAC\x7E\x5F\xB2\xAB\x01\x36\x7E\x81\xFA\xE4\x84\x5E\xD2\xAC\x36\xE0\x6B\x62\xC5\x7D\x4B\x0E\x82\x6D\xD2\x76\x62\xD1\xFE\x97\xF8\x9F\x30\x7C\x18\xF9\xB4\x52\x77\x82\x1D\x76\xDB\xD3\x1D\xA9\xF0\xC1\x9A\x00\xBD\x6D\x75\xD8\x7D\xE7\xFA\xC7\x38\xA3\x9C\x70\xE8\x46\x79\x03\xAF\x2E\x74\xDB\x75\xF8\x6E\x53\x0C\x03\xC8\x99\x1A\x89\x35\x19\x3C\xD3\xC9\x54\x7C\xA8\xF0\x2C\xE6\x6E\x07\x79\x6F\x6A\xE1\xE6\xEA\x91\x82\x69\x0A\x1D\xC3\x7E\x59\xA2\x9E\x6B\x46\x15\x98\x5B\xD3\xAF\x46\x1D\x62\xC8\xCE\x80\x52\x49\x11\x3F\xC9\x04\x12\xC3\x13\x7C\x3F\x3B\x8A\x96\xDB\x3C\xA0\x1E\x0A\xB4\x8B\x54\xB2\x24\x67\x0D\xEF\x82\xCB\xBE\x3C\x7D\xD1\xE2\x7F\xAE\x16\xD6\x56\x58\xB9\xDA\x20\xB1\x83\x15\xA1\xEF\x8A\x4D\x32\x6F\x41\x2F\x13\x52\x82\x94\xD7\x1A\xC1\x78\xA2\x51\xDD\x2B\x70\x6D\xB7\x1A\xF9\xF7\xB0\xE0\x67\x97\x56\xDB\x7C\x61\x53\x09\x03\x28\x02\x40\xC7\xB3\xD8\xFD\x9C\x70\x6A\xC6\x28\xC3\x85\xE9\xE2\xED\x1A\x93\xA0\xDE\x4B\x98\xA2\x84\x3E\x05\x77\x01\x96\x3D\xFB\xB4\x20\x0F\x9C\x72\x02\x7A\x12\x2F\xD5\xA3\xBA\x51\x78\xAF\x2A\x2B\x44\x65\x4E\xB5\xFD\x0A\xE8\xC1\xCD\x79\x87\x61\x2B\xDE\x80\x57\x45\xBF\x67\xF1\x9B\x91\x5E\xA5\xA4\xEC\x59\x48\x10\x0D\x38\xC7\xB0\xFA\xC3\x44\x6D\x04\xF5\x78\x50\x1C\x92\x96\x5B\xDA\xF5\xB8\x2E\xBA\x5B\xCF\xE5\xF0\x6A\x9D\x4B\x2F\x58\x73\x2D\x4F\x2D\xC4\x1C\x3E\xF4\xB3\x3F\xAB\x15\x0E\x3B\x19\x41\x8A\xA4\xC1\x57\x12\x66\x71\x4C\xFA\x53\xE3\x57\xEB\x62\x95\x09\x9E\x54\xDD\xD1\xC2\x3C\x57\x3C\xBD\x38\xAD\x98\x64\xB7\xB8\x03\x9A\x53\x56\x60\x5D\xB3\xD8\x42\x1B\x5C\x4B\x12\x8A\x1C\xEB\xEB\x7D\xC6\x7A\x69\xC7\x27\x7F\xA4\xF8\x8B\xF2\xE4\x94\x66\x87\x4B\xE9\x94\x07\x09\x12\x79\x8A\xB2\xEB\x74\x04\xDC\xCE\xF4\x44\x59\xE0\x16\xCA\xC5\x2C\x58\xD7\x3C\x7B\xCF\x62\x86\x6A\x50\x7D\x35\x36\x66\xA7\xFB\x37\xE7\x28\xC7\xD8\xD0\xAD\xA5\x69\x94\x8F\xE8\xC1\xDF\x24\xF8\x1B\x07\x31\x87\x81\xD8\x5D\xF6\xE8\x28\xD8\x4A\x52\x80\xAC\x13\xEE\x50\x14\x1E\x98\xC7", ["CN=D-TRUST BR Root CA 1 2020,O=D-Trust GmbH,C=DE"] = "\x30\x82\x02\xDB\x30\x82\x02\x60\xA0\x03\x02\x01\x02\x02\x10\x7C\xC9\x8F\x2B\x84\xD7\xDF\xEA\x0F\xC9\x65\x9A\xD3\x4B\x4D\x96\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x15\x30\x13\x06\x03\x55\x04\x0A\x13\x0C\x44\x2D\x54\x72\x75\x73\x74\x20\x47\x6D\x62\x48\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x44\x2D\x54\x52\x55\x53\x54\x20\x42\x52\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x20\x32\x30\x32\x30\x30\x1E\x17\x0D\x32\x30\x30\x32\x31\x31\x30\x39\x34\x35\x30\x30\x5A\x17\x0D\x33\x35\x30\x32\x31\x31\x30\x39\x34\x34\x35\x39\x5A\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x15\x30\x13\x06\x03\x55\x04\x0A\x13\x0C\x44\x2D\x54\x72\x75\x73\x74\x20\x47\x6D\x62\x48\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x44\x2D\x54\x52\x55\x53\x54\x20\x42\x52\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x20\x32\x30\x32\x30\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xC6\xCB\xC7\x28\xD1\xFB\x84\xF5\x9A\xEF\x42\x14\x20\xE1\x43\x6B\x6E\x75\xAD\xFC\x2B\x03\x84\xD4\x76\x93\x25\xD7\x59\x3B\x41\x65\x6B\x1E\xE6\x34\x2A\xBB\x74\xF6\x12\xCE\xE8\x6D\xE7\xAB\xE4\x3C\x4E\x3F\x44\x08\x8B\xCD\x16\x71\xCB\xBF\x92\x99\xF4\xA4\xD7\x3C\x50\x54\x52\x90\x85\x83\x78\x94\x67\x67\xA3\x1C\x09\x19\x3D\x75\x34\x85\xDE\xED\x60\x7D\xC7\x0C\xB4\x41\x52\xB9\x6E\xE5\xEE\x42\xA3\x82\x01\x0D\x30\x82\x01\x09\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x73\x91\x10\xAB\xFF\x55\xB3\x5A\x7C\x09\x25\xD5\xB2\xBA\x08\xA0\x6B\xAB\x1F\x6D\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x81\xC6\x06\x03\x55\x1D\x1F\x04\x81\xBE\x30\x81\xBB\x30\x3E\xA0\x3C\xA0\x3A\x86\x38\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x64\x2D\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x63\x72\x6C\x2F\x64\x2D\x74\x72\x75\x73\x74\x5F\x62\x72\x5F\x72\x6F\x6F\x74\x5F\x63\x61\x5F\x31\x5F\x32\x30\x32\x30\x2E\x63\x72\x6C\x30\x79\xA0\x77\xA0\x75\x86\x73\x6C\x64\x61\x70\x3A\x2F\x2F\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x2E\x64\x2D\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x43\x4E\x3D\x44\x2D\x54\x52\x55\x53\x54\x25\x32\x30\x42\x52\x25\x32\x30\x52\x6F\x6F\x74\x25\x32\x30\x43\x41\x25\x32\x30\x31\x25\x32\x30\x32\x30\x32\x30\x2C\x4F\x3D\x44\x2D\x54\x72\x75\x73\x74\x25\x32\x30\x47\x6D\x62\x48\x2C\x43\x3D\x44\x45\x3F\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x72\x65\x76\x6F\x63\x61\x74\x69\x6F\x6E\x6C\x69\x73\x74\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x69\x00\x30\x66\x02\x31\x00\x94\x90\x2D\x13\xFA\xE1\x63\xF8\x61\x63\xE8\xAD\x85\x78\x54\x91\x9C\xB8\x93\x38\x3E\x1A\x41\xDA\x40\x16\x53\x42\x08\xCA\x2F\x8E\xF1\x3E\x81\x56\xC0\xAA\xD8\xED\x18\xC4\xB0\xAE\xF4\x3E\xFA\x26\x02\x31\x00\xF3\x28\xE2\xC6\xDB\x2B\x99\xFB\xB7\x51\xB8\x24\xA3\xA4\x94\x7A\x1A\x3F\xE6\x36\xE2\x03\x57\x33\x8A\x30\xCB\x82\xC7\xD6\x14\x11\xD5\x75\x63\x5B\x14\x95\x9C\x1F\x01\xCF\xD8\xD5\x72\xA7\x0F\x3B", ["CN=D-TRUST EV Root CA 1 2020,O=D-Trust GmbH,C=DE"] = "\x30\x82\x02\xDB\x30\x82\x02\x60\xA0\x03\x02\x01\x02\x02\x10\x5F\x02\x41\xD7\x7A\x87\x7C\x4C\x03\xA3\xAC\x96\x8D\xFB\xFF\xD0\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x15\x30\x13\x06\x03\x55\x04\x0A\x13\x0C\x44\x2D\x54\x72\x75\x73\x74\x20\x47\x6D\x62\x48\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x44\x2D\x54\x52\x55\x53\x54\x20\x45\x56\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x20\x32\x30\x32\x30\x30\x1E\x17\x0D\x32\x30\x30\x32\x31\x31\x31\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x35\x30\x32\x31\x31\x30\x39\x35\x39\x35\x39\x5A\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x15\x30\x13\x06\x03\x55\x04\x0A\x13\x0C\x44\x2D\x54\x72\x75\x73\x74\x20\x47\x6D\x62\x48\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x44\x2D\x54\x52\x55\x53\x54\x20\x45\x56\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x20\x32\x30\x32\x30\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xF1\x0B\xDD\x86\x43\x20\x19\xDF\x97\x85\xE8\x22\x4A\x9B\xCF\x9D\x98\xBF\xB4\x05\x26\xC9\xCB\xE3\xA6\xD2\x8F\xC5\x9E\x78\x7B\x31\x89\xA9\x89\xAD\x27\x3C\x65\x10\x82\xFC\xDF\xC3\x9D\x4E\xF0\x33\x23\xC4\xD2\x32\xF5\x1C\xB0\xDF\x33\x17\x5D\xC5\xF0\xB1\x8A\xF9\xEF\xB9\xB7\x14\xCA\x29\x4A\xC2\x0F\xA9\x7F\x75\x65\x49\x2A\x30\x67\xF4\x64\xF7\xD6\x1A\x77\xDA\xC3\xC2\x97\x61\x42\x7B\x49\xAD\xA3\x82\x01\x0D\x30\x82\x01\x09\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x7F\x10\x01\x16\x37\x3A\xA4\x28\xE4\x50\xF8\xA4\xF7\xEC\x6B\x32\xB6\xFE\xE9\x8B\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x81\xC6\x06\x03\x55\x1D\x1F\x04\x81\xBE\x30\x81\xBB\x30\x3E\xA0\x3C\xA0\x3A\x86\x38\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x64\x2D\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x63\x72\x6C\x2F\x64\x2D\x74\x72\x75\x73\x74\x5F\x65\x76\x5F\x72\x6F\x6F\x74\x5F\x63\x61\x5F\x31\x5F\x32\x30\x32\x30\x2E\x63\x72\x6C\x30\x79\xA0\x77\xA0\x75\x86\x73\x6C\x64\x61\x70\x3A\x2F\x2F\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x2E\x64\x2D\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x43\x4E\x3D\x44\x2D\x54\x52\x55\x53\x54\x25\x32\x30\x45\x56\x25\x32\x30\x52\x6F\x6F\x74\x25\x32\x30\x43\x41\x25\x32\x30\x31\x25\x32\x30\x32\x30\x32\x30\x2C\x4F\x3D\x44\x2D\x54\x72\x75\x73\x74\x25\x32\x30\x47\x6D\x62\x48\x2C\x43\x3D\x44\x45\x3F\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x72\x65\x76\x6F\x63\x61\x74\x69\x6F\x6E\x6C\x69\x73\x74\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x69\x00\x30\x66\x02\x31\x00\xCA\x3C\xC6\x2A\x75\xC2\x5E\x75\x62\x39\x36\x00\x60\x5A\x8B\xC1\x93\x99\xCC\xD9\xDB\x41\x3B\x3B\x87\x99\x17\x3B\xD5\xCC\x4F\xCA\x22\xF7\xA0\x80\xCB\xF9\xB4\xB1\x1B\x56\xF5\x72\xD2\xFC\x19\xD1\x02\x31\x00\x91\xF7\x30\x93\x3F\x10\x46\x2B\x71\xA4\xD0\x3B\x44\x9B\xC0\x29\x02\x05\xB2\x41\x77\x51\xF3\x79\x5A\x9E\x8E\x14\xA0\x4E\x42\xD2\x5B\x81\xF3\x34\x6A\x03\xE7\x22\x38\x50\x5B\xED\x19\x4F\x43\x16", + ["CN=DigiCert TLS ECC P384 Root G5,O=DigiCert\, Inc.,C=US"] = "\x30\x82\x02\x19\x30\x82\x01\x9F\xA0\x03\x02\x01\x02\x02\x10\x09\xE0\x93\x65\xAC\xF7\xD9\xC8\xB9\x3E\x1C\x0B\x04\x2A\x2E\xF3\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x0A\x13\x0E\x44\x69\x67\x69\x43\x65\x72\x74\x2C\x20\x49\x6E\x63\x2E\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x44\x69\x67\x69\x43\x65\x72\x74\x20\x54\x4C\x53\x20\x45\x43\x43\x20\x50\x33\x38\x34\x20\x52\x6F\x6F\x74\x20\x47\x35\x30\x1E\x17\x0D\x32\x31\x30\x31\x31\x35\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x34\x36\x30\x31\x31\x34\x32\x33\x35\x39\x35\x39\x5A\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x0A\x13\x0E\x44\x69\x67\x69\x43\x65\x72\x74\x2C\x20\x49\x6E\x63\x2E\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x44\x69\x67\x69\x43\x65\x72\x74\x20\x54\x4C\x53\x20\x45\x43\x43\x20\x50\x33\x38\x34\x20\x52\x6F\x6F\x74\x20\x47\x35\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xC1\x44\xA1\xCF\x11\x97\x50\x9A\xDE\x23\x82\x35\x07\xCD\xD0\xCB\x18\x9D\xD2\xF1\x7F\x77\x35\x4F\x3B\xDD\x94\x72\x52\xED\xC2\x3B\xF8\xEC\xFA\x7B\x6B\x58\x20\xEC\x99\xAE\xC9\xFC\x68\xB3\x75\xB9\xDB\x09\xEC\xC8\x13\xF5\x4E\xC6\x0A\x1D\x66\x30\x4C\xBB\x1F\x47\x0A\x3C\x61\x10\x42\x29\x7C\xA5\x08\x0E\xE0\x22\xE9\xD3\x35\x68\xCE\x9B\x63\x9F\x84\xB5\x99\x4D\x58\xA0\x8E\xF5\x54\xE7\x95\xC9\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xC1\x51\x45\x50\x59\xAB\x3E\xE7\x2C\x5A\xFA\x20\x22\x12\x07\x80\x88\x7C\x11\x6A\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x31\x00\x89\x6A\x8D\x47\xE7\xEC\xFC\x6E\x55\x03\xD9\x67\x6C\x26\x4E\x83\xC6\xFD\xC9\xFB\x2B\x13\xBC\xB7\x7A\x8C\xB4\x65\xD2\x69\x69\x63\x13\x63\x3B\x26\x50\x2E\x01\xA1\x79\x06\x91\x9D\x48\xBF\xC2\xBE\x02\x30\x47\xC3\x15\x7B\xB1\xA0\x91\x99\x49\x93\xA8\x3C\x7C\xE8\x46\x06\x8B\x2C\xF2\x31\x00\x94\x9D\x62\xC8\x89\xBD\x19\x84\x14\xE9\xA5\xFB\x01\xB8\x0D\x76\x43\x8C\x2E\x53\xCB\x7C\xDF\x0C\x17\x96\x50", + ["CN=DigiCert TLS RSA4096 Root G5,O=DigiCert\, Inc.,C=US"] = "\x30\x82\x05\x66\x30\x82\x03\x4E\xA0\x03\x02\x01\x02\x02\x10\x08\xF9\xB4\x78\xA8\xFA\x7E\xDA\x6A\x33\x37\x89\xDE\x7C\xCF\x8A\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x30\x4D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x0A\x13\x0E\x44\x69\x67\x69\x43\x65\x72\x74\x2C\x20\x49\x6E\x63\x2E\x31\x25\x30\x23\x06\x03\x55\x04\x03\x13\x1C\x44\x69\x67\x69\x43\x65\x72\x74\x20\x54\x4C\x53\x20\x52\x53\x41\x34\x30\x39\x36\x20\x52\x6F\x6F\x74\x20\x47\x35\x30\x1E\x17\x0D\x32\x31\x30\x31\x31\x35\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x34\x36\x30\x31\x31\x34\x32\x33\x35\x39\x35\x39\x5A\x30\x4D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x0A\x13\x0E\x44\x69\x67\x69\x43\x65\x72\x74\x2C\x20\x49\x6E\x63\x2E\x31\x25\x30\x23\x06\x03\x55\x04\x03\x13\x1C\x44\x69\x67\x69\x43\x65\x72\x74\x20\x54\x4C\x53\x20\x52\x53\x41\x34\x30\x39\x36\x20\x52\x6F\x6F\x74\x20\x47\x35\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xB3\xD0\xF4\xC9\x79\x11\x9D\xFD\xFC\x66\x81\xE7\xCC\xD5\xE4\xBC\xEC\x81\x3E\x6A\x35\x8E\x2E\xB7\xE7\xDE\xAF\xF9\x07\x4D\xCF\x30\x9D\xEA\x09\x0B\x99\xBD\x6C\x57\xDA\x18\x4A\xB8\x78\xAC\x3A\x39\xA8\xA6\x48\xAC\x2E\x72\xE5\xBD\xEB\xF1\x1A\xCD\xE7\xA4\x03\xA9\x3F\x11\xB4\xD8\x2F\x89\x16\xFB\x94\x01\x3D\xBB\x2F\xF8\x13\x05\xA1\x78\x1C\x8E\x28\xE0\x45\xE0\x83\xF4\x59\x1B\x95\xB3\xAE\x7E\x03\x45\xE5\xBE\xC2\x42\xFE\xEE\xF2\x3C\xB6\x85\x13\x98\x32\x9D\x16\xA8\x29\xC2\x0B\x1C\x38\xDC\x9F\x31\x77\x5C\xBF\x27\xA3\xFC\x27\xAC\xB7\x2B\xBD\x74\x9B\x17\x2D\xF2\x81\xDA\x5D\xB0\xE1\x23\x17\x3E\x88\x4A\x12\x23\xD0\xEA\xCF\x9D\xDE\x03\x17\xB1\x42\x4A\xA0\x16\x4C\xA4\x6D\x93\xE9\x3F\x3A\xEE\x3A\x7C\x9D\x58\x9D\xF4\x4E\x8F\xFC\x3B\x23\xC8\x6D\xB8\xE2\x05\xDA\xCC\xEB\xEC\xC3\x31\xF4\xD7\xA7\x29\x54\x80\xCF\x44\x5B\x4C\x6F\x30\x9E\xF3\xCC\xDD\x1F\x94\x43\x9D\x4D\x7F\x70\x70\x0D\xD4\x3A\xD1\x37\xF0\x6C\x9D\x9B\xC0\x14\x93\x58\xEF\xCD\x41\x38\x75\xBC\x13\x03\x95\x7C\x7F\xE3\x5C\xE9\xD5\x0D\xD5\xE2\x7C\x10\x62\xAA\x6B\xF0\x3D\x76\xF3\x3F\xA3\xE8\xB0\xC1\xFD\xEF\xAA\x57\x4D\xAC\x86\xA7\x18\xB4\x29\xC1\x2C\x0E\xBF\x64\xBE\x29\x8C\xD8\x02\x2D\xCD\x5C\x2F\xF2\x7F\xEF\x15\xF4\x0C\x15\xAC\x0A\xB0\xF1\xD3\x0D\x4F\x6A\x4D\x77\x97\x01\xA0\xF1\x66\xB7\xB7\xCE\xEF\xCE\xEC\xEC\xA5\x75\xCA\xAC\xE3\xE1\x63\xF7\xB8\xA1\x04\xC8\xBC\x7B\x3F\x5D\x2D\x16\x22\x56\xED\x48\x49\xFE\xA7\x2F\x79\x30\x25\x9B\xBA\x6B\x2D\x3F\x9D\x3B\xC4\x17\xE7\x1D\x2E\xFB\xF2\xCF\xA6\xFC\xE3\x14\x2C\x96\x98\x21\x8C\xB4\x91\xE9\x19\x60\x83\xF2\x30\x2B\x06\x73\x50\xD5\x98\x3B\x06\xE9\xC7\x8A\x0C\x60\x8C\x28\xF8\x52\x9B\x6E\xE1\xF6\x4D\xBB\x06\x24\x9B\xD7\x2B\x26\x3F\xFD\x2A\x2F\x71\xF5\xD6\x24\xBE\x7F\x31\x9E\x0F\x6D\xE8\x8F\x4F\x4D\xA3\x3F\xFF\x35\xEA\xDF\x49\x5E\x41\x8F\x86\xF9\xF1\x77\x79\x4B\x1B\xB4\xA3\x5E\x2F\xFB\x46\x02\xD0\x66\x13\x5E\x5E\x85\x4F\xCE\xD8\x70\x88\x7B\xCE\x01\xB5\x96\x97\xD7\xCD\x7D\xFD\x82\xF8\xC2\x24\xC1\xCA\x01\x39\x4F\x8D\xA2\xC1\x14\x40\x1F\x9C\x66\xD5\x0C\x09\x46\xD6\xF2\xD0\xD1\x48\x76\x56\x3A\x43\xCB\xB6\x0A\x11\x39\xBA\x8C\x13\x6C\x06\xB5\x9E\xCF\xEB\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x51\x33\x1C\xED\x36\x40\xAF\x17\xD3\x25\xCD\x69\x68\xF2\xAF\x4E\x23\x3E\xB3\x41\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x03\x82\x02\x01\x00\x60\xA6\xAF\x5B\x5F\x57\xDA\x89\xDB\x4B\x50\xA9\xC4\x23\x35\x21\xFF\xD0\x61\x30\x84\x91\xB7\x3F\x10\xCF\x25\x8E\xC9\xBF\x46\x34\xD9\xC1\x21\x26\x1C\x70\x19\x72\x1E\xA3\xC9\x87\xFE\xA9\x43\x64\x96\x3A\xC8\x53\x04\x0A\xB6\x41\xBB\xC4\x47\x00\xD9\x9F\x18\x18\x3B\xB2\x0E\xF3\x34\xEA\x24\xF7\xDD\xAF\x20\x60\xAE\x92\x28\x5F\x36\xE7\x5D\xE4\xDE\xC7\x3C\xDB\x50\x39\xAD\xBB\x3D\x28\x4D\x96\x7C\x76\xC6\x5B\xF4\xC1\xDB\x14\xA5\xAB\x19\x62\x07\x18\x40\x5F\x97\x91\xDC\x9C\xC7\xAB\xB5\x51\x0D\xE6\x69\x53\x55\xCC\x39\x7D\xDA\xC5\x11\x55\x72\xC5\x3B\x8B\x89\xF8\x34\x2D\xA4\x17\xE5\x17\xE6\x99\x7D\x30\x88\x21\x37\xCD\x30\x17\x3D\xB8\xF2\xBC\xA8\x75\xA0\x43\xDC\x3E\x89\x4B\x90\xAE\x6D\x03\xE0\x1C\xA3\xA0\x96\x09\xBB\x7D\xA3\xB7\x2A\x10\x44\x4B\x46\x07\x34\x63\xED\x31\xB9\x04\xEE\xA3\x9B\x9A\xAE\xE6\x31\x78\xF4\xEA\x24\x61\x3B\xAB\x58\x64\xFF\xBB\x87\x27\x62\x25\x81\xDF\xDC\xA1\x2F\xF6\xED\xA7\xFF\x7A\x8F\x51\x2E\x30\xF8\xA4\x01\xD2\x85\x39\x5F\x01\x99\x96\x6F\x5A\x5B\x70\x19\x46\xFE\x86\x60\x3E\xAD\x80\x10\x09\xDD\x39\x25\x2F\x58\x7F\xBB\xD2\x74\xF0\xF7\x46\x1F\x46\x39\x4A\xD8\x53\xD0\xF3\x2E\x3B\x71\xA5\xD4\x6F\xFC\xF3\x67\xE4\x07\x8F\xDD\x26\x19\xE1\x8D\x5B\xFA\xA3\x93\x11\x9B\xE9\xC8\x3A\xC3\x55\x68\x9A\x92\xE1\x52\x76\x38\xE8\xE1\xBA\xBD\xFB\x4F\xD5\xEF\xB3\xE7\x48\x83\x31\xF0\x82\x21\xE3\xB6\xBE\xA7\xAB\x6F\xEF\x9F\xDF\x4C\xCF\x01\xB8\x62\x6A\x23\x3D\xE7\x09\x4D\x80\x1B\x7B\x30\xA4\xC3\xDD\x07\x7F\x34\xBE\xA4\x26\xB2\xF6\x41\xE8\x09\x1D\xE3\x20\x98\xAA\x37\x4F\xFF\xF7\xF1\xE2\x29\x70\x31\x47\x3F\x74\xD0\x14\x16\xFA\x21\x8A\x02\xD5\x8A\x09\x94\x77\x2E\xF2\x59\x28\x8B\x7C\x50\x92\x0A\x66\x78\x38\x83\x75\xC4\xB5\x5A\xA8\x11\xC6\xE5\xC1\x9D\x66\x55\xCF\x53\xC4\xAF\xD7\x75\x85\xA9\x42\x13\x56\xEC\x21\x77\x81\x93\x5A\x0C\xEA\x96\xD9\x49\xCA\xA1\x08\xF2\x97\x3B\x6D\x9B\x04\x18\x24\x44\x8E\x7C\x01\xF2\xDC\x25\xD8\x5E\x86\x9A\xB1\x39\xDB\xF5\x91\x32\x6A\xD1\xA6\x70\x8A\xA2\xF7\xDE\xA4\x45\x85\x26\xA8\x1E\x8C\x5D\x29\x5B\xC8\x4B\xD8\x9A\x6A\x03\x5E\x70\xF2\x85\x4F\x6C\x4B\x68\x2F\xCA\x54\xF6\x8C\xDA\x32\xFE\xC3\x6B\x83\x3F\x38\xC6\x7E", + ["CN=Certainly Root R1,O=Certainly,C=US"] = "\x30\x82\x05\x47\x30\x82\x03\x2F\xA0\x03\x02\x01\x02\x02\x11\x00\x8E\x0F\xF9\x4B\x90\x71\x68\x65\x33\x54\xF4\xD4\x44\x39\xB7\xE0\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x3D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x31\x1A\x30\x18\x06\x03\x55\x04\x03\x13\x11\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x20\x52\x6F\x6F\x74\x20\x52\x31\x30\x1E\x17\x0D\x32\x31\x30\x34\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x34\x36\x30\x34\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x30\x3D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x31\x1A\x30\x18\x06\x03\x55\x04\x03\x13\x11\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x20\x52\x6F\x6F\x74\x20\x52\x31\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xD0\x36\xD4\x1F\xEA\xDD\xAB\xE4\xD1\xB6\xE6\xFB\x22\xC0\xDD\x13\x0D\x6A\x7B\x22\x13\x1C\x97\x3C\x68\x63\x66\x32\x9C\x03\xB5\x8D\xA4\x81\x83\xDA\x78\x30\x11\xCF\xDC\xB2\x2B\xBE\x92\xBF\x8E\xE4\xC4\x13\xBE\xA4\x68\x4C\xDA\x02\x68\x16\x74\xBE\xB2\xDD\x04\xE4\x6B\x2A\xDD\x37\x1F\x60\x2C\xDB\xF5\xF7\xA1\x7C\x95\xB7\x0C\x70\x86\x2E\xF1\x3A\xEF\x52\xF7\xCC\xD3\x9B\xF9\x8B\xBE\x0E\xDF\x31\xB7\x9D\x68\x5C\x92\xA6\xF5\xE5\xF3\x0A\x34\xB5\xFF\x7B\xA2\xE4\x87\xA1\xC6\xAF\x17\x00\xEF\x03\x91\xED\xA9\x1C\x4E\x71\x3D\xD2\x8B\x6C\x89\xF4\x78\x86\xE6\x6A\x49\xA0\xCE\xB5\xD2\xB0\xAB\x9B\xF6\xF4\xD4\x2E\xE3\x72\xF9\x36\xC6\xEB\x15\xB7\x25\x8C\x3A\xFC\x25\x0D\xB3\x22\x73\x21\x74\xC8\x4A\x96\x61\x92\xF5\x2F\x0B\x18\xA5\xF4\xAD\xE2\xEE\x41\xBD\x01\x79\xFA\x96\x8C\x8D\x17\x02\x30\xB4\xF9\xAF\x78\x1A\x8C\xB4\x36\x10\x10\x07\x05\x70\xD0\xF4\x31\x90\x8A\x51\xC5\x86\x26\x79\xB2\x11\x88\x5E\xC5\xF0\x0A\x54\xCD\x49\xA6\xBF\x02\x9C\xD2\x44\xA7\xED\xE3\x78\xEF\x46\x5E\x6D\x71\xD1\x79\x70\x1C\x46\x5F\x51\xE9\xC9\x37\xDC\x5F\x7E\x69\x7B\x41\xDF\x34\x45\xE0\x3B\x84\xF4\xA1\x8A\x0A\x36\x9E\x37\xCC\x62\x52\xE1\x89\x0D\x28\xF9\x7A\x23\xB1\x0D\x3D\x3D\x9A\xFD\x9D\x81\xEF\x2C\x90\xC0\x7B\x44\x4E\xBB\x49\xE0\x0E\x4A\x56\x92\xBC\xCB\xB5\xDD\x79\x17\x89\x91\xDE\x61\x89\x74\x92\xA8\xE3\x32\x85\xBE\x4E\x85\xA4\x4B\x59\xCB\x2B\xC5\x78\x8E\x71\x54\xD0\x02\x37\x99\x8C\xE5\x49\xEA\xE0\x54\x72\xA4\x11\x06\x2F\x0B\x8C\xC1\x5B\xBE\xB5\xA1\xB0\x53\x6E\x9C\xB8\x60\x91\x1F\x59\x6B\xF9\x2D\xF4\x94\x0A\x97\xB5\xEC\xC5\x76\x03\x54\x1B\x65\x52\xBA\x4C\x92\x56\x51\x35\xA0\x40\xD8\x29\xDB\xAE\x52\x76\x3B\x2D\x30\x40\x9B\x8A\xD0\x42\x56\xB4\xB7\x88\x01\xA4\x87\x3B\x53\x96\xCD\xA3\x16\x8F\xF3\x66\xAA\x17\xB1\xC7\x60\xE0\xC1\x43\x05\x0C\xEE\x9B\x5B\x60\x6F\x06\x5C\x87\x5B\x27\xF9\x40\x11\x9E\x9C\x33\xC1\xB7\xE5\x35\x57\x05\x7F\x27\xCE\x17\x20\x8C\x1C\xFC\xF1\xFB\xDA\x31\x29\x49\xED\xF5\x0B\x84\xA7\x4F\xC1\xF6\x4E\xC2\x28\x9C\xFA\xEE\xE0\xAF\x07\xFB\x33\x11\x7A\x21\x4F\x0B\x21\x10\xB6\x40\x3A\xAB\x22\x3A\x04\x9C\x8B\x9B\x84\x86\x72\x9A\xD2\xA7\xA5\xC4\xB4\x75\x91\xA9\x2B\x23\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xE0\xAA\x3F\x25\x8D\x9F\x44\x5C\xC1\x3A\xE8\x2E\xAE\x77\x4C\x84\x3E\x67\x0C\xF4\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\xB9\x57\xAF\xB8\x12\xDA\x57\x83\x8F\x68\x0B\x33\x1D\x03\x53\x55\xF4\x95\x70\xE4\x2B\x3D\xB0\x39\xEB\xFA\x89\x62\xFD\xF7\xD6\x18\x04\x2F\x21\x34\xDD\xF1\x68\xF0\xD5\x96\x5A\xDE\xC2\x80\xA3\xC1\x8D\xC6\x6A\xF7\x59\x77\xAE\x15\x64\xCF\x5B\x79\x05\x77\x66\xEA\x8C\xD3\x6B\x0D\xDD\xF1\x59\x2C\xC1\x33\xA5\x30\x80\x15\x45\x07\x45\x1A\x31\x22\xB6\x92\x00\xAB\x99\x4D\x3A\x8F\x77\xAF\xA9\x22\xCA\x2F\x63\xCA\x15\xD6\xC7\xC6\xF0\x3D\x6C\xFC\x1C\x0D\x98\x10\x61\x9E\x11\xA2\x22\xD7\x0A\xF2\x91\x7A\x6B\x39\x0E\x2F\x30\xC3\x36\x49\x9F\xE0\xE9\x0F\x02\x44\x50\x37\x94\x55\x7D\xEA\x9F\xF6\x3B\xBA\x94\xA5\x4C\xE9\xBC\x3E\x51\xB4\xE8\xCA\x92\x36\x54\x6D\x5C\x25\x28\xDA\xDD\xAD\x14\xFD\xD3\xEE\xE2\x22\x05\xEB\xD0\xF2\xB7\x68\x12\xD7\x5A\x8A\x41\x1A\xC6\x92\xA5\x5A\x3B\x63\x45\x4F\xBF\xE1\x3A\x77\x22\x2F\x5C\xBF\x46\xF9\x5A\x03\x85\x13\x42\x5F\xCA\xDE\x53\xD7\x62\xB5\xA6\x35\x04\xC2\x47\xFF\x99\xFD\x84\xDF\x5C\xCE\xE9\x5E\x80\x28\x41\xF2\x7D\xE7\x1E\x90\xD8\x4F\x76\x3E\x82\x3C\x0D\xFC\xA5\x03\xFA\x7B\x1A\xD9\x45\x1E\x60\xDA\xC4\x8E\xF9\xFC\x2B\xC9\x7B\x95\xC5\x2A\xFF\xAA\x89\xDF\x82\x31\x0F\x72\xFF\x0C\x27\xD7\x0A\x1E\x56\x00\x50\x1E\x0C\x90\xC1\x96\xB5\xD8\x14\x85\xBB\xA7\x0D\x16\xC1\xF8\x07\x24\x1B\xBA\x85\xA1\x1A\x05\x09\x80\xBA\x95\x63\xC9\x3A\xEC\x25\x9F\x7F\x9D\xBA\xA4\x47\x15\x9B\x44\x70\xF1\x6A\x4B\xD6\x38\x5E\x43\xF3\x18\x7E\x50\x6E\xE9\x5A\x28\xE6\x65\xE6\x77\x1B\x3A\xFD\x1D\xBE\x03\x26\xA3\xDB\xD4\xE1\xBB\x7E\x96\x27\x2B\x1D\xEE\xA4\xFB\xDA\x25\x54\x13\x03\xDE\x39\xC6\xC3\x1F\x4D\x90\xEC\x8F\x1B\x4A\xD2\x1C\xED\x85\x95\x38\x50\x79\x46\xD6\xC1\x90\x50\x31\xA9\x5C\x9A\x6E\x1D\xF5\x33\x56\x8B\xA7\x99\xD2\xF2\xC8\x2C\x33\x93\x92\x30\xC7\x4E\x8C\x65\x33\x10\x64\x17\xFD\x24\x17\x96\xD1\x8D\xC2\x3A\x6A\x2B\xEB\x13\x8B\x44\xF2\x21\xF3\x4A\x1A\xB7\x77\x5F\xD7\xED\x88\xA4\x72\xE5\x39\x1F\x95\x9D\xBE\x67\xC1\x70\x11\x3D\xBB\xF4\xF8\x49\xB7\xE3\x26\x97\x3A\x9F\xD2\x5F\x7C\xFB\xC0\x99\x7C\x39\x29\xE0\x7B\x1D\xBF\x0D\xA7\x8F\xD2\x29\x34\x6E\x24\x15\xCB\xDE\x90\x5E\xBF\x1A\xC4\x66\xEA\xC2\xE6\xBA\x39\x5F\x8A\x99\xA9\x41\x59\x07\xB0\x2C\xAF", + ["CN=Certainly Root E1,O=Certainly,C=US"] = "\x30\x82\x01\xF7\x30\x82\x01\x7D\xA0\x03\x02\x01\x02\x02\x10\x06\x25\x33\xB1\x47\x03\x33\x27\x5C\xF9\x8D\x9A\xB9\xBF\xCC\xF8\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x3D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x31\x1A\x30\x18\x06\x03\x55\x04\x03\x13\x11\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x20\x52\x6F\x6F\x74\x20\x45\x31\x30\x1E\x17\x0D\x32\x31\x30\x34\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x34\x36\x30\x34\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x30\x3D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x31\x1A\x30\x18\x06\x03\x55\x04\x03\x13\x11\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x20\x52\x6F\x6F\x74\x20\x45\x31\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xDE\x6F\xF8\x7F\x1C\xDF\xED\xF9\x47\x87\x86\xB1\xA4\xC0\x8A\xF8\x82\x97\x80\xEA\x8F\xC8\x4A\x5E\x2A\x7D\x88\x68\xA7\x01\x62\x14\x91\x24\x7A\x5C\x9E\xA3\x17\x7D\x8A\x86\x21\x34\x18\x50\x1B\x10\xDE\xD0\x37\x4B\x26\xC7\x19\x60\x80\xE9\x34\xBD\x60\x19\x36\x40\xD6\x29\x87\x09\x3C\x91\x7A\xF6\xBC\x13\x23\xDD\x59\x4E\x04\x5E\xCF\xC8\x02\x1C\x18\x53\xC1\x31\xD8\xDA\x20\xE9\x44\x8D\xE4\x76\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xF3\x28\x18\xCB\x64\x75\xEE\x29\x2A\xEB\xED\xAE\x23\x58\x38\x85\xEB\xC8\x22\x07\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x31\x00\xB1\x8E\x5A\x20\xC3\xB2\x19\x62\x4D\xDE\xB0\x4F\xDF\x6E\xD2\x70\x8A\xF1\x9F\x7E\x6A\x8C\xE6\xBA\xDE\x83\x69\xCA\x69\xB3\xA9\x05\xB5\x96\x92\x17\x87\xC2\xD2\xEA\xD0\x7B\xCE\xD8\x41\x5B\x7C\xAE\x02\x30\x46\xDE\xEA\xCB\x5D\x9A\xEC\x32\xC2\x65\x16\xB0\x4C\x30\x5C\x30\xF3\xDA\x4E\x73\x86\x06\xD8\xCE\x89\x04\x48\x37\x37\xF8\xDD\x33\x51\x9D\x70\xAF\x7B\x55\xD8\x01\x2E\x7D\x05\x64\x0E\x86\xB8\x91", + ["CN=E-Tugra Global Root CA RSA v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR"] = "\x30\x82\x05\xF3\x30\x82\x03\xDB\xA0\x03\x02\x01\x02\x02\x14\x0D\x4D\xC5\xCD\x16\x22\x95\x96\x08\x7E\xB8\x0B\x7F\x15\x06\x34\xFB\x79\x10\x34\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x81\x80\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x52\x31\x0F\x30\x0D\x06\x03\x55\x04\x07\x13\x06\x41\x6E\x6B\x61\x72\x61\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x45\x2D\x54\x75\x67\x72\x61\x20\x45\x42\x47\x20\x41\x2E\x53\x2E\x31\x1D\x30\x1B\x06\x03\x55\x04\x0B\x13\x14\x45\x2D\x54\x75\x67\x72\x61\x20\x54\x72\x75\x73\x74\x20\x43\x65\x6E\x74\x65\x72\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x45\x2D\x54\x75\x67\x72\x61\x20\x47\x6C\x6F\x62\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x52\x53\x41\x20\x76\x33\x30\x1E\x17\x0D\x32\x30\x30\x33\x31\x38\x30\x39\x30\x37\x31\x37\x5A\x17\x0D\x34\x35\x30\x33\x31\x32\x30\x39\x30\x37\x31\x37\x5A\x30\x81\x80\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x52\x31\x0F\x30\x0D\x06\x03\x55\x04\x07\x13\x06\x41\x6E\x6B\x61\x72\x61\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x45\x2D\x54\x75\x67\x72\x61\x20\x45\x42\x47\x20\x41\x2E\x53\x2E\x31\x1D\x30\x1B\x06\x03\x55\x04\x0B\x13\x14\x45\x2D\x54\x75\x67\x72\x61\x20\x54\x72\x75\x73\x74\x20\x43\x65\x6E\x74\x65\x72\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x45\x2D\x54\x75\x67\x72\x61\x20\x47\x6C\x6F\x62\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x52\x53\x41\x20\x76\x33\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xA2\x66\xF0\x89\xB7\x72\x7B\xEE\x09\xC9\x63\xD2\xD3\x43\xDD\x5E\xC3\xA6\x84\x38\x4A\xF1\x8D\x81\xBB\x14\xBD\x47\xE8\x40\x17\xF3\x3D\xC3\x78\x45\x72\xA6\x2E\x90\xDE\x9A\x3A\xD4\x20\x71\xCA\xBC\x9F\x1D\x4B\x97\x0A\xC7\x31\xBA\x3E\xD7\xFE\x25\xA9\x2A\x8E\x36\xF4\xD1\x2F\xC7\xB7\xA9\x5D\x33\xDC\x30\x70\xF8\x40\x6C\x4B\xB2\xA6\x31\x61\xD1\x34\x3C\x3D\x31\x7A\xC7\xAF\xC4\xA7\xA7\x84\xE1\x97\xA4\xE8\x4B\xF6\x17\x7C\xEE\x3C\x07\xED\xE2\x8A\x57\xDC\xB6\xFB\xF8\x43\x25\x50\xEA\x27\x81\xA8\x86\xBC\x8F\x52\x4A\x96\x3A\x60\x1A\x96\xBB\xFD\x73\xF4\x85\xFD\x83\xFD\x7F\x84\x6D\x34\x6C\x7F\x6A\xB7\x4B\x01\x03\xBF\xAD\x69\xB7\xD7\x32\xD9\xF5\x57\x6A\xE9\x86\x82\x3E\xA5\x66\x31\xB3\x16\x3D\xC2\xF3\x26\x60\x32\xD3\x52\x1E\xB0\x6C\xA4\x37\x3E\xF4\xF5\xAF\xEB\xE1\xDF\x80\x06\xCF\x2A\x41\xE7\x66\x09\xE1\x4B\x97\xE7\x77\xBD\x21\x6D\x29\xB6\x67\xC3\x2D\x7E\xED\xD6\x79\x65\xD1\xCF\x3A\xB6\xD1\xB1\x5E\x56\x61\x50\x7A\x5A\xCE\x4E\x50\x31\x80\x03\x98\x47\xE7\xE4\x18\x7C\x44\x5A\xC6\xA4\xB3\x3B\xC6\xC6\xC3\x3A\xF0\x6C\xC3\x8B\xC8\xA4\x91\x05\xF3\xF5\xD9\xB6\xAA\x06\xA1\xB7\xAB\xE4\xB1\xEA\x21\x14\x5C\x83\xA4\xFC\xFF\xB6\x50\xD3\x8C\x12\x26\x99\x76\x70\xE9\xC0\x0F\xA6\x74\xFC\xBB\xD0\x1B\x78\xCE\x72\x92\xE2\x28\x9C\xBC\xE6\xE9\x09\xD8\x3A\xD3\x89\xE6\xBE\x2E\x77\xDF\x01\x0A\x6F\x96\xF6\xE5\x8D\x3C\x4D\x52\x76\x1A\x56\xE1\x73\x7E\x17\xAC\x3D\xAD\x6C\xA3\x52\x12\x18\x70\xE6\x80\x4E\x33\xF2\x7E\x26\x32\xAC\x05\x8D\x38\xA4\xE6\x76\x3C\x9F\x10\x69\x0E\x6D\x9D\xD2\xC1\x79\x20\x6B\x5B\xCF\x33\x8D\xD1\x94\x76\x35\xE7\x5D\x55\xC7\xB7\xAC\x28\xAB\x46\xCC\xE7\x3B\x21\xB5\x0A\x0A\xE4\x4A\x59\xDC\x81\x35\x4B\x44\x95\x12\x0A\x67\xA5\xA1\xFF\x5B\x00\x07\xD2\xC0\xCC\xF9\x3F\xFC\x9F\x33\xF2\x00\xF8\x8C\x6C\x87\x9D\x06\x2D\xF1\xEF\xE3\xE6\x06\xFA\xC5\x66\x13\x5B\xFC\x50\x07\x9E\x71\x86\xB2\xDA\x6F\x74\x30\xCF\x93\x53\xE8\xDC\x22\xD6\xDE\x20\x1F\x61\x8D\xA3\x2E\xA3\x78\x32\x90\x6C\xDC\xAC\x32\xB5\x05\xE4\xF5\x3C\x33\x0D\xD6\xE0\x87\x77\x17\x4C\x9D\xB0\xD8\x09\xA8\x0D\x57\xF7\x44\x85\xF0\xC8\x04\xBE\x5C\x5D\x5A\xE3\x17\x8E\x54\x63\x69\x7F\x49\x74\x64\x05\x8C\xA3\x02\x03\x01\x00\x01\xA3\x63\x30\x61\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\xB2\xB4\xAE\xE6\x2D\xF7\x26\xD5\xAA\x75\x2D\x76\x4B\xC0\x1B\x53\x21\xD0\x48\xEF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xB2\xB4\xAE\xE6\x2D\xF7\x26\xD5\xAA\x75\x2D\x76\x4B\xC0\x1B\x53\x21\xD0\x48\xEF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x89\xA8\x72\x7F\x8C\xEB\xCE\x2E\x18\xC4\x10\x80\x2D\x10\x0C\xFF\xFB\x14\xCD\x04\xE0\x14\x3C\x4E\x9A\xFB\x9F\x29\xBF\x22\x9E\x57\xB9\x82\x73\x12\x63\x26\xB5\xCC\x90\xE9\xD2\x2A\x29\xEE\x9C\x2D\xCC\x2C\x99\xBE\x45\x27\xE4\xB1\x71\xED\xE4\x38\x95\x31\x41\xF2\x7D\x7A\x63\x78\xDF\xCA\x36\x16\x2F\x82\x88\x9F\xBC\x11\x47\x4F\x76\x4D\xC8\x2D\x8E\xEB\xDF\x2D\x7C\x4E\x3B\xDA\xAE\xF6\xE3\xDA\x5D\x14\xA6\xAE\xE8\x85\x44\x9D\x06\x6E\x8E\xFB\xEF\x7A\x4A\x6A\x2D\x2B\x28\x18\xFE\xBF\x90\x2C\x75\x16\x9F\x0F\xEA\x96\x7D\x05\xEE\x9B\x13\xA5\x44\x6C\xF8\x03\xD0\xDD\x23\xE1\xFD\x03\x12\x12\x08\xF4\x18\x34\xB3\xE0\x37\x0B\x77\x11\x01\x48\xBF\x61\xB4\xB5\xF8\x19\xD9\xCB\x4D\xEA\xA3\x8C\xEF\xFD\xF0\x06\xB5\x6D\x92\xF4\x4A\x61\x50\x84\xED\xEC\x49\xD3\xE4\xBE\x68\xE6\x2E\xE3\x31\x0B\x54\x0B\x1A\x92\xD6\x82\xD8\xB6\xA2\x65\x3C\x66\x04\xF9\x55\xDA\x6C\xFB\xDB\xB5\x14\x66\x4D\x94\x83\x3B\xCD\x1E\xA6\x2B\xB2\xFE\x77\x40\x86\xAB\xE7\xDF\x0A\xC9\xFD\xF6\xDD\x87\x56\x18\xD8\xB0\x2C\x55\x60\x96\xFA\x08\x7E\x52\x90\xF5\x4B\xA6\x2E\x87\x7C\xCB\x20\xDB\x06\x3E\xA0\x5D\x03\x77\x7D\xA2\x3C\x13\x1B\x29\xA2\x13\x55\xA0\x3D\x14\x22\xAF\x6F\xB8\xD0\x9A\x1B\x72\xDD\x05\x01\x8D\x86\x60\xBF\xA4\x67\xEE\xB5\xA5\x0D\xD1\x7F\xE6\x1A\x2B\x62\x66\xC3\x07\xBA\xE7\xA0\x48\x1C\x38\xC3\xE9\x45\xFB\xA7\x7F\xFC\xED\x02\x68\x1A\xCA\x77\x12\x77\xA6\x00\x55\x28\x14\xEC\xD6\xC7\x12\xA2\x1B\x65\x42\xE9\x91\xE8\xCB\x3E\x87\x89\x54\x5D\xD9\xAF\x9D\x97\x9C\x69\xE7\x0A\xFF\x0F\x5A\x78\x8B\x63\x2A\x4C\x7D\x47\x94\x3F\xDE\x4B\xE9\x53\xD0\x30\xF1\xC5\xF6\x9E\x49\xDF\x3B\xA0\x91\xA3\xA3\xFE\xCD\x58\xCC\xEA\xDF\xAF\x6F\x28\x3B\xA0\x69\x9B\x8F\xEC\xAC\xAE\x2B\x54\x9D\x9B\x04\xB1\x47\x20\xAF\x96\x12\x3E\x63\x94\x1D\x04\xE7\x2E\xBB\x86\xC7\x0C\x9A\x88\xBF\x76\x47\xEF\xF7\xB0\x0B\x97\x66\xD2\x44\xCF\x60\x52\x07\xE1\xD5\x2C\x4A\x3A\x27\x61\x77\xCA\xD7\x8F\xE7\x87\x0E\x30\xFF\x0C\xBB\x04\xE2\x61\xC3\xA2\xC8\x97\x61\x8E\xB4\x30\x6A\x3C\x6D\xC2\x07\x5F\x4A\x73\x2F\x3F\xF9\x16\x8A\x01\x66\xEF\xBA\x91\xCA\x52\x57\x7B\xAE\xD4\xE6\x0F\xDD\x0B\x7A\x7F\x8B\x9E\x26\x20\xCF\x3B\xEF\x81\x71\x83\x59", + ["CN=E-Tugra Global Root CA ECC v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR"] = "\x30\x82\x02\xA5\x30\x82\x02\x2A\xA0\x03\x02\x01\x02\x02\x14\x26\x46\x19\x77\x31\xE1\x4F\x6F\x28\x36\xDE\x39\x51\x86\xE6\xD4\x97\x88\x22\xC1\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x81\x80\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x52\x31\x0F\x30\x0D\x06\x03\x55\x04\x07\x13\x06\x41\x6E\x6B\x61\x72\x61\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x45\x2D\x54\x75\x67\x72\x61\x20\x45\x42\x47\x20\x41\x2E\x53\x2E\x31\x1D\x30\x1B\x06\x03\x55\x04\x0B\x13\x14\x45\x2D\x54\x75\x67\x72\x61\x20\x54\x72\x75\x73\x74\x20\x43\x65\x6E\x74\x65\x72\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x45\x2D\x54\x75\x67\x72\x61\x20\x47\x6C\x6F\x62\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x45\x43\x43\x20\x76\x33\x30\x1E\x17\x0D\x32\x30\x30\x33\x31\x38\x30\x39\x34\x36\x35\x38\x5A\x17\x0D\x34\x35\x30\x33\x31\x32\x30\x39\x34\x36\x35\x38\x5A\x30\x81\x80\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x52\x31\x0F\x30\x0D\x06\x03\x55\x04\x07\x13\x06\x41\x6E\x6B\x61\x72\x61\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x45\x2D\x54\x75\x67\x72\x61\x20\x45\x42\x47\x20\x41\x2E\x53\x2E\x31\x1D\x30\x1B\x06\x03\x55\x04\x0B\x13\x14\x45\x2D\x54\x75\x67\x72\x61\x20\x54\x72\x75\x73\x74\x20\x43\x65\x6E\x74\x65\x72\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x45\x2D\x54\x75\x67\x72\x61\x20\x47\x6C\x6F\x62\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x45\x43\x43\x20\x76\x33\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\x8E\x98\x29\xBF\xC7\x10\x1E\x27\xDB\xAB\x03\xCC\x28\x2C\xD8\x5E\x48\x19\x10\x29\xCC\xCB\x59\x81\xCC\x8C\xB8\x92\x17\x89\x83\x2A\x92\xF6\xC3\xA4\x1D\x4C\x62\xD5\x9F\xD6\xA0\x46\xDC\x1C\xBC\x76\xC1\xE3\x47\xD0\x5B\x13\xDA\xE7\xA5\xB3\x66\x48\xE7\x21\x9A\x4A\x4F\x86\x0A\x7D\x6C\xEA\x4D\x32\x80\x0A\xB2\x7A\x09\x9B\x69\x4B\x98\x81\xE2\x2E\xEC\x02\x70\x96\x1F\xFD\xF5\x46\xCE\xCA\xDC\x82\xA3\x63\x30\x61\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\xFF\x82\x31\x72\x3E\xF9\xC4\x66\x6C\xAD\x38\x9E\xD1\xB0\x51\x88\xA5\x90\xCC\xF5\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xFF\x82\x31\x72\x3E\xF9\xC4\x66\x6C\xAD\x38\x9E\xD1\xB0\x51\x88\xA5\x90\xCC\xF5\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x69\x00\x30\x66\x02\x31\x00\xE6\x05\x58\x69\x61\xE5\x2D\xCA\x0D\xCB\xF1\x19\x08\xBD\xD6\xFD\x51\x92\x1A\x7E\x63\x54\x04\x90\x91\x9A\x35\x91\x39\x99\xFA\x07\xA9\x66\x93\xBA\xC8\x68\xD4\x8A\x3F\xFA\xED\x6E\x16\x02\x27\xB7\x02\x31\x00\xDD\x5A\x17\x2B\x76\x1D\x65\x42\x96\xA6\xAC\x5D\x8A\x79\x56\xD8\x8A\x1B\xDF\x9A\xDE\x5F\xC7\x50\x8F\xB1\x5B\x71\x0C\x26\xDF\x6A\x40\x00\xEC\x33\x91\x21\x71\xBE\x68\xE4\x23\xA4\xD9\xAD\xA1\x37", + ["CN=Security Communication RootCA3,O=SECOM Trust Systems CO.\,LTD.,C=JP"] = "\x30\x82\x05\x7F\x30\x82\x03\x67\xA0\x03\x02\x01\x02\x02\x09\x00\xE1\x7C\x37\x40\xFD\x1B\xFE\x67\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x30\x5D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x43\x41\x33\x30\x1E\x17\x0D\x31\x36\x30\x36\x31\x36\x30\x36\x31\x37\x31\x36\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x30\x36\x31\x37\x31\x36\x5A\x30\x5D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x43\x41\x33\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xE3\xC9\x72\x49\xF7\x30\xDE\x09\x7C\xA9\x40\x81\x58\xD3\xB4\x3A\xDD\xBA\x61\x0F\x93\x50\x6E\x69\x3C\x35\xC2\xEE\x5B\x73\x90\x1B\x67\x4C\x21\xEC\x5F\x35\xBB\x39\x3E\x2B\x0A\x60\xEF\xBB\x6D\x2B\x86\xFB\x71\xA2\xC8\xAC\xE4\x56\x94\xF9\xC9\xAF\xB1\x72\xD4\x20\xAC\x74\xD2\xB8\x15\xAD\x51\xFE\x85\x74\xA1\xB9\x10\xFE\x05\x80\xF9\x52\x93\xB3\x40\x3D\x75\x10\xAC\xC0\x96\xB7\xA7\x7E\x76\xBC\xE3\x1B\x52\x19\xCE\x11\x1F\x0B\x04\x34\xF5\xD8\xF5\x69\x3C\x77\xF3\x64\xF4\x0D\xAA\x85\xDE\xE0\x09\x50\x04\x17\x96\x84\xB7\xC8\x8A\xBC\x4D\x72\xFC\x1C\xBB\xCF\xF3\x06\x4D\xF9\x9F\x64\xF7\x7E\xA6\x66\x86\x35\x71\xC8\x11\x80\x4C\xC1\x71\x40\x58\x1E\xBE\xA0\x73\xF6\xFC\x3E\x50\xE1\xE0\x2F\x26\x3D\x7E\x5C\x23\xB5\x79\x70\xDE\xFA\xE0\xD1\xA5\xD6\x0C\x41\x71\x7B\xF7\xEA\x8C\x1C\x88\xC7\xEC\x8B\xF5\xD1\x2F\x55\x96\x46\x7C\x5A\x3B\x58\x3B\xFB\xBA\xD8\x2D\xB5\x25\xDA\x7A\x4E\xCF\x44\xAE\x21\xA6\x9E\x98\xCA\x20\x6E\x7C\xBB\x88\x85\x5B\xFB\xC0\x10\x62\xBB\xF2\xF9\x27\x47\xEF\xD1\x89\x39\x43\xC4\xDF\xDE\xE1\x41\xBF\x54\x73\x20\x97\x2D\x6C\xDA\xF3\xD4\x07\xA3\xE6\xB9\xD8\x6F\xAE\xFC\x8C\x19\x2E\xD3\x67\x67\x2B\x95\xDB\x58\x5C\xB5\x6A\x02\xF3\xB8\x83\x5E\xB4\x6B\xBE\x41\x7E\x57\x09\x75\x44\x50\x55\xCD\x5A\x11\x61\x21\x0A\x61\xC2\xA9\x88\xFD\x13\xBC\x2D\x89\x2F\xCD\x61\xE0\x95\xBE\xCA\xB5\x7B\xE1\x7B\x34\x67\x0B\x1F\xB6\x0C\xC7\x7C\x1E\x19\x53\xCA\xA7\xB1\x4A\x15\x20\x56\x14\x70\x3D\x2B\x82\x2C\x0F\x9D\x15\x1D\x47\x80\x47\xFF\x78\x99\x0E\x31\xAF\x6F\x3E\x8F\xED\x86\x69\x1E\x7B\x18\x88\x14\xB2\xC2\xFC\x82\x33\x2E\x9C\x4B\x2D\xFB\x70\x3B\x71\xAA\x2B\x7B\x26\x27\xF3\x1A\xC2\xDC\xFB\x17\xB8\xA1\xEA\xCB\xA0\xB4\xAE\xD3\x94\x7E\x7A\xD0\xAB\xC3\xEC\x38\x2D\x11\x2E\x88\xBF\xD4\x3F\xAD\x12\x3B\x42\xAC\x8F\x02\x6E\x7D\xCC\xD1\x5F\x61\xBE\xA1\xBC\x3A\x6A\x48\xEA\x26\x55\x22\x16\x5D\x5F\x0D\xFF\x27\x33\x9F\x18\x03\x74\x8A\x5B\x52\x20\x47\x6B\x45\x4D\x22\x77\x8C\x55\x27\xF0\xAF\x1E\x8C\xC9\x83\x22\x54\xB7\x9A\xD0\x4F\xD9\xCE\xFC\xD9\x2E\x1C\x96\x28\xB1\x02\xD3\x03\xBD\x25\x52\x1C\x34\x66\x4F\x23\xAB\xF4\x77\x82\x96\x1D\xD1\x57\x30\x08\x11\x05\xFD\x57\xD1\xD9\xC7\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x64\x14\x7C\xFC\x58\x72\x16\xA6\x0A\x29\x34\x15\x6F\x2A\xCB\xBC\xFC\xAF\xA8\xAB\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x03\x82\x02\x01\x00\xDC\x02\x23\x08\xE2\xEF\x21\x3A\xC7\x0D\xB7\x26\xD2\x62\x93\xA7\xA5\x23\x72\x07\x20\x82\x60\xDF\x18\xD7\x54\xAD\x69\x25\x92\x9E\xD9\x14\xCF\x99\xB9\x52\x81\xCF\xAE\x6C\x8A\x3B\x5A\x39\xC8\x6C\x01\x43\xC2\x22\x6D\x02\xF0\x62\xCD\x4E\x63\x43\xC0\x14\xDA\xF4\x63\xF0\xEA\xF4\x71\xEE\x4E\x87\xE3\x71\xA9\xF4\xC9\x57\xE5\x2E\x5F\x1C\x79\xBB\x23\xAA\x87\x44\x57\xE9\xBD\x35\x4D\x41\xBB\x4B\x28\xA3\x98\xB2\x1B\xD9\x0B\x17\x07\xE5\xF7\xEA\x9D\xF5\x76\xD7\xBF\xC4\xB6\x81\x58\xFF\xC8\xFF\x64\x69\x62\x79\xAD\x6E\x0E\x1F\x7F\xEE\x1D\x69\xE5\xB7\x72\x71\xB3\xFE\xA5\x01\x35\x94\x54\x2B\xC0\x52\x6D\x8F\x55\xC4\xC9\xD2\xB8\xCB\xCA\x34\x08\x51\x85\xA0\xF5\xBC\xB4\x17\x58\xEA\x0A\x5C\x7A\xBD\x63\xC6\x3A\x2F\xFF\x96\x49\x19\x84\xEA\x67\xD8\x04\xB1\x61\xF4\x00\x5B\x4A\xB7\x9C\x71\x37\x19\x85\x79\xBF\x81\xB0\xC7\x13\x0E\x76\x71\x3E\x3A\x80\x06\xAE\x06\x16\xA7\x8D\xB5\xC2\xC4\xCB\xFF\x40\xA5\x5C\x8D\xA5\xC9\x3A\xED\x72\x81\xCA\x5C\x98\x3C\xD2\x34\x03\x77\x08\xFD\xF0\x29\x59\x5D\x21\x08\xC7\x60\xBF\xA4\x71\x7B\xB8\xD9\x1E\x82\xBE\x09\xAF\x65\x6F\x28\xAB\xBF\x4B\xB5\xEE\x3E\x08\x47\x27\xA0\x0F\x6F\x0F\x8B\x3F\xAC\x95\x18\xF3\xB9\x0E\xDC\x67\x55\x6E\x62\x9E\x46\x0E\xD1\x04\x78\xCA\x72\xAE\x76\xD9\xA5\xF8\xB2\xDF\x88\x09\x61\x8B\xEF\x24\x4E\xD1\x59\x3F\x5A\xD4\x3D\xC9\x93\x3C\x2B\x64\xF5\x81\x0D\x16\x96\xF7\x92\xC3\xFE\x31\x6F\xE8\x2A\x32\x74\x0E\xF4\x4C\x98\x4A\x18\x0E\x30\x54\xD5\xC5\xEB\xBC\xC5\x15\x9E\xE8\x99\x21\xEB\x27\x2B\x09\x0A\xDB\xF1\xE6\x70\x18\x56\xBB\x0C\xE4\xBE\xF9\xE8\x10\xA4\x13\x92\xB8\x1C\xE0\xDB\x67\x1D\x53\x03\xA4\x22\xA7\xDC\x5D\x92\x10\x3C\xEA\xFF\xFC\x1B\x10\x1A\xC3\xD8\xD0\x9C\x9D\x65\xCB\xD0\x2B\x27\x31\x03\x1E\x36\xE1\x3D\x76\x75\x0C\xFF\x45\x26\xB9\xDD\x51\xBC\x23\xC7\x5F\xD8\xD8\x87\x10\x40\x12\x0D\x3D\x38\x37\xE7\x44\x3C\x18\xC0\x53\x09\x64\x8F\xFF\xD5\x9A\xA6\x7C\x70\x2E\x73\x55\x21\xE8\xDF\xFF\x83\xB9\x1D\x3E\x32\x1E\xD6\xA6\x7D\x2C\xF1\x66\xE9\x5C\x1D\xA7\xA3\xCE\x5E\x25\x32\x2B\xE3\x95\xAC\x2A\x07\xCE\xB4\x28\x78\x86\x3C\x2D\xA6\x9D\x4D\xD2\x74\x30\xDD\x64\x51\x15\xDB\x83\x83\x51\xD7\xAF\xFD\x33\x9D\x4D\x66", + ["CN=Security Communication ECC RootCA1,O=SECOM Trust Systems CO.\,LTD.,C=JP"] = "\x30\x82\x02\x38\x30\x82\x01\xBE\xA0\x03\x02\x01\x02\x02\x09\x00\xD6\x5D\x9B\xB3\x78\x81\x2E\xEB\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x61\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x2B\x30\x29\x06\x03\x55\x04\x03\x13\x22\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x43\x43\x20\x52\x6F\x6F\x74\x43\x41\x31\x30\x1E\x17\x0D\x31\x36\x30\x36\x31\x36\x30\x35\x31\x35\x32\x38\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x30\x35\x31\x35\x32\x38\x5A\x30\x61\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x2B\x30\x29\x06\x03\x55\x04\x03\x13\x22\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x43\x43\x20\x52\x6F\x6F\x74\x43\x41\x31\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xA4\xA5\x6F\x60\x03\x03\xC3\xBD\x31\xF4\xD3\x17\x9C\x2B\x84\x75\xAC\xE5\xFD\x3D\x57\x6E\xD7\x63\xBF\xE6\x04\x89\x92\x8E\x81\x9C\xE3\xE9\x47\x6E\xCA\x90\x12\xC8\x13\xE0\xA7\x9D\xF7\x65\x74\x1F\x6C\x10\xB2\xE8\xE4\xE9\xEF\x6D\x85\x32\x99\x44\xB1\x5E\xFD\xCC\x76\x10\xD8\x5B\xBD\xA2\xC6\xF9\xD6\x42\xE4\x57\x76\xDC\x90\xC2\x35\xA9\x4B\x88\x3C\x12\x47\x6D\x5C\xFF\x49\x4F\x1A\x4A\x50\xB1\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x86\x1C\xE7\xFE\x2D\xA5\x4A\x8B\x08\xFE\x28\x11\xFA\xBE\xA3\x66\xF8\x60\x59\x2F\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x30\x15\x5D\x42\x3D\xFC\xB6\xEE\xF7\x3B\xB1\x36\xE8\x9E\xF6\xC4\x46\x28\x49\x33\xD0\x58\x43\x2A\x63\x29\xCC\x4D\xB1\xB4\x7A\xA2\xB9\x0D\x38\xA5\x5D\x48\x2A\xFD\xCB\xB2\x73\x5D\xA3\x88\x08\xC7\x0C\x02\x31\x00\xC0\xAB\x2D\x0E\x6D\xED\x18\xA2\xDB\x53\xE9\x25\xDB\x55\x08\xE0\x50\xCC\xDF\x44\x61\x16\x82\xAB\x49\xB0\xB2\x81\xEC\x73\x87\x78\xB4\x4C\xB2\x62\x1B\x12\xFA\x16\x4D\x25\x4B\x63\xBD\x1E\x37\xD9", }; diff --git a/src/3rdparty b/src/3rdparty index 58e63b262e..410ada8bbe 160000 --- a/src/3rdparty +++ b/src/3rdparty @@ -1 +1 @@ -Subproject commit 58e63b262e542895024c821e791214008604cd55 +Subproject commit 410ada8bbe5839807a459a99c1b77221f790f1be diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3a9621cc18..e76d0f6703 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,24 +1,16 @@ -include_directories(BEFORE - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/include -) +include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/include) # Force creation of includes symlink. This can't just be in the src directory # because MSVC will end up with an include loop. -execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory - "${CMAKE_CURRENT_SOURCE_DIR}/include") -execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink - ".." - "${CMAKE_CURRENT_SOURCE_DIR}/include/zeek") +execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_SOURCE_DIR}/include") +execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink ".." + "${CMAKE_CURRENT_SOURCE_DIR}/include/zeek") # Allows header file inclusion via zeek/ within the build tree -execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory - "${CMAKE_CURRENT_BINARY_DIR}/include") -execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink - ".." - "${CMAKE_CURRENT_BINARY_DIR}/include/zeek") +execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/include") +execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink ".." + "${CMAKE_CURRENT_BINARY_DIR}/include/zeek") # Poor man's JSON escaping as this is rendered into a C string. string(REPLACE "\"" "\\\"" ZEEK_BUILD_INFO_ESCAPED "${ZEEK_BUILD_INFO}") @@ -26,96 +18,85 @@ string(REPLACE "\n" "\\n" ZEEK_BUILD_INFO_ESCAPED "${ZEEK_BUILD_INFO_ESCAPED}") configure_file(version.c.in ${CMAKE_CURRENT_BINARY_DIR}/version.c) configure_file(util-config.h.in ${CMAKE_CURRENT_BINARY_DIR}/util-config.h) -# This creates a custom command to transform a bison output file (inFile) -# into outFile in order to avoid symbol conflicts: -# - replaces instances of 'yylex' in inFile with yylexPrefix -# - replaces instances of 'yy' in inFile with yyPrefix -# - deletes instances of 'extern char.*getenv' in inFile -# - writes results to outFile and adds it to list TRANSFORMED_BISON_OUTPUTS -macro(REPLACE_YY_PREFIX_TARGET inFile outFile yylexPrefix yyPrefix) +# This creates a custom command to transform a bison output file (inFile) into +# outFile in order to avoid symbol conflicts: - replaces instances of 'yylex' in +# inFile with yylexPrefix - replaces instances of 'yy' in inFile with yyPrefix - +# deletes instances of 'extern char.*getenv' in inFile - writes results to +# outFile and adds it to list TRANSFORMED_BISON_OUTPUTS +macro (REPLACE_YY_PREFIX_TARGET inFile outFile yylexPrefix yyPrefix) set(args "\"/extern char.*getenv/d") set(args "${args}\;s/yylex/${yylexPrefix}lex/") set(args "${args}\;s/yy/${yyPrefix}/g\"" < ${inFile} > ${outFile}) - add_custom_command(OUTPUT ${outFile} - COMMAND ${SED_EXE} - ARGS ${args} - DEPENDS ${inFile} - COMMENT "[sed] replacing stuff in ${inFile}" - ) + add_custom_command( + OUTPUT ${outFile} + COMMAND ${SED_EXE} ARGS ${args} + DEPENDS ${inFile} + COMMENT "[sed] replacing stuff in ${inFile}") list(APPEND TRANSFORMED_BISON_OUTPUTS ${outFile}) -endmacro(REPLACE_YY_PREFIX_TARGET) +endmacro (REPLACE_YY_PREFIX_TARGET) -######################################################################## -## Create targets to generate parser and scanner code +# ############################################################################## +# Create targets to generate parser and scanner code set(BISON_FLAGS "--debug") -if ( MSVC ) +if (MSVC) set(SIGN_COMPARE_FLAG "/wd4018") -else() +else () set(SIGN_COMPARE_FLAG "-Wno-sign-compare") -endif() +endif () # Rule parser/scanner -bison_target(RuleParser rule-parse.y - ${CMAKE_CURRENT_BINARY_DIR}/rup.cc - HEADER ${CMAKE_CURRENT_BINARY_DIR}/rup.h - #VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/rule_parse.output - COMPILE_FLAGS "${BISON_FLAGS}") +bison_target( + RuleParser rule-parse.y ${CMAKE_CURRENT_BINARY_DIR}/rup.cc HEADER + ${CMAKE_CURRENT_BINARY_DIR}/rup.h + # VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/rule_parse.output + COMPILE_FLAGS "${BISON_FLAGS}") replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rup.cc - ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.cc - rules_ rules_) -replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rup.h - ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.h + ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.cc rules_ rules_) +replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rup.h ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.h rules_ rules_) flex_target(RuleScanner rule-scan.l ${CMAKE_CURRENT_BINARY_DIR}/rule-scan.cc COMPILE_FLAGS "-Prules_") set_property(SOURCE rule-scan.cc APPEND_STRING PROPERTY COMPILE_FLAGS "${SIGN_COMPARE_FLAG}") # RE parser/scanner -bison_target(REParser re-parse.y - ${CMAKE_CURRENT_BINARY_DIR}/rep.cc - HEADER ${CMAKE_CURRENT_BINARY_DIR}/re-parse.h - #VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/re_parse.output - COMPILE_FLAGS "${BISON_FLAGS}") -replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rep.cc - ${CMAKE_CURRENT_BINARY_DIR}/re-parse.cc +bison_target( + REParser re-parse.y ${CMAKE_CURRENT_BINARY_DIR}/rep.cc HEADER + ${CMAKE_CURRENT_BINARY_DIR}/re-parse.h + # VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/re_parse.output + COMPILE_FLAGS "${BISON_FLAGS}") +replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rep.cc ${CMAKE_CURRENT_BINARY_DIR}/re-parse.cc re_ RE_) -flex_target(REScanner re-scan.l ${CMAKE_CURRENT_BINARY_DIR}/re-scan.cc - COMPILE_FLAGS "-Pre_") +flex_target(REScanner re-scan.l ${CMAKE_CURRENT_BINARY_DIR}/re-scan.cc COMPILE_FLAGS "-Pre_") add_flex_bison_dependency(REScanner REParser) set_property(SOURCE re-scan.cc APPEND_STRING PROPERTY COMPILE_FLAGS "${SIGN_COMPARE_FLAG}") # Parser/Scanner -bison_target(Parser parse.y - ${CMAKE_CURRENT_BINARY_DIR}/p.cc - HEADER ${CMAKE_CURRENT_BINARY_DIR}/zeekparse.h - #VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/parse.output - COMPILE_FLAGS "${BISON_FLAGS}") -replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/p.cc - ${CMAKE_CURRENT_BINARY_DIR}/parse.cc - zeek yy) -flex_target(Scanner scan.l ${CMAKE_CURRENT_BINARY_DIR}/scan.cc - COMPILE_FLAGS "-Pzeek") +bison_target( + Parser parse.y ${CMAKE_CURRENT_BINARY_DIR}/p.cc HEADER ${CMAKE_CURRENT_BINARY_DIR}/zeekparse.h + # VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/parse.output + COMPILE_FLAGS "${BISON_FLAGS}") +replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/p.cc ${CMAKE_CURRENT_BINARY_DIR}/parse.cc zeek + yy) +flex_target(Scanner scan.l ${CMAKE_CURRENT_BINARY_DIR}/scan.cc COMPILE_FLAGS "-Pzeek") set_property(SOURCE scan.cc APPEND_STRING PROPERTY COMPILE_FLAGS "${SIGN_COMPARE_FLAG}") # Add a dependency for the generated files to zeek_autogen_files. add_custom_target( zeek_bison_outputs - DEPENDS - ${CMAKE_CURRENT_BINARY_DIR}/parse.cc - ${CMAKE_CURRENT_BINARY_DIR}/re-parse.cc - ${CMAKE_CURRENT_BINARY_DIR}/re-parse.h - ${CMAKE_CURRENT_BINARY_DIR}/re-scan.cc - ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.cc - ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.h - ${CMAKE_CURRENT_BINARY_DIR}/rule-scan.cc - ${CMAKE_CURRENT_BINARY_DIR}/scan.cc -) + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/parse.cc + ${CMAKE_CURRENT_BINARY_DIR}/re-parse.cc + ${CMAKE_CURRENT_BINARY_DIR}/re-parse.h + ${CMAKE_CURRENT_BINARY_DIR}/re-scan.cc + ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.cc + ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.h + ${CMAKE_CURRENT_BINARY_DIR}/rule-scan.cc + ${CMAKE_CURRENT_BINARY_DIR}/scan.cc) add_dependencies(zeek_autogen_files zeek_bison_outputs) -######################################################################## -## bifcl-dependent targets +# ############################################################################## +# bifcl-dependent targets include(BifCl) @@ -131,34 +112,30 @@ set(BIF_SRCS strings.bif reporter.bif option.bif - # Note: the supervisor BIF file is treated like other top-level BIFs - # instead of contained in its own subdirectory CMake logic because - # subdirectory BIFs are treated differently and don't support being called - # *during* parsing (e.g. within an @if directive). + # Note: the supervisor BIF file is treated like other top-level BIFs instead + # of contained in its own subdirectory CMake logic because subdirectory BIFs + # are treated differently and don't support being called *during* parsing + # (e.g. within an @if directive). supervisor/supervisor.bif - # The packet analysis BIF is treated like other top-level BIFs because - # it's needed before parsing the packet protocol scripts, which happen - # very near to the start of parsing. + # The packet analysis BIF is treated like other top-level BIFs because it's + # needed before parsing the packet protocol scripts, which happen very near + # to the start of parsing. packet_analysis/packet_analysis.bif - # The C++ loading BIF is treated like other top-level BIFs to give - # us flexibility regarding when it's called. - script_opt/CPP/CPP-load.bif -) + # The C++ loading BIF is treated like other top-level BIFs to give us + # flexibility regarding when it's called. + script_opt/CPP/CPP-load.bif) foreach (bift ${BIF_SRCS}) bif_target(${bift} "standard") endforeach () -######################################################################## -## BinPAC-dependent targets +# ############################################################################## +# BinPAC-dependent targets include(BinPAC) -set(BINPAC_AUXSRC - ${CMAKE_CURRENT_SOURCE_DIR}/binpac.pac - ${CMAKE_CURRENT_SOURCE_DIR}/zeek.pac - ${CMAKE_CURRENT_SOURCE_DIR}/binpac_zeek.h -) +set(BINPAC_AUXSRC ${CMAKE_CURRENT_SOURCE_DIR}/binpac.pac ${CMAKE_CURRENT_SOURCE_DIR}/zeek.pac + ${CMAKE_CURRENT_SOURCE_DIR}/binpac_zeek.h) set(BINPAC_OUTPUTS "") @@ -168,8 +145,8 @@ list(APPEND BINPAC_OUTPUTS "${BINPAC_OUTPUT_CC}") binpac_target(binpac_zeek-lib.pac) list(APPEND BINPAC_OUTPUTS "${BINPAC_OUTPUT_CC}") -######################################################################## -## Gen-ZAM setup +# ############################################################################## +# Gen-ZAM setup include(Gen-ZAM) @@ -177,9 +154,9 @@ set(GEN_ZAM_SRC ${CMAKE_CURRENT_SOURCE_DIR}/script_opt/ZAM/Ops.in) gen_zam_target(${GEN_ZAM_SRC}) -######################################################################## -## Including subdirectories. -######################################################################## +# ############################################################################## +# Including subdirectories. +# ############################################################################## option(USE_SQLITE "Should Zeek use SQLite?" ON) @@ -195,8 +172,8 @@ add_subdirectory(logging) add_subdirectory(probabilistic) add_subdirectory(session) -######################################################################## -## Build in the discovered external plugins and create the autogenerated scripts. +# ############################################################################## +# Build in the discovered external plugins and create the autogenerated scripts. set(PRELOAD_SCRIPT ${PROJECT_BINARY_DIR}/scripts/builtin-plugins/__preload__.zeek) file(WRITE ${PRELOAD_SCRIPT} "# Warning, this is an autogenerated file!\n") @@ -204,14 +181,14 @@ set(LOAD_SCRIPT ${PROJECT_BINARY_DIR}/scripts/builtin-plugins/__load__.zeek) file(WRITE ${LOAD_SCRIPT} "# Warning, this is an autogenerated file!\n") # TODO: this really should be a function to make sure we have an isolated scope. -# However, for historic reasons, we're not doing that yet. Some plugin -# modify global state such as `zeekdeps`. -macro(add_extra_builtin_plugin plugin_dir) +# However, for historic reasons, we're not doing that yet. Some plugin modify +# global state such as `zeekdeps`. +macro (add_extra_builtin_plugin plugin_dir) get_filename_component(plugin_name "${plugin_dir}" NAME) - if(IS_DIRECTORY "${plugin_dir}/cmake") + if (IS_DIRECTORY "${plugin_dir}/cmake") list(APPEND CMAKE_MODULE_PATH "${plugin_dir}/cmake") - endif() + endif () # Set this flag so that ZeekPluginStatic.cmake knows that this plugin is not # from our source tree but from an external source (or git submodule). This @@ -222,36 +199,36 @@ macro(add_extra_builtin_plugin plugin_dir) # TODO: drop once we turn this into a function. set(ZEEK_BUILDING_EXTRA_PLUGINS OFF) -endmacro() +endmacro () foreach (plugin_dir ${BUILTIN_PLUGIN_LIST}) add_extra_builtin_plugin("${plugin_dir}") -endforeach() +endforeach () install(FILES ${PRELOAD_SCRIPT} DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/builtin-plugins/) install(FILES ${LOAD_SCRIPT} DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/builtin-plugins/) -######################################################################## -## This has to happen after the parts for builtin plugins, or else -## symbols are missing when it goes to link the fuzzer binaries. +# ############################################################################## +# This has to happen after the parts for builtin plugins, or else symbols are +# missing when it goes to link the fuzzer binaries. add_subdirectory(fuzzers) -######################################################################## -## zeek target +# ############################################################################## +# zeek target -find_package (Threads) +find_package(Threads) # Avoid CMake warning about "3rdparty" looking like a number. cmake_policy(PUSH) if (POLICY CMP0012) -cmake_policy(SET CMP0012 NEW) + cmake_policy(SET CMP0012 NEW) endif () -# This macro stores associated headers for any C/C++ source files given -# as arguments (past _var) as a list in the CMake variable named "_var". -macro(COLLECT_HEADERS _var) +# This macro stores associated headers for any C/C++ source files given as +# arguments (past _var) as a list in the CMake variable named "_var". +macro (COLLECT_HEADERS _var) foreach (src ${ARGN}) get_filename_component(ext ${src} EXT) if ("${ext}" STREQUAL ".cc" OR "${ext}" STREQUAL ".c") @@ -266,39 +243,34 @@ macro(COLLECT_HEADERS _var) endif () endif () endforeach () -endmacro(COLLECT_HEADERS _var) +endmacro (COLLECT_HEADERS _var) cmake_policy(POP) -# define a command that's used to run the make_dbg_constants.py script -# building the zeek binary depends on the outputs of this script -add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdConstants.h - ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdInfoConstants.cc - COMMAND ${PYTHON_EXECUTABLE} - ARGS ${CMAKE_CURRENT_SOURCE_DIR}/make_dbg_constants.py - ${CMAKE_CURRENT_SOURCE_DIR}/DebugCmdInfoConstants.in - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_dbg_constants.py - ${CMAKE_CURRENT_SOURCE_DIR}/DebugCmdInfoConstants.in - COMMENT "[Python] Processing debug commands" - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -) +# define a command that's used to run the make_dbg_constants.py script building +# the zeek binary depends on the outputs of this script +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdConstants.h + ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdInfoConstants.cc + COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/make_dbg_constants.py + ${CMAKE_CURRENT_SOURCE_DIR}/DebugCmdInfoConstants.in + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_dbg_constants.py + ${CMAKE_CURRENT_SOURCE_DIR}/DebugCmdInfoConstants.in + COMMENT "[Python] Processing debug commands" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -add_custom_target( - zeek_debugcmd_gen - DEPENDS - ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdConstants.h - ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdInfoConstants.cc -) +add_custom_target(zeek_debugcmd_gen DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdConstants.h + ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdInfoConstants.cc) add_dependencies(zeek_autogen_files zeek_debugcmd_gen) set(_gen_zeek_script_cpp ${CMAKE_CURRENT_BINARY_DIR}/../CPP-gen.cc) -add_custom_command(OUTPUT ${_gen_zeek_script_cpp} - COMMAND ${CMAKE_COMMAND} -E touch ${_gen_zeek_script_cpp}) +add_custom_command(OUTPUT ${_gen_zeek_script_cpp} COMMAND ${CMAKE_COMMAND} -E touch + ${_gen_zeek_script_cpp}) if (!MSVC) set_source_files_properties(legacy-netvar-init.cc PROPERTIES COMPILE_FLAGS - -Wno-deprecated-declarations) -endif() + -Wno-deprecated-declarations) +endif () set(MAIN_SRCS digest.cc @@ -386,9 +358,7 @@ set(MAIN_SRCS ZeekArgs.cc ZeekString.cc ZVal.cc - ${SUPERVISOR_SRCS} - threading/BasicThread.cc threading/Formatter.cc threading/Manager.cc @@ -396,12 +366,10 @@ set(MAIN_SRCS threading/SerialTypes.cc threading/formatters/Ascii.cc threading/formatters/JSON.cc - plugin/Component.cc plugin/ComponentManager.h plugin/Manager.cc plugin/Plugin.cc - script_opt/CPP/Attrs.cc script_opt/CPP/Consts.cc script_opt/CPP/DeclFunc.cc @@ -421,9 +389,7 @@ set(MAIN_SRCS script_opt/CPP/Types.cc script_opt/CPP/Util.cc script_opt/CPP/Vars.cc - ${_gen_zeek_script_cpp} - script_opt/Expr.cc script_opt/GenIDDefs.cc script_opt/IDOptInfo.cc @@ -435,7 +401,6 @@ set(MAIN_SRCS script_opt/TempVar.cc script_opt/UsageAnalyzer.cc script_opt/UseDefs.cc - script_opt/ZAM/AM-Opt.cc script_opt/ZAM/Branches.cc script_opt/ZAM/BuiltIn.cc @@ -450,9 +415,7 @@ set(MAIN_SRCS script_opt/ZAM/ZBody.cc script_opt/ZAM/ZInst.cc script_opt/ZAM/ZOp.cc - - digest.h -) + digest.h) set(THIRD_PARTY_SRCS 3rdparty/bro_inet_ntop.c # Remove in v6.1. @@ -464,69 +427,58 @@ set(THIRD_PARTY_SRCS 3rdparty/patricia.c 3rdparty/setsignal.c $<$:3rdparty/sqlite3.c> - 3rdparty/strsep.c -) + 3rdparty/strsep.c) -# Highwayhash. Highwayhash is a bit special since it has architecture dependent code... +# Highwayhash. Highwayhash is a bit special since it has architecture dependent +# code... set(hhash_dir ${PROJECT_SOURCE_DIR}/auxil/highwayhash/highwayhash) zeek_add_subdir_library( hhash SOURCES - ${hhash_dir}/sip_hash.cc - ${hhash_dir}/sip_tree_hash.cc - ${hhash_dir}/scalar_sip_tree_hash.cc - ${hhash_dir}/arch_specific.cc - ${hhash_dir}/instruction_sets.cc - ${hhash_dir}/nanobenchmark.cc - ${hhash_dir}/os_specific.cc - ${hhash_dir}/hh_portable.cc -) + ${hhash_dir}/sip_hash.cc + ${hhash_dir}/sip_tree_hash.cc + ${hhash_dir}/scalar_sip_tree_hash.cc + ${hhash_dir}/arch_specific.cc + ${hhash_dir}/instruction_sets.cc + ${hhash_dir}/nanobenchmark.cc + ${hhash_dir}/os_specific.cc + ${hhash_dir}/hh_portable.cc) if (${COMPILER_ARCHITECTURE} STREQUAL "arm") - check_c_source_compiles(" + check_c_source_compiles( + " #if defined(__ARM_NEON__) || defined(__ARM_NEON) int main() { return 0; } #else #error #endif - " test_arm_neon) + " + test_arm_neon) - if (test_arm_neon) - target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_neon.cc) - endif () + if (test_arm_neon) + target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_neon.cc) + endif () - target_compile_options( - zeek_hhash_obj - PRIVATE - -mfloat-abi=hard - -march=armv7-a - -mfpu=neon - ) + target_compile_options(zeek_hhash_obj PRIVATE -mfloat-abi=hard -march=armv7-a -mfpu=neon) elseif (${COMPILER_ARCHITECTURE} STREQUAL "aarch64") - target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_neon.cc) + target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_neon.cc) elseif (${COMPILER_ARCHITECTURE} STREQUAL "power") - target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_vsx.cc) - set_source_files_properties(${hhash_dir}/hh_vsx.cc PROPERTIES COMPILE_FLAGS - -mvsx) -elseif(${COMPILER_ARCHITECTURE} STREQUAL "x86_64") - target_sources( - zeek_hhash_obj - PRIVATE - ${hhash_dir}/hh_avx2.cc - ${hhash_dir}/hh_sse41.cc) - if (MSVC) - set(_avx_flag /arch:AVX2) - # Using an undocumentd compiler flag: https://stackoverflow.com/questions/64053597/how-do-i-enable-sse4-1-and-sse3-but-not-avx-in-msvc/69328426#69328426 - set(_sse_flag /d2archSSE42) - else() - set(_avx_flag -mavx2) - set(_sse_flag -msse4.1) - endif() + target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_vsx.cc) + set_source_files_properties(${hhash_dir}/hh_vsx.cc PROPERTIES COMPILE_FLAGS -mvsx) +elseif (${COMPILER_ARCHITECTURE} STREQUAL "x86_64") + target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_avx2.cc ${hhash_dir}/hh_sse41.cc) + if (MSVC) + set(_avx_flag /arch:AVX2) + # Using an undocumentd compiler flag: + # https://stackoverflow.com/questions/64053597/how-do-i-enable-sse4-1-and-sse3-but-not-avx-in-msvc/69328426#69328426 + set(_sse_flag /d2archSSE42) + else () + set(_avx_flag -mavx2) + set(_sse_flag -msse4.1) + endif () - set_source_files_properties(${hhash_dir}/hh_avx2.cc PROPERTIES COMPILE_FLAGS - ${_avx_flag}) - set_source_files_properties(${hhash_dir}/hh_sse41.cc PROPERTIES COMPILE_FLAGS - ${_sse_flag}) + set_source_files_properties(${hhash_dir}/hh_avx2.cc PROPERTIES COMPILE_FLAGS ${_avx_flag}) + set_source_files_properties(${hhash_dir}/hh_sse41.cc PROPERTIES COMPILE_FLAGS ${_sse_flag}) endif () set(zeek_SRCS @@ -550,8 +502,7 @@ set(zeek_SRCS ${CMAKE_CURRENT_BINARY_DIR}/ZAM-MethodDecls.h ${THIRD_PARTY_SRCS} ${HH_SRCS} - ${MAIN_SRCS} -) + ${MAIN_SRCS}) collect_headers(zeek_HEADERS ${zeek_SRCS}) @@ -564,35 +515,31 @@ zeek_target_link_libraries(zeek_objs) if (TARGET zeek_exe) target_sources(zeek_exe PRIVATE main.cc ${zeek_HEADERS}) - # npcap/winpcap need to be loaded in delayed mode so that we can set the load path - # correctly at runtime. See https://npcap.com/guide/npcap-devguide.html#npcap-feature-native - # for why this is necessary. - if ( MSVC AND HAVE_WPCAP ) + # npcap/winpcap need to be loaded in delayed mode so that we can set the load + # path correctly at runtime. See + # https://npcap.com/guide/npcap-devguide.html#npcap-feature-native for why + # this is necessary. + if (MSVC AND HAVE_WPCAP) set(zeekdeps ${zeekdeps} delayimp.lib) set_target_properties(zeek_exe PROPERTIES LINK_FLAGS "/DELAYLOAD:wpcap.dll") - endif() + endif () target_link_libraries(zeek_exe PRIVATE ${zeekdeps} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) # Export symbols from zeek executable for use by plugins set_target_properties(zeek_exe PROPERTIES ENABLE_EXPORTS TRUE) - if ( MSVC ) + if (MSVC) set(WINDOWS_EXPORT_ALL_SYMBOLS ON) endif () -endif() +endif () if (TARGET zeek_lib) target_sources(zeek_lib PRIVATE ${zeek_HEADERS}) - target_link_libraries( - zeek_lib - PUBLIC - ${zeekdeps} - ${CMAKE_THREAD_LIBS_INIT} - ${CMAKE_DL_LIBS}) -endif() + target_link_libraries(zeek_lib PUBLIC ${zeekdeps} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) +endif () zeek_include_directories( ${CMAKE_BINARY_DIR} @@ -601,21 +548,23 @@ zeek_include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zeek/src - ${CMAKE_SOURCE_DIR}/zeek/src/include -) + ${CMAKE_SOURCE_DIR}/zeek/src/include) # Install *.bif.zeek. -install(DIRECTORY ${PROJECT_BINARY_DIR}/scripts/base/bif DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/base) +install(DIRECTORY ${PROJECT_BINARY_DIR}/scripts/base/bif + DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/base) # Create plugin directory at install time. install(DIRECTORY DESTINATION ${ZEEK_PLUGIN_DIR}) # Make clean removes the bif directory. -set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PROJECT_BINARY_DIR}/scripts/base/bif) +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES + ${PROJECT_BINARY_DIR}/scripts/base/bif) -# Remove some stale files and scripts that previous Zeek versions put in -# place, yet make confuse us now. This makes upgrading easier. -install(CODE " +# Remove some stale files and scripts that previous Zeek versions put in place, +# yet make confuse us now. This makes upgrading easier. +install( + CODE " file(REMOVE_RECURSE ${ZEEK_SCRIPT_INSTALL_PATH}/base/frameworks/logging/writers/dataseries.bro ${ZEEK_SCRIPT_INSTALL_PATH}/base/frameworks/logging/writers/elasticsearch.bro @@ -623,60 +572,59 @@ install(CODE " ) ") -# Make sure to escape a bunch of special characters in the path before trying to use it as a -# regular expression below. -string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" escaped_include_path "${CMAKE_CURRENT_SOURCE_DIR}/include/*") +# Make sure to escape a bunch of special characters in the path before trying to +# use it as a regular expression below. +string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" escaped_include_path + "${CMAKE_CURRENT_SOURCE_DIR}/include/*") if (WIN32) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/windows/usr.include/ - DESTINATION include/ - FILES_MATCHING - PATTERN "*.h" - ) -endif() - -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ - DESTINATION include/zeek + install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/windows/usr.include/ + DESTINATION include/ FILES_MATCHING - PATTERN "*.h" - PATTERN "*.pac" - PATTERN "3rdparty/*" EXCLUDE - # The "zeek -> ." symlink isn't needed in the install-tree - REGEX "${escaped_include_path}$" EXCLUDE + PATTERN "*.h") +endif () - # FILES_MATCHING creates empty directories: - # https://gitlab.kitware.com/cmake/cmake/-/issues/17122 - # Exclude the ones that this affects explicitly. - PATTERN "script_opt/CPP/maint" EXCLUDE - PATTERN "fuzzers/corpora" EXCLUDE -) +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ + DESTINATION include/zeek + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.pac" + PATTERN "3rdparty/*" EXCLUDE + # The "zeek -> ." symlink isn't needed in the install-tree + REGEX "${escaped_include_path}$" EXCLUDE + # FILES_MATCHING creates empty directories: + # https://gitlab.kitware.com/cmake/cmake/-/issues/17122 Exclude the ones that + # this affects explicitly. + PATTERN "script_opt/CPP/maint" EXCLUDE + PATTERN "fuzzers/corpora" EXCLUDE) -install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ - DESTINATION include/zeek - FILES_MATCHING - PATTERN "*.bif.func_h" - PATTERN "*.bif.netvar_h" - PATTERN "*.bif.h" - PATTERN "CMakeFiles" EXCLUDE - # The "include/zeek -> .." symlink isn't needed in the install-tree - REGEX "${escaped_include_path}$" EXCLUDE -) +install( + DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ + DESTINATION include/zeek + FILES_MATCHING + PATTERN "*.bif.func_h" + PATTERN "*.bif.netvar_h" + PATTERN "*.bif.h" + PATTERN "CMakeFiles" EXCLUDE + # The "include/zeek -> .." symlink isn't needed in the install-tree + REGEX "${escaped_include_path}$" EXCLUDE) -install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/ConvertUTF.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bro_inet_ntop.h # Remove in v6.1 - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zeek_inet_ntop.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bsd-getopt-long.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/modp_numtoa.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/patricia.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/setsignal.h - $<$:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/sqlite3.h> - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/doctest.h - DESTINATION include/zeek/3rdparty -) +install( + FILES ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/ConvertUTF.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bro_inet_ntop.h # Remove in v6.1 + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zeek_inet_ntop.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bsd-getopt-long.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/modp_numtoa.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/patricia.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/setsignal.h + $<$:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/sqlite3.h> + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/doctest.h + DESTINATION include/zeek/3rdparty) -######################################################################## -## Clang-tidy target now that we have all of the sources +# ############################################################################## +# Clang-tidy target now that we have all of the sources add_clang_tidy_files(${MAIN_SRCS}) @@ -685,23 +633,22 @@ add_clang_tidy_files(${MAIN_SRCS}) # *.bif.register.cc) create_clang_tidy_target() -######################################################################## -## CTest setup. +# ############################################################################## +# CTest setup. # Scan all .cc files for TEST_CASE macros and generate CTest targets. if (ENABLE_ZEEK_UNIT_TESTS) set(test_cases "") foreach (cc_file ${TIDY_SRCS}) - file (STRINGS ${cc_file} test_case_lines REGEX "TEST_CASE") + file(STRINGS ${cc_file} test_case_lines REGEX "TEST_CASE") foreach (line ${test_case_lines}) string(REGEX REPLACE "TEST_CASE\\(\"(.+)\"\\)" "\\1" test_case "${line}") list(APPEND test_cases "${test_case}") endforeach () endforeach () list(LENGTH test_cases num_test_cases) - MESSAGE(STATUS "-- Found ${num_test_cases} test cases for CTest") + message(STATUS "-- Found ${num_test_cases} test cases for CTest") foreach (test_case ${test_cases}) - add_test(NAME "\"${test_case}\"" - COMMAND zeek --test "--test-case=${test_case}") + add_test(NAME "\"${test_case}\"" COMMAND zeek --test "--test-case=${test_case}") endforeach () endif () diff --git a/src/Val.cc b/src/Val.cc index 9b94c2dd97..a6d6fbfed5 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -6,6 +6,9 @@ #include #include +#define RAPIDJSON_HAS_STDSTRING 1 +#include +#include #include #include #include @@ -1061,6 +1064,333 @@ StringValPtr StringVal::Replace(RE_Matcher* re, const String& repl, bool do_all) return make_intrusive(new String(true, result, r - result)); } +static std::variant BuildVal(const rapidjson::Value& j, const TypePtr& t) + { + auto mismatch_err = [t, &j]() + { + std::string json_type; + switch ( j.GetType() ) + { + case rapidjson::Type::kNullType: + json_type = "null"; + break; + case rapidjson::Type::kFalseType: + case rapidjson::Type::kTrueType: + json_type = "bool"; + break; + case rapidjson::Type::kObjectType: + json_type = "object"; + break; + case rapidjson::Type::kArrayType: + json_type = "array"; + break; + case rapidjson::Type::kStringType: + json_type = "string"; + break; + case rapidjson::Type::kNumberType: + json_type = "number"; + break; + default: + json_type = "unknown"; + } + + return util::fmt("cannot convert JSON type '%s' to Zeek type '%s'", json_type.c_str(), + type_name(t->Tag())); + }; + + if ( j.IsNull() ) + return Val::nil; + + switch ( t->Tag() ) + { + case TYPE_BOOL: + { + if ( ! j.IsBool() ) + return mismatch_err(); + + return val_mgr->Bool(j.GetBool()); + } + + case TYPE_INT: + { + if ( ! j.IsInt64() ) + return mismatch_err(); + + return val_mgr->Int(j.GetInt64()); + } + + case TYPE_COUNT: + { + if ( ! j.IsUint64() ) + return mismatch_err(); + + return val_mgr->Count(j.GetUint64()); + } + + case TYPE_TIME: + { + if ( ! j.IsNumber() ) + return mismatch_err(); + + return make_intrusive(j.GetDouble()); + } + + case TYPE_DOUBLE: + { + if ( ! j.IsNumber() ) + return mismatch_err(); + + return make_intrusive(j.GetDouble()); + } + + case TYPE_INTERVAL: + { + if ( ! j.IsNumber() ) + return mismatch_err(); + + return make_intrusive(j.GetDouble()); + } + + case TYPE_PORT: + { + if ( ! j.IsString() ) + return mismatch_err(); + + int port = 0; + if ( j.GetStringLength() > 0 && j.GetStringLength() < 10 ) + { + char* slash; + errno = 0; + port = strtol(j.GetString(), &slash, 10); + if ( ! errno ) + { + ++slash; + if ( util::streq(slash, "tcp") ) + return val_mgr->Port(port, TRANSPORT_TCP); + else if ( util::streq(slash, "udp") ) + return val_mgr->Port(port, TRANSPORT_UDP); + else if ( util::streq(slash, "icmp") ) + return val_mgr->Port(port, TRANSPORT_ICMP); + else if ( util::streq(slash, "unknown") ) + return val_mgr->Port(port, TRANSPORT_UNKNOWN); + } + } + + return "wrong port format, must be /[0-9]{1,5}\\/(tcp|udp|icmp|unknown)/"; + } + + case TYPE_PATTERN: + { + if ( ! j.IsString() ) + return mismatch_err(); + + std::string candidate(j.GetString(), j.GetStringLength()); + if ( candidate.size() > 2 && candidate.front() == candidate.back() && + candidate.back() == '/' ) + { + // Remove the '/'s + candidate.erase(0, 1); + candidate.erase(candidate.size() - 1); + } + + auto re = std::make_unique(candidate.c_str()); + if ( ! re->Compile() ) + return "error compiling pattern"; + + return make_intrusive(re.release()); + } + + case TYPE_ADDR: + case TYPE_SUBNET: + { + if ( ! j.IsString() ) + return mismatch_err(); + + int width = 0; + std::string candidate; + + if ( t->Tag() == TYPE_ADDR ) + candidate = std::string(j.GetString(), j.GetStringLength()); + else + { + std::string_view subnet_sv(j.GetString(), j.GetStringLength()); + auto pos = subnet_sv.find('/'); + if ( pos == subnet_sv.npos ) + return util::fmt("invalid value for subnet: '%s'", j.GetString()); + + candidate = std::string(j.GetString(), pos); + + errno = 0; + char* end; + width = strtol(subnet_sv.data() + pos + 1, &end, 10); + if ( subnet_sv.data() + pos + 1 == end || errno ) + return util::fmt("invalid value for subnet: '%s'", j.GetString()); + } + + if ( candidate.front() == '[' ) + candidate.erase(0, 1); + if ( candidate.back() == ']' ) + candidate.erase(candidate.size() - 1); + + if ( t->Tag() == TYPE_ADDR ) + return make_intrusive(candidate); + else + return make_intrusive(candidate.c_str(), width); + } + + case TYPE_ENUM: + { + if ( ! j.IsString() ) + return mismatch_err(); + + auto et = t->AsEnumType(); + auto intval = et->Lookup({j.GetString(), j.GetStringLength()}); + + if ( intval < 0 ) + return util::fmt("'%s' is not a valid enum for '%s'.", j.GetString(), + et->GetName().c_str()); + + return et->GetEnumVal(intval); + } + + case TYPE_STRING: + { + if ( ! j.IsString() ) + return mismatch_err(); + + return make_intrusive(j.GetStringLength(), j.GetString()); + } + + case TYPE_TABLE: + { + if ( ! j.IsArray() ) + return mismatch_err(); + + if ( ! t->IsSet() ) + return util::fmt("tables are not supported"); + + auto tt = t->AsSetType(); + auto tl = tt->GetIndices(); + auto tv = make_intrusive(IntrusivePtr{NewRef{}, tt}); + + for ( const auto& item : j.GetArray() ) + { + std::variant v; + + if ( tl->GetTypes().size() == 1 ) + v = BuildVal(item, tl->GetPureType()); + else + v = BuildVal(item, tl); + + if ( ! get_if(&v) ) + return v; + + if ( ! std::get(v) ) + continue; + + tv->Assign(std::move(std::get(v)), nullptr); + } + + return tv; + } + + case TYPE_RECORD: + { + if ( ! j.IsObject() ) + return mismatch_err(); + + auto rt = t->AsRecordType(); + auto rv = make_intrusive(IntrusivePtr{NewRef{}, rt}); + for ( int i = 0; i < rt->NumFields(); ++i ) + { + auto td_i = rt->FieldDecl(i); + auto m_it = j.FindMember(td_i->id); + bool has_member = m_it != j.MemberEnd(); + bool member_is_null = has_member && m_it->value.IsNull(); + + if ( ! has_member || member_is_null ) + { + if ( ! td_i->GetAttr(detail::ATTR_OPTIONAL) && + ! td_i->GetAttr(detail::ATTR_DEFAULT) ) + return util::fmt("required field %s$%s is %s in JSON", t->GetName().c_str(), + td_i->id, member_is_null ? "null" : "missing"); + + continue; + } + + auto v = BuildVal(m_it->value, td_i->type); + if ( ! get_if(&v) ) + return v; + + rv->Assign(i, std::move(std::get(v))); + } + + return rv; + } + + case TYPE_LIST: + { + if ( ! j.IsArray() ) + return mismatch_err(); + + auto lt = t->AsTypeList(); + + if ( j.GetArray().Size() < lt->GetTypes().size() ) + return "index type doesn't match"; + + auto lv = make_intrusive(TYPE_ANY); + + for ( size_t i = 0; i < lt->GetTypes().size(); i++ ) + { + auto v = BuildVal(j.GetArray()[i], lt->GetTypes()[i]); + if ( ! get_if(&v) ) + return v; + + lv->Append(std::move(std::get(v))); + } + + return lv; + } + + case TYPE_VECTOR: + { + if ( ! j.IsArray() ) + return mismatch_err(); + + auto vt = t->AsVectorType(); + auto vv = make_intrusive(IntrusivePtr{NewRef{}, vt}); + for ( const auto& item : j.GetArray() ) + { + auto v = BuildVal(item, vt->Yield()); + if ( ! get_if(&v) ) + return v; + + if ( ! std::get(v) ) + continue; + + vv->Assign(vv->Size(), std::move(std::get(v))); + } + + return vv; + } + + default: + return util::fmt("type '%s' unsupport", type_name(t->Tag())); + } + } + +std::variant detail::ValFromJSON(std::string_view json_str, const TypePtr& t) + { + rapidjson::Document doc; + rapidjson::ParseResult ok = doc.Parse(json_str.data(), json_str.length()); + + if ( ! ok ) + return util::fmt("JSON parse error: %s Offset: %lu", rapidjson::GetParseError_En(ok.Code()), + ok.Offset()); + + return BuildVal(doc, t); + } + ValPtr StringVal::DoClone(CloneState* state) { // We could likely treat this type as immutable and return a reference diff --git a/src/Val.h b/src/Val.h index 7290a6eacd..629dbe624e 100644 --- a/src/Val.h +++ b/src/Val.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "zeek/IntrusivePtr.h" @@ -1794,4 +1795,12 @@ extern bool can_cast_value_to_type(const Val* v, Type* t); // specific instance later. extern bool can_cast_value_to_type(const Type* s, Type* t); +namespace detail + { +// Parses a JSON string into arbitrary Zeek data using std::variant to simulate functional exception +// handling. Returns a ValPtr if parsing was successful, or a std::string containing an error +// message if an error occurred. +extern std::variant ValFromJSON(std::string_view json_str, const TypePtr& t); + } + } // namespace zeek diff --git a/src/analyzer/CMakeLists.txt b/src/analyzer/CMakeLists.txt index 496de66d32..ca901c3771 100644 --- a/src/analyzer/CMakeLists.txt +++ b/src/analyzer/CMakeLists.txt @@ -1,12 +1,14 @@ zeek_add_subdir_library( analyzer - INTERNAL_DEPENDENCIES ${BIF_BUILD_TARGET} - INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + INTERNAL_DEPENDENCIES + ${BIF_BUILD_TARGET} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} SOURCES - Analyzer.cc - Component.cc - Manager.cc -) + Analyzer.cc + Component.cc + Manager.cc) # Treat BIFs as builtin (alternative mode). bif_target(analyzer.bif) diff --git a/src/analyzer/protocol/bittorrent/CMakeLists.txt b/src/analyzer/protocol/bittorrent/CMakeLists.txt index 2881d8339f..9c663bc3d0 100644 --- a/src/analyzer/protocol/bittorrent/CMakeLists.txt +++ b/src/analyzer/protocol/bittorrent/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek BitTorrent SOURCES - BitTorrent.cc - BitTorrentTracker.cc - Plugin.cc + BitTorrent.cc + BitTorrentTracker.cc + Plugin.cc BIFS - events.bif + events.bif PAC - bittorrent.pac - bittorrent-analyzer.pac - bittorrent-protocol.pac -) + bittorrent.pac + bittorrent-analyzer.pac + bittorrent-protocol.pac) diff --git a/src/analyzer/protocol/conn-size/CMakeLists.txt b/src/analyzer/protocol/conn-size/CMakeLists.txt index 5ed096d5c3..6780316ab5 100644 --- a/src/analyzer/protocol/conn-size/CMakeLists.txt +++ b/src/analyzer/protocol/conn-size/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek ConnSize SOURCES - ConnSize.cc - Plugin.cc + ConnSize.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/dce-rpc/CMakeLists.txt b/src/analyzer/protocol/dce-rpc/CMakeLists.txt index 39cb498b6e..34b3f95ba8 100644 --- a/src/analyzer/protocol/dce-rpc/CMakeLists.txt +++ b/src/analyzer/protocol/dce-rpc/CMakeLists.txt @@ -2,17 +2,16 @@ zeek_add_plugin( Zeek DCE_RPC SOURCES - DCE_RPC.cc - Plugin.cc + DCE_RPC.cc + Plugin.cc BIFS - consts.bif - types.bif - events.bif + consts.bif + types.bif + events.bif PAC - dce_rpc.pac - dce_rpc-protocol.pac - dce_rpc-analyzer.pac - dce_rpc-auth.pac - endpoint-atsvc.pac - endpoint-epmapper.pac -) + dce_rpc.pac + dce_rpc-protocol.pac + dce_rpc-analyzer.pac + dce_rpc-auth.pac + endpoint-atsvc.pac + endpoint-epmapper.pac) diff --git a/src/analyzer/protocol/dhcp/CMakeLists.txt b/src/analyzer/protocol/dhcp/CMakeLists.txt index 2964060d82..c6623b56f0 100644 --- a/src/analyzer/protocol/dhcp/CMakeLists.txt +++ b/src/analyzer/protocol/dhcp/CMakeLists.txt @@ -2,14 +2,13 @@ zeek_add_plugin( Zeek DHCP SOURCES - DHCP.cc - Plugin.cc + DHCP.cc + Plugin.cc BIFS - events.bif - types.bif + events.bif + types.bif PAC - dhcp.pac - dhcp-protocol.pac - dhcp-analyzer.pac - dhcp-options.pac -) + dhcp.pac + dhcp-protocol.pac + dhcp-analyzer.pac + dhcp-options.pac) diff --git a/src/analyzer/protocol/dnp3/CMakeLists.txt b/src/analyzer/protocol/dnp3/CMakeLists.txt index be084cf874..dd647498f8 100644 --- a/src/analyzer/protocol/dnp3/CMakeLists.txt +++ b/src/analyzer/protocol/dnp3/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek DNP3 SOURCES - DNP3.cc - Plugin.cc + DNP3.cc + Plugin.cc BIFS - events.bif + events.bif PAC - dnp3.pac - dnp3-analyzer.pac - dnp3-protocol.pac - dnp3-objects.pac -) + dnp3.pac + dnp3-analyzer.pac + dnp3-protocol.pac + dnp3-objects.pac) diff --git a/src/analyzer/protocol/dns/CMakeLists.txt b/src/analyzer/protocol/dns/CMakeLists.txt index 8e6a9c8a93..7fbeec5e1e 100644 --- a/src/analyzer/protocol/dns/CMakeLists.txt +++ b/src/analyzer/protocol/dns/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek DNS SOURCES - DNS.cc - Plugin.cc + DNS.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/file/CMakeLists.txt b/src/analyzer/protocol/file/CMakeLists.txt index 5408b1851c..ae574880cf 100644 --- a/src/analyzer/protocol/file/CMakeLists.txt +++ b/src/analyzer/protocol/file/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek File SOURCES - File.cc - Plugin.cc + File.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/finger/CMakeLists.txt b/src/analyzer/protocol/finger/CMakeLists.txt index 056a5f93e2..39174c03c5 100644 --- a/src/analyzer/protocol/finger/CMakeLists.txt +++ b/src/analyzer/protocol/finger/CMakeLists.txt @@ -1,9 +1,8 @@ spicy_add_analyzer( - NAME + NAME Finger - SOURCES + SOURCES finger.spicy finger.evt - LEGACY - legacy -) + LEGACY + legacy) diff --git a/src/analyzer/protocol/finger/legacy/CMakeLists.txt b/src/analyzer/protocol/finger/legacy/CMakeLists.txt index 6f006489bd..3ad97bd66b 100644 --- a/src/analyzer/protocol/finger/legacy/CMakeLists.txt +++ b/src/analyzer/protocol/finger/legacy/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek Finger SOURCES - Finger.cc - Plugin.cc + Finger.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/ftp/CMakeLists.txt b/src/analyzer/protocol/ftp/CMakeLists.txt index 3420c4eb5f..728c5ddc65 100644 --- a/src/analyzer/protocol/ftp/CMakeLists.txt +++ b/src/analyzer/protocol/ftp/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek FTP SOURCES - FTP.cc - Plugin.cc + FTP.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/gnutella/CMakeLists.txt b/src/analyzer/protocol/gnutella/CMakeLists.txt index 7177f2bb4b..58d28c5a37 100644 --- a/src/analyzer/protocol/gnutella/CMakeLists.txt +++ b/src/analyzer/protocol/gnutella/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek Gnutella SOURCES - Gnutella.cc - Plugin.cc + Gnutella.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/gssapi/CMakeLists.txt b/src/analyzer/protocol/gssapi/CMakeLists.txt index c35ae4187b..454b45c5a2 100644 --- a/src/analyzer/protocol/gssapi/CMakeLists.txt +++ b/src/analyzer/protocol/gssapi/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek GSSAPI SOURCES - GSSAPI.cc - Plugin.cc + GSSAPI.cc + Plugin.cc BIFS - events.bif + events.bif PAC - gssapi.pac - gssapi-protocol.pac - gssapi-analyzer.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac -) + gssapi.pac + gssapi-protocol.pac + gssapi-analyzer.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac) diff --git a/src/analyzer/protocol/http/CMakeLists.txt b/src/analyzer/protocol/http/CMakeLists.txt index eb1f66e9f0..a0088de732 100644 --- a/src/analyzer/protocol/http/CMakeLists.txt +++ b/src/analyzer/protocol/http/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek HTTP SOURCES - HTTP.cc - Plugin.cc + HTTP.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/ident/CMakeLists.txt b/src/analyzer/protocol/ident/CMakeLists.txt index 549073420d..82c32491ee 100644 --- a/src/analyzer/protocol/ident/CMakeLists.txt +++ b/src/analyzer/protocol/ident/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek Ident SOURCES - Ident.cc - Plugin.cc + Ident.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/imap/CMakeLists.txt b/src/analyzer/protocol/imap/CMakeLists.txt index 33f340b54f..257b1bf0bc 100644 --- a/src/analyzer/protocol/imap/CMakeLists.txt +++ b/src/analyzer/protocol/imap/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek IMAP SOURCES - Plugin.cc - IMAP.cc + Plugin.cc + IMAP.cc BIFS - events.bif + events.bif PAC - imap.pac - imap-analyzer.pac - imap-protocol.pac -) + imap.pac + imap-analyzer.pac + imap-protocol.pac) diff --git a/src/analyzer/protocol/irc/CMakeLists.txt b/src/analyzer/protocol/irc/CMakeLists.txt index a99f0a5b72..0791a61c79 100644 --- a/src/analyzer/protocol/irc/CMakeLists.txt +++ b/src/analyzer/protocol/irc/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek IRC SOURCES - IRC.cc - Plugin.cc + IRC.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/krb/CMakeLists.txt b/src/analyzer/protocol/krb/CMakeLists.txt index 192b9cf2bc..a9ac783095 100644 --- a/src/analyzer/protocol/krb/CMakeLists.txt +++ b/src/analyzer/protocol/krb/CMakeLists.txt @@ -2,28 +2,27 @@ zeek_add_plugin( Zeek KRB SOURCES - Plugin.cc - KRB.cc - KRB_TCP.cc + Plugin.cc + KRB.cc + KRB_TCP.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - krb.pac - krb-protocol.pac - krb-analyzer.pac - krb-asn1.pac - krb-defs.pac - krb-types.pac - krb-padata.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac + krb.pac + krb-protocol.pac + krb-analyzer.pac + krb-asn1.pac + krb-defs.pac + krb-types.pac + krb-padata.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac PAC - krb_TCP.pac - krb-protocol.pac - krb-analyzer.pac - krb-asn1.pac - krb-defs.pac - krb-types.pac - krb-padata.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac -) + krb_TCP.pac + krb-protocol.pac + krb-analyzer.pac + krb-asn1.pac + krb-defs.pac + krb-types.pac + krb-padata.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac) diff --git a/src/analyzer/protocol/login/CMakeLists.txt b/src/analyzer/protocol/login/CMakeLists.txt index 215d17dbd6..d2e78bd7ac 100644 --- a/src/analyzer/protocol/login/CMakeLists.txt +++ b/src/analyzer/protocol/login/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek Login SOURCES - Login.cc - RSH.cc - Telnet.cc - Rlogin.cc - NVT.cc - Plugin.cc + Login.cc + RSH.cc + Telnet.cc + Rlogin.cc + NVT.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/mime/CMakeLists.txt b/src/analyzer/protocol/mime/CMakeLists.txt index 6936945852..774766d2d8 100644 --- a/src/analyzer/protocol/mime/CMakeLists.txt +++ b/src/analyzer/protocol/mime/CMakeLists.txt @@ -7,8 +7,7 @@ zeek_add_plugin( Zeek MIME SOURCES - MIME.cc - Plugin.cc + MIME.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/modbus/CMakeLists.txt b/src/analyzer/protocol/modbus/CMakeLists.txt index edb22e4727..1c2f078760 100644 --- a/src/analyzer/protocol/modbus/CMakeLists.txt +++ b/src/analyzer/protocol/modbus/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek Modbus SOURCES - Modbus.cc - Plugin.cc + Modbus.cc + Plugin.cc BIFS - events.bif + events.bif PAC - modbus.pac - modbus-analyzer.pac - modbus-protocol.pac -) + modbus.pac + modbus-analyzer.pac + modbus-protocol.pac) diff --git a/src/analyzer/protocol/mqtt/CMakeLists.txt b/src/analyzer/protocol/mqtt/CMakeLists.txt index 471be968bb..7c55d984d2 100644 --- a/src/analyzer/protocol/mqtt/CMakeLists.txt +++ b/src/analyzer/protocol/mqtt/CMakeLists.txt @@ -2,26 +2,25 @@ zeek_add_plugin( Zeek MQTT SOURCES - MQTT.cc - Plugin.cc + MQTT.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - mqtt.pac - mqtt-protocol.pac - commands/connect.pac - commands/connack.pac - commands/publish.pac - commands/puback.pac - commands/pubrec.pac - commands/pubrel.pac - commands/pubcomp.pac - commands/subscribe.pac - commands/suback.pac - commands/unsuback.pac - commands/unsubscribe.pac - commands/disconnect.pac - commands/pingreq.pac - commands/pingresp.pac -) + mqtt.pac + mqtt-protocol.pac + commands/connect.pac + commands/connack.pac + commands/publish.pac + commands/puback.pac + commands/pubrec.pac + commands/pubrel.pac + commands/pubcomp.pac + commands/subscribe.pac + commands/suback.pac + commands/unsuback.pac + commands/unsubscribe.pac + commands/disconnect.pac + commands/pingreq.pac + commands/pingresp.pac) diff --git a/src/analyzer/protocol/mysql/CMakeLists.txt b/src/analyzer/protocol/mysql/CMakeLists.txt index deb369a18b..8dcecf637d 100644 --- a/src/analyzer/protocol/mysql/CMakeLists.txt +++ b/src/analyzer/protocol/mysql/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek MySQL SOURCES - MySQL.cc - Plugin.cc + MySQL.cc + Plugin.cc BIFS - events.bif + events.bif PAC - mysql.pac - mysql-analyzer.pac - mysql-protocol.pac -) + mysql.pac + mysql-analyzer.pac + mysql-protocol.pac) diff --git a/src/analyzer/protocol/ncp/CMakeLists.txt b/src/analyzer/protocol/ncp/CMakeLists.txt index 55805782b4..dd217f9977 100644 --- a/src/analyzer/protocol/ncp/CMakeLists.txt +++ b/src/analyzer/protocol/ncp/CMakeLists.txt @@ -2,11 +2,10 @@ zeek_add_plugin( Zeek NCP SOURCES - NCP.cc - Plugin.cc + NCP.cc + Plugin.cc BIFS - events.bif - consts.bif + events.bif + consts.bif PAC - ncp.pac -) + ncp.pac) diff --git a/src/analyzer/protocol/netbios/CMakeLists.txt b/src/analyzer/protocol/netbios/CMakeLists.txt index e000eee6e5..ef2b863c4d 100644 --- a/src/analyzer/protocol/netbios/CMakeLists.txt +++ b/src/analyzer/protocol/netbios/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek NetBIOS SOURCES - NetbiosSSN.cc - Plugin.cc + NetbiosSSN.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/ntlm/CMakeLists.txt b/src/analyzer/protocol/ntlm/CMakeLists.txt index 340551d9ba..f5cf25b1fd 100644 --- a/src/analyzer/protocol/ntlm/CMakeLists.txt +++ b/src/analyzer/protocol/ntlm/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek NTLM SOURCES - NTLM.cc - Plugin.cc + NTLM.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - ntlm.pac - ntlm-protocol.pac - ntlm-analyzer.pac -) + ntlm.pac + ntlm-protocol.pac + ntlm-analyzer.pac) diff --git a/src/analyzer/protocol/ntp/CMakeLists.txt b/src/analyzer/protocol/ntp/CMakeLists.txt index 3f38c34b8b..1a062716bd 100644 --- a/src/analyzer/protocol/ntp/CMakeLists.txt +++ b/src/analyzer/protocol/ntp/CMakeLists.txt @@ -2,14 +2,13 @@ zeek_add_plugin( Zeek NTP SOURCES - NTP.cc - Plugin.cc + NTP.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - ntp.pac - ntp-analyzer.pac - ntp-mode7.pac - ntp-protocol.pac -) + ntp.pac + ntp-analyzer.pac + ntp-mode7.pac + ntp-protocol.pac) diff --git a/src/analyzer/protocol/ntp/ntp-analyzer.pac b/src/analyzer/protocol/ntp/ntp-analyzer.pac index c202e40daf..d0ce8d964d 100644 --- a/src/analyzer/protocol/ntp/ntp-analyzer.pac +++ b/src/analyzer/protocol/ntp/ntp-analyzer.pac @@ -130,11 +130,25 @@ refine flow NTP_Flow += { + %member{ + bool flipped_; + %} + + %init{ + flipped_ = false; + %} function proc_ntp_message(msg: NTP_PDU): bool %{ connection()->zeek_analyzer()->AnalyzerConfirmation(); + // Flip roles for SERVER mode message from orig or a CLIENT mode message from resp. + if ( ((${msg.mode} == SERVER && is_orig()) || (${msg.mode} == CLIENT && ! is_orig())) && ! flipped_ ) + { + connection()->zeek_analyzer()->Conn()->FlipRoles(); + flipped_ = true; + } + if ( ! ntp_message ) return false; diff --git a/src/analyzer/protocol/ntp/ntp-protocol.pac b/src/analyzer/protocol/ntp/ntp-protocol.pac index 6c92aee1e8..dac60ebfc1 100644 --- a/src/analyzer/protocol/ntp/ntp-protocol.pac +++ b/src/analyzer/protocol/ntp/ntp-protocol.pac @@ -1,5 +1,14 @@ # This is the common part in the header format. # See RFC 5905 for details +enum NTP_Mode { + SYMMETRIC_ACTIVE = 1, + SYMMETRIC_PASSIVE = 2, + CLIENT = 3, + SERVER = 4, + BROADCAST_SERVER = 5, + BROADCAST_CLIENT = 6, +}; + type NTP_PDU(is_orig: bool) = record { # The first byte of the NTP header contains the leap indicator, # the version and the mode diff --git a/src/analyzer/protocol/pia/CMakeLists.txt b/src/analyzer/protocol/pia/CMakeLists.txt index ad7fdc8a55..e8ee99dd46 100644 --- a/src/analyzer/protocol/pia/CMakeLists.txt +++ b/src/analyzer/protocol/pia/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - Zeek - PIA - SOURCES - PIA.cc - Plugin.cc -) +zeek_add_plugin(Zeek PIA SOURCES PIA.cc Plugin.cc) diff --git a/src/analyzer/protocol/pop3/CMakeLists.txt b/src/analyzer/protocol/pop3/CMakeLists.txt index 3de7ae5289..f5283b17e4 100644 --- a/src/analyzer/protocol/pop3/CMakeLists.txt +++ b/src/analyzer/protocol/pop3/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek POP3 SOURCES - POP3.cc - Plugin.cc + POP3.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/radius/CMakeLists.txt b/src/analyzer/protocol/radius/CMakeLists.txt index 62c541fa58..3239bc71c7 100644 --- a/src/analyzer/protocol/radius/CMakeLists.txt +++ b/src/analyzer/protocol/radius/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek RADIUS SOURCES - RADIUS.cc - Plugin.cc + RADIUS.cc + Plugin.cc BIFS - events.bif + events.bif PAC - radius.pac - radius-analyzer.pac - radius-protocol.pac -) + radius.pac + radius-analyzer.pac + radius-protocol.pac) diff --git a/src/analyzer/protocol/rdp/CMakeLists.txt b/src/analyzer/protocol/rdp/CMakeLists.txt index 836dc45ca8..2cc96a0768 100644 --- a/src/analyzer/protocol/rdp/CMakeLists.txt +++ b/src/analyzer/protocol/rdp/CMakeLists.txt @@ -2,19 +2,18 @@ zeek_add_plugin( Zeek RDP SOURCES - RDPEUDP.cc - RDP.cc - Plugin.cc + RDPEUDP.cc + RDP.cc + Plugin.cc BIFS - events.bif - types.bif + events.bif + types.bif PAC - rdp.pac - rdp-analyzer.pac - rdp-protocol.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac + rdp.pac + rdp-analyzer.pac + rdp-protocol.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac PAC - rdpeudp.pac - rdpeudp-analyzer.pac - rdpeudp-protocol.pac -) + rdpeudp.pac + rdpeudp-analyzer.pac + rdpeudp-protocol.pac) diff --git a/src/analyzer/protocol/rfb/CMakeLists.txt b/src/analyzer/protocol/rfb/CMakeLists.txt index 0d902b55d7..ee23af1e88 100644 --- a/src/analyzer/protocol/rfb/CMakeLists.txt +++ b/src/analyzer/protocol/rfb/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek RFB SOURCES - RFB.cc - Plugin.cc + RFB.cc + Plugin.cc BIFS - events.bif + events.bif PAC - rfb.pac - rfb-analyzer.pac - rfb-protocol.pac -) + rfb.pac + rfb-analyzer.pac + rfb-protocol.pac) diff --git a/src/analyzer/protocol/rpc/CMakeLists.txt b/src/analyzer/protocol/rpc/CMakeLists.txt index e871ec1956..fcb3547b04 100644 --- a/src/analyzer/protocol/rpc/CMakeLists.txt +++ b/src/analyzer/protocol/rpc/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek RPC SOURCES - RPC.cc - NFS.cc - MOUNT.cc - Portmap.cc - XDR.cc - Plugin.cc + RPC.cc + NFS.cc + MOUNT.cc + Portmap.cc + XDR.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/sip/CMakeLists.txt b/src/analyzer/protocol/sip/CMakeLists.txt index 1fb64bf0af..1d3d9a7d8d 100644 --- a/src/analyzer/protocol/sip/CMakeLists.txt +++ b/src/analyzer/protocol/sip/CMakeLists.txt @@ -2,17 +2,16 @@ zeek_add_plugin( Zeek SIP SOURCES - Plugin.cc - SIP.cc - SIP_TCP.cc + Plugin.cc + SIP.cc + SIP_TCP.cc BIFS - events.bif + events.bif PAC - sip.pac - sip-analyzer.pac - sip-protocol.pac + sip.pac + sip-analyzer.pac + sip-protocol.pac PAC - sip_TCP.pac - sip-protocol.pac - sip-analyzer.pac -) + sip_TCP.pac + sip-protocol.pac + sip-analyzer.pac) diff --git a/src/analyzer/protocol/smb/CMakeLists.txt b/src/analyzer/protocol/smb/CMakeLists.txt index 7466dbd263..4bd7cf1eee 100644 --- a/src/analyzer/protocol/smb/CMakeLists.txt +++ b/src/analyzer/protocol/smb/CMakeLists.txt @@ -2,88 +2,87 @@ zeek_add_plugin( Zeek SMB SOURCES - SMB.cc - Plugin.cc + SMB.cc + Plugin.cc BIFS - # SMB 1. - smb1_com_check_directory.bif - smb1_com_close.bif - smb1_com_create_directory.bif - smb1_com_echo.bif - smb1_com_logoff_andx.bif - smb1_com_negotiate.bif - smb1_com_nt_create_andx.bif - smb1_com_nt_cancel.bif - smb1_com_query_information.bif - smb1_com_read_andx.bif - smb1_com_session_setup_andx.bif - smb1_com_transaction.bif - smb1_com_transaction_secondary.bif - smb1_com_transaction2.bif - smb1_com_transaction2_secondary.bif - smb1_com_tree_connect_andx.bif - smb1_com_tree_disconnect.bif - smb1_com_write_andx.bif - smb1_events.bif - # SMB 2. - smb2_com_close.bif - smb2_com_create.bif - smb2_com_negotiate.bif - smb2_com_read.bif - smb2_com_session_setup.bif - smb2_com_set_info.bif - smb2_com_tree_connect.bif - smb2_com_tree_disconnect.bif - smb2_com_write.bif - smb2_com_transform_header.bif - smb2_events.bif - # Common boilerplate. - events.bif - consts.bif - types.bif + # SMB 1. + smb1_com_check_directory.bif + smb1_com_close.bif + smb1_com_create_directory.bif + smb1_com_echo.bif + smb1_com_logoff_andx.bif + smb1_com_negotiate.bif + smb1_com_nt_create_andx.bif + smb1_com_nt_cancel.bif + smb1_com_query_information.bif + smb1_com_read_andx.bif + smb1_com_session_setup_andx.bif + smb1_com_transaction.bif + smb1_com_transaction_secondary.bif + smb1_com_transaction2.bif + smb1_com_transaction2_secondary.bif + smb1_com_tree_connect_andx.bif + smb1_com_tree_disconnect.bif + smb1_com_write_andx.bif + smb1_events.bif + # SMB 2. + smb2_com_close.bif + smb2_com_create.bif + smb2_com_negotiate.bif + smb2_com_read.bif + smb2_com_session_setup.bif + smb2_com_set_info.bif + smb2_com_tree_connect.bif + smb2_com_tree_disconnect.bif + smb2_com_write.bif + smb2_com_transform_header.bif + smb2_events.bif + # Common boilerplate. + events.bif + consts.bif + types.bif PAC - # Common boilerplate. - smb.pac - smb-common.pac - smb-strings.pac - smb-time.pac - smb-pipe.pac - smb-gssapi.pac - smb-mailslot.pac - # SMB 1. - smb1-protocol.pac - smb1-com-check-directory.pac - smb1-com-close.pac - smb1-com-create-directory.pac - smb1-com-echo.pac - smb1-com-locking-andx.pac - smb1-com-logoff-andx.pac - smb1-com-negotiate.pac - smb1-com-nt-cancel.pac - smb1-com-nt-create-andx.pac - smb1-com-nt-transact.pac - smb1-com-query-information.pac - smb1-com-read-andx.pac - smb1-com-session-setup-andx.pac - smb1-com-transaction-secondary.pac - smb1-com-transaction.pac - smb1-com-transaction2.pac - smb1-com-transaction2-secondary.pac - smb1-com-tree-connect-andx.pac - smb1-com-tree-disconnect.pac - smb1-com-write-andx.pac - # SMB 2. - smb2-protocol.pac - smb2-com-close.pac - smb2-com-create.pac - smb2-com-ioctl.pac - smb2-com-lock.pac - smb2-com-negotiate.pac - smb2-com-read.pac - smb2-com-session-setup.pac - smb2-com-set-info.pac - smb2-com-tree-connect.pac - smb2-com-tree-disconnect.pac - smb2-com-write.pac - smb2-com-transform-header.pac -) + # Common boilerplate. + smb.pac + smb-common.pac + smb-strings.pac + smb-time.pac + smb-pipe.pac + smb-gssapi.pac + smb-mailslot.pac + # SMB 1. + smb1-protocol.pac + smb1-com-check-directory.pac + smb1-com-close.pac + smb1-com-create-directory.pac + smb1-com-echo.pac + smb1-com-locking-andx.pac + smb1-com-logoff-andx.pac + smb1-com-negotiate.pac + smb1-com-nt-cancel.pac + smb1-com-nt-create-andx.pac + smb1-com-nt-transact.pac + smb1-com-query-information.pac + smb1-com-read-andx.pac + smb1-com-session-setup-andx.pac + smb1-com-transaction-secondary.pac + smb1-com-transaction.pac + smb1-com-transaction2.pac + smb1-com-transaction2-secondary.pac + smb1-com-tree-connect-andx.pac + smb1-com-tree-disconnect.pac + smb1-com-write-andx.pac + # SMB 2. + smb2-protocol.pac + smb2-com-close.pac + smb2-com-create.pac + smb2-com-ioctl.pac + smb2-com-lock.pac + smb2-com-negotiate.pac + smb2-com-read.pac + smb2-com-session-setup.pac + smb2-com-set-info.pac + smb2-com-tree-connect.pac + smb2-com-tree-disconnect.pac + smb2-com-write.pac + smb2-com-transform-header.pac) diff --git a/src/analyzer/protocol/smb/consts.bif b/src/analyzer/protocol/smb/consts.bif index 321875b43d..6acd464f6a 100644 --- a/src/analyzer/protocol/smb/consts.bif +++ b/src/analyzer/protocol/smb/consts.bif @@ -1 +1,2 @@ -const SMB::pipe_filenames: string_set; \ No newline at end of file +const SMB::pipe_filenames: string_set; +const SMB::max_pending_messages: count; diff --git a/src/analyzer/protocol/smb/smb2-com-ioctl.pac b/src/analyzer/protocol/smb/smb2-com-ioctl.pac index 8d65312f9d..d37320ae68 100644 --- a/src/analyzer/protocol/smb/smb2-com-ioctl.pac +++ b/src/analyzer/protocol/smb/smb2-com-ioctl.pac @@ -17,6 +17,17 @@ refine connection SMB_Conn += { function proc_smb2_ioctl_request(val: SMB2_ioctl_request) : bool %{ + if ( zeek::BifConst::SMB::max_pending_messages > 0 && + smb2_ioctl_fids.size() >= zeek::BifConst::SMB::max_pending_messages ) + { + if ( smb2_discarded_messages_state ) + zeek::BifEvent::enqueue_smb2_discarded_messages_state(zeek_analyzer(), zeek_analyzer()->Conn(), + zeek::make_intrusive("ioctl")); + + + smb2_ioctl_fids.clear(); + } + smb2_ioctl_fids[${val.header.message_id}] = ${val.file_id.persistent} + ${val.file_id._volatile}; return true; %} diff --git a/src/analyzer/protocol/smb/smb2-com-read.pac b/src/analyzer/protocol/smb/smb2-com-read.pac index 04679d804f..d9b2d7cf7f 100644 --- a/src/analyzer/protocol/smb/smb2-com-read.pac +++ b/src/analyzer/protocol/smb/smb2-com-read.pac @@ -34,6 +34,17 @@ refine connection SMB_Conn += { ${val.read_len}); } + if ( zeek::BifConst::SMB::max_pending_messages > 0 && + (smb2_read_offsets.size() >= zeek::BifConst::SMB::max_pending_messages || + smb2_read_fids.size() >= zeek::BifConst::SMB::max_pending_messages) ) + { + if ( smb2_discarded_messages_state ) + zeek::BifEvent::enqueue_smb2_discarded_messages_state(zeek_analyzer(), zeek_analyzer()->Conn(), + zeek::make_intrusive("read")); + smb2_read_offsets.clear(); + smb2_read_fids.clear(); + } + smb2_read_offsets[${h.message_id}] = ${val.offset}; smb2_read_fids[${h.message_id}] = ${val.file_id.persistent} + ${val.file_id._volatile}; diff --git a/src/analyzer/protocol/smb/smb2-protocol.pac b/src/analyzer/protocol/smb/smb2-protocol.pac index 3c354d3216..f8126ba3bf 100644 --- a/src/analyzer/protocol/smb/smb2-protocol.pac +++ b/src/analyzer/protocol/smb/smb2-protocol.pac @@ -230,6 +230,16 @@ refine connection SMB_Conn += { %{ if ( is_orig ) { + if ( zeek::BifConst::SMB::max_pending_messages > 0 && + smb2_request_tree_id.size() >= zeek::BifConst::SMB::max_pending_messages ) + { + if ( smb2_discarded_messages_state ) + zeek::BifEvent::enqueue_smb2_discarded_messages_state(zeek_analyzer(), zeek_analyzer()->Conn(), + zeek::make_intrusive("tree")); + + smb2_request_tree_id.clear(); + } + // Store the tree_id smb2_request_tree_id[${h.message_id}] = ${h.tree_id}; } diff --git a/src/analyzer/protocol/smb/smb2_events.bif b/src/analyzer/protocol/smb/smb2_events.bif index 2071a0600e..9ef661df77 100644 --- a/src/analyzer/protocol/smb/smb2_events.bif +++ b/src/analyzer/protocol/smb/smb2_events.bif @@ -15,3 +15,16 @@ ## ## .. zeek:see:: smb1_message event smb2_message%(c: connection, hdr: SMB2::Header, is_orig: bool%); + +## Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` +## version 2 connections for which pending read, ioctl or tree requests exceeds +## the :zeek:see:`SMB::max_pending_messages` setting. This event indicates either +## traffic loss, traffic load-balancing issues, or failures to parse or match +## SMB responses with SMB requests. When this event is raised, internal per-connection +## parser state has been reset. +## +## c: The affected connection. +## +## state: String describing what kind of state was affected. +## One of read, ioctl or tree. +event smb2_discarded_messages_state%(c: connection, state: string%); diff --git a/src/analyzer/protocol/smtp/CMakeLists.txt b/src/analyzer/protocol/smtp/CMakeLists.txt index e1618af641..b302045985 100644 --- a/src/analyzer/protocol/smtp/CMakeLists.txt +++ b/src/analyzer/protocol/smtp/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek SMTP SOURCES - SMTP.cc - Plugin.cc + SMTP.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/snmp/CMakeLists.txt b/src/analyzer/protocol/snmp/CMakeLists.txt index d93762aa75..48c829d91b 100644 --- a/src/analyzer/protocol/snmp/CMakeLists.txt +++ b/src/analyzer/protocol/snmp/CMakeLists.txt @@ -2,14 +2,13 @@ zeek_add_plugin( Zeek SNMP SOURCES - SNMP.cc - Plugin.cc + SNMP.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - snmp.pac - snmp-protocol.pac - snmp-analyzer.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac -) + snmp.pac + snmp-protocol.pac + snmp-analyzer.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac) diff --git a/src/analyzer/protocol/socks/CMakeLists.txt b/src/analyzer/protocol/socks/CMakeLists.txt index fa0e6b083d..7d11ee70d5 100644 --- a/src/analyzer/protocol/socks/CMakeLists.txt +++ b/src/analyzer/protocol/socks/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek SOCKS SOURCES - SOCKS.cc - Plugin.cc + SOCKS.cc + Plugin.cc BIFS - events.bif + events.bif PAC - socks.pac - socks-protocol.pac - socks-analyzer.pac -) + socks.pac + socks-protocol.pac + socks-analyzer.pac) diff --git a/src/analyzer/protocol/ssh/CMakeLists.txt b/src/analyzer/protocol/ssh/CMakeLists.txt index 6205089530..f2364bffef 100644 --- a/src/analyzer/protocol/ssh/CMakeLists.txt +++ b/src/analyzer/protocol/ssh/CMakeLists.txt @@ -2,14 +2,13 @@ zeek_add_plugin( Zeek SSH SOURCES - SSH.cc - Plugin.cc + SSH.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - ssh.pac - ssh-analyzer.pac - ssh-protocol.pac - consts.pac -) + ssh.pac + ssh-analyzer.pac + ssh-protocol.pac + consts.pac) diff --git a/src/analyzer/protocol/ssl/CMakeLists.txt b/src/analyzer/protocol/ssl/CMakeLists.txt index 3cc3fc5649..5c686b16cf 100644 --- a/src/analyzer/protocol/ssl/CMakeLists.txt +++ b/src/analyzer/protocol/ssl/CMakeLists.txt @@ -2,34 +2,33 @@ zeek_add_plugin( Zeek SSL SOURCES - SSL.cc - DTLS.cc - Plugin.cc + SSL.cc + DTLS.cc + Plugin.cc BIFS - types.bif - events.bif - functions.bif - consts.bif + types.bif + events.bif + functions.bif + consts.bif PAC - tls-handshake.pac - tls-handshake-protocol.pac - tls-handshake-analyzer.pac - ssl-defs.pac - proc-certificate.pac - tls-handshake-signed_certificate_timestamp.pac + tls-handshake.pac + tls-handshake-protocol.pac + tls-handshake-analyzer.pac + ssl-defs.pac + proc-certificate.pac + tls-handshake-signed_certificate_timestamp.pac PAC - ssl.pac - ssl-dtls-analyzer.pac - ssl-analyzer.pac - ssl-dtls-protocol.pac - ssl-protocol.pac - ssl-defs.pac - proc-certificate.pac + ssl.pac + ssl-dtls-analyzer.pac + ssl-analyzer.pac + ssl-dtls-protocol.pac + ssl-protocol.pac + ssl-defs.pac + proc-certificate.pac PAC - dtls.pac - ssl-dtls-analyzer.pac - dtls-analyzer.pac - ssl-dtls-protocol.pac - dtls-protocol.pac - ssl-defs.pac -) + dtls.pac + ssl-dtls-analyzer.pac + dtls-analyzer.pac + ssl-dtls-protocol.pac + dtls-protocol.pac + ssl-defs.pac) diff --git a/src/analyzer/protocol/syslog/CMakeLists.txt b/src/analyzer/protocol/syslog/CMakeLists.txt index c80aefeb32..57c78fdf92 100644 --- a/src/analyzer/protocol/syslog/CMakeLists.txt +++ b/src/analyzer/protocol/syslog/CMakeLists.txt @@ -1,9 +1,8 @@ spicy_add_analyzer( - NAME + NAME Syslog - SOURCES + SOURCES syslog.spicy syslog.evt - LEGACY - legacy -) + LEGACY + legacy) diff --git a/src/analyzer/protocol/syslog/legacy/CMakeLists.txt b/src/analyzer/protocol/syslog/legacy/CMakeLists.txt index 472344a519..ef2f7330d5 100644 --- a/src/analyzer/protocol/syslog/legacy/CMakeLists.txt +++ b/src/analyzer/protocol/syslog/legacy/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek Syslog SOURCES - Syslog.cc - Plugin.cc + Syslog.cc + Plugin.cc BIFS - events.bif + events.bif PAC - syslog.pac - syslog-analyzer.pac - syslog-protocol.pac -) + syslog.pac + syslog-analyzer.pac + syslog-protocol.pac) diff --git a/src/analyzer/protocol/tcp/CMakeLists.txt b/src/analyzer/protocol/tcp/CMakeLists.txt index 613fdc2249..42e41c9dac 100644 --- a/src/analyzer/protocol/tcp/CMakeLists.txt +++ b/src/analyzer/protocol/tcp/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek TCP SOURCES - TCP.cc - TCP_Endpoint.cc - TCP_Reassembler.cc - ContentLine.cc - Plugin.cc + TCP.cc + TCP_Endpoint.cc + TCP_Reassembler.cc + ContentLine.cc + Plugin.cc BIFS - events.bif - types.bif - functions.bif -) + events.bif + types.bif + functions.bif) diff --git a/src/analyzer/protocol/xmpp/CMakeLists.txt b/src/analyzer/protocol/xmpp/CMakeLists.txt index aa3b8336a6..3ea127d691 100644 --- a/src/analyzer/protocol/xmpp/CMakeLists.txt +++ b/src/analyzer/protocol/xmpp/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek XMPP SOURCES - Plugin.cc - XMPP.cc + Plugin.cc + XMPP.cc BIFS - events.bif + events.bif PAC - xmpp.pac - xmpp-analyzer.pac - xmpp-protocol.pac -) + xmpp.pac + xmpp-analyzer.pac + xmpp-protocol.pac) diff --git a/src/analyzer/protocol/zip/CMakeLists.txt b/src/analyzer/protocol/zip/CMakeLists.txt index d51057c15d..e7c11ccdbb 100644 --- a/src/analyzer/protocol/zip/CMakeLists.txt +++ b/src/analyzer/protocol/zip/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - Zeek - ZIP - SOURCES - ZIP.cc - Plugin.cc -) +zeek_add_plugin(Zeek ZIP SOURCES ZIP.cc Plugin.cc) diff --git a/src/broker/CMakeLists.txt b/src/broker/CMakeLists.txt index e2e54b288d..472f67e11d 100644 --- a/src/broker/CMakeLists.txt +++ b/src/broker/CMakeLists.txt @@ -1,13 +1,14 @@ zeek_add_subdir_library( comm - INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} SOURCES - Data.cc - Manager.cc - Store.cc + Data.cc + Manager.cc + Store.cc BIFS - comm.bif - data.bif - messaging.bif - store.bif -) + comm.bif + data.bif + messaging.bif + store.bif) diff --git a/src/file_analysis/CMakeLists.txt b/src/file_analysis/CMakeLists.txt index 80d842e8fc..7920c40f36 100644 --- a/src/file_analysis/CMakeLists.txt +++ b/src/file_analysis/CMakeLists.txt @@ -1,16 +1,17 @@ zeek_add_subdir_library( file_analysis - INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} SOURCES - Manager.cc - File.cc - FileTimer.cc - FileReassembler.cc - Analyzer.cc - AnalyzerSet.cc - Component.cc + Manager.cc + File.cc + FileTimer.cc + FileReassembler.cc + Analyzer.cc + AnalyzerSet.cc + Component.cc BIFS - file_analysis.bif -) + file_analysis.bif) add_subdirectory(analyzer) diff --git a/src/file_analysis/analyzer/data_event/CMakeLists.txt b/src/file_analysis/analyzer/data_event/CMakeLists.txt index e8eda489f0..eb8042dd77 100644 --- a/src/file_analysis/analyzer/data_event/CMakeLists.txt +++ b/src/file_analysis/analyzer/data_event/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek FileDataEvent SOURCES - DataEvent.cc - Plugin.cc + DataEvent.cc + Plugin.cc INCLUDE_DIRS - "${CMAKE_CURRENT_SOURCE_DIR}" -) + "${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/src/file_analysis/analyzer/entropy/CMakeLists.txt b/src/file_analysis/analyzer/entropy/CMakeLists.txt index 6608822199..944cf64a3c 100644 --- a/src/file_analysis/analyzer/entropy/CMakeLists.txt +++ b/src/file_analysis/analyzer/entropy/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek FileEntropy SOURCES - Entropy.cc - Plugin.cc + Entropy.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/file_analysis/analyzer/extract/CMakeLists.txt b/src/file_analysis/analyzer/extract/CMakeLists.txt index 38ce0fd4db..0c08872172 100644 --- a/src/file_analysis/analyzer/extract/CMakeLists.txt +++ b/src/file_analysis/analyzer/extract/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek FileExtract SOURCES - Extract.cc - Plugin.cc + Extract.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/file_analysis/analyzer/hash/CMakeLists.txt b/src/file_analysis/analyzer/hash/CMakeLists.txt index fc1fcf50de..adfd96007f 100644 --- a/src/file_analysis/analyzer/hash/CMakeLists.txt +++ b/src/file_analysis/analyzer/hash/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek FileHash SOURCES - Hash.cc - Plugin.cc + Hash.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/file_analysis/analyzer/pe/CMakeLists.txt b/src/file_analysis/analyzer/pe/CMakeLists.txt index dd8000f1eb..ff98b004db 100644 --- a/src/file_analysis/analyzer/pe/CMakeLists.txt +++ b/src/file_analysis/analyzer/pe/CMakeLists.txt @@ -2,15 +2,14 @@ zeek_add_plugin( Zeek PE SOURCES - PE.cc - Plugin.cc + PE.cc + Plugin.cc BIFS - events.bif + events.bif PAC - pe.pac - pe-analyzer.pac - pe-file-headers.pac - pe-file-idata.pac - pe-file.pac - pe-file-types.pac -) + pe.pac + pe-analyzer.pac + pe-file-headers.pac + pe-file-idata.pac + pe-file.pac + pe-file-types.pac) diff --git a/src/file_analysis/analyzer/x509/CMakeLists.txt b/src/file_analysis/analyzer/x509/CMakeLists.txt index dbd93f0d3a..7f9541df0d 100644 --- a/src/file_analysis/analyzer/x509/CMakeLists.txt +++ b/src/file_analysis/analyzer/x509/CMakeLists.txt @@ -2,16 +2,15 @@ zeek_add_plugin( Zeek X509 SOURCES - X509Common.cc - X509.cc - OCSP.cc - Plugin.cc + X509Common.cc + X509.cc + OCSP.cc + Plugin.cc BIFS - events.bif - types.bif - functions.bif - ocsp_events.bif + events.bif + types.bif + functions.bif + ocsp_events.bif PAC - x509-extension.pac - x509-signed_certificate_timestamp.pac -) + x509-extension.pac + x509-signed_certificate_timestamp.pac) diff --git a/src/fuzzers/CMakeLists.txt b/src/fuzzers/CMakeLists.txt index a7bef79ecb..5bf6e7b5eb 100644 --- a/src/fuzzers/CMakeLists.txt +++ b/src/fuzzers/CMakeLists.txt @@ -1,18 +1,18 @@ -######################################################################## -## Fuzzing targets +# ############################################################################## +# Fuzzing targets -if ( NOT ZEEK_ENABLE_FUZZERS ) +if (NOT ZEEK_ENABLE_FUZZERS) return() endif () -if ( NOT DEFINED ZEEK_FUZZING_ENGINE AND DEFINED ENV{LIB_FUZZING_ENGINE} ) - if ( "$ENV{LIB_FUZZING_ENGINE}" STREQUAL "" ) +if (NOT DEFINED ZEEK_FUZZING_ENGINE AND DEFINED ENV{LIB_FUZZING_ENGINE}) + if ("$ENV{LIB_FUZZING_ENGINE}" STREQUAL "") # Empty LIB_FUZZING_ENGINE, assume libFuzzer set(ZEEK_FUZZING_ENGINE "-fsanitize=fuzzer" CACHE INTERNAL "" FORCE) else () - STRING(SUBSTRING "$ENV{LIB_FUZZING_ENGINE}" 0 1 _first_char) + string(SUBSTRING "$ENV{LIB_FUZZING_ENGINE}" 0 1 _first_char) - if ( "${_first_char}" STREQUAL "-" OR EXISTS "$ENV{LIB_FUZZING_ENGINE}" ) + if ("${_first_char}" STREQUAL "-" OR EXISTS "$ENV{LIB_FUZZING_ENGINE}") # Looks like a linker flag or valid file, use it set(ZEEK_FUZZING_ENGINE "$ENV{LIB_FUZZING_ENGINE}" CACHE INTERNAL "" FORCE) else () @@ -23,37 +23,36 @@ if ( NOT DEFINED ZEEK_FUZZING_ENGINE AND DEFINED ENV{LIB_FUZZING_ENGINE} ) endif () # The bind library is handled a bit hack-ishly since it defaults to linking it -# as static library by default on Linux, but at least on one common distro, -# that static library wasn't compiled with -fPIC and so not usable in the -# shared library we're trying to build. So instead, the fuzzer executable, not -# the shared lib, links it. +# as static library by default on Linux, but at least on one common distro, that +# static library wasn't compiled with -fPIC and so not usable in the shared +# library we're trying to build. So instead, the fuzzer executable, not the +# shared lib, links it. string(REGEX MATCH ".*\\.a$" _have_static_bind_lib "${BIND_LIBRARY}") -macro(SETUP_FUZZ_TARGET _fuzz_target _fuzz_source) +macro (SETUP_FUZZ_TARGET _fuzz_target _fuzz_source) add_executable(${_fuzz_target} ${_fuzz_source} ${ARGN}) target_link_libraries(${_fuzz_target} zeek_fuzzer_shared) - if ( _have_static_bind_lib ) + if (_have_static_bind_lib) target_link_libraries(${_fuzz_target} ${BIND_LIBRARY}) endif () target_link_libraries(${_fuzz_target} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) - if ( DEFINED ZEEK_FUZZING_ENGINE ) + if (DEFINED ZEEK_FUZZING_ENGINE) target_link_libraries(${_fuzz_target} ${ZEEK_FUZZING_ENGINE}) else () - target_link_libraries(${_fuzz_target} - $) + target_link_libraries(${_fuzz_target} $) endif () -endmacro() +endmacro () -macro(ADD_FUZZ_TARGET _name) +macro (ADD_FUZZ_TARGET _name) set(_fuzz_target zeek-${_name}-fuzzer) set(_fuzz_source ${_name}-fuzzer.cc) setup_fuzz_target(${_fuzz_target} ${_fuzz_source}) endmacro () -macro(ADD_GENERIC_ANALYZER_FUZZ_TARGET _name) +macro (ADD_GENERIC_ANALYZER_FUZZ_TARGET _name) set(_fuzz_target zeek-${_name}-fuzzer) set(_fuzz_source generic-analyzer-fuzzer.cc) setup_fuzz_target(${_fuzz_target} ${_fuzz_source}) @@ -68,9 +67,9 @@ target_sources(zeek_fuzzer_shared PRIVATE FuzzBuffer.cc) set(zeek_fuzzer_shared_deps) -foreach(_dep ${zeekdeps} ) - if ( "${_dep}" STREQUAL "${BIND_LIBRARY}" ) - if ( NOT _have_static_bind_lib ) +foreach (_dep ${zeekdeps}) + if ("${_dep}" STREQUAL "${BIND_LIBRARY}") + if (NOT _have_static_bind_lib) set(zeek_fuzzer_shared_deps ${zeek_fuzzer_shared_deps} ${_dep}) endif () else () @@ -78,9 +77,8 @@ foreach(_dep ${zeekdeps} ) endif () endforeach () -target_link_libraries(zeek_fuzzer_shared PUBLIC - ${zeek_fuzzer_shared_deps} - ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) +target_link_libraries(zeek_fuzzer_shared PUBLIC ${zeek_fuzzer_shared_deps} + ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) add_fuzz_target(packet) add_fuzz_target(dns) @@ -104,26 +102,27 @@ add_generic_analyzer_fuzz_target(radius) add_generic_analyzer_fuzz_target(rdp) add_generic_analyzer_fuzz_target(rdpeudp) add_generic_analyzer_fuzz_target(rfb) -add_generic_analyzer_fuzz_target(mount) #rpc -add_generic_analyzer_fuzz_target(nfs) #rpc -add_generic_analyzer_fuzz_target(portmapper) #rpc +add_generic_analyzer_fuzz_target(mount) # rpc +add_generic_analyzer_fuzz_target(nfs) # rpc +add_generic_analyzer_fuzz_target(portmapper) # rpc add_generic_analyzer_fuzz_target(sip) add_generic_analyzer_fuzz_target(smb) add_generic_analyzer_fuzz_target(snmp) add_generic_analyzer_fuzz_target(ssh) add_generic_analyzer_fuzz_target(syslog) -#add_generic_analyzer_fuzz_target(finger) # no pcap files -#add_generic_analyzer_fuzz_target(gssapi) # only samples are embedded in smb -#add_generic_analyzer_fuzz_target(ident) # no pcap files -#add_generic_analyzer_fuzz_target(krb) # should these just be handled by smb? -#add_generic_analyzer_fuzz_target(krb_tcp) # should these just be handled by smb? -#add_generic_analyzer_fuzz_target(rsh) # login - no pcap files -#add_generic_analyzer_fuzz_target(rlogin) # login - no pcap files -#add_generic_analyzer_fuzz_target(telnet) # login - no pcap files -#add_generic_analyzer_fuzz_target(netbios) # no pcap files -#add_generic_analyzer_fuzz_target(ntlm) # only samples are embedded in dce-rpc or smb -#add_generic_analyzer_fuzz_target(xdr) # rpc - no pcap files -#add_generic_analyzer_fuzz_target(sip_tcp) # unnecessary? -#add_generic_analyzer_fuzz_target(socks) # can this one be tested by adding SOCKS pkts to the HTTP corpus? -#add_generic_analyzer_fuzz_target(xmpp) # no pcap files +# add_generic_analyzer_fuzz_target(finger) # no pcap files +# add_generic_analyzer_fuzz_target(gssapi) # only samples are embedded in smb +# add_generic_analyzer_fuzz_target(ident) # no pcap files +# add_generic_analyzer_fuzz_target(krb) # should these just be handled by +# smb? add_generic_analyzer_fuzz_target(krb_tcp) # should these just be handled +# by smb? add_generic_analyzer_fuzz_target(rsh) # login - no pcap files +# add_generic_analyzer_fuzz_target(rlogin) # login - no pcap files +# add_generic_analyzer_fuzz_target(telnet) # login - no pcap files +# add_generic_analyzer_fuzz_target(netbios) # no pcap files +# add_generic_analyzer_fuzz_target(ntlm) # only samples are embedded in +# dce-rpc or smb add_generic_analyzer_fuzz_target(xdr) # rpc - no pcap files +# add_generic_analyzer_fuzz_target(sip_tcp) # unnecessary? +# add_generic_analyzer_fuzz_target(socks) # can this one be tested by adding +# SOCKS pkts to the HTTP corpus? add_generic_analyzer_fuzz_target(xmpp) # no +# pcap files diff --git a/src/input/CMakeLists.txt b/src/input/CMakeLists.txt index 45c2c2cf58..72fb6acd62 100644 --- a/src/input/CMakeLists.txt +++ b/src/input/CMakeLists.txt @@ -1,12 +1,11 @@ zeek_add_subdir_library( input SOURCES - Component.cc - Manager.cc - ReaderBackend.cc - ReaderFrontend.cc + Component.cc + Manager.cc + ReaderBackend.cc + ReaderFrontend.cc BIFS - input.bif -) + input.bif) add_subdirectory(readers) diff --git a/src/input/readers/CMakeLists.txt b/src/input/readers/CMakeLists.txt index 032a286052..673424e1c2 100644 --- a/src/input/readers/CMakeLists.txt +++ b/src/input/readers/CMakeLists.txt @@ -1,4 +1,3 @@ - add_subdirectory(ascii) add_subdirectory(benchmark) add_subdirectory(binary) @@ -6,4 +5,4 @@ add_subdirectory(config) add_subdirectory(raw) if (USE_SQLITE) add_subdirectory(sqlite) -endif() +endif () diff --git a/src/input/readers/ascii/CMakeLists.txt b/src/input/readers/ascii/CMakeLists.txt index 2a4d81ba2f..fc2aa5645e 100644 --- a/src/input/readers/ascii/CMakeLists.txt +++ b/src/input/readers/ascii/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek AsciiReader SOURCES - Ascii.cc - Plugin.cc + Ascii.cc + Plugin.cc BIFS - ascii.bif -) + ascii.bif) diff --git a/src/input/readers/benchmark/CMakeLists.txt b/src/input/readers/benchmark/CMakeLists.txt index f40091e955..25a4bdce82 100644 --- a/src/input/readers/benchmark/CMakeLists.txt +++ b/src/input/readers/benchmark/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek BenchmarkReader SOURCES - Benchmark.cc - Plugin.cc + Benchmark.cc + Plugin.cc BIFS - benchmark.bif -) + benchmark.bif) diff --git a/src/input/readers/binary/CMakeLists.txt b/src/input/readers/binary/CMakeLists.txt index 83ddb18bc6..0025bec76f 100644 --- a/src/input/readers/binary/CMakeLists.txt +++ b/src/input/readers/binary/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek BinaryReader SOURCES - Binary.cc - Plugin.cc + Binary.cc + Plugin.cc BIFS - binary.bif -) + binary.bif) diff --git a/src/input/readers/config/CMakeLists.txt b/src/input/readers/config/CMakeLists.txt index dfe3005a23..aaafc14e6e 100644 --- a/src/input/readers/config/CMakeLists.txt +++ b/src/input/readers/config/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek ConfigReader SOURCES - Config.cc - Plugin.cc + Config.cc + Plugin.cc BIFS - config.bif -) + config.bif) diff --git a/src/input/readers/raw/CMakeLists.txt b/src/input/readers/raw/CMakeLists.txt index 6efeb00637..9d70b4c4c8 100644 --- a/src/input/readers/raw/CMakeLists.txt +++ b/src/input/readers/raw/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek RawReader SOURCES - Raw.cc - Plugin.cc + Raw.cc + Plugin.cc BIFS - raw.bif -) + raw.bif) diff --git a/src/input/readers/sqlite/CMakeLists.txt b/src/input/readers/sqlite/CMakeLists.txt index 7d38b66baa..bb8bd4159c 100644 --- a/src/input/readers/sqlite/CMakeLists.txt +++ b/src/input/readers/sqlite/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek SQLiteReader SOURCES - SQLite.cc - Plugin.cc + SQLite.cc + Plugin.cc BIFS - sqlite.bif -) + sqlite.bif) diff --git a/src/iosource/CMakeLists.txt b/src/iosource/CMakeLists.txt index 73a433ece4..63881464a5 100644 --- a/src/iosource/CMakeLists.txt +++ b/src/iosource/CMakeLists.txt @@ -1,12 +1,11 @@ zeek_add_subdir_library( iosource SOURCES - BPF_Program.cc - Component.cc - Manager.cc - Packet.cc - PktDumper.cc - PktSrc.cc -) + BPF_Program.cc + Component.cc + Manager.cc + Packet.cc + PktDumper.cc + PktSrc.cc) add_subdirectory(pcap) diff --git a/src/iosource/pcap/CMakeLists.txt b/src/iosource/pcap/CMakeLists.txt index f3dd6adc2a..1102815afd 100644 --- a/src/iosource/pcap/CMakeLists.txt +++ b/src/iosource/pcap/CMakeLists.txt @@ -1,11 +1,4 @@ -zeek_add_plugin( - Zeek - Pcap - SOURCES - Source.cc - Dumper.cc - Plugin.cc -) +zeek_add_plugin(Zeek Pcap SOURCES Source.cc Dumper.cc Plugin.cc) # Treat BIFs as builtin (alternative mode). bif_target(pcap.bif) diff --git a/src/logging/CMakeLists.txt b/src/logging/CMakeLists.txt index 581ea0013d..7690998520 100644 --- a/src/logging/CMakeLists.txt +++ b/src/logging/CMakeLists.txt @@ -1,12 +1,11 @@ zeek_add_subdir_library( logging SOURCES - Component.cc - Manager.cc - WriterBackend.cc - WriterFrontend.cc + Component.cc + Manager.cc + WriterBackend.cc + WriterFrontend.cc BIFS - logging.bif -) + logging.bif) add_subdirectory(writers) diff --git a/src/logging/writers/CMakeLists.txt b/src/logging/writers/CMakeLists.txt index 3aa507b316..1508535c34 100644 --- a/src/logging/writers/CMakeLists.txt +++ b/src/logging/writers/CMakeLists.txt @@ -1,6 +1,5 @@ - add_subdirectory(ascii) add_subdirectory(none) if (USE_SQLITE) add_subdirectory(sqlite) -endif() +endif () diff --git a/src/logging/writers/ascii/CMakeLists.txt b/src/logging/writers/ascii/CMakeLists.txt index 940b0ff6b0..b76d2f4265 100644 --- a/src/logging/writers/ascii/CMakeLists.txt +++ b/src/logging/writers/ascii/CMakeLists.txt @@ -1,9 +1,8 @@ zeek_add_plugin( Zeek - AsciiWriter + AsciiWriter SOURCES - Ascii.cc - Plugin.cc + Ascii.cc + Plugin.cc BIFS - ascii.bif -) + ascii.bif) diff --git a/src/logging/writers/none/CMakeLists.txt b/src/logging/writers/none/CMakeLists.txt index 40415927e1..a9466c1ece 100644 --- a/src/logging/writers/none/CMakeLists.txt +++ b/src/logging/writers/none/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek NoneWriter SOURCES - None.cc - Plugin.cc + None.cc + Plugin.cc BIFS - none.bif -) + none.bif) diff --git a/src/logging/writers/sqlite/CMakeLists.txt b/src/logging/writers/sqlite/CMakeLists.txt index 7cbda35fc1..735ba8aec1 100644 --- a/src/logging/writers/sqlite/CMakeLists.txt +++ b/src/logging/writers/sqlite/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek SQLiteWriter SOURCES - SQLite.cc - Plugin.cc + SQLite.cc + Plugin.cc BIFS - sqlite.bif -) + sqlite.bif) diff --git a/src/packet_analysis/CMakeLists.txt b/src/packet_analysis/CMakeLists.txt index 014cbe2755..f7e5f37491 100644 --- a/src/packet_analysis/CMakeLists.txt +++ b/src/packet_analysis/CMakeLists.txt @@ -1,11 +1,12 @@ zeek_add_subdir_library( packet_analysis - INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} SOURCES - Analyzer.cc - Dispatcher.cc - Manager.cc - Component.cc -) + Analyzer.cc + Dispatcher.cc + Manager.cc + Component.cc) add_subdirectory(protocol) diff --git a/src/packet_analysis/protocol/arp/CMakeLists.txt b/src/packet_analysis/protocol/arp/CMakeLists.txt index 28d7533782..0a2a7b73da 100644 --- a/src/packet_analysis/protocol/arp/CMakeLists.txt +++ b/src/packet_analysis/protocol/arp/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek ARP SOURCES - ARP.cc - Plugin.cc + ARP.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/ayiya/CMakeLists.txt b/src/packet_analysis/protocol/ayiya/CMakeLists.txt index 32f24f88d3..9e79abc894 100644 --- a/src/packet_analysis/protocol/ayiya/CMakeLists.txt +++ b/src/packet_analysis/protocol/ayiya/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - Zeek - AYIYA - SOURCES - AYIYA.cc - Plugin.cc -) +zeek_add_plugin(Zeek AYIYA SOURCES AYIYA.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/ethernet/CMakeLists.txt b/src/packet_analysis/protocol/ethernet/CMakeLists.txt index 8ac662c3b7..bd1577b9b2 100644 --- a/src/packet_analysis/protocol/ethernet/CMakeLists.txt +++ b/src/packet_analysis/protocol/ethernet/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Ethernet - SOURCES - Ethernet.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Ethernet SOURCES Ethernet.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/fddi/CMakeLists.txt b/src/packet_analysis/protocol/fddi/CMakeLists.txt index 40d4c00f90..1d1658a3ea 100644 --- a/src/packet_analysis/protocol/fddi/CMakeLists.txt +++ b/src/packet_analysis/protocol/fddi/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - FDDI - SOURCES - FDDI.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer FDDI SOURCES FDDI.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/geneve/CMakeLists.txt b/src/packet_analysis/protocol/geneve/CMakeLists.txt index c71f7c45f3..dbce4d0442 100644 --- a/src/packet_analysis/protocol/geneve/CMakeLists.txt +++ b/src/packet_analysis/protocol/geneve/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek Geneve SOURCES - Geneve.cc - Plugin.cc + Geneve.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/gre/CMakeLists.txt b/src/packet_analysis/protocol/gre/CMakeLists.txt index c9b88e19b5..ad3585ed78 100644 --- a/src/packet_analysis/protocol/gre/CMakeLists.txt +++ b/src/packet_analysis/protocol/gre/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - GRE - SOURCES - GRE.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer GRE SOURCES GRE.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/gtpv1/CMakeLists.txt b/src/packet_analysis/protocol/gtpv1/CMakeLists.txt index 63fb5cf5d0..af1e3b15a8 100644 --- a/src/packet_analysis/protocol/gtpv1/CMakeLists.txt +++ b/src/packet_analysis/protocol/gtpv1/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek GTPv1 SOURCES - GTPv1.cc - Plugin.cc + GTPv1.cc + Plugin.cc BIFS - events.bif - functions.bif + events.bif + functions.bif PAC - gtpv1.pac - gtpv1-protocol.pac - gtpv1-analyzer.pac -) + gtpv1.pac + gtpv1-protocol.pac + gtpv1-analyzer.pac) diff --git a/src/packet_analysis/protocol/icmp/CMakeLists.txt b/src/packet_analysis/protocol/icmp/CMakeLists.txt index 09cefa1b1b..f1b4f3cee9 100644 --- a/src/packet_analysis/protocol/icmp/CMakeLists.txt +++ b/src/packet_analysis/protocol/icmp/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek ICMP SOURCES - ICMP.cc - ICMPSessionAdapter.cc - Plugin.cc + ICMP.cc + ICMPSessionAdapter.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/ieee802_11/CMakeLists.txt b/src/packet_analysis/protocol/ieee802_11/CMakeLists.txt index b246a23d74..0c2d46b31c 100644 --- a/src/packet_analysis/protocol/ieee802_11/CMakeLists.txt +++ b/src/packet_analysis/protocol/ieee802_11/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - IEEE802_11 - SOURCES - IEEE802_11.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer IEEE802_11 SOURCES IEEE802_11.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc b/src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc index df9a8b0f26..bd9d913f78 100644 --- a/src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc +++ b/src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc @@ -31,6 +31,12 @@ bool IEEE802_11Analyzer::AnalyzePacket(size_t len, const uint8_t* data, Packet* if ( (data[1] & 0x03) == 0x03 ) len_80211 += packet->L2_ADDR_LEN; + if ( len_80211 >= len ) + { + Weird("truncated_802_11_header", packet); + return false; + } + // Look for the QoS indicator bit. if ( (fc_80211 >> 4) & 0x08 ) { diff --git a/src/packet_analysis/protocol/ieee802_11_radio/CMakeLists.txt b/src/packet_analysis/protocol/ieee802_11_radio/CMakeLists.txt index 2a8b31f1c5..3cfb20083b 100644 --- a/src/packet_analysis/protocol/ieee802_11_radio/CMakeLists.txt +++ b/src/packet_analysis/protocol/ieee802_11_radio/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - IEEE802_11_Radio - SOURCES - IEEE802_11_Radio.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer IEEE802_11_Radio SOURCES IEEE802_11_Radio.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/ip/CMakeLists.txt b/src/packet_analysis/protocol/ip/CMakeLists.txt index 59a26a6d55..05b694c482 100644 --- a/src/packet_analysis/protocol/ip/CMakeLists.txt +++ b/src/packet_analysis/protocol/ip/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( PacketAnalyzer IP SOURCES - IP.cc - IPBasedAnalyzer.cc - SessionAdapter.cc - Plugin.cc -) + IP.cc + IPBasedAnalyzer.cc + SessionAdapter.cc + Plugin.cc) diff --git a/src/packet_analysis/protocol/iptunnel/CMakeLists.txt b/src/packet_analysis/protocol/iptunnel/CMakeLists.txt index 6518d38758..01a680323e 100644 --- a/src/packet_analysis/protocol/iptunnel/CMakeLists.txt +++ b/src/packet_analysis/protocol/iptunnel/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - IPTunnel - SOURCES - IPTunnel.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer IPTunnel SOURCES IPTunnel.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/linux_sll/CMakeLists.txt b/src/packet_analysis/protocol/linux_sll/CMakeLists.txt index 3d517c53cd..2591b64160 100644 --- a/src/packet_analysis/protocol/linux_sll/CMakeLists.txt +++ b/src/packet_analysis/protocol/linux_sll/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - LinuxSLL - SOURCES - LinuxSLL.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer LinuxSLL SOURCES LinuxSLL.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/linux_sll2/CMakeLists.txt b/src/packet_analysis/protocol/linux_sll2/CMakeLists.txt index 63a94ca844..b3072fa4bb 100644 --- a/src/packet_analysis/protocol/linux_sll2/CMakeLists.txt +++ b/src/packet_analysis/protocol/linux_sll2/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - LinuxSLL2 - SOURCES - LinuxSLL2.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer LinuxSLL2 SOURCES LinuxSLL2.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/llc/CMakeLists.txt b/src/packet_analysis/protocol/llc/CMakeLists.txt index 4d974b9b0a..692f39e440 100644 --- a/src/packet_analysis/protocol/llc/CMakeLists.txt +++ b/src/packet_analysis/protocol/llc/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - LLC - SOURCES - LLC.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer LLC SOURCES LLC.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/mpls/CMakeLists.txt b/src/packet_analysis/protocol/mpls/CMakeLists.txt index 3e40d0fe16..8f14323b77 100644 --- a/src/packet_analysis/protocol/mpls/CMakeLists.txt +++ b/src/packet_analysis/protocol/mpls/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - MPLS - SOURCES - MPLS.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer MPLS SOURCES MPLS.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/nflog/CMakeLists.txt b/src/packet_analysis/protocol/nflog/CMakeLists.txt index 53239f2b6c..fad9feb3b7 100644 --- a/src/packet_analysis/protocol/nflog/CMakeLists.txt +++ b/src/packet_analysis/protocol/nflog/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - NFLog - SOURCES - NFLog.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer NFLog SOURCES NFLog.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/novell_802_3/CMakeLists.txt b/src/packet_analysis/protocol/novell_802_3/CMakeLists.txt index 0eb4592faa..9adb81f417 100644 --- a/src/packet_analysis/protocol/novell_802_3/CMakeLists.txt +++ b/src/packet_analysis/protocol/novell_802_3/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Novell_802_3 - SOURCES - Novell_802_3.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Novell_802_3 SOURCES Novell_802_3.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/null/CMakeLists.txt b/src/packet_analysis/protocol/null/CMakeLists.txt index dd0da51371..91e04f8d9d 100644 --- a/src/packet_analysis/protocol/null/CMakeLists.txt +++ b/src/packet_analysis/protocol/null/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Null - SOURCES - Null.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Null SOURCES Null.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/pbb/CMakeLists.txt b/src/packet_analysis/protocol/pbb/CMakeLists.txt index cee71edd44..3e6889369c 100644 --- a/src/packet_analysis/protocol/pbb/CMakeLists.txt +++ b/src/packet_analysis/protocol/pbb/CMakeLists.txt @@ -1,4 +1,3 @@ - include(ZeekPlugin) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/packet_analysis/protocol/ppp_serial/CMakeLists.txt b/src/packet_analysis/protocol/ppp_serial/CMakeLists.txt index c6aa6f8f26..aa4ab35657 100644 --- a/src/packet_analysis/protocol/ppp_serial/CMakeLists.txt +++ b/src/packet_analysis/protocol/ppp_serial/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - PPPSerial - SOURCES - PPPSerial.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer PPPSerial SOURCES PPPSerial.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/pppoe/CMakeLists.txt b/src/packet_analysis/protocol/pppoe/CMakeLists.txt index 1173703493..d84229004a 100644 --- a/src/packet_analysis/protocol/pppoe/CMakeLists.txt +++ b/src/packet_analysis/protocol/pppoe/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - PPPoE - SOURCES - PPPoE.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer PPPoE SOURCES PPPoE.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/root/CMakeLists.txt b/src/packet_analysis/protocol/root/CMakeLists.txt index c127ad458f..cd4456cb6a 100644 --- a/src/packet_analysis/protocol/root/CMakeLists.txt +++ b/src/packet_analysis/protocol/root/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Root - SOURCES - Root.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Root SOURCES Root.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/skip/CMakeLists.txt b/src/packet_analysis/protocol/skip/CMakeLists.txt index 85cede467f..a8d4bc517a 100644 --- a/src/packet_analysis/protocol/skip/CMakeLists.txt +++ b/src/packet_analysis/protocol/skip/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Skip - SOURCES - Skip.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Skip SOURCES Skip.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/snap/CMakeLists.txt b/src/packet_analysis/protocol/snap/CMakeLists.txt index 7f6412cb4b..e064f3c395 100644 --- a/src/packet_analysis/protocol/snap/CMakeLists.txt +++ b/src/packet_analysis/protocol/snap/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - SNAP - SOURCES - SNAP.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer SNAP SOURCES SNAP.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/tcp/CMakeLists.txt b/src/packet_analysis/protocol/tcp/CMakeLists.txt index 6e9646a8bd..9935b63489 100644 --- a/src/packet_analysis/protocol/tcp/CMakeLists.txt +++ b/src/packet_analysis/protocol/tcp/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( PacketAnalyzer TCP_PKT SOURCES - TCP.cc - TCPSessionAdapter.cc - Plugin.cc - Stats.cc -) + TCP.cc + TCPSessionAdapter.cc + Plugin.cc + Stats.cc) diff --git a/src/packet_analysis/protocol/teredo/CMakeLists.txt b/src/packet_analysis/protocol/teredo/CMakeLists.txt index 028864160e..dd5682b1f5 100644 --- a/src/packet_analysis/protocol/teredo/CMakeLists.txt +++ b/src/packet_analysis/protocol/teredo/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek Teredo SOURCES - Teredo.cc - Plugin.cc + Teredo.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/packet_analysis/protocol/udp/CMakeLists.txt b/src/packet_analysis/protocol/udp/CMakeLists.txt index 99a892a89c..3812077c37 100644 --- a/src/packet_analysis/protocol/udp/CMakeLists.txt +++ b/src/packet_analysis/protocol/udp/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek UDP SOURCES - UDP.cc - UDPSessionAdapter.cc - Plugin.cc + UDP.cc + UDPSessionAdapter.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/vlan/CMakeLists.txt b/src/packet_analysis/protocol/vlan/CMakeLists.txt index ed37c128c4..afc2faab54 100644 --- a/src/packet_analysis/protocol/vlan/CMakeLists.txt +++ b/src/packet_analysis/protocol/vlan/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - VLAN - SOURCES - VLAN.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer VLAN SOURCES VLAN.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/vntag/CMakeLists.txt b/src/packet_analysis/protocol/vntag/CMakeLists.txt index 313d5b67bf..1143d525a7 100644 --- a/src/packet_analysis/protocol/vntag/CMakeLists.txt +++ b/src/packet_analysis/protocol/vntag/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - VNTag - SOURCES - VNTag.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer VNTag SOURCES VNTag.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/vxlan/CMakeLists.txt b/src/packet_analysis/protocol/vxlan/CMakeLists.txt index 81623727bb..5a077f50f8 100644 --- a/src/packet_analysis/protocol/vxlan/CMakeLists.txt +++ b/src/packet_analysis/protocol/vxlan/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek VXLAN SOURCES - VXLAN.cc - Plugin.cc + VXLAN.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/wrapper/CMakeLists.txt b/src/packet_analysis/protocol/wrapper/CMakeLists.txt index 6c37e2e35b..aaac07bbb3 100644 --- a/src/packet_analysis/protocol/wrapper/CMakeLists.txt +++ b/src/packet_analysis/protocol/wrapper/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - Zeek - Wrapper - SOURCES - Wrapper.cc - Plugin.cc -) +zeek_add_plugin(Zeek Wrapper SOURCES Wrapper.cc Plugin.cc) diff --git a/src/parse.y b/src/parse.y index 2334b2eae3..4db15571ab 100644 --- a/src/parse.y +++ b/src/parse.y @@ -1488,13 +1488,6 @@ func_hdr: } | TOK_EVENT event_id func_params opt_attr { - const char* name = $2->Name(); - if ( util::streq("bro_init", name) || util::streq("bro_done", name) || util::streq("bro_script_loaded", name) ) - { - auto base = std::string(name).substr(4); - reporter->Error("event %s() is no longer available, use zeek_%s() instead", name, base.c_str()); - } - begin_func({NewRef{}, $2}, current_module.c_str(), FUNC_FLAVOR_EVENT, false, {NewRef{}, $3}, std::unique_ptr>{$4}); diff --git a/src/probabilistic/CMakeLists.txt b/src/probabilistic/CMakeLists.txt index f8f948aea3..9c5a6e72bd 100644 --- a/src/probabilistic/CMakeLists.txt +++ b/src/probabilistic/CMakeLists.txt @@ -1,14 +1,13 @@ zeek_add_subdir_library( probabilistic SOURCES - BitVector.cc - BloomFilter.cc - CardinalityCounter.cc - CounterVector.cc - Hasher.cc - Topk.cc + BitVector.cc + BloomFilter.cc + CardinalityCounter.cc + CounterVector.cc + Hasher.cc + Topk.cc BIFS - bloom-filter.bif - cardinality-counter.bif - top-k.bif -) + bloom-filter.bif + cardinality-counter.bif + top-k.bif) diff --git a/src/script_opt/CPP/maint/README b/src/script_opt/CPP/maint/README index 3510f38192..072b9dd222 100644 --- a/src/script_opt/CPP/maint/README +++ b/src/script_opt/CPP/maint/README @@ -11,13 +11,7 @@ If you make changes to the scripts, format them using The maintenance workflow: -1. Update this timestamp, so this file will be changed and you'll remember - to check in updates to the list of how the compiler currently fares - on various btests (see end of this doc): - - Sun Mar 5 12:02:44 PST 2023 - -2. Make sure the compiler can compile and execute the base scripts: +1. Make sure the compiler can compile and execute the base scripts: echo | src/zeek -O gen-C++ ninja @@ -27,32 +21,30 @@ The maintenance workflow: compiler that you'll want to subsequent run against the test suite, per the following. -3. Run "find-test-files.sh" to generate a list (to stdout) of all of the +2. Run "find-test-files.sh" to generate a list (to stdout) of all of the possible Zeek source files found in the test suite. -4. For each such Zeek file, run "check-zeek.sh" to see whether Zeek can +3. For each such Zeek file, run "check-zeek.sh" to see whether Zeek can parse it. This helps remove from further consideration difficult tests (like those that have embedded input files, or multiple separate scripts). -5. "mkdir CPP-test" - a directory for holding results relating to C++ testing +4. "mkdir CPP-test" - a directory for holding results relating to C++ testing -6. Run "check-CPP-gen.sh" for each Zeek file that passed "check-zeek.sh". +5. Run "check-CPP-gen.sh" for each Zeek file that passed "check-zeek.sh". This will generate a corresponding file in CPP-test/out* indicating whether "-O gen-C++" can successfully run on the input. Presently, it should - be able to do so for all of them, other than some exceptions noted below. + be able to do so for all of them. This step is parallelizable, say using xargs -P 10 -n 1. -7. Copy ./src/zeek to ./zeek.HOLD. This is used to speed up recompilation used +6. Copy ./src/zeek to ./zeek.HOLD. This is used to speed up recompilation used in the next step. However, it's also a headache to do development to fix a bug and then forget to update zeek.HOLD, which means you wind up running the old version. You can combat that by removing ./zeek.HOLD every time you start working on fixing a bug. -8. Use the appended database to remove inputs that have known issues. - -9. For every input that survives that pruning, run "do-CPP-btest.sh". +7. For every input that survives that pruning, run "do-CPP-btest.sh". This will generate C++ for the BTest, compile it, and run the result to see if it succeeds. It populates CPP-test/diag* with the Btest diagnostic output (empty means success). For non-empty output, @@ -67,32 +59,12 @@ The maintenance workflow: does btest, for displaying differences or updating the baseline (which is Baseline.cpp). --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +FYI: + There are two tests that in the past have demonstrated possible + variations due to presumed race conditions: -These BTests won't successfully run due to the indicated issue: + ../testing/btest/scripts/base/utils/active-http.test + ../testing/btest/supervisor/revive-leaf.zeek - bad-constructor - uses a complex old-style constructor that - should be updated - bad-when - deliberately has old-style "when" without captures - cond - not compilable due to the presence of conditional code - deprecated - uses deprecated features not support for -O gen-C++ - test-glitch - fails because of how we do testing: the first -O gen-C++ - pass leaves httpd running, which causes the second -O use-C++ - pass to fail when it tries to start up a new httpd - skipped - test can be skipped due to environmental reasons (e.g., - whether we have a certain Kerberos setup) - start-next - test uses @TEST-START-NEXT. As long as the diagnostic - output doesn't have errors for language.blank-local-4, it's ok - race? - appears to have a race condition, can fail even when - running with interpreter, and can pass with -O C++ - -Database Of Known Issues - -../testing/btest/language/blank-local.zeek start-next -../testing/btest/language/when-aggregates.zeek bad-when -../testing/btest/scripts/base/protocols/krb/smb2_krb.test skipped -../testing/btest/scripts/base/protocols/krb/smb2_krb_nokeytab.test skipped -../testing/btest/scripts/base/utils/active-http.test test-glitch -../testing/btest/scripts/policy/frameworks/dpd/packet-segment-logging.zeek cond -../testing/btest/scripts/policy/misc/dump-events.zeek skipped -../testing/btest/supervisor/revive-leaf.zeek race? + These haven't shown up in a while, as of May 2023, so we can remove + the above if they continue to not show up. diff --git a/src/script_opt/CPP/maint/check-CPP-gen.sh b/src/script_opt/CPP/maint/check-CPP-gen.sh index dae5e93720..a85901b1be 100755 --- a/src/script_opt/CPP/maint/check-CPP-gen.sh +++ b/src/script_opt/CPP/maint/check-CPP-gen.sh @@ -10,7 +10,7 @@ gen_out=CPP-test/gen.$abbr echo "fail" exit 1 fi - if grep -E -q '(deprecated.*(when|vector))|skipping|cannot compile|no matching functions' $gen_out; then + if grep -E -q '(deprecated.*(when|vector))|skipping|cannot be compiled|cannot compile|no matching functions' $gen_out; then echo "fail" exit 1 fi diff --git a/src/script_opt/CPP/maint/do-CPP-btest.sh b/src/script_opt/CPP/maint/do-CPP-btest.sh index 71df6dbc38..55be391567 100755 --- a/src/script_opt/CPP/maint/do-CPP-btest.sh +++ b/src/script_opt/CPP/maint/do-CPP-btest.sh @@ -21,6 +21,7 @@ base=$(echo $1 | sed 's,\.\./,,;s,/,#,g') rel_test=$(echo $1 | sed 's,.*testing/btest/,,') export ZEEK_GEN_CPP=1 +export ZEEK_REPORT_UNCOMPILABLE=1 export ZEEK_CPP_DIR=$(pwd) # export ZEEK_OPT_FUNCS="" export ZEEK_OPT_FILES="testing/btest" @@ -31,7 +32,7 @@ export ZEEK_OPT_FILES="testing/btest" ) # export -n ZEEK_GEN_CPP ZEEK_CPP_DIR ZEEK_OPT_FUNCS ZEEK_OPT_FILES -export -n ZEEK_GEN_CPP ZEEK_CPP_DIR ZEEK_OPT_FILES +export -n ZEEK_GEN_CPP ZEEK_REPORT_UNCOMPILABLE ZEEK_CPP_DIR ZEEK_OPT_FILES ninja diff --git a/src/script_opt/ScriptOpt.cc b/src/script_opt/ScriptOpt.cc index 8ae6cae765..8a44ffcd84 100644 --- a/src/script_opt/ScriptOpt.cc +++ b/src/script_opt/ScriptOpt.cc @@ -266,6 +266,7 @@ static void init_options() check_env_opt("ZEEK_XFORM", analysis_options.activate); check_env_opt("ZEEK_ZAM", analysis_options.gen_ZAM); check_env_opt("ZEEK_COMPILE_ALL", analysis_options.compile_all); + check_env_opt("ZEEK_REPORT_UNCOMPILABLE", analysis_options.report_uncompilable); check_env_opt("ZEEK_ZAM_CODE", analysis_options.gen_ZAM_code); check_env_opt("ZEEK_NO_ZAM_OPT", analysis_options.no_ZAM_opt); check_env_opt("ZEEK_DUMP_ZAM", analysis_options.dump_ZAM); diff --git a/src/session/CMakeLists.txt b/src/session/CMakeLists.txt index 752db51cbb..0bd82de16e 100644 --- a/src/session/CMakeLists.txt +++ b/src/session/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_subdir_library( - session - SOURCES - Session.cc - Key.cc - Manager.cc -) +zeek_add_subdir_library(session SOURCES Session.cc Key.cc Manager.cc) diff --git a/src/telemetry/CMakeLists.txt b/src/telemetry/CMakeLists.txt index b93bf72a1b..1c71ba42a3 100644 --- a/src/telemetry/CMakeLists.txt +++ b/src/telemetry/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_subdir_library( - telemetry - SOURCES - Manager.cc - BIFS - telemetry.bif -) +zeek_add_subdir_library(telemetry SOURCES Manager.cc BIFS telemetry.bif) diff --git a/src/zeek.bif b/src/zeek.bif index 924cb720e1..b0e3c6611a 100644 --- a/src/zeek.bif +++ b/src/zeek.bif @@ -1680,19 +1680,33 @@ function print_raw%(...%): bool ## ## Returns: The next lowest integer of *d* as :zeek:type:`double`. ## -## .. zeek:see:: sqrt exp ln log10 pow +## .. zeek:see:: ceil sqrt exp ln log2 log10 pow function floor%(d: double%): double %{ return zeek::make_intrusive(floor(d)); %} +## Computes the smallest integer greater or equal than the given :zeek:type:`double` value. +## For example, ``ceil(3.14)`` returns ``4.0``, and ``ceil(-3.14)`` +## returns ``-3.0``. +## +## d: The :zeek:type:`double` to manipulate. +## +## Returns: The next lowest integer of *d* as :zeek:type:`double`. +## +## .. zeek:see:: floor sqrt exp ln log2 log10 pow +function ceil%(d: double%): double + %{ + return zeek::make_intrusive(ceil(d)); + %} + ## Computes the square root of a :zeek:type:`double`. ## ## x: The number to compute the square root of. ## ## Returns: The square root of *x*. ## -## .. zeek:see:: floor exp ln log10 pow +## .. zeek:see:: floor ceil exp ln log2 log10 pow function sqrt%(x: double%): double %{ if ( x < 0 ) @@ -1710,7 +1724,7 @@ function sqrt%(x: double%): double ## ## Returns: *e* to the power of *d*. ## -## .. zeek:see:: floor sqrt ln log10 pow +## .. zeek:see:: floor ceil sqrt ln log2 log10 pow function exp%(d: double%): double %{ return zeek::make_intrusive(exp(d)); @@ -1722,19 +1736,31 @@ function exp%(d: double%): double ## ## Returns: The natural logarithm of *d*. ## -## .. zeek:see:: exp floor sqrt log10 pow +## .. zeek:see:: floor ceil sqrt exp log2 log10 pow function ln%(d: double%): double %{ return zeek::make_intrusive(log(d)); %} +## Computes the base 2 logarithm of a number. +## +## d: The argument to the logarithm. +## +## Returns: The base 2 logarithm of *d*. +## +## .. zeek:see:: floor ceil sqrt exp ln log10 pow +function log2%(d: double%): double + %{ + return zeek::make_intrusive(log2(d)); + %} + ## Computes the common logarithm of a number. ## ## d: The argument to the logarithm. ## ## Returns: The common logarithm of *d*. ## -## .. zeek:see:: exp floor sqrt ln pow +## .. zeek:see:: floor ceil sqrt exp ln log2 pow function log10%(d: double%): double %{ return zeek::make_intrusive(log10(d)); @@ -1748,7 +1774,7 @@ function log10%(d: double%): double ## ## Returns: The number *x* raised to the power *y*. ## -## .. zeek:see:: exp floor sqrt ln log10 +## .. zeek:see:: floor ceil sqrt exp ln log2 log10 function pow%(x: double, y: double%): double %{ return zeek::make_intrusive(pow(x, y)); @@ -5550,12 +5576,67 @@ function anonymize_addr%(a: addr, cl: IPAddrAnonymizationClass%): addr ## ## returns: a JSON formatted string. ## -## .. zeek:see:: fmt cat cat_sep string_cat print_raw +## .. zeek:see:: fmt cat cat_sep string_cat print_raw from_json function to_json%(val: any, only_loggable: bool &default=F, field_escape_pattern: pattern &default=/^_/%): string %{ return val->ToJSON(only_loggable, field_escape_pattern); %} +## A function to convert a JSON string into Zeek values of a given type. +## +## Implicit conversion from JSON to Zeek types is implemented for: +## +## - bool +## - int, count, real +## - interval from numbers as seconds +## - time from numbers as unix timestamp +## - port from strings in "80/tcp" notation +## - addr, subnet +## - enum +## - sets +## - vectors +## - records (from JSON objects) +## +## Optional or default record fields are allowed to be missing or null in the input. +## +## s: The JSON string to parse. +## +## t: Type of Zeek data. +## +## returns: A value of type t. +## +## .. zeek:see:: to_json +function from_json%(s: string, t: any%): from_json_result + %{ + static auto result_type = zeek::id::find_type("from_json_result"); + static auto v_idx = result_type->FieldOffset("v"); + static auto valid_idx = result_type->FieldOffset("valid"); + + auto rval = zeek::make_intrusive(result_type); + + if ( t->GetType()->Tag() != zeek::TYPE_TYPE ) + { + rval->Assign(valid_idx, false); + zeek::emit_builtin_error("from_json() requires a type argument"); + return rval; + } + + auto res = zeek::detail::ValFromJSON(s->ToStdStringView(), t->AsType()->AsTypeType()->GetType()); + + if ( auto val = std::get_if(&res) ) + { + rval->Assign(v_idx, *val); + rval->Assign(valid_idx, true); + } + else + { + rval->Assign(valid_idx, false); + zeek::emit_builtin_error(std::get(res).c_str()); + } + + return rval; + %} + ## Compresses a given path by removing '..'s and the parent directory it ## references and also removing dual '/'s and extraneous '/./'s. ## diff --git a/src/zeekygen/CMakeLists.txt b/src/zeekygen/CMakeLists.txt index eee80e8a65..6095ed6757 100644 --- a/src/zeekygen/CMakeLists.txt +++ b/src/zeekygen/CMakeLists.txt @@ -1,16 +1,15 @@ zeek_add_subdir_library( zeekygen SOURCES - Manager.cc - Info.h - PackageInfo.cc - ScriptInfo.cc - IdentifierInfo.cc - Target.cc - Configuration.cc - ReStructuredTextTable.cc - utils.cc -) + Manager.cc + Info.h + PackageInfo.cc + ScriptInfo.cc + IdentifierInfo.cc + Target.cc + Configuration.cc + ReStructuredTextTable.cc + utils.cc) # Treat BIFs as builtin (alternative mode). bif_target(zeekygen.bif) diff --git a/testing/CMakeLists.txt b/testing/CMakeLists.txt index 7ae503924f..0ed2fa2cf0 100644 --- a/testing/CMakeLists.txt +++ b/testing/CMakeLists.txt @@ -1,8 +1,10 @@ -install(DIRECTORY scripts/ DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}/scripts - USE_SOURCE_PERMISSIONS - FILES_MATCHING PATTERN "diff-*") +install( + DIRECTORY scripts/ + DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}/scripts + USE_SOURCE_PERMISSIONS FILES_MATCHING + PATTERN "diff-*") install(FILES btest/random.seed DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}/data) -if ( INSTALL_BTEST_PCAPS ) +if (INSTALL_BTEST_PCAPS) install(DIRECTORY btest/Traces/ DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}/data/pcaps) endif () diff --git a/testing/btest/Baseline.cpp/broker.store.create-failure/zeek.err b/testing/btest/Baseline.cpp/broker.store.create-failure/zeek.err index 3215cff134..5abfd1c321 100644 --- a/testing/btest/Baseline.cpp/broker.store.create-failure/zeek.err +++ b/testing/btest/Baseline.cpp/broker.store.create-failure/zeek.err @@ -1,6 +1,6 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/create-failure.zeek (C++), line 61: Failed to attach master store backend_failure: (<___>testing_btest__tmp_broker_store_create_failure_create_failure_zeek__zeek_init__33__zf()) -error in <...>/create-failure.zeek (C++), line 61: Could not create Broker master store '../fail' (<___>testing_btest__tmp_broker_store_create_failure_create_failure_zeek__zeek_init__33__zf()) +error in <...>/create-failure.zeek (C++), line 61: Failed to attach master store backend_failure: (<___>testing_btest__tmp_broker_store_create_failure_create_failure_zeek__zeek_init__34__zf()) +error in <...>/create-failure.zeek (C++), line 61: Could not create Broker master store '../fail' (<___>testing_btest__tmp_broker_store_create_failure_create_failure_zeek__zeek_init__34__zf()) error in : invalid Broker store handle (broker::store::{}) error in : invalid Broker store handle (broker::store::{}) error in : invalid Broker store handle (broker::store::{}) diff --git a/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/.stderr b/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/.stderr new file mode 100644 index 0000000000..4201f8f1d9 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/.stderr @@ -0,0 +1,5 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +1299481205.000000 warning: non-void function returning without a value: Test::my_rotation_format_func +1299481205.000000 error: Failed to call Log::rotation_format_func for path test continuing with rotation to: ./test-11-03-07_06.00.05 +1299495605.000000 runtime error in compiled code: division by zero +1299495605.000000 error: Failed to call Log::rotation_format_func for path test continuing with rotation to: ./test-11-03-07_10.00.05 diff --git a/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/out b/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/out new file mode 100644 index 0000000000..b8c9d46382 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/out @@ -0,0 +1,11 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +test-1.log +test-10.log +test-11-03-07_06.00.05.log +test-11-03-07_10.00.05.log +test-2.log +test-3.log +test-5.log +test-6.log +test-7.log +test-9.log diff --git a/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out new file mode 100644 index 0000000000..69ea064e38 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +XXXXXXXXXX.XXXXXX, disabling_analyzer, CHhAvVGS1DHFjwGM9, AllAnalyzers::ANALYZER_ANALYZER_SMTP, 3 diff --git a/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log new file mode 100644 index 0000000000..26cb0b0369 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log @@ -0,0 +1,13 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path smtp +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_depth helo mailfrom rcptto date from to cc reply_to msg_id in_reply_to subject x_originating_ip first_received second_received last_reply path user_agent tls fuids +#types time string addr port addr port count string string set[string] string string set[string] set[string] string string string string addr string string string vector[addr] string bool vector[string] +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 1 Bob-PC bob@example.org alice@example.org - - - - - - - - - - - 250 OK id=1pgobK-001mwq-ED 127.0.0.1,127.0.0.1 - F (empty) +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 2 Bob-PC - alice@example.org - - - - - - - - - - - 500 unrecognized command 127.0.0.1,127.0.0.1 - F (empty) +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 2 Bob-PC bob@example.org - - - - - - - - - - - - 500 unrecognized command 127.0.0.1,127.0.0.1 - F (empty) +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log new file mode 100644 index 0000000000..8b84b63d00 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log @@ -0,0 +1,12 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path weird +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p name addl notice peer source +#types time string addr port addr port string string bool string string +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 smtp_mail_transaction_invalid rcpt to missing mail from F zeek SMTP +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 smtp_excessive_invalid_mail_transactions - F zeek SMTP +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors-2/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors-2/.stderr index 13a40bc019..f3eeb2d94b 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors-2/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors-2/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 3: cat_sep() takes at least 2 arguments, got 1 (cat_sep(sep)) +error in <...>/cat_sep_errors.zeek, line 3: cat_sep() takes at least 2 argument(s), got 1 (cat_sep(sep)) diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors-3/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors-3/.stderr index c19b73c3da..3aec3d0c30 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors-3/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors-3/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 4: expected type string for default, got count (cat_sep(sep, 1)) +error in <...>/cat_sep_errors.zeek, line 4: expected type string for def, got count (cat_sep(sep, 1)) diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors-4/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors-4/.stderr index 6416ec7c35..c414809740 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors-4/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors-4/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 4: expected type string for separator, got count (cat_sep(1, default)) +error in <...>/cat_sep_errors.zeek, line 4: expected type string for sep, got count (cat_sep(1, default)) diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors-5/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors-5/.stderr index 13009f26f2..8ecf9f22a3 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors-5/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors-5/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 3: expected type string for separator, got record (cat_sep(::#0, default)) +error in <...>/cat_sep_errors.zeek, line 3: expected type string for sep, got record (cat_sep(::#0, default)) diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors/.stderr index f3813297fe..c0a49beadf 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 6: cat_sep() takes at least 2 arguments, got 0 (cat_sep()) +error in <...>/cat_sep_errors.zeek, line 6: cat_sep() takes at least 2 argument(s), got 0 (cat_sep()) diff --git a/testing/btest/Baseline.zam/scripts.base.frameworks.cluster.publish-hrw-type-check/.stderr b/testing/btest/Baseline.zam/scripts.base.frameworks.cluster.publish-hrw-type-check/.stderr new file mode 100644 index 0000000000..02602c34eb --- /dev/null +++ b/testing/btest/Baseline.zam/scripts.base.frameworks.cluster.publish-hrw-type-check/.stderr @@ -0,0 +1,5 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/publish-hrw-type-check.zeek, line 15: expected type Cluster::Pool for pool (Cluster::publish_hrw(/topic, 1234/tcp, test_send, ::#0)) +error in <...>/publish-hrw-type-check.zeek, line 17: expected type Cluster::Pool for pool (Cluster::publish_hrw(0, 1234/tcp, test_send, ::#1)) +error in <...>/publish-hrw-type-check.zeek, line 19: expected type Cluster::Pool for pool (Cluster::publish_rr(/topic, val, test_send, ::#2)) +error in <...>/publish-hrw-type-check.zeek, line 21: expected type string for key, got port (Cluster::publish_rr(::#3, 1234/tcp, test_send, ::#4)) diff --git a/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out new file mode 100644 index 0000000000..69ea064e38 --- /dev/null +++ b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +XXXXXXXXXX.XXXXXX, disabling_analyzer, CHhAvVGS1DHFjwGM9, AllAnalyzers::ANALYZER_ANALYZER_SMTP, 3 diff --git a/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log new file mode 100644 index 0000000000..26cb0b0369 --- /dev/null +++ b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log @@ -0,0 +1,13 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path smtp +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_depth helo mailfrom rcptto date from to cc reply_to msg_id in_reply_to subject x_originating_ip first_received second_received last_reply path user_agent tls fuids +#types time string addr port addr port count string string set[string] string string set[string] set[string] string string string string addr string string string vector[addr] string bool vector[string] +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 1 Bob-PC bob@example.org alice@example.org - - - - - - - - - - - 250 OK id=1pgobK-001mwq-ED 127.0.0.1,127.0.0.1 - F (empty) +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 2 Bob-PC - alice@example.org - - - - - - - - - - - 500 unrecognized command 127.0.0.1,127.0.0.1 - F (empty) +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 2 Bob-PC bob@example.org - - - - - - - - - - - - 500 unrecognized command 127.0.0.1,127.0.0.1 - F (empty) +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log new file mode 100644 index 0000000000..8b84b63d00 --- /dev/null +++ b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log @@ -0,0 +1,12 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path weird +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p name addl notice peer source +#types time string addr port addr port string string bool string string +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 smtp_mail_transaction_invalid rcpt to missing mail from F zeek SMTP +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 smtp_excessive_invalid_mail_transactions - F zeek SMTP +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/bifs.from_json-10/.stderr b/testing/btest/Baseline/bifs.from_json-10/.stderr new file mode 100644 index 0000000000..49d861c74c --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-10/.stderr @@ -0,0 +1 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. diff --git a/testing/btest/Baseline/bifs.from_json-10/.stdout b/testing/btest/Baseline/bifs.from_json-10/.stdout new file mode 100644 index 0000000000..c7202a240c --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-10/.stdout @@ -0,0 +1,6 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v={ +fe80::/64, +192.168.0.0/16 +}, valid=T] +[v=[1, 3, 4], valid=T] diff --git a/testing/btest/Baseline/bifs.from_json-11/.stderr b/testing/btest/Baseline/bifs.from_json-11/.stderr new file mode 100644 index 0000000000..1438154b7a --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-11/.stderr @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 8: required field Foo$hello is missing in JSON (from_json({"t":null}, to_any_coerceFoo)) +error in <...>/from_json.zeek, line 9: required field Foo$hello is null in JSON (from_json({"hello": null, "t": true}, to_any_coerceFoo)) diff --git a/testing/btest/Baseline/bifs.from_json-11/.stdout b/testing/btest/Baseline/bifs.from_json-11/.stdout new file mode 100644 index 0000000000..d288024480 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-11/.stdout @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-12/.stderr b/testing/btest/Baseline/bifs.from_json-12/.stderr new file mode 100644 index 0000000000..49d861c74c --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-12/.stderr @@ -0,0 +1 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. diff --git a/testing/btest/Baseline/bifs.from_json-12/.stdout b/testing/btest/Baseline/bifs.from_json-12/.stdout new file mode 100644 index 0000000000..7673a47ea5 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-12/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=[hello=Hello!], valid=T] diff --git a/testing/btest/Baseline/bifs.from_json-2/.stderr b/testing/btest/Baseline/bifs.from_json-2/.stderr new file mode 100644 index 0000000000..1ce3c885b8 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-2/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 4: from_json() requires a type argument (from_json([], to_any_coerce10)) diff --git a/testing/btest/Baseline/bifs.from_json-2/.stdout b/testing/btest/Baseline/bifs.from_json-2/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-2/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-3/.stderr b/testing/btest/Baseline/bifs.from_json-3/.stderr new file mode 100644 index 0000000000..cd9437efcb --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-3/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 4: JSON parse error: Missing a closing quotation mark in string. Offset: 5 (from_json({"hel, to_any_coercestring_vec)) diff --git a/testing/btest/Baseline/bifs.from_json-3/.stdout b/testing/btest/Baseline/bifs.from_json-3/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-3/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-4/.stderr b/testing/btest/Baseline/bifs.from_json-4/.stderr new file mode 100644 index 0000000000..210255a35f --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-4/.stderr @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 9: cannot convert JSON type 'array' to Zeek type 'bool' (from_json([], to_any_coercebool_t)) +error in <...>/from_json.zeek, line 10: cannot convert JSON type 'string' to Zeek type 'bool' (from_json({"a": "hello"}, to_any_coerceFoo)) diff --git a/testing/btest/Baseline/bifs.from_json-4/.stdout b/testing/btest/Baseline/bifs.from_json-4/.stdout new file mode 100644 index 0000000000..d288024480 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-4/.stdout @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-5/.stderr b/testing/btest/Baseline/bifs.from_json-5/.stderr new file mode 100644 index 0000000000..b08347df71 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-5/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 4: tables are not supported (from_json([], to_any_coercetable_string_of_string)) diff --git a/testing/btest/Baseline/bifs.from_json-5/.stdout b/testing/btest/Baseline/bifs.from_json-5/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-5/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-6/.stderr b/testing/btest/Baseline/bifs.from_json-6/.stderr new file mode 100644 index 0000000000..fa015b8031 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-6/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 5: wrong port format, must be <...>/(tcp|udp|icmp|unknown)/ (from_json("80", to_any_coerceport_t)) diff --git a/testing/btest/Baseline/bifs.from_json-6/.stdout b/testing/btest/Baseline/bifs.from_json-6/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-6/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-7/.stderr b/testing/btest/Baseline/bifs.from_json-7/.stderr new file mode 100644 index 0000000000..b3789904c6 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-7/.stderr @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 5: index type doesn't match (from_json([[1, false], [2]], to_any_coerceset_t)) +error in <...>/from_json.zeek, line 6: cannot convert JSON type 'number' to Zeek type 'bool' (from_json([[1, false], [2, 1]], to_any_coerceset_t)) diff --git a/testing/btest/Baseline/bifs.from_json-7/.stdout b/testing/btest/Baseline/bifs.from_json-7/.stdout new file mode 100644 index 0000000000..d288024480 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-7/.stdout @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-8/.stderr b/testing/btest/Baseline/bifs.from_json-8/.stderr new file mode 100644 index 0000000000..18bb4fa2eb --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-8/.stderr @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error: error compiling pattern /^?(.|\n)*(([[:print:]]{-}[[:alnum:]]foo))/ +error in <...>/from_json.zeek, line 5: error compiling pattern (from_json("/([[:print:]]{-}[[:alnum:]]foo)/", to_any_coercepattern_t)) diff --git a/testing/btest/Baseline/bifs.from_json-8/.stdout b/testing/btest/Baseline/bifs.from_json-8/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-8/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-9/.stderr b/testing/btest/Baseline/bifs.from_json-9/.stderr new file mode 100644 index 0000000000..60cbecd370 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-9/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 7: 'Yellow' is not a valid enum for 'Color'. (from_json("Yellow", to_any_coerceColor)) diff --git a/testing/btest/Baseline/bifs.from_json-9/.stdout b/testing/btest/Baseline/bifs.from_json-9/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-9/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json/.stderr b/testing/btest/Baseline/bifs.from_json/.stderr new file mode 100644 index 0000000000..49d861c74c --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json/.stderr @@ -0,0 +1 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. diff --git a/testing/btest/Baseline/bifs.from_json/.stdout b/testing/btest/Baseline/bifs.from_json/.stdout new file mode 100644 index 0000000000..24f35f7b9b --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json/.stdout @@ -0,0 +1,8 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=[hello=world, t=T, f=F, n=, m=, def=123, i=123, pi=3.1416, a=[1, 2, 3, 4], c1=A::Blue, p=1500/tcp, ti=1681652265.042767, it=1.0 hr 23.0 mins 20.0 secs, ad=127.0.0.1, s=::1/128, re=/^?(a)$?/, su={ +aa:bb::/32, +192.168.0.0/16 +}, se={ +[192.168.0.1, 80/tcp] , +[2001:db8::1, 8080/udp] +}], valid=T] diff --git a/testing/btest/Baseline/bifs.math/out b/testing/btest/Baseline/bifs.math/out index 8960b7c859..7ba88b0911 100644 --- a/testing/btest/Baseline/bifs.math/out +++ b/testing/btest/Baseline/bifs.math/out @@ -3,8 +3,13 @@ 2.0 -4.0 -3.0 +4.0 +3.0 +-3.0 +-2.0 1.772005 23.103867 1.144223 0.49693 +1.650765 22.21669 diff --git a/testing/btest/Baseline/core.network_time.broker/manager..stdout b/testing/btest/Baseline/core.network_time.broker/manager..stdout index 658d123ea1..d4c454b893 100644 --- a/testing/btest/Baseline/core.network_time.broker/manager..stdout +++ b/testing/btest/Baseline/core.network_time.broker/manager..stdout @@ -1,4 +1,4 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. manager: listening -manager: peer added, publishing do_continue_processing +manager: peer added, publishing timer_tick() events manager: peer lost, terminating diff --git a/testing/btest/Baseline/core.network_time.broker/worker..stdout b/testing/btest/Baseline/core.network_time.broker/worker..stdout index d5abbff6b9..9ff86f6f95 100644 --- a/testing/btest/Baseline/core.network_time.broker/worker..stdout +++ b/testing/btest/Baseline/core.network_time.broker/worker..stdout @@ -17,7 +17,7 @@ 44.750, timer_tick, 13, 45.0 45.000, timer, second timer (3 sec) 45.000, timer_tick, 14, 45.25 -45.250, timer, third timer (3.5 sec) +45.250, timer, third timer (3.25 sec) 45.250, timer_tick, 15, 45.5 45.500, timer_tick, 16, 45.75 45.750, timer_tick, 17, 46.0 diff --git a/testing/btest/Baseline/language.bro_init/out b/testing/btest/Baseline/language.bro_init/out deleted file mode 100644 index 0b182fe89e..0000000000 --- a/testing/btest/Baseline/language.bro_init/out +++ /dev/null @@ -1,3 +0,0 @@ -### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/bro_init.zeek, line 5: event bro_init() is no longer available, use zeek_init() instead -error in <...>/bro_init.zeek, line 10: event bro_done() is no longer available, use zeek_done() instead diff --git a/testing/btest/Baseline/language.bro_script_loaded/out b/testing/btest/Baseline/language.bro_script_loaded/out deleted file mode 100644 index 5fb003b55b..0000000000 --- a/testing/btest/Baseline/language.bro_script_loaded/out +++ /dev/null @@ -1,2 +0,0 @@ -### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/bro_script_loaded.zeek, line 5: event bro_script_loaded() is no longer available, use zeek_script_loaded() instead diff --git a/testing/btest/Baseline/plugins.hooks/output b/testing/btest/Baseline/plugins.hooks/output index 97b230190e..8ab256052c 100644 --- a/testing/btest/Baseline/plugins.hooks/output +++ b/testing/btest/Baseline/plugins.hooks/output @@ -575,6 +575,7 @@ 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (RDP::disable_analyzer_after_detection, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (RDP::rdp_check_interval, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SIP::sip_methods, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> +0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SMB::enable_clear_script_state, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SMB::logged_file_actions, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SMTP::mail_path_capture, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SMTP::mail_transaction_validation, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> @@ -2194,6 +2195,7 @@ 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (RDP::disable_analyzer_after_detection, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (RDP::rdp_check_interval, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SIP::sip_methods, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) +0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SMB::enable_clear_script_state, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SMB::logged_file_actions, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SMTP::mail_path_capture, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SMTP::mail_transaction_validation, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) @@ -3812,6 +3814,7 @@ 0.000000 | HookCallFunction Option::set_change_handler(RDP::disable_analyzer_after_detection, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(RDP::rdp_check_interval, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(SIP::sip_methods, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) +0.000000 | HookCallFunction Option::set_change_handler(SMB::enable_clear_script_state, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(SMB::logged_file_actions, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(SMTP::mail_path_capture, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(SMTP::mail_transaction_validation, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.from_json/out b/testing/btest/Baseline/scripts.base.frameworks.input.from_json/out new file mode 100644 index 0000000000..6376dd8577 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.input.from_json/out @@ -0,0 +1,7 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +Valid: [ip=192.168.0.1, source=local, timestamp=1990-09-22T12:13:14, timestamp_parsed=654005594.0] ({"ip": "192.168.0.1", "source": "local", "timestamp": "1990-09-22T12:13:14"}) +Valid: [ip=192.168.0.1, source=local, timestamp=1990-09-23T13:14:15, timestamp_parsed=654095655.0] ({"ip": "192.168.0.1", "source": "local", "timestamp": "1990-09-23T13:14:15"}) +Valid: [ip=192.168.0.2, source=local, timestamp=, timestamp_parsed=] ({"ip": "192.168.0.2", "source": "local"}) +Invalid: '{"source": "local"}' +Invalid: '{... ]' +Valid: [ip=8.8.4.4, source=remote, timestamp=, timestamp_parsed=] ({"ip": "8.8.4.4", "source": "remote"}) diff --git a/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/.stdout b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/.stdout new file mode 100644 index 0000000000..af7330beb9 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/.stdout @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +ntp_message 192.168.1.95 -> 17.253.4.253:123 (D^) +ntp_message 192.168.1.95 -> 17.253.4.253:123 (D^) diff --git a/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/conn.log b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/conn.log new file mode 100644 index 0000000000..d2639d9ea4 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/conn.log @@ -0,0 +1,11 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path conn +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents +#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 192.168.1.95 123 17.253.4.253 123 udp - 0.959285 96 0 S0 T F 0 D^ 2 152 0 0 - +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/ntp.log b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/ntp.log new file mode 100644 index 0000000000..736e20827e --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/ntp.log @@ -0,0 +1,12 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path ntp +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version mode stratum poll precision root_delay root_disp ref_id ref_time org_time rec_time xmt_time num_exts +#types time string addr port addr port count count count interval interval interval interval string time time time time count +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 192.168.1.95 123 17.253.4.253 123 4 4 1 256.000000 0.000001 0.000000 0.000992 GPSs XXXXXXXXXX.XXXXXX XXXXXXXXXX.XXXXXX XXXXXXXXXX.XXXXXX XXXXXXXXXX.XXXXXX 0 +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 192.168.1.95 123 17.253.4.253 123 4 3 0 256.000000 1.000000 0.000000 0.000000 \x00\x00\x00\x00 0.000000 0.000000 0.000000 XXXXXXXXXX.XXXXXX 0 +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/out b/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/out new file mode 100644 index 0000000000..524f00fa21 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/out @@ -0,0 +1,25 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, read, 15 +smb2_discarded_messages_state after, read, 0 +smb2_discarded_messages_state before, tree, 5 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, read, 15 +smb2_discarded_messages_state after, read, 0 +smb2_discarded_messages_state before, tree, 5 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 diff --git a/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/weird.log b/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/weird.log new file mode 100644 index 0000000000..f7d257af1b --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/weird.log @@ -0,0 +1,11 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path weird +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p name addl notice peer source +#types time string addr port addr port string string bool string string +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 34884 127.0.0.1 445 SMB_discarded_messages_state state=tree fid_map=0 tid_map=2 pending_cmds=20 pipe_map=0 F zeek SMB2 +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.ssl.tls-protocol-violation/.stderr b/testing/btest/Baseline/scripts.base.protocols.ssl.tls-protocol-violation/.stderr new file mode 100644 index 0000000000..49d861c74c --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.ssl.tls-protocol-violation/.stderr @@ -0,0 +1 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. diff --git a/testing/btest/Baseline/supervisor.config-cluster-multi-logger/logs.out b/testing/btest/Baseline/supervisor.config-cluster-multi-logger/logs.out new file mode 100644 index 0000000000..a9a0561636 --- /dev/null +++ b/testing/btest/Baseline/supervisor.config-cluster-multi-logger/logs.out @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +zeek/log-queue/test__XXXX-XX-XX-XX-XX-XX__XXXX-XX-XX-XX-XX-XX__log_suffix=logger-1__.log +zeek/log-queue/test__XXXX-XX-XX-XX-XX-XX__XXXX-XX-XX-XX-XX-XX__log_suffix=logger-2__.log diff --git a/testing/btest/Traces/ntp/misordered-ntp.pcap b/testing/btest/Traces/ntp/misordered-ntp.pcap new file mode 100644 index 0000000000..d2118414fe Binary files /dev/null and b/testing/btest/Traces/ntp/misordered-ntp.pcap differ diff --git a/testing/btest/Traces/smb/smb2_100_small_files.pcap b/testing/btest/Traces/smb/smb2_100_small_files.pcap new file mode 100644 index 0000000000..4bc38dc36a Binary files /dev/null and b/testing/btest/Traces/smb/smb2_100_small_files.pcap differ diff --git a/testing/btest/Traces/tls/tls1.2-protocol-violation.pcap b/testing/btest/Traces/tls/tls1.2-protocol-violation.pcap new file mode 100644 index 0000000000..76a51c00c9 Binary files /dev/null and b/testing/btest/Traces/tls/tls1.2-protocol-violation.pcap differ diff --git a/testing/btest/bifs/from_json.zeek b/testing/btest/bifs/from_json.zeek new file mode 100644 index 0000000000..3deefd323c --- /dev/null +++ b/testing/btest/bifs/from_json.zeek @@ -0,0 +1,137 @@ +# @TEST-EXEC: ASAN_OPTIONS="$ASAN_OPTIONS,detect_leaks=0" zeek -b %INPUT +# @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff .stdout +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff .stderr + +module A; + +type Color: enum { + Red = 10, + White = 20, + Blue = 30 +}; + +type Foo: record { + hello: string; + t: bool; + f: bool; + n: count &optional; + m: count &optional; # not in input + def: count &default = 123; + i: int; + pi: double; + a: string_vec; + c1: Color; + p: port; + ti: time; + it: interval; + ad: addr; + s: subnet; + re: pattern; + su: subnet_set; + se: set[addr, port]; +}; + +event zeek_init() + { + local json = "{\"hello\":\"world\",\"t\":true,\"f\":false,\"se\":[[\"192.168.0.1\", \"80/tcp\"], [\"2001:db8::1\", \"8080/udp\"]],\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[\"1\",\"2\",\"3\",\"4\"],\"su\":[\"[aa:bb::0]/32\",\"192.168.0.0/16\"],\"c1\":\"A::Blue\",\"p\":\"1500/tcp\",\"it\":5000,\"ad\":\"127.0.0.1\",\"s\":\"[::1/128]\",\"re\":\"/a/\",\"ti\":1681652265.042767}"; + print from_json(json, Foo); + } + +@TEST-START-NEXT +# argument type mismatch +event zeek_init() + { + print from_json("[]", 10); + } + +@TEST-START-NEXT +# JSON parse error +event zeek_init() + { + print from_json("{\"hel", string_vec); + } + +@TEST-START-NEXT +type bool_t: bool; +type Foo: record { + a: bool; +}; + +# type mismatch error +event zeek_init() + { + print from_json("[]", bool_t); + print from_json("{\"a\": \"hello\"}", Foo); + } + +@TEST-START-NEXT +# type unsupport error +event zeek_init() + { + print from_json("[]", table_string_of_string); + } + +@TEST-START-NEXT +type port_t: port; +# wrong port format +event zeek_init() + { + print from_json("\"80\"", port_t); + } + +@TEST-START-NEXT +type set_t: set[int, bool]; +# index type doesn't match +event zeek_init() + { + print from_json("[[1, false], [2]]", set_t); + print from_json("[[1, false], [2, 1]]", set_t); + } + +@TEST-START-NEXT +type pattern_t: pattern; +# pattern compile error +event zeek_init() + { + print from_json("\"/([[:print:]]{-}[[:alnum:]]foo)/\"", pattern_t); + } + +@TEST-START-NEXT +type Color: enum { + Red = 10 +}; +# enum error +event zeek_init() + { + print from_json("\"Yellow\"", Color); + } + +@TEST-START-NEXT +# container null +event zeek_init() + { + print from_json("[\"fe80::/64\",null,\"192.168.0.0/16\"]", subnet_set); + print from_json("[\"1\",null,\"3\",\"4\"]", string_vec); + } + +@TEST-START-NEXT +type Foo: record { + hello: string; + t: bool; +}; +# record field null or missing +event zeek_init() + { + print from_json("{\"t\":null}", Foo); + print from_json("{\"hello\": null, \"t\": true}", Foo); + } + +@TEST-START-NEXT +type Foo: record { + hello: string; +}; +# extra fields are alright +event zeek_init() + { + print from_json("{\"hello\": \"Hello!\", \"t\": true}", Foo); + } diff --git a/testing/btest/bifs/math.zeek b/testing/btest/bifs/math.zeek index 63999b9a27..d3fe0189f6 100644 --- a/testing/btest/bifs/math.zeek +++ b/testing/btest/bifs/math.zeek @@ -14,6 +14,11 @@ event zeek_init() print floor(c); print floor(d); + print ceil(a); + print ceil(b); + print ceil(c); + print ceil(d); + print sqrt(a); print exp(a); @@ -22,5 +27,7 @@ event zeek_init() print log10(a); + print log2(a); + print pow(a, b); } diff --git a/testing/btest/core/checksums-cli.test b/testing/btest/core/checksums-cli.test index 705addbf22..9216545573 100644 --- a/testing/btest/core/checksums-cli.test +++ b/testing/btest/core/checksums-cli.test @@ -1,3 +1,6 @@ +# Skip for C++ testing, since not all of the tests use the same script. +# @TEST-REQUIRES: test "${ZEEK_USE_CPP}" != "1" + # This verifies the interaction between the -C flag and the script-layer # ignore_checksums global. # diff --git a/testing/btest/core/network_time/broker.zeek b/testing/btest/core/network_time/broker.zeek index 9419fb5d3f..7ec26a7a03 100644 --- a/testing/btest/core/network_time/broker.zeek +++ b/testing/btest/core/network_time/broker.zeek @@ -11,6 +11,8 @@ redef allow_network_time_forward = F; +global timer_tock: event(); + event zeek_init() { print network_time(), "zeek_init: broker peering"; @@ -34,7 +36,8 @@ event timer(s: string) print fmt("%.3f", network_time()), "timer", s; } -# The manager tells us our network_time. +# The manager sends timer_tick() with the network time to the worker which +# replies back with a timer_tock(). global received_ticks = 0; event timer_tick(ts: time) &is_used { @@ -48,10 +51,12 @@ event timer_tick(ts: time) &is_used { schedule 0.5sec { timer("first timer (1 sec)") }; schedule 3sec { timer("second timer (3 sec)") }; - schedule 3.25sec { timer("third timer (3.5 sec)") }; + schedule 3.25sec { timer("third timer (3.25 sec)") }; schedule 5sec { timer("fourth timer (10 sec)") }; } + Broker::publish("zeek/event/my_topic", timer_tock); + if ( received_ticks == 30 ) terminate(); } @@ -74,20 +79,21 @@ event zeek_init() { print "manager: listening"; Broker::listen("127.0.0.1", to_port(getenv("BROKER_PORT"))); + Broker::subscribe("zeek/event/my_topic"); } -event local_tick() { +# Received from the worker once it has processed the tick. +event timer_tock() &is_used + { fake_network_time = fake_network_time + double_to_interval(0.25); Broker::publish("zeek/event/my_topic", timer_tick, fake_network_time); - schedule 0.05 sec { local_tick() }; -} + } event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "manager: peer added, publishing do_continue_processing"; + { + print "manager: peer added, publishing timer_tick() events"; Broker::publish("zeek/event/my_topic", timer_tick, fake_network_time); - schedule 0.05 sec { local_tick() }; - } + } event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) { diff --git a/testing/btest/language/bro_init.zeek b/testing/btest/language/bro_init.zeek deleted file mode 100644 index 0beda04a7b..0000000000 --- a/testing/btest/language/bro_init.zeek +++ /dev/null @@ -1,12 +0,0 @@ -# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 -# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out - -event bro_init() - { - print "ran bro_init()"; - } - -event bro_done() - { - print "ran bro_done()"; - } diff --git a/testing/btest/language/bro_script_loaded.zeek b/testing/btest/language/bro_script_loaded.zeek deleted file mode 100644 index fb3d080a31..0000000000 --- a/testing/btest/language/bro_script_loaded.zeek +++ /dev/null @@ -1,8 +0,0 @@ -# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 -# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out - -event bro_script_loaded(path: string, level: count) &priority=5 - { - if ( /zeek_script_loaded.zeek/ in path ) - print "bro_script_loaded priority 5"; - } diff --git a/testing/btest/plugins/binpac-flowbuffer-frame-length-plugin/CMakeLists.txt b/testing/btest/plugins/binpac-flowbuffer-frame-length-plugin/CMakeLists.txt index 9632726412..0a0badaf74 100644 --- a/testing/btest/plugins/binpac-flowbuffer-frame-length-plugin/CMakeLists.txt +++ b/testing/btest/plugins/binpac-flowbuffer-frame-length-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Foo-FOO) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/conflict-plugin/CMakeLists.txt b/testing/btest/plugins/conflict-plugin/CMakeLists.txt index 7864acc7d1..7cfa0fdab2 100644 --- a/testing/btest/plugins/conflict-plugin/CMakeLists.txt +++ b/testing/btest/plugins/conflict-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Conflict-Plugin) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/file-plugin/CMakeLists.txt b/testing/btest/plugins/file-plugin/CMakeLists.txt index 6fc782e2ca..d41f1b3c51 100644 --- a/testing/btest/plugins/file-plugin/CMakeLists.txt +++ b/testing/btest/plugins/file-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT BRO_DIST ) +if (NOT BRO_DIST) message(FATAL_ERROR "BRO_DIST not set") endif () diff --git a/testing/btest/plugins/packet-protocol-plugin/CMakeLists.txt b/testing/btest/plugins/packet-protocol-plugin/CMakeLists.txt index 99604aeb2b..b83bc5526a 100644 --- a/testing/btest/plugins/packet-protocol-plugin/CMakeLists.txt +++ b/testing/btest/plugins/packet-protocol-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Packet-Plugin-Demo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/pktdumper-plugin/CMakeLists.txt b/testing/btest/plugins/pktdumper-plugin/CMakeLists.txt index f611ab6b80..2ada85d2ef 100644 --- a/testing/btest/plugins/pktdumper-plugin/CMakeLists.txt +++ b/testing/btest/plugins/pktdumper-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/pktsrc-plugin/CMakeLists.txt b/testing/btest/plugins/pktsrc-plugin/CMakeLists.txt index f611ab6b80..2ada85d2ef 100644 --- a/testing/btest/plugins/pktsrc-plugin/CMakeLists.txt +++ b/testing/btest/plugins/pktsrc-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/protocol-plugin/CMakeLists.txt b/testing/btest/plugins/protocol-plugin/CMakeLists.txt index 53a50f3961..c7e685cd1e 100644 --- a/testing/btest/plugins/protocol-plugin/CMakeLists.txt +++ b/testing/btest/plugins/protocol-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/reader-plugin/CMakeLists.txt b/testing/btest/plugins/reader-plugin/CMakeLists.txt index f611ab6b80..2ada85d2ef 100644 --- a/testing/btest/plugins/reader-plugin/CMakeLists.txt +++ b/testing/btest/plugins/reader-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/writer-plugin/CMakeLists.txt b/testing/btest/plugins/writer-plugin/CMakeLists.txt index f611ab6b80..2ada85d2ef 100644 --- a/testing/btest/plugins/writer-plugin/CMakeLists.txt +++ b/testing/btest/plugins/writer-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/scripts/base/frameworks/input/from_json.zeek b/testing/btest/scripts/base/frameworks/input/from_json.zeek new file mode 100644 index 0000000000..547738ad29 --- /dev/null +++ b/testing/btest/scripts/base/frameworks/input/from_json.zeek @@ -0,0 +1,71 @@ +# @TEST-DOC: Reading a jsonl file using the raw input reader and parsing via from_json() +# @TEST-EXEC: zeek -b %INPUT >out +# @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff out + +@TEST-START-FILE denylist.jsonl +{"ip": "192.168.0.1", "source": "local", "timestamp": "1990-09-22T12:13:14"} +{"ip": "192.168.0.1", "source": "local", "timestamp": "1990-09-23T13:14:15"} +{"ip": "192.168.0.2", "source": "local"} +{"source": "local"} +{... ] +{"ip": "8.8.4.4", "source": "remote"} +@TEST-END-FILE + +redef exit_only_after_terminate = T; + +module A; + +type Line: record { + l: string; +}; + +type Deny: record { + ip: addr; + source: string; + timestamp: string &optional; + timestamp_parsed: time &optional; +}; + +event line(description: Input::EventDescription, tpe: Input::Event, line: string) + { + local r = from_json(line, Deny); + if ( r$valid ) + { + local deny = r$v as Deny; + if ( deny?$timestamp ) + deny$timestamp_parsed = strptime("%Y-%m-%dT%H:%M:%S", deny$timestamp); + + print fmt("Valid: %s (%s)", deny, line); + } + else + print fmt("Invalid: '%s'", line); + } + +event die() + { + if ( zeek_is_terminating() ) + return; + + print "error: test timeout"; + exit(1); + } + +event zeek_init() + { + Input::add_event([ + $source="denylist.jsonl", + $name="denylist", + $reader=Input::READER_RAW, + $fields=Line, + $ev=line, + $want_record=F + ]); + + schedule 5sec { die() }; + } + +event Input::end_of_data(name: string, source:string) + { + Input::remove("deny"); + terminate(); + } diff --git a/testing/btest/scripts/base/protocols/ntp/misordered-ntp.test b/testing/btest/scripts/base/protocols/ntp/misordered-ntp.test new file mode 100644 index 0000000000..91d4bc50ae --- /dev/null +++ b/testing/btest/scripts/base/protocols/ntp/misordered-ntp.test @@ -0,0 +1,12 @@ +# @TEST-EXEC: zeek -b -C -r $TRACES/ntp/misordered-ntp.pcap %INPUT +# @TEST-EXEC: btest-diff ntp.log +# @TEST-EXEC: btest-diff conn.log +# @TEST-EXEC: btest-diff .stdout + +@load base/protocols/conn +@load base/protocols/ntp + +event ntp_message(c: connection, is_orig: bool, msg: NTP::Message) + { + print fmt("ntp_message %s -> %s:%d (%s)", c$id$orig_h, c$id$resp_h, c$id$resp_p, c$history); + } diff --git a/testing/btest/scripts/base/protocols/smb/smb2-max-pending-messages.test b/testing/btest/scripts/base/protocols/smb/smb2-max-pending-messages.test new file mode 100644 index 0000000000..e2558ec83d --- /dev/null +++ b/testing/btest/scripts/base/protocols/smb/smb2-max-pending-messages.test @@ -0,0 +1,18 @@ +# @TEST-DOC: Pcap contains 100 file transfers (read requests), force BPF filtering such that the responses aren't seen and we have state growth. Verify a low SMB::max_pending_messages triggers, logs a weird and that script-land message state is reset. +# @TEST-EXEC: zeek -b -C -r $TRACES/smb/smb2_100_small_files.pcap -f 'src port not 445 or tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0' %INPUT >out +# @TEST-EXEC: btest-diff weird.log +# @TEST-EXEC: btest-diff out + +@load base/protocols/smb + +redef SMB::max_pending_messages = 20; + +event smb2_discarded_messages_state(c: connection, request: string) &priority=10 + { + print "smb2_discarded_messages_state before", request, |c$smb_state$pending_cmds|; + } + +event smb2_discarded_messages_state(c: connection, request: string) &priority=-10 + { + print "smb2_discarded_messages_state after", request, |c$smb_state$pending_cmds|; + } diff --git a/testing/btest/scripts/base/protocols/ssl/tls-protocol-violation.test b/testing/btest/scripts/base/protocols/ssl/tls-protocol-violation.test new file mode 100644 index 0000000000..0d68f8495d --- /dev/null +++ b/testing/btest/scripts/base/protocols/ssl/tls-protocol-violation.test @@ -0,0 +1,5 @@ +# This tests that no error messages are output when a protocol violation occurs + +# @TEST-EXEC: zeek -C -r $TRACES/tls/tls1.2-protocol-violation.pcap %INPUT +# @TEST-EXEC: test -f dpd.log +# @TEST-EXEC: btest-diff .stderr diff --git a/testing/btest/scripts/policy/protocols/ssl/validate-sct.zeek b/testing/btest/scripts/policy/protocols/ssl/validate-sct.zeek index 8d0c9ad873..1d486032c6 100644 --- a/testing/btest/scripts/policy/protocols/ssl/validate-sct.zeek +++ b/testing/btest/scripts/policy/protocols/ssl/validate-sct.zeek @@ -11,6 +11,7 @@ redef SSL::ct_logs += { ["\x03\x01\x9d\xf3\xfd\x85\xa6\x9a\x8e\xbd\x1f\xac\xc6\xda\x9b\xa7\x3e\x46\x97\x74\xfe\x77\xf5\x79\xfc\x5a\x08\xb8\x32\x8c\x1d\x6b"] = SSL::CTInfo($description="Venafi Gen2 CT log", $operator="Venafi", $url="ctlog-gen2.api.venafi.com/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x8e\x27\x27\x7a\xb6\x55\x09\x74\xeb\x6c\x4b\x94\x84\x65\xbc\xe4\x15\xf1\xea\x5a\xd8\x7c\x0e\x37\xce\xba\x3f\x6c\x09\xda\xe7\x29\x96\xd3\x45\x50\x6f\xde\x1e\xb4\x1c\xd2\x83\x88\xff\x29\x2f\xce\xa9\xff\xdf\x34\xde\x75\x0f\xc0\xcc\x18\x0d\x94\x2e\xfc\x37\x01"), ["\x68\xf6\x98\xf8\x1f\x64\x82\xbe\x3a\x8c\xee\xb9\x28\x1d\x4c\xfc\x71\x51\x5d\x67\x93\xd4\x44\xd1\x0a\x67\xac\xbb\x4f\x4f\xfb\xc4"] = SSL::CTInfo($description="Google 'Aviator' log", $operator="Google", $url="ct.googleapis.com/aviator/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xd7\xf4\xcc\x69\xb2\xe4\x0e\x90\xa3\x8a\xea\x5a\x70\x09\x4f\xef\x13\x62\xd0\x8d\x49\x60\xff\x1b\x40\x50\x07\x0c\x6d\x71\x86\xda\x25\x49\x8d\x65\xe1\x08\x0d\x47\x34\x6b\xbd\x27\xbc\x96\x21\x3e\x34\xf5\x87\x76\x31\xb1\x7f\x1d\xc9\x85\x3b\x0d\xf7\x1f\x3f\xe9"), ["\xac\x3b\x9a\xed\x7f\xa9\x67\x47\x57\x15\x9e\x6d\x7d\x57\x56\x72\xf9\xd9\x81\x00\x94\x1e\x9b\xde\xff\xec\xa1\x31\x3b\x75\x78\x2d"] = SSL::CTInfo($description="Venafi log", $operator="Venafi", $url="ctlog.api.venafi.com/", $maximum_merge_delay=86400, $key="\x30\x82\x01\x22\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x00\x30\x82\x01\x0a\x02\x82\x01\x01\x00\xa2\x5a\x48\x1f\x17\x52\x95\x35\xcb\xa3\x5b\x3a\x1f\x53\x82\x76\x94\xa3\xff\x80\xf2\x1c\x37\x3c\xc0\xb1\xbd\xc1\x59\x8b\xab\x2d\x65\x93\xd7\xf3\xe0\x04\xd5\x9a\x6f\xbf\xd6\x23\x76\x36\x4f\x23\x99\xcb\x54\x28\xad\x8c\x15\x4b\x65\x59\x76\x41\x4a\x9c\xa6\xf7\xb3\x3b\x7e\xb1\xa5\x49\xa4\x17\x51\x6c\x80\xdc\x2a\x90\x50\x4b\x88\x24\xe9\xa5\x12\x32\x93\x04\x48\x90\x02\xfa\x5f\x0e\x30\x87\x8e\x55\x76\x05\xee\x2a\x4c\xce\xa3\x6a\x69\x09\x6e\x25\xad\x82\x76\x0f\x84\x92\xfa\x38\xd6\x86\x4e\x24\x8f\x9b\xb0\x72\xcb\x9e\xe2\x6b\x3f\xe1\x6d\xc9\x25\x75\x23\x88\xa1\x18\x58\x06\x23\x33\x78\xda\x00\xd0\x38\x91\x67\xd2\xa6\x7d\x27\x97\x67\x5a\xc1\xf3\x2f\x17\xe6\xea\xd2\x5b\xe8\x81\xcd\xfd\x92\x68\xe7\xf3\x06\xf0\xe9\x72\x84\xee\x01\xa5\xb1\xd8\x33\xda\xce\x83\xa5\xdb\xc7\xcf\xd6\x16\x7e\x90\x75\x18\xbf\x16\xdc\x32\x3b\x6d\x8d\xab\x82\x17\x1f\x89\x20\x8d\x1d\x9a\xe6\x4d\x23\x08\xdf\x78\x6f\xc6\x05\xbf\x5f\xae\x94\x97\xdb\x5f\x64\xd4\xee\x16\x8b\xa3\x84\x6c\x71\x2b\xf1\xab\x7f\x5d\x0d\x32\xee\x04\xe2\x90\xec\x41\x9f\xfb\x39\xc1\x02\x03\x01\x00\x01"), +["\x56\x14\x06\x9a\x2f\xd7\xc2\xec\xd3\xf5\xe1\xbd\x44\xb2\x3e\xc7\x46\x76\xb9\xbc\x99\x11\x5c\xc0\xef\x94\x98\x55\xd6\x89\xd0\xdd"] = SSL::CTInfo($description="DigiCert Log Server", $operator="DigiCert", $url="https://ct1.digicert-ct.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x02\x46\xc5\xbe\x1b\xbb\x82\x40\x16\xe8\xc1\xd2\xac\x19\x69\x13\x59\xf8\xf8\x70\x85\x46\x40\xb9\x38\xb0\x23\x82\xa8\x64\x4c\x7f\xbf\xbb\x34\x9f\x4a\x5f\x28\x8a\xcf\x19\xc4\x00\xf6\x36\x06\x93\x65\xed\x4c\xf5\xa9\x21\x62\x5a\xd8\x91\xeb\x38\x24\x40\xac\xe8"), }; module SSL; diff --git a/testing/btest/supervisor/config-cluster-multi-logger.zeek b/testing/btest/supervisor/config-cluster-multi-logger.zeek new file mode 100644 index 0000000000..51a7cfb229 --- /dev/null +++ b/testing/btest/supervisor/config-cluster-multi-logger.zeek @@ -0,0 +1,94 @@ + +# @TEST-PORT: SUPERVISOR_PORT +# @TEST-PORT: LOGGER_PORT1 +# @TEST-PORT: LOGGER_PORT2 + +# Run multiple loggers with the supervisor and verify the generated log files +# contain their node names as log_suffix metadata within the log-queue directory. +# +# @TEST-EXEC: btest-bg-run zeek zeek -j -b %INPUT +# @TEST-EXEC: btest-bg-wait 10 +# @TEST-EXEC: ls zeek/log-queue/test*logger-1__.log >> logs.out +# @TEST-EXEC: ls zeek/log-queue/test*logger-2__.log >> logs.out +# @TEST-EXEC: TEST_DIFF_CANONIFIER='sed "s/[0-9][0-9]/XX/g"' btest-diff logs.out + +@load base/frameworks/cluster + +# Make both loggers log into the same log-queue directory. +redef Log::default_rotation_dir = "../log-queue"; + +global topic = "test-topic"; + +module Test; +export { + redef enum Log::ID += { LOG }; + + type Log: record { + s: string; + } &log; +} +module GLOBAL; + +global pong_count = 0; + +event pong() + { + ++pong_count; + + if ( pong_count == 2 ) + terminate(); + } + +event ping() + { + Log::write(Test::LOG, [$s="test"]); + Broker::publish(topic, pong); + } + +event zeek_init() + { + Log::create_stream(Test::LOG, [$columns=Test::Log]); + + if ( Supervisor::is_supervisor() ) + { + Broker::subscribe(topic); + Broker::listen("127.0.0.1", to_port(getenv("SUPERVISOR_PORT"))); + Broker::peer("127.0.0.1", to_port(getenv("LOGGER_PORT1"))); + Broker::peer("127.0.0.1", to_port(getenv("LOGGER_PORT2"))); + + local cluster: table[string] of Supervisor::ClusterEndpoint; + cluster["logger-1"] = [ + $role=Supervisor::LOGGER, + $host=127.0.0.1, + $p=to_port(getenv("LOGGER_PORT1")), + ]; + + cluster["logger-2"] = [ + $role=Supervisor::LOGGER, + $host=127.0.0.1, + $p=to_port(getenv("LOGGER_PORT2")), + ]; + + for ( n, ep in cluster ) + { + local sn = Supervisor::NodeConfig($name = n); + sn$cluster = cluster; + sn$directory = n; + local res = Supervisor::create(sn); + + if ( res != "" ) + print fmt("failed to create node %s: %s", n, res); + } + } + else + { + Broker::subscribe(topic); + Broker::peer("127.0.0.1", to_port(getenv("SUPERVISOR_PORT"))); + } + } + +event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) + { + if ( Supervisor::is_supervisor() ) + Broker::publish(topic, ping); + } diff --git a/testing/builtin-plugins/Files/protocol-plugin/CMakeLists.txt b/testing/builtin-plugins/Files/protocol-plugin/CMakeLists.txt index 53a50f3961..c7e685cd1e 100644 --- a/testing/builtin-plugins/Files/protocol-plugin/CMakeLists.txt +++ b/testing/builtin-plugins/Files/protocol-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/builtin-plugins/Files/py-lib-plugin/CMakeLists.txt b/testing/builtin-plugins/Files/py-lib-plugin/CMakeLists.txt index ce8eb32c96..76936614fa 100644 --- a/testing/builtin-plugins/Files/py-lib-plugin/CMakeLists.txt +++ b/testing/builtin-plugins/Files/py-lib-plugin/CMakeLists.txt @@ -20,12 +20,12 @@ include_directories(BEFORE ${PYTHON_INCLUDE_DIR}) zeek_plugin_begin(Zeek PyLib) file(GLOB cc_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "plugin/src/*.cc") -foreach(file ${cc_files}) +foreach (file ${cc_files}) zeek_plugin_cc(${file}) endforeach () file(GLOB bif_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "plugin/src/*.bif") -foreach(file ${bif_files}) +foreach (file ${bif_files}) zeek_plugin_bif(${file}) endforeach () diff --git a/testing/builtin-plugins/Files/zeek-version-plugin/CMakeLists.txt b/testing/builtin-plugins/Files/zeek-version-plugin/CMakeLists.txt index e2637688d3..431677ab2b 100644 --- a/testing/builtin-plugins/Files/zeek-version-plugin/CMakeLists.txt +++ b/testing/builtin-plugins/Files/zeek-version-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Version) cmake_minimum_required(VERSION 3.15) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/zeek-config.in b/zeek-config.in index 98396dc989..91182796bc 100755 --- a/zeek-config.in +++ b/zeek-config.in @@ -1,22 +1,22 @@ #!/bin/sh -binpac_root=@ZEEK_CONFIG_BINPAC_ROOT_DIR@ -broker_root=@ZEEK_CONFIG_BROKER_ROOT_DIR@ -btest_tools_dir=@ZEEK_CONFIG_BTEST_TOOLS_DIR@ -build_type=@CMAKE_BUILD_TYPE_LOWER@ -cmake_dir=@ZEEK_CMAKE_CONFIG_DIR@ -config_dir=@ZEEK_ETC_INSTALL_DIR@ -have_spicy=@USE_SPICY_ANALYZERS@ -include_dir=@CMAKE_INSTALL_PREFIX@/include -lib_dir=@CMAKE_INSTALL_FULL_LIBDIR@ -plugin_dir=@ZEEK_PLUGIN_DIR@ -prefix=@CMAKE_INSTALL_PREFIX@ -python_dir=@PY_MOD_INSTALL_DIR@ -script_dir=@ZEEK_SCRIPT_INSTALL_PATH@ -site_dir=@ZEEK_SCRIPT_INSTALL_PATH@/site -version=@VERSION@ -zeek_dist=@ZEEK_DIST@ -zeekpath=@DEFAULT_ZEEKPATH@ +binpac_root="@ZEEK_CONFIG_BINPAC_ROOT_DIR@" +broker_root="@ZEEK_CONFIG_BROKER_ROOT_DIR@" +btest_tools_dir="@ZEEK_CONFIG_BTEST_TOOLS_DIR@" +build_type="@CMAKE_BUILD_TYPE_LOWER@" +cmake_dir="@ZEEK_CMAKE_CONFIG_DIR@" +config_dir="@ZEEK_ETC_INSTALL_DIR@" +have_spicy="@USE_SPICY_ANALYZERS@" +include_dir="@CMAKE_INSTALL_PREFIX@/include" +lib_dir="@CMAKE_INSTALL_FULL_LIBDIR@" +plugin_dir="@ZEEK_PLUGIN_DIR@" +prefix="@CMAKE_INSTALL_PREFIX@" +python_dir="@PY_MOD_INSTALL_DIR@" +script_dir="@ZEEK_SCRIPT_INSTALL_PATH@" +site_dir="@ZEEK_SCRIPT_INSTALL_PATH@/site" +version="@VERSION@" +zeek_dist="@ZEEK_DIST@" +zeekpath="@DEFAULT_ZEEKPATH@" add_path() { # $1: existing path