forked from Research/WhisperCom
ADD: initial version + data classification
This commit is contained in:
parent
b3a6dd5906
commit
8b82e9ff6c
90
CMakeLists.txt
Normal file
90
CMakeLists.txt
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
cmake_minimum_required (VERSION 3.1 FATAL_ERROR)
|
||||||
|
project (whisper-com VERSION 0.0.1 LANGUAGES CXX C)
|
||||||
|
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
|
||||||
|
include(compdb)
|
||||||
|
include(doxygen)
|
||||||
|
|
||||||
|
build_docs(PROCESS_DOXYFILE DOXYFILE_PATH "docs/Doxyfile.in" )
|
||||||
|
|
||||||
|
IF(NOT TARGET loguru)
|
||||||
|
find_package (Threads REQUIRED)
|
||||||
|
add_library(loguru STATIC libs/loguru/loguru.cpp libs/loguru/loguru.hpp)
|
||||||
|
target_include_directories(loguru PUBLIC libs/loguru/)
|
||||||
|
target_compile_options(loguru PUBLIC -DLOGURU_WITH_STREAMS=1)
|
||||||
|
target_link_libraries(loguru PUBLIC dl Threads::Threads)
|
||||||
|
set_property(TARGET loguru PROPERTY POSITION_INDEPENDENT_CODE 1)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
set(WHISPER_SOURCES
|
||||||
|
include/Whisper/Data/Classification.hpp
|
||||||
|
src/Whisper/Data/Classification.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(WHISPER_REQUIRED_LIBRARIES loguru)
|
||||||
|
|
||||||
|
add_library(objlib OBJECT ${WHISPER_SOURCES})
|
||||||
|
set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
|
||||||
|
target_include_directories(objlib
|
||||||
|
PUBLIC
|
||||||
|
include
|
||||||
|
PRIVATE
|
||||||
|
src
|
||||||
|
)
|
||||||
|
target_link_libraries(objlib PUBLIC ${WHISPER_REQUIRED_LIBRARIES})
|
||||||
|
|
||||||
|
add_library(whisper SHARED $<TARGET_OBJECTS:objlib>)
|
||||||
|
target_include_directories(whisper
|
||||||
|
PUBLIC
|
||||||
|
include
|
||||||
|
PRIVATE
|
||||||
|
src
|
||||||
|
)
|
||||||
|
target_link_libraries(whisper PUBLIC ${WHISPER_REQUIRED_LIBRARIES})
|
||||||
|
|
||||||
|
add_library(whisper-static STATIC $<TARGET_OBJECTS:objlib>)
|
||||||
|
target_include_directories(whisper-static
|
||||||
|
PUBLIC
|
||||||
|
include
|
||||||
|
PRIVATE
|
||||||
|
src
|
||||||
|
)
|
||||||
|
target_link_libraries(whisper-static PUBLIC ${WHISPER_REQUIRED_LIBRARIES})
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Everything test related
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
option(WHISPER_TESTS "ENABLE/DISABLE all tests for whisper-com" ON)
|
||||||
|
IF(${WHISPER_TESTS})
|
||||||
|
message(STATUS "whisper-com tests enabled")
|
||||||
|
IF(NOT TARGET Catch2)
|
||||||
|
add_subdirectory(libs/Catch2)
|
||||||
|
include(libs/Catch2/contrib/Catch.cmake)
|
||||||
|
ENDIF()
|
||||||
|
include(CTest)
|
||||||
|
ELSE()
|
||||||
|
message(STATUS "whisper-com tests disabled")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
IF(${WHISPER_TESTS})
|
||||||
|
#
|
||||||
|
# all tests
|
||||||
|
#
|
||||||
|
add_executable(test_classification tests/test_classification.cpp)
|
||||||
|
target_link_libraries(test_classification PUBLIC Catch2::Catch2 whisper-static)
|
||||||
|
catch_discover_tests(test_classification)
|
||||||
|
#
|
||||||
|
# add_executable(test_message tests/test_message.cpp)
|
||||||
|
# target_link_libraries(test_message PUBLIC Catch2::Catch2 bc-ng loguru)
|
||||||
|
# target_compile_definitions(test_message PRIVATE -DNDEBUG=1 -DNLOGGING_VERBOSE=1)
|
||||||
|
# catch_discover_tests(test_message)
|
||||||
|
|
||||||
|
ENDIF()
|
59
include/Whisper/Data/Classification.hpp
Normal file
59
include/Whisper/Data/Classification.hpp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#pragma once
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
/** @file */
|
||||||
|
/** @copyright 2021 MPLv2 */
|
||||||
|
#include <cstdint>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is the main namespace for all whisper-com related datatypes and classed.
|
||||||
|
*/
|
||||||
|
namespace Whisper
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief namespace for all data related DataTypes, classes, etc.
|
||||||
|
*/
|
||||||
|
namespace Data
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \defgroup data_classifications Classification of Data within Messages
|
||||||
|
* Data in Message can be classified occording to the non-disclosure of its information.
|
||||||
|
* In whisper-com certain rules are enforced occording to data classification
|
||||||
|
* e.g. messages may be dropped or not routed through gateways.
|
||||||
|
* Furthermore, encryption of data may or may not be enforced.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enumeration of different data classifications.
|
||||||
|
* \ingroup data_classifications
|
||||||
|
* Data classifications classify the data within the payload of a message
|
||||||
|
* according to six levels. We think six levels should be enough and
|
||||||
|
* fewer limits the flexibility of the user and more adds to the overall
|
||||||
|
* complexity.
|
||||||
|
*/
|
||||||
|
enum class classification : std::uint8_t
|
||||||
|
{
|
||||||
|
/// The data is public and may even be transmitted public to the Internet.
|
||||||
|
PUBLIC,
|
||||||
|
/// The data is classified open. Everyone with access to the network may read it
|
||||||
|
/// but the data is not allowed to be published to the internet or other non local networks.
|
||||||
|
OPEN,
|
||||||
|
/// The data is classified RESTRICTED
|
||||||
|
RESTRICTED,
|
||||||
|
/// the data is classified CONFIDENTIAL
|
||||||
|
CONFIDENTIAL,
|
||||||
|
/// The data is classified as SECRET
|
||||||
|
SECRET,
|
||||||
|
/// The data is classified as TOP SECRET.
|
||||||
|
TOP_SECRET
|
||||||
|
}; // enum class classification
|
||||||
|
|
||||||
|
}; // namespace Data
|
||||||
|
|
||||||
|
}; // namespace Whisper
|
0
src/Whisper/Data/Classification.cpp
Normal file
0
src/Whisper/Data/Classification.cpp
Normal file
46
tests/test_classification.cpp
Normal file
46
tests/test_classification.cpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \defgroup compile_data_tests Test that Whisper::Data datatypes compile
|
||||||
|
* All test cases for verifying comilation of Whisper::Data datatypes and classes
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define CATCH_CONFIG_MAIN
|
||||||
|
#include<catch2/catch.hpp>
|
||||||
|
#include<Whisper/Data/Classification.hpp>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Verify that data classification compile and can be used
|
||||||
|
* \ingroup compile_data_tests
|
||||||
|
*/
|
||||||
|
SCENARIO("Use Classification of Data","[classification,data]")
|
||||||
|
{
|
||||||
|
GIVEN("nothing")
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
WHEN("instantiating some classifications")
|
||||||
|
{
|
||||||
|
|
||||||
|
Whisper::Data::classification c0 = Whisper::Data::classification::PUBLIC;
|
||||||
|
Whisper::Data::classification c1 = Whisper::Data::classification::OPEN;
|
||||||
|
Whisper::Data::classification c2 = Whisper::Data::classification::RESTRICTED;
|
||||||
|
Whisper::Data::classification c3 = Whisper::Data::classification::CONFIDENTIAL;
|
||||||
|
Whisper::Data::classification c4 = Whisper::Data::classification::SECRET;
|
||||||
|
Whisper::Data::classification c5 = Whisper::Data::classification::TOP_SECRET;
|
||||||
|
|
||||||
|
THEN("then everything is fine")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user