mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-03-03 18:25:23 +00:00
Fix tests building
This commit is contained in:
parent
bac36b2df5
commit
8dfd341d2c
@ -1344,52 +1344,14 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
######################################################### gnss_crypto_test
|
|
||||||
|
|
||||||
if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA)
|
|
||||||
set(GNSS_CRYPTO_TEST_SOURCES
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/unit-tests/signal-processing-blocks/osnma/gnss_crypto_test.cc)
|
|
||||||
|
|
||||||
if(USE_CMAKE_TARGET_SOURCES)
|
|
||||||
add_executable(gnss_crypto_test)
|
|
||||||
target_sources(gnss_crypto_test PRIVATE ${GNSS_CRYPTO_TEST_SOURCES})
|
|
||||||
else()
|
|
||||||
add_executable(gnss_crypto_test ${GNSS_CRYPTO_TEST_SOURCES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_link_libraries(gnss_crypto_test
|
|
||||||
PRIVATE
|
|
||||||
Boost::thread
|
|
||||||
GTest::GTest
|
|
||||||
GTest::Main
|
|
||||||
core_system_parameters
|
|
||||||
Pugixml::pugixml
|
|
||||||
)
|
|
||||||
if(ENABLE_GLOG_AND_GFLAGS)
|
|
||||||
target_link_libraries(gnss_crypto_test PRIVATE Gflags::gflags Glog::glog)
|
|
||||||
target_compile_definitions(gnss_crypto_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1)
|
|
||||||
else()
|
|
||||||
target_link_libraries(gnss_crypto_test PRIVATE absl::flags absl::flags_parse absl::log $<LINK_LIBRARY:WHOLE_ARCHIVE,absl::log_flags> absl::log_initialize)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_include_directories(gnss_crypto_test
|
|
||||||
PRIVATE
|
|
||||||
${GNSSSDR_SOURCE_DIR}/src/core/system_parameters)
|
|
||||||
|
|
||||||
xcode_remove_warning_duplicates(gnss_crypto_test) # TODO - unsure if needed
|
|
||||||
|
|
||||||
add_test(gnss_crypto_test gnss_crypto_test)
|
|
||||||
|
|
||||||
set_property(TEST gnss_crypto_test PROPERTY TIMEOUT 1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
######################################################### osnma_msg_receiver_test
|
######################################################### osnma_msg_receiver_test
|
||||||
|
|
||||||
if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA)
|
if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA)
|
||||||
set(OSNMA_MSG_RECEIVER_TEST_SOURCES
|
set(OSNMA_MSG_RECEIVER_TEST_SOURCES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc
|
${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/unit-tests/signal-processing-blocks/osnma/osnma_msg_receiver_test.cc)
|
${CMAKE_CURRENT_SOURCE_DIR}/unit-tests/signal-processing-blocks/osnma/osnma_msg_receiver_test.cc
|
||||||
|
)
|
||||||
|
|
||||||
if(USE_CMAKE_TARGET_SOURCES)
|
if(USE_CMAKE_TARGET_SOURCES)
|
||||||
add_executable(osnma_msg_receiver_test)
|
add_executable(osnma_msg_receiver_test)
|
||||||
@ -1399,7 +1361,8 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(osnma_msg_receiver_test
|
target_link_libraries(osnma_msg_receiver_test
|
||||||
PRIVATE
|
PRIVATE
|
||||||
|
gnss_sdr_flags
|
||||||
Boost::thread
|
Boost::thread
|
||||||
GTest::GTest
|
GTest::GTest
|
||||||
GTest::Main
|
GTest::Main
|
||||||
@ -1416,11 +1379,12 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA)
|
|||||||
|
|
||||||
add_test(osnma_msg_receiver_test osnma_msg_receiver_test)
|
add_test(osnma_msg_receiver_test osnma_msg_receiver_test)
|
||||||
|
|
||||||
set_property(TEST osnma_msg_receiver_test PROPERTY TIMEOUT 1)
|
set_property(TEST osnma_msg_receiver_test PROPERTY TIMEOUT 30)
|
||||||
|
|
||||||
target_include_directories(osnma_msg_receiver_test
|
target_include_directories(osnma_msg_receiver_test
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${GNSSSDR_SOURCE_DIR}/src/core/system_parameters)
|
${GNSSSDR_SOURCE_DIR}/src/core/system_parameters
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_BENCHMARKS)
|
if(ENABLE_BENCHMARKS)
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "concurrent_map.h"
|
#include "concurrent_map.h"
|
||||||
#include "concurrent_queue.h"
|
#include "concurrent_queue.h"
|
||||||
#include "gps_acq_assist.h"
|
#include "gps_acq_assist.h"
|
||||||
|
#include "gnss_sdr_flags.h"
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@ -36,7 +37,6 @@ using namespace google;
|
|||||||
DECLARE_string(log_dir);
|
DECLARE_string(log_dir);
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#include "gnss_sdr_flags.h"
|
|
||||||
#include <absl/flags/flag.h>
|
#include <absl/flags/flag.h>
|
||||||
#include <absl/flags/parse.h>
|
#include <absl/flags/parse.h>
|
||||||
#include <absl/log/flags.h>
|
#include <absl/log/flags.h>
|
||||||
@ -44,7 +44,6 @@ DECLARE_string(log_dir);
|
|||||||
#include <absl/log/log.h>
|
#include <absl/log/log.h>
|
||||||
#include <absl/log/log_sink.h>
|
#include <absl/log/log_sink.h>
|
||||||
#include <absl/log/log_sink_registry.h>
|
#include <absl/log/log_sink_registry.h>
|
||||||
|
|
||||||
class TestLogSink : public absl::LogSink
|
class TestLogSink : public absl::LogSink
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -113,7 +113,7 @@ private:
|
|||||||
#include "unit-tests/signal-processing-blocks/adapter/pass_through_test.cc"
|
#include "unit-tests/signal-processing-blocks/adapter/pass_through_test.cc"
|
||||||
#include "unit-tests/signal-processing-blocks/libs/item_type_helpers_test.cc"
|
#include "unit-tests/signal-processing-blocks/libs/item_type_helpers_test.cc"
|
||||||
#include "unit-tests/signal-processing-blocks/osnma/gnss_crypto_test.cc"
|
#include "unit-tests/signal-processing-blocks/osnma/gnss_crypto_test.cc"
|
||||||
#include "unit-tests/signal-processing-blocks/osnma/osnma_msg_receiver_test.cc"
|
// #include "unit-tests/signal-processing-blocks/osnma/osnma_msg_receiver_test.cc"
|
||||||
#include "unit-tests/signal-processing-blocks/pvt/geohash_test.cc"
|
#include "unit-tests/signal-processing-blocks/pvt/geohash_test.cc"
|
||||||
#include "unit-tests/signal-processing-blocks/pvt/nmea_printer_test.cc"
|
#include "unit-tests/signal-processing-blocks/pvt/nmea_printer_test.cc"
|
||||||
#include "unit-tests/signal-processing-blocks/pvt/rinex_printer_test.cc"
|
#include "unit-tests/signal-processing-blocks/pvt/rinex_printer_test.cc"
|
||||||
|
@ -1,192 +1,186 @@
|
|||||||
#include <gtest/gtest.h>
|
|
||||||
#include "gnss_crypto.h"
|
#include "gnss_crypto.h"
|
||||||
|
#include <gtest/gtest.h>
|
||||||
class GnssCryptoTest : public ::testing::Test
|
class GnssCryptoTest : public ::testing::Test
|
||||||
{
|
{
|
||||||
|
|
||||||
};
|
};
|
||||||
TEST(GnssCryptoTest, VerifySignature) {
|
|
||||||
// "../data/OSNMA_PublicKey_20240115100000_newPKID_1.pem"
|
|
||||||
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>();
|
|
||||||
|
|
||||||
// RG example - import crt certificate - result: FAIL
|
|
||||||
std::vector<uint8_t> message = {0x82, 0x10, 0x49, 0x22, 0x04, 0xE0, 0x60, 0x61, 0x0B, 0xDF, 0x26, 0xD7, 0x7B, 0x5B, 0xF8, 0xC9, 0xCB, 0xFC, 0xF7, 0x04, 0x22, 0x08, 0x14, 0x75, 0xFD, 0x44, 0x5D, 0xF0, 0xFF};
|
|
||||||
std::vector<uint8_t> signature = {0xF8, 0xCD, 0x88, 0x29, 0x9F, 0xA4, 0x60, 0x58, 0x00, 0x20, 0x7B, 0xFE, 0xBE, 0xAC, 0x55, 0x02, 0x40, 0x53, 0xF3, 0x0F, 0x7C, 0x69, 0xB3, 0x5C, 0x15, 0xE6, 0x08, 0x00, 0xAC, 0x3B, 0x6F, 0xE3, 0xED, 0x06, 0x39, 0x95, 0x2F, 0x7B, 0x02, 0x8D, 0x86, 0x86, 0x74, 0x45, 0x96, 0x1F, 0xFE, 0x94, 0xFB, 0x22, 0x6B, 0xFF, 0x70, 0x06, 0xE0, 0xC4, 0x51, 0xEE, 0x3F, 0x87, 0x28, 0xC1, 0x77, 0xFB};
|
|
||||||
std::vector<uint8_t> publicKey { // PEM format - 1000 bits
|
|
||||||
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A,
|
|
||||||
|
|
||||||
0x4D, 0x46, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
|
||||||
0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x41, 0x37, 0x4C, 0x4F, 0x5A, 0x4C, 0x77, 0x67, 0x65, 0x39, 0x32, 0x4C, 0x78, 0x4E, 0x2B, 0x46, 0x6B, 0x59, 0x66, 0x38, 0x74, 0x6F, 0x59, 0x79, 0x44, 0x57, 0x50, 0x2F, 0x0A, 0x6F, 0x4A, 0x46, 0x42, 0x44, 0x38, 0x46, 0x59, 0x2B, 0x37,
|
|
||||||
0x64, 0x35, 0x67, 0x4F, 0x71, 0x49, 0x61, 0x45, 0x32, 0x52, 0x6A, 0x50, 0x41, 0x6E, 0x4B, 0x49, 0x36, 0x38, 0x73, 0x2F, 0x4F, 0x4B, 0x2F, 0x48, 0x50, 0x67, 0x6F, 0x4C, 0x6B, 0x4F, 0x32, 0x69, 0x6A, 0x51, 0x38, 0x78, 0x41, 0x5A, 0x79, 0x44, 0x64, 0x50, 0x42, 0x31, 0x64, 0x48, 0x53, 0x51, 0x3D, 0x3D,
|
|
||||||
|
|
||||||
0x0A,
|
|
||||||
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A } ;
|
|
||||||
|
|
||||||
// own ECDSA-P256 key and message generated and signed and verified successfully with openssl
|
|
||||||
// std::vector<uint8_t> message{0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x0A }; // Hello world con 0x0A al final. Raw message (unhashed)
|
|
||||||
// std::vector<uint8_t> signature{0x30, 0x45, 0x02, 0x21, 0x00, 0xFB, 0xE6, 0x09, 0x74, 0x5C, 0x12, 0xE8, 0x2C, 0x0C, 0xC9, 0x7A, 0x8E, 0x13, 0x88, 0x87, 0xDA, 0xBF, 0x08, 0x43, 0xF8, 0xC8, 0x93, 0x16, 0x5A,
|
|
||||||
// 0x0F, 0x7A, 0xA4, 0xBF, 0x4A, 0xE1, 0xE1, 0xDB, 0x02, 0x20, 0x6B, 0xCB, 0x2F, 0x80, 0x69, 0xBB, 0xDE, 0xC9, 0x11, 0x1D, 0x51, 0x2B, 0x9F, 0x61, 0xA0, 0xC1, 0x29, 0xD1, 0x0B,
|
|
||||||
// 0x58, 0x09, 0x82, 0x58, 0xFC, 0x9E, 0x00, 0xC7, 0xEE, 0xA5, 0xB9, 0xB2, 0x56}; // Hello world hashed and then encrypted with PrK
|
|
||||||
// raw r and s values
|
|
||||||
// std::vector<uint8_t> signature = {
|
|
||||||
// 0x00, 0xFB, 0xE6, 0x09, 0x74, 0x5C, 0x12, 0xE8, 0x2C, 0x0C, 0xC9, 0x7A, 0x8E, 0x13, 0x88, 0x87, 0xDA, 0xBF, 0x08, 0x43, 0xF8,
|
|
||||||
// 0xC8, 0x93, 0x16, 0x5A, 0x0F, 0x7A, 0xA4, 0xBF, 0x4A, 0xE1, 0xE1, 0xDB, 0x02, 0x20, 0x6B, 0xCB, 0x2F, 0x80, 0x69, 0xBB, 0xDE,
|
|
||||||
// 0xC9, 0x11, 0x1D, 0x51, 0x2B, 0x9F, 0x61, 0xA0, 0xC1, 0x29, 0xD1, 0x0B, 0x58, 0x09, 0x82, 0x58, 0xFC, 0x9E, 0x00, 0xC7, 0xEE,
|
|
||||||
// 0xA5, 0xB9, 0xB2, 0x56 };
|
|
||||||
|
|
||||||
// std::vector<uint8_t> publicKey{// PK associated to the PrK, in der format ---test
|
|
||||||
// 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x4A, 0xF3,
|
|
||||||
// 0xEE, 0x3A, 0x94, 0x25, 0x25, 0x3D, 0x55, 0xC2, 0x5A, 0xC2, 0x2D, 0xCF, 0x14, 0x4D, 0x39, 0x0D, 0xB1, 0xFC, 0x7F, 0x31, 0x5A, 0x2A, 0x19, 0xAE, 0x4E, 0xD6, 0xCB, 0xA6, 0x59,
|
|
||||||
// 0xD6, 0x99, 0x7C, 0xE8, 0xBD, 0x1F, 0x43, 0x34, 0x1C, 0x59, 0xD9, 0xD9, 0xCA, 0xC3, 0xEE, 0x58, 0xE5, 0xEA, 0xD3, 0x55, 0x44, 0xEA, 0x89, 0x71, 0x65, 0xD0, 0x92, 0x72, 0xA2,
|
|
||||||
// 0xC8, 0x3C, 0x87, 0x5D };
|
|
||||||
// std::vector<uint8_t> publicKey{ // PK associated to the PrK, in pem format
|
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A,
|
|
||||||
//
|
|
||||||
// 0x4D, 0x46,
|
|
||||||
// 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63,
|
|
||||||
// 0x44, 0x51, 0x67, 0x41, 0x45, 0x53, 0x76, 0x50, 0x75, 0x4F, 0x70, 0x51, 0x6C, 0x4A, 0x54, 0x31, 0x56, 0x77, 0x6C, 0x72, 0x43, 0x4C, 0x63, 0x38, 0x55, 0x54, 0x54, 0x6B, 0x4E,
|
|
||||||
// 0x73, 0x66, 0x78, 0x2F, 0x0A, 0x4D, 0x56, 0x6F, 0x71, 0x47, 0x61, 0x35, 0x4F, 0x31, 0x73, 0x75, 0x6D, 0x57, 0x64, 0x61, 0x5A, 0x66, 0x4F, 0x69, 0x39, 0x48, 0x30, 0x4D, 0x30,
|
|
||||||
// 0x48, 0x46, 0x6E, 0x5A, 0x32, 0x63, 0x72, 0x44, 0x37, 0x6C, 0x6A, 0x6C, 0x36, 0x74, 0x4E, 0x56, 0x52, 0x4F, 0x71, 0x4A, 0x63, 0x57, 0x58, 0x51, 0x6B, 0x6E, 0x4B, 0x69, 0x79,
|
|
||||||
// 0x44, 0x79, 0x48, 0x58, 0x51, 0x3D, 0x3D, 0x0A,
|
|
||||||
//
|
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D,
|
|
||||||
// 0x2D, 0x2D, 0x2D, 0x0A };
|
|
||||||
|
|
||||||
// own key - GnuTLS error: The curve is unsupported... x192 EC unsupported??
|
|
||||||
// std::vector<uint8_t> message = {0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64 }; // hello world
|
|
||||||
// std::vector<uint8_t> signature = {0x30, 0x34, 0x02, 0x18, 0x4F, 0xAC, 0x9C, 0x5A, 0x44, 0xCF, 0xFD, 0x42, 0x6A, 0x58, 0x97, 0xA4, 0x94, 0x53, 0x2C, 0x79, 0xD1, 0x7B, 0x8B, 0xF9, 0x93, 0x03, 0xA2, 0xAF, 0x02, 0x18, 0x46, 0xF2, 0xF3, 0xCF, 0x9A, 0x23, 0x39, 0xB4, 0x25, 0x11, 0x89, 0x9A, 0x44, 0x7E, 0x2F, 0xB1, 0xE1, 0x58, 0xAF, 0xCE, 0xC1,0xB4, 0xA1, 0x38 };
|
|
||||||
// std::vector<uint8_t> publicKey = {
|
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x45, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
|
||||||
// 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x49, 0x44, 0x4D, 0x67, 0x41, 0x45, 0x51, 0x55, 0x61, 0x30, 0x6C, 0x38, 0x4D, 0x35, 0x76, 0x50, 0x58, 0x2B, 0x74, 0x4A, 0x76, 0x63, 0x4C, 0x2B, 0x45, 0x45, 0x4C, 0x34, 0x6E, 0x71, 0x79, 0x75, 0x53, 0x43, 0x0A, 0x4D, 0x4E, 0x46, 0x4A, 0x64, 0x43, 0x5A, 0x62, 0x62, 0x58,
|
|
||||||
// 0x35, 0x70, 0x4D, 0x36, 0x69, 0x4C, 0x52, 0x53, 0x30, 0x43, 0x51, 0x59, 0x45, 0x67, 0x56, 0x47, 0x51, 0x6B, 0x65, 0x75, 0x74, 0x74, 0x35, 0x78, 0x2F, 0x45, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
|
|
||||||
// 0x0A };
|
|
||||||
// std::vector<uint8_t> ecparam = {
|
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x45, 0x43, 0x20, 0x50, 0x41, 0x52, 0x41, 0x4D, 0x45, 0x54, 0x45, 0x52, 0x53, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x42, 0x67, 0x67, 0x71, 0x68, 0x6B, 0x6A, 0x4F, 0x50, 0x51, 0x4D, 0x42, 0x41, 0x67, 0x3D, 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D,
|
|
||||||
// 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x45, 0x43, 0x20, 0x50, 0x41, 0x52, 0x41, 0x4D, 0x45, 0x54, 0x45, 0x52, 0x53, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A };
|
|
||||||
|
|
||||||
|
|
||||||
|
TEST(GnssCryptoTest, VerifySignature)
|
||||||
d_crypto->set_public_key(publicKey);
|
|
||||||
bool result = d_crypto->verify_signature(message, signature);
|
|
||||||
|
|
||||||
ASSERT_TRUE(result);
|
|
||||||
|
|
||||||
//TEST(GnssCryptoTest, sha256Test)
|
|
||||||
//{
|
|
||||||
// std::unique_ptr<Gnss_Crypto> d_crypto;
|
|
||||||
//
|
|
||||||
// auto str = "Hello World!";
|
|
||||||
// std::vector<uint8_t> input (str, str + strlen(str));
|
|
||||||
//
|
|
||||||
// auto expectedOutputStr = "86933b0b147ac4c010266b99004158fa17937db89a03dd7bb2ca5ef7f43c325a";
|
|
||||||
// std::vector<uint8_t> expectedOutput(expectedOutputStr, expectedOutputStr + strlen(expectedOutputStr));
|
|
||||||
//
|
|
||||||
// std::vector<uint8_t> computedOutput = d_crypto->computeSHA256(input);
|
|
||||||
//
|
|
||||||
// ASSERT_TRUE(computedOutput == expectedOutput
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TEST(GnssCryptoTest,VerifyPubKeyImport)
|
|
||||||
{
|
{
|
||||||
// "../data/OSNMA_PublicKey_20240115100000_newPKID_1.pem"
|
// "../data/OSNMA_PublicKey_20240115100000_newPKID_1.pem"
|
||||||
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>();
|
const std::string fake("fake");
|
||||||
|
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>(fake, fake);
|
||||||
|
|
||||||
|
// RG example - import crt certificate - result: FAIL
|
||||||
|
std::vector<uint8_t> message = {0x82, 0x10, 0x49, 0x22, 0x04, 0xE0, 0x60, 0x61, 0x0B, 0xDF, 0x26, 0xD7, 0x7B, 0x5B, 0xF8, 0xC9, 0xCB, 0xFC, 0xF7, 0x04, 0x22, 0x08, 0x14, 0x75, 0xFD, 0x44, 0x5D, 0xF0, 0xFF};
|
||||||
|
std::vector<uint8_t> signature = {0xF8, 0xCD, 0x88, 0x29, 0x9F, 0xA4, 0x60, 0x58, 0x00, 0x20, 0x7B, 0xFE, 0xBE, 0xAC, 0x55, 0x02, 0x40, 0x53, 0xF3, 0x0F, 0x7C, 0x69, 0xB3, 0x5C, 0x15, 0xE6, 0x08, 0x00, 0xAC, 0x3B, 0x6F, 0xE3, 0xED, 0x06, 0x39, 0x95, 0x2F, 0x7B, 0x02, 0x8D, 0x86, 0x86, 0x74, 0x45, 0x96, 0x1F, 0xFE, 0x94, 0xFB, 0x22, 0x6B, 0xFF, 0x70, 0x06, 0xE0, 0xC4, 0x51, 0xEE, 0x3F, 0x87, 0x28, 0xC1, 0x77, 0xFB};
|
||||||
|
std::vector<uint8_t> publicKey{// PEM format - 1000 bits
|
||||||
|
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A,
|
||||||
|
0x4D, 0x46, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
||||||
|
0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x41, 0x37, 0x4C, 0x4F, 0x5A, 0x4C, 0x77, 0x67, 0x65, 0x39, 0x32, 0x4C, 0x78, 0x4E, 0x2B, 0x46, 0x6B, 0x59, 0x66, 0x38, 0x74, 0x6F, 0x59, 0x79, 0x44, 0x57, 0x50, 0x2F, 0x0A, 0x6F, 0x4A, 0x46, 0x42, 0x44, 0x38, 0x46, 0x59, 0x2B, 0x37,
|
||||||
|
0x64, 0x35, 0x67, 0x4F, 0x71, 0x49, 0x61, 0x45, 0x32, 0x52, 0x6A, 0x50, 0x41, 0x6E, 0x4B, 0x49, 0x36, 0x38, 0x73, 0x2F, 0x4F, 0x4B, 0x2F, 0x48, 0x50, 0x67, 0x6F, 0x4C, 0x6B, 0x4F, 0x32, 0x69, 0x6A, 0x51, 0x38, 0x78, 0x41, 0x5A, 0x79, 0x44, 0x64, 0x50, 0x42, 0x31, 0x64, 0x48, 0x53, 0x51, 0x3D, 0x3D,
|
||||||
|
0x0A,
|
||||||
|
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A};
|
||||||
|
|
||||||
|
// own ECDSA-P256 key and message generated and signed and verified successfully with openssl
|
||||||
|
// std::vector<uint8_t> message{0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x0A }; // Hello world con 0x0A al final. Raw message (unhashed)
|
||||||
|
// std::vector<uint8_t> signature{0x30, 0x45, 0x02, 0x21, 0x00, 0xFB, 0xE6, 0x09, 0x74, 0x5C, 0x12, 0xE8, 0x2C, 0x0C, 0xC9, 0x7A, 0x8E, 0x13, 0x88, 0x87, 0xDA, 0xBF, 0x08, 0x43, 0xF8, 0xC8, 0x93, 0x16, 0x5A,
|
||||||
|
// 0x0F, 0x7A, 0xA4, 0xBF, 0x4A, 0xE1, 0xE1, 0xDB, 0x02, 0x20, 0x6B, 0xCB, 0x2F, 0x80, 0x69, 0xBB, 0xDE, 0xC9, 0x11, 0x1D, 0x51, 0x2B, 0x9F, 0x61, 0xA0, 0xC1, 0x29, 0xD1, 0x0B,
|
||||||
|
// 0x58, 0x09, 0x82, 0x58, 0xFC, 0x9E, 0x00, 0xC7, 0xEE, 0xA5, 0xB9, 0xB2, 0x56}; // Hello world hashed and then encrypted with PrK
|
||||||
|
// raw r and s values
|
||||||
|
// std::vector<uint8_t> signature = {
|
||||||
|
// 0x00, 0xFB, 0xE6, 0x09, 0x74, 0x5C, 0x12, 0xE8, 0x2C, 0x0C, 0xC9, 0x7A, 0x8E, 0x13, 0x88, 0x87, 0xDA, 0xBF, 0x08, 0x43, 0xF8,
|
||||||
|
// 0xC8, 0x93, 0x16, 0x5A, 0x0F, 0x7A, 0xA4, 0xBF, 0x4A, 0xE1, 0xE1, 0xDB, 0x02, 0x20, 0x6B, 0xCB, 0x2F, 0x80, 0x69, 0xBB, 0xDE,
|
||||||
|
// 0xC9, 0x11, 0x1D, 0x51, 0x2B, 0x9F, 0x61, 0xA0, 0xC1, 0x29, 0xD1, 0x0B, 0x58, 0x09, 0x82, 0x58, 0xFC, 0x9E, 0x00, 0xC7, 0xEE,
|
||||||
|
// 0xA5, 0xB9, 0xB2, 0x56 };
|
||||||
|
|
||||||
|
// std::vector<uint8_t> publicKey{// PK associated to the PrK, in der format ---test
|
||||||
|
// 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x4A, 0xF3,
|
||||||
|
// 0xEE, 0x3A, 0x94, 0x25, 0x25, 0x3D, 0x55, 0xC2, 0x5A, 0xC2, 0x2D, 0xCF, 0x14, 0x4D, 0x39, 0x0D, 0xB1, 0xFC, 0x7F, 0x31, 0x5A, 0x2A, 0x19, 0xAE, 0x4E, 0xD6, 0xCB, 0xA6, 0x59,
|
||||||
|
// 0xD6, 0x99, 0x7C, 0xE8, 0xBD, 0x1F, 0x43, 0x34, 0x1C, 0x59, 0xD9, 0xD9, 0xCA, 0xC3, 0xEE, 0x58, 0xE5, 0xEA, 0xD3, 0x55, 0x44, 0xEA, 0x89, 0x71, 0x65, 0xD0, 0x92, 0x72, 0xA2,
|
||||||
|
// 0xC8, 0x3C, 0x87, 0x5D };
|
||||||
|
// std::vector<uint8_t> publicKey{ // PK associated to the PrK, in pem format
|
||||||
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A,
|
||||||
|
//
|
||||||
|
// 0x4D, 0x46,
|
||||||
|
// 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63,
|
||||||
|
// 0x44, 0x51, 0x67, 0x41, 0x45, 0x53, 0x76, 0x50, 0x75, 0x4F, 0x70, 0x51, 0x6C, 0x4A, 0x54, 0x31, 0x56, 0x77, 0x6C, 0x72, 0x43, 0x4C, 0x63, 0x38, 0x55, 0x54, 0x54, 0x6B, 0x4E,
|
||||||
|
// 0x73, 0x66, 0x78, 0x2F, 0x0A, 0x4D, 0x56, 0x6F, 0x71, 0x47, 0x61, 0x35, 0x4F, 0x31, 0x73, 0x75, 0x6D, 0x57, 0x64, 0x61, 0x5A, 0x66, 0x4F, 0x69, 0x39, 0x48, 0x30, 0x4D, 0x30,
|
||||||
|
// 0x48, 0x46, 0x6E, 0x5A, 0x32, 0x63, 0x72, 0x44, 0x37, 0x6C, 0x6A, 0x6C, 0x36, 0x74, 0x4E, 0x56, 0x52, 0x4F, 0x71, 0x4A, 0x63, 0x57, 0x58, 0x51, 0x6B, 0x6E, 0x4B, 0x69, 0x79,
|
||||||
|
// 0x44, 0x79, 0x48, 0x58, 0x51, 0x3D, 0x3D, 0x0A,
|
||||||
|
//
|
||||||
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D,
|
||||||
|
// 0x2D, 0x2D, 0x2D, 0x0A };
|
||||||
|
|
||||||
|
// own key - GnuTLS error: The curve is unsupported... x192 EC unsupported??
|
||||||
|
// std::vector<uint8_t> message = {0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64 }; // hello world
|
||||||
|
// std::vector<uint8_t> signature = {0x30, 0x34, 0x02, 0x18, 0x4F, 0xAC, 0x9C, 0x5A, 0x44, 0xCF, 0xFD, 0x42, 0x6A, 0x58, 0x97, 0xA4, 0x94, 0x53, 0x2C, 0x79, 0xD1, 0x7B, 0x8B, 0xF9, 0x93, 0x03, 0xA2, 0xAF, 0x02, 0x18, 0x46, 0xF2, 0xF3, 0xCF, 0x9A, 0x23, 0x39, 0xB4, 0x25, 0x11, 0x89, 0x9A, 0x44, 0x7E, 0x2F, 0xB1, 0xE1, 0x58, 0xAF, 0xCE, 0xC1,0xB4, 0xA1, 0x38 };
|
||||||
|
// std::vector<uint8_t> publicKey = {
|
||||||
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x45, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
||||||
|
// 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x49, 0x44, 0x4D, 0x67, 0x41, 0x45, 0x51, 0x55, 0x61, 0x30, 0x6C, 0x38, 0x4D, 0x35, 0x76, 0x50, 0x58, 0x2B, 0x74, 0x4A, 0x76, 0x63, 0x4C, 0x2B, 0x45, 0x45, 0x4C, 0x34, 0x6E, 0x71, 0x79, 0x75, 0x53, 0x43, 0x0A, 0x4D, 0x4E, 0x46, 0x4A, 0x64, 0x43, 0x5A, 0x62, 0x62, 0x58,
|
||||||
|
// 0x35, 0x70, 0x4D, 0x36, 0x69, 0x4C, 0x52, 0x53, 0x30, 0x43, 0x51, 0x59, 0x45, 0x67, 0x56, 0x47, 0x51, 0x6B, 0x65, 0x75, 0x74, 0x74, 0x35, 0x78, 0x2F, 0x45, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
|
||||||
|
// 0x0A };
|
||||||
|
// std::vector<uint8_t> ecparam = {
|
||||||
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x45, 0x43, 0x20, 0x50, 0x41, 0x52, 0x41, 0x4D, 0x45, 0x54, 0x45, 0x52, 0x53, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x42, 0x67, 0x67, 0x71, 0x68, 0x6B, 0x6A, 0x4F, 0x50, 0x51, 0x4D, 0x42, 0x41, 0x67, 0x3D, 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D,
|
||||||
|
// 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x45, 0x43, 0x20, 0x50, 0x41, 0x52, 0x41, 0x4D, 0x45, 0x54, 0x45, 0x52, 0x53, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A };
|
||||||
|
|
||||||
|
d_crypto->set_public_key(publicKey);
|
||||||
|
bool result = d_crypto->verify_signature(message, signature);
|
||||||
|
|
||||||
|
ASSERT_TRUE(result);
|
||||||
|
}
|
||||||
|
// TEST(GnssCryptoTest, sha256Test)
|
||||||
|
//{
|
||||||
|
// std::unique_ptr<Gnss_Crypto> d_crypto;
|
||||||
|
//
|
||||||
|
// auto str = "Hello World!";
|
||||||
|
// std::vector<uint8_t> input (str, str + strlen(str));
|
||||||
|
//
|
||||||
|
// auto expectedOutputStr = "86933b0b147ac4c010266b99004158fa17937db89a03dd7bb2ca5ef7f43c325a";
|
||||||
|
// std::vector<uint8_t> expectedOutput(expectedOutputStr, expectedOutputStr + strlen(expectedOutputStr));
|
||||||
|
//
|
||||||
|
// std::vector<uint8_t> computedOutput = d_crypto->computeSHA256(input);
|
||||||
|
//
|
||||||
|
// ASSERT_TRUE(computedOutput == expectedOutput
|
||||||
|
|
||||||
|
|
||||||
|
TEST(GnssCryptoTest, VerifyPubKeyImport)
|
||||||
|
{
|
||||||
|
// "../data/OSNMA_PublicKey_20240115100000_newPKID_1.pem"
|
||||||
|
const std::string fake("fake");
|
||||||
|
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>(fake, fake);
|
||||||
|
|
||||||
// RG example - key is raw 520 bits example shown
|
// RG example - key is raw 520 bits example shown
|
||||||
// std::vector<uint8_t> publicKey = { // base64 decoding error
|
// std::vector<uint8_t> publicKey = { // base64 decoding error
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A,
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A,
|
||||||
//
|
//
|
||||||
// 0x04, 0x03, 0xB2, 0xCE, 0x64, 0xBC, 0x20, 0x7B, 0xDD, 0x8B, 0xC4, 0xDF, 0x85, 0x91, 0x87, 0xFC,
|
// 0x04, 0x03, 0xB2, 0xCE, 0x64, 0xBC, 0x20, 0x7B, 0xDD, 0x8B, 0xC4, 0xDF, 0x85, 0x91, 0x87, 0xFC,
|
||||||
// 0xB6, 0x86, 0x32, 0x0D, 0x63, 0xFF, 0xA0, 0x91, 0x41, 0x0F, 0xC1, 0x58, 0xFB, 0xB7, 0x79, 0x80,
|
// 0xB6, 0x86, 0x32, 0x0D, 0x63, 0xFF, 0xA0, 0x91, 0x41, 0x0F, 0xC1, 0x58, 0xFB, 0xB7, 0x79, 0x80,
|
||||||
// 0xEA, 0x88, 0x68, 0x4D, 0x91, 0x8C, 0xF0, 0x27, 0x28, 0x8E, 0xBC, 0xB3, 0xF3, 0x8A, 0xFC, 0x73,
|
// 0xEA, 0x88, 0x68, 0x4D, 0x91, 0x8C, 0xF0, 0x27, 0x28, 0x8E, 0xBC, 0xB3, 0xF3, 0x8A, 0xFC, 0x73,
|
||||||
// 0xE0, 0xA0, 0xB9, 0x0E, 0xDA, 0x28, 0xD0, 0xF3, 0x10, 0x19, 0xC8, 0x37, 0x4F, 0x07, 0x57, 0x47, 0x49,
|
// 0xE0, 0xA0, 0xB9, 0x0E, 0xDA, 0x28, 0xD0, 0xF3, 0x10, 0x19, 0xC8, 0x37, 0x4F, 0x07, 0x57, 0x47, 0x49,
|
||||||
//
|
//
|
||||||
// 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A
|
// 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A
|
||||||
//
|
//
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// RG example crt exported and convert PK.pem - key is raw 1000 bits ,..., why mismatch!? does key get truncated?
|
// RG example crt exported and convert PK.pem - key is raw 1000 bits ,..., why mismatch!? does key get truncated?
|
||||||
// std::vector<uint8_t> publicKey {
|
// std::vector<uint8_t> publicKey {
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x46, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x46, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
||||||
// 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x41, 0x37, 0x4C, 0x4F, 0x5A, 0x4C, 0x77, 0x67, 0x65, 0x39, 0x32, 0x4C, 0x78, 0x4E, 0x2B, 0x46, 0x6B, 0x59, 0x66, 0x38, 0x74, 0x6F, 0x59, 0x79, 0x44, 0x57, 0x50, 0x2F, 0x0A, 0x6F, 0x4A, 0x46, 0x42, 0x44, 0x38, 0x46, 0x59, 0x2B, 0x37,
|
// 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x41, 0x37, 0x4C, 0x4F, 0x5A, 0x4C, 0x77, 0x67, 0x65, 0x39, 0x32, 0x4C, 0x78, 0x4E, 0x2B, 0x46, 0x6B, 0x59, 0x66, 0x38, 0x74, 0x6F, 0x59, 0x79, 0x44, 0x57, 0x50, 0x2F, 0x0A, 0x6F, 0x4A, 0x46, 0x42, 0x44, 0x38, 0x46, 0x59, 0x2B, 0x37,
|
||||||
// 0x64, 0x35, 0x67, 0x4F, 0x71, 0x49, 0x61, 0x45, 0x32, 0x52, 0x6A, 0x50, 0x41, 0x6E, 0x4B, 0x49, 0x36, 0x38, 0x73, 0x2F, 0x4F, 0x4B, 0x2F, 0x48, 0x50, 0x67, 0x6F, 0x4C, 0x6B, 0x4F, 0x32, 0x69, 0x6A, 0x51, 0x38, 0x78, 0x41, 0x5A, 0x79, 0x44, 0x64, 0x50, 0x42, 0x31, 0x64, 0x48, 0x53, 0x51, 0x3D, 0x3D, 0x0A,
|
// 0x64, 0x35, 0x67, 0x4F, 0x71, 0x49, 0x61, 0x45, 0x32, 0x52, 0x6A, 0x50, 0x41, 0x6E, 0x4B, 0x49, 0x36, 0x38, 0x73, 0x2F, 0x4F, 0x4B, 0x2F, 0x48, 0x50, 0x67, 0x6F, 0x4C, 0x6B, 0x4F, 0x32, 0x69, 0x6A, 0x51, 0x38, 0x78, 0x41, 0x5A, 0x79, 0x44, 0x64, 0x50, 0x42, 0x31, 0x64, 0x48, 0x53, 0x51, 0x3D, 0x3D, 0x0A,
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A } ;
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A } ;
|
||||||
// own ECDSA P 256 public key and own message generated (2024-02-19-Own-Key-ECDSA-openssl)
|
// own ECDSA P 256 public key and own message generated (2024-02-19-Own-Key-ECDSA-openssl)
|
||||||
std::vector<uint8_t> publicKey{ // PEM
|
std::vector<uint8_t> publicKey{// PEM
|
||||||
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A,
|
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A,
|
||||||
|
|
||||||
0x4D, 0x46,
|
0x4D, 0x46,
|
||||||
0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63,
|
0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63,
|
||||||
0x44, 0x51, 0x67, 0x41, 0x45, 0x53, 0x76, 0x50, 0x75, 0x4F, 0x70, 0x51, 0x6C, 0x4A, 0x54, 0x31, 0x56, 0x77, 0x6C, 0x72, 0x43, 0x4C, 0x63, 0x38, 0x55, 0x54, 0x54, 0x6B, 0x4E,
|
0x44, 0x51, 0x67, 0x41, 0x45, 0x53, 0x76, 0x50, 0x75, 0x4F, 0x70, 0x51, 0x6C, 0x4A, 0x54, 0x31, 0x56, 0x77, 0x6C, 0x72, 0x43, 0x4C, 0x63, 0x38, 0x55, 0x54, 0x54, 0x6B, 0x4E,
|
||||||
0x73, 0x66, 0x78, 0x2F, 0x0A, 0x4D, 0x56, 0x6F, 0x71, 0x47, 0x61, 0x35, 0x4F, 0x31, 0x73, 0x75, 0x6D, 0x57, 0x64, 0x61, 0x5A, 0x66, 0x4F, 0x69, 0x39, 0x48, 0x30, 0x4D, 0x30,
|
0x73, 0x66, 0x78, 0x2F, 0x0A, 0x4D, 0x56, 0x6F, 0x71, 0x47, 0x61, 0x35, 0x4F, 0x31, 0x73, 0x75, 0x6D, 0x57, 0x64, 0x61, 0x5A, 0x66, 0x4F, 0x69, 0x39, 0x48, 0x30, 0x4D, 0x30,
|
||||||
0x48, 0x46, 0x6E, 0x5A, 0x32, 0x63, 0x72, 0x44, 0x37, 0x6C, 0x6A, 0x6C, 0x36, 0x74, 0x4E, 0x56, 0x52, 0x4F, 0x71, 0x4A, 0x63, 0x57, 0x58, 0x51, 0x6B, 0x6E, 0x4B, 0x69, 0x79,
|
0x48, 0x46, 0x6E, 0x5A, 0x32, 0x63, 0x72, 0x44, 0x37, 0x6C, 0x6A, 0x6C, 0x36, 0x74, 0x4E, 0x56, 0x52, 0x4F, 0x71, 0x4A, 0x63, 0x57, 0x58, 0x51, 0x6B, 0x6E, 0x4B, 0x69, 0x79,
|
||||||
0x44, 0x79, 0x48, 0x58, 0x51, 0x3D, 0x3D, 0x0A,
|
0x44, 0x79, 0x48, 0x58, 0x51, 0x3D, 0x3D, 0x0A,
|
||||||
|
|
||||||
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D,
|
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D,
|
||||||
0x2D, 0x2D, 0x2D, 0x0A };
|
0x2D, 0x2D, 0x2D, 0x0A};
|
||||||
|
|
||||||
d_crypto->set_public_key(publicKey);
|
d_crypto->set_public_key(publicKey);
|
||||||
|
|
||||||
ASSERT_TRUE(d_crypto->have_public_key());
|
ASSERT_TRUE(d_crypto->have_public_key());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// std::vector<uint8_t> publicKey = { // DER format
|
// std::vector<uint8_t> publicKey = { // DER format
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x46, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x46, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
||||||
// 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x41, 0x37, 0x4C, 0x4F, 0x5A, 0x4C, 0x77, 0x67, 0x65, 0x39, 0x32, 0x4C, 0x78, 0x4E, 0x2B, 0x46, 0x6B, 0x59, 0x66, 0x38, 0x74, 0x6F, 0x59, 0x79, 0x44, 0x57, 0x50, 0x2F, 0x0A, 0x6F, 0x4A, 0x46, 0x42, 0x44, 0x38, 0x46, 0x59, 0x2B, 0x37,
|
// 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x41, 0x37, 0x4C, 0x4F, 0x5A, 0x4C, 0x77, 0x67, 0x65, 0x39, 0x32, 0x4C, 0x78, 0x4E, 0x2B, 0x46, 0x6B, 0x59, 0x66, 0x38, 0x74, 0x6F, 0x59, 0x79, 0x44, 0x57, 0x50, 0x2F, 0x0A, 0x6F, 0x4A, 0x46, 0x42, 0x44, 0x38, 0x46, 0x59, 0x2B, 0x37,
|
||||||
// 0x64, 0x35, 0x67, 0x4F, 0x71, 0x49, 0x61, 0x45, 0x32, 0x52, 0x6A, 0x50, 0x41, 0x6E, 0x4B, 0x49, 0x36, 0x38, 0x73, 0x2F, 0x4F, 0x4B, 0x2F, 0x48, 0x50, 0x67, 0x6F, 0x4C, 0x6B, 0x4F, 0x32, 0x69, 0x6A, 0x51, 0x38, 0x78, 0x41, 0x5A, 0x79, 0x44, 0x64, 0x50, 0x42, 0x31, 0x64, 0x48, 0x53, 0x51, 0x3D, 0x3D, 0x0A,
|
// 0x64, 0x35, 0x67, 0x4F, 0x71, 0x49, 0x61, 0x45, 0x32, 0x52, 0x6A, 0x50, 0x41, 0x6E, 0x4B, 0x49, 0x36, 0x38, 0x73, 0x2F, 0x4F, 0x4B, 0x2F, 0x48, 0x50, 0x67, 0x6F, 0x4C, 0x6B, 0x4F, 0x32, 0x69, 0x6A, 0x51, 0x38, 0x78, 0x41, 0x5A, 0x79, 0x44, 0x64, 0x50, 0x42, 0x31, 0x64, 0x48, 0x53, 0x51, 0x3D, 0x3D, 0x0A,
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x30, 0x82, 0x02, 0x6C, 0x30, 0x82, 0x02, 0x12, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x47, 0xC4, 0xF1, 0x43, 0xC3, 0xFA, 0x61, 0xA5, 0x29, 0x4E, 0x63,
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x30, 0x82, 0x02, 0x6C, 0x30, 0x82, 0x02, 0x12, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x47, 0xC4, 0xF1, 0x43, 0xC3, 0xFA, 0x61, 0xA5, 0x29, 0x4E, 0x63,
|
||||||
// 0xD5, 0x57, 0x2B, 0x01, 0x62, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x37, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x05, 0x45, 0x55, 0x53, 0x50, 0x41, 0x31, 0x18, 0x30,
|
// 0xD5, 0x57, 0x2B, 0x01, 0x62, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x37, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x05, 0x45, 0x55, 0x53, 0x50, 0x41, 0x31, 0x18, 0x30,
|
||||||
// 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x0F, 0x45, 0x55, 0x53, 0x50, 0x41, 0x20, 0x4F, 0x53, 0x4E, 0x4D, 0x41, 0x20, 0x49, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x37, 0x32, 0x30, 0x31, 0x31, 0x32, 0x32, 0x33, 0x30, 0x5A, 0x17, 0x0D, 0x32, 0x35, 0x30, 0x38, 0x30, 0x38, 0x31, 0x31, 0x33,
|
// 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x0F, 0x45, 0x55, 0x53, 0x50, 0x41, 0x20, 0x4F, 0x53, 0x4E, 0x4D, 0x41, 0x20, 0x49, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x37, 0x32, 0x30, 0x31, 0x31, 0x32, 0x32, 0x33, 0x30, 0x5A, 0x17, 0x0D, 0x32, 0x35, 0x30, 0x38, 0x30, 0x38, 0x31, 0x31, 0x33,
|
||||||
// 0x33, 0x30, 0x30, 0x5A, 0x30, 0x3A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x05, 0x45, 0x55, 0x53, 0x50, 0x41, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x12, 0x45, 0x55, 0x53, 0x50, 0x41,
|
// 0x33, 0x30, 0x30, 0x5A, 0x30, 0x3A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x05, 0x45, 0x55, 0x53, 0x50, 0x41, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x12, 0x45, 0x55, 0x53, 0x50, 0x41,
|
||||||
// 0x20, 0x4F, 0x53, 0x4E, 0x4D, 0x41, 0x20, 0x45, 0x45, 0x20, 0x50, 0x4B, 0x52, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB2, 0xCE, 0x64, 0xBC, 0x20, 0x7B, 0xDD, 0x8B, 0xC4, 0xDF,
|
// 0x20, 0x4F, 0x53, 0x4E, 0x4D, 0x41, 0x20, 0x45, 0x45, 0x20, 0x50, 0x4B, 0x52, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB2, 0xCE, 0x64, 0xBC, 0x20, 0x7B, 0xDD, 0x8B, 0xC4, 0xDF,
|
||||||
// 0x85, 0x91, 0x87, 0xFC, 0xB6, 0x86, 0x32, 0x0D, 0x63, 0xFF, 0xA0, 0x91, 0x41, 0x0F, 0xC1, 0x58, 0xFB, 0xB7, 0x79, 0x80, 0xEA, 0x88, 0x68, 0x4D, 0x91, 0x8C, 0xF0, 0x27, 0x28, 0x8E, 0xBC, 0xB3, 0xF3, 0x8A, 0xFC, 0x73, 0xE0, 0xA0, 0xB9, 0x0E, 0xDA, 0x28, 0xD0, 0xF3, 0x10, 0x19, 0xC8, 0x37, 0x4F, 0x07, 0x57,
|
// 0x85, 0x91, 0x87, 0xFC, 0xB6, 0x86, 0x32, 0x0D, 0x63, 0xFF, 0xA0, 0x91, 0x41, 0x0F, 0xC1, 0x58, 0xFB, 0xB7, 0x79, 0x80, 0xEA, 0x88, 0x68, 0x4D, 0x91, 0x8C, 0xF0, 0x27, 0x28, 0x8E, 0xBC, 0xB3, 0xF3, 0x8A, 0xFC, 0x73, 0xE0, 0xA0, 0xB9, 0x0E, 0xDA, 0x28, 0xD0, 0xF3, 0x10, 0x19, 0xC8, 0x37, 0x4F, 0x07, 0x57,
|
||||||
// 0x47, 0x49, 0xA3, 0x81, 0xFC, 0x30, 0x81, 0xF9, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x6A, 0x22, 0x16, 0x58, 0x9B, 0x23, 0xC9, 0x43, 0x41, 0x3C, 0xB6, 0xF8, 0x9D, 0x93, 0x0F, 0xE0, 0xFE, 0x6A, 0x3C, 0x54, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
|
// 0x47, 0x49, 0xA3, 0x81, 0xFC, 0x30, 0x81, 0xF9, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x6A, 0x22, 0x16, 0x58, 0x9B, 0x23, 0xC9, 0x43, 0x41, 0x3C, 0xB6, 0xF8, 0x9D, 0x93, 0x0F, 0xE0, 0xFE, 0x6A, 0x3C, 0x54, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
|
||||||
// 0x14, 0x20, 0xC0, 0x54, 0x85, 0xAF, 0x82, 0xAE, 0x96, 0x3C, 0xBC, 0xDF, 0xC1, 0xB9, 0x05, 0xDE, 0xD7, 0x46, 0x72, 0x32, 0xA3, 0x30, 0x63, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x5C, 0x30, 0x5A, 0x30, 0x4E, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0xD5, 0x11, 0x01, 0x01, 0x01, 0x30, 0x3F, 0x30, 0x3D,
|
// 0x14, 0x20, 0xC0, 0x54, 0x85, 0xAF, 0x82, 0xAE, 0x96, 0x3C, 0xBC, 0xDF, 0xC1, 0xB9, 0x05, 0xDE, 0xD7, 0x46, 0x72, 0x32, 0xA3, 0x30, 0x63, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x5C, 0x30, 0x5A, 0x30, 0x4E, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0xD5, 0x11, 0x01, 0x01, 0x01, 0x30, 0x3F, 0x30, 0x3D,
|
||||||
// 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x67, 0x73, 0x63, 0x2D, 0x65, 0x75, 0x72, 0x6F, 0x70, 0x61, 0x2E, 0x65, 0x75, 0x2F, 0x67, 0x73, 0x63, 0x2D, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F,
|
// 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x67, 0x73, 0x63, 0x2D, 0x65, 0x75, 0x72, 0x6F, 0x70, 0x61, 0x2E, 0x65, 0x75, 0x2F, 0x67, 0x73, 0x63, 0x2D, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F,
|
||||||
// 0x4F, 0x53, 0x4E, 0x4D, 0x41, 0x2F, 0x50, 0x4B, 0x49, 0x2F, 0x30, 0x08, 0x06, 0x06, 0x04, 0x00, 0x8F, 0x7A, 0x01, 0x02, 0x30, 0x42, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x3B, 0x30, 0x39, 0x30, 0x37, 0xA0, 0x35, 0xA0, 0x33, 0x86, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E,
|
// 0x4F, 0x53, 0x4E, 0x4D, 0x41, 0x2F, 0x50, 0x4B, 0x49, 0x2F, 0x30, 0x08, 0x06, 0x06, 0x04, 0x00, 0x8F, 0x7A, 0x01, 0x02, 0x30, 0x42, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x3B, 0x30, 0x39, 0x30, 0x37, 0xA0, 0x35, 0xA0, 0x33, 0x86, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E,
|
||||||
// 0x67, 0x73, 0x63, 0x2D, 0x65, 0x75, 0x72, 0x6F, 0x70, 0x61, 0x2E, 0x65, 0x75, 0x2F, 0x67, 0x73, 0x63, 0x2D, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x4F, 0x53, 0x4E, 0x4D, 0x41, 0x2F, 0x50, 0x4B, 0x49, 0x2F, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02,
|
// 0x67, 0x73, 0x63, 0x2D, 0x65, 0x75, 0x72, 0x6F, 0x70, 0x61, 0x2E, 0x65, 0x75, 0x2F, 0x67, 0x73, 0x63, 0x2D, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x4F, 0x53, 0x4E, 0x4D, 0x41, 0x2F, 0x50, 0x4B, 0x49, 0x2F, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02,
|
||||||
// 0x07, 0x80, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xE9, 0xBB, 0x90, 0x8E, 0xE5, 0x0C, 0xF3, 0xDA, 0x57, 0x71, 0xE3, 0xD0, 0xD2, 0xEA, 0xAC, 0x1B, 0x00, 0xF3, 0x51, 0xE9, 0xD8, 0xBB, 0x0A, 0xB2, 0x4C, 0x8A, 0x65, 0x52, 0x79,
|
// 0x07, 0x80, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xE9, 0xBB, 0x90, 0x8E, 0xE5, 0x0C, 0xF3, 0xDA, 0x57, 0x71, 0xE3, 0xD0, 0xD2, 0xEA, 0xAC, 0x1B, 0x00, 0xF3, 0x51, 0xE9, 0xD8, 0xBB, 0x0A, 0xB2, 0x4C, 0x8A, 0x65, 0x52, 0x79,
|
||||||
// 0x9F, 0x43, 0xF6, 0x02, 0x20, 0x10, 0x65, 0x2F, 0x6A, 0xF8, 0x26, 0x20, 0x42, 0xFF, 0x09, 0x6B, 0xD0, 0x8D, 0x0B, 0x75, 0x15, 0x24, 0xBF, 0xE4, 0xFE, 0x60, 0xC3, 0x6E, 0x2D, 0x31, 0x32, 0xED, 0x65, 0x6C, 0x5C, 0x8B, 0x14 };
|
// 0x9F, 0x43, 0xF6, 0x02, 0x20, 0x10, 0x65, 0x2F, 0x6A, 0xF8, 0x26, 0x20, 0x42, 0xFF, 0x09, 0x6B, 0xD0, 0x8D, 0x0B, 0x75, 0x15, 0x24, 0xBF, 0xE4, 0xFE, 0x60, 0xC3, 0x6E, 0x2D, 0x31, 0x32, 0xED, 0x65, 0x6C, 0x5C, 0x8B, 0x14 };
|
||||||
|
|
||||||
// std::vector<uint8_t> publicKey= { // PEM format
|
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x46, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
|
||||||
// 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x41, 0x37, 0x4C, 0x4F, 0x5A, 0x4C, 0x77, 0x67, 0x65, 0x39, 0x32, 0x4C, 0x78, 0x4E, 0x2B, 0x46, 0x6B, 0x59, 0x66, 0x38, 0x74, 0x6F, 0x59, 0x79, 0x44, 0x57, 0x50, 0x2F, 0x0A, 0x6F, 0x4A, 0x46, 0x42, 0x44, 0x38, 0x46, 0x59, 0x2B, 0x37,
|
|
||||||
// 0x64, 0x35, 0x67, 0x4F, 0x71, 0x49, 0x61, 0x45, 0x32, 0x52, 0x6A, 0x50, 0x41, 0x6E, 0x4B, 0x49, 0x36, 0x38, 0x73, 0x2F, 0x4F, 0x4B, 0x2F, 0x48, 0x50, 0x67, 0x6F, 0x4C, 0x6B, 0x4F, 0x32, 0x69, 0x6A, 0x51, 0x38, 0x78, 0x41, 0x5A, 0x79, 0x44, 0x64, 0x50, 0x42, 0x31, 0x64, 0x48, 0x53, 0x51, 0x3D, 0x3D, 0x0A,
|
|
||||||
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A };
|
|
||||||
|
|
||||||
|
// std::vector<uint8_t> publicKey= { // PEM format
|
||||||
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x46, 0x6B, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4B, 0x6F, 0x5A, 0x49, 0x7A, 0x6A, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x5A, 0x49,
|
||||||
|
// 0x7A, 0x6A, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x41, 0x37, 0x4C, 0x4F, 0x5A, 0x4C, 0x77, 0x67, 0x65, 0x39, 0x32, 0x4C, 0x78, 0x4E, 0x2B, 0x46, 0x6B, 0x59, 0x66, 0x38, 0x74, 0x6F, 0x59, 0x79, 0x44, 0x57, 0x50, 0x2F, 0x0A, 0x6F, 0x4A, 0x46, 0x42, 0x44, 0x38, 0x46, 0x59, 0x2B, 0x37,
|
||||||
|
// 0x64, 0x35, 0x67, 0x4F, 0x71, 0x49, 0x61, 0x45, 0x32, 0x52, 0x6A, 0x50, 0x41, 0x6E, 0x4B, 0x49, 0x36, 0x38, 0x73, 0x2F, 0x4F, 0x4B, 0x2F, 0x48, 0x50, 0x67, 0x6F, 0x4C, 0x6B, 0x4F, 0x32, 0x69, 0x6A, 0x51, 0x38, 0x78, 0x41, 0x5A, 0x79, 0x44, 0x64, 0x50, 0x42, 0x31, 0x64, 0x48, 0x53, 0x51, 0x3D, 0x3D, 0x0A,
|
||||||
|
// 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Unit test for computeHMAC_SHA_256 function.
|
// Unit test for computeHMAC_SHA_256 function.
|
||||||
TEST(GnssCryptoTest, TestComputeHMACSHA256) { // key and message generated with openssl
|
TEST(GnssCryptoTest, TestComputeHMACSHA256)
|
||||||
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>();
|
{
|
||||||
|
// key and message generated with openssl
|
||||||
|
const std::string fake("fake");
|
||||||
|
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>(fake, fake);
|
||||||
std::vector<uint8_t> key = {
|
std::vector<uint8_t> key = {
|
||||||
0x24, 0x24, 0x3B, 0x76, 0xF9, 0x14, 0xB1, 0xA7,
|
0x24, 0x24, 0x3B, 0x76, 0xF9, 0x14, 0xB1, 0xA7,
|
||||||
0x7D, 0x48, 0xE7, 0xF1, 0x48, 0x0C, 0xC2, 0x98,
|
0x7D, 0x48, 0xE7, 0xF1, 0x48, 0x0C, 0xC2, 0x98,
|
||||||
0xEB, 0x62, 0x3E, 0x95, 0x6B, 0x2B, 0xCE, 0xA3,
|
0xEB, 0x62, 0x3E, 0x95, 0x6B, 0x2B, 0xCE, 0xA3,
|
||||||
0xB4, 0xD4, 0xDB, 0x31, 0xEE, 0x96, 0xAB, 0xFA };
|
0xB4, 0xD4, 0xDB, 0x31, 0xEE, 0x96, 0xAB, 0xFA};
|
||||||
|
|
||||||
std::vector<uint8_t> message{0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x0A }; // Hello world con 0x0A
|
std::vector<uint8_t> message{0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x0A}; // Hello world con 0x0A
|
||||||
std::vector<uint8_t> expected_output = {
|
std::vector<uint8_t> expected_output = {
|
||||||
0xC3, 0x51, 0xF6, 0xFD, 0xDD, 0xC9, 0x8B, 0x41,
|
0xC3, 0x51, 0xF6, 0xFD, 0xDD, 0xC9, 0x8B, 0x41,
|
||||||
0xD6, 0xF4, 0x77, 0x6D, 0xAC, 0xE8, 0xE0, 0x14,
|
0xD6, 0xF4, 0x77, 0x6D, 0xAC, 0xE8, 0xE0, 0x14,
|
||||||
0xB2, 0x7A, 0xCC, 0x22, 0x00, 0xAA, 0xD2, 0x37,
|
0xB2, 0x7A, 0xCC, 0x22, 0x00, 0xAA, 0xD2, 0x37,
|
||||||
0xD0, 0x79, 0x06, 0x12, 0x83, 0x40, 0xB7, 0xA6 };
|
0xD0, 0x79, 0x06, 0x12, 0x83, 0x40, 0xB7, 0xA6};
|
||||||
|
|
||||||
|
|
||||||
std::vector<uint8_t> output = d_crypto->computeHMAC_SHA_256(key, message);
|
std::vector<uint8_t> output = d_crypto->computeHMAC_SHA_256(key, message);
|
||||||
|
|
||||||
ASSERT_EQ(expected_output, output);
|
ASSERT_EQ(expected_output, output);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(GnssCryptoTest, TestComputeHMACSHA256_m0) { // key and message generated from RG A.6.5.1
|
|
||||||
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>();
|
TEST(GnssCryptoTest, TestComputeHMACSHA256_m0)
|
||||||
std::vector<uint8_t> key = { // RG K4 @ 345690
|
{ // key and message generated from RG A.6.5.1
|
||||||
|
const std::string fake("fake");
|
||||||
|
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>(fake, fake);
|
||||||
|
std::vector<uint8_t> key = {// RG K4 @ 345690
|
||||||
0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6,
|
0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6,
|
||||||
0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDD, 0xBC, 0x73};
|
0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDD, 0xBC, 0x73};
|
||||||
|
|
||||||
@ -207,15 +201,18 @@ TEST(GnssCryptoTest, TestComputeHMACSHA256_m0) { // key and message generated fr
|
|||||||
ASSERT_EQ(expected_output, output);
|
ASSERT_EQ(expected_output, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(GnssCryptoTest, TestComputeHMACSHA256_adkd4) { // key and message generated from RG A.6.5.2
|
|
||||||
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>();
|
TEST(GnssCryptoTest, TestComputeHMACSHA256_adkd4)
|
||||||
std::vector<uint8_t> key = { // RG K4 @ 345690
|
{ // key and message generated from RG A.6.5.2
|
||||||
|
const std::string fake("fake");
|
||||||
|
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>(fake, fake);
|
||||||
|
std::vector<uint8_t> key = {// RG K4 @ 345690
|
||||||
0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6,
|
0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6,
|
||||||
0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDD, 0xBC, 0x73};
|
0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDD, 0xBC, 0x73};
|
||||||
|
|
||||||
std::vector<uint8_t> message{
|
std::vector<uint8_t> message{
|
||||||
0x02, 0x02, 0x4E, 0x05, 0x46, 0x3C, 0x03, 0xBF,
|
0x02, 0x02, 0x4E, 0x05, 0x46, 0x3C, 0x03, 0xBF,
|
||||||
0xFF, 0xFF, 0xFF, 0xC0, 0x00,0x00, 0x44, 0x92, 0x38,
|
0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x44, 0x92, 0x38,
|
||||||
0x22, 0x78, 0x97, 0xFD, 0xEF, 0xF9, 0x30, 0x40};
|
0x22, 0x78, 0x97, 0xFD, 0xEF, 0xF9, 0x30, 0x40};
|
||||||
|
|
||||||
std::vector<uint8_t> expected_output = {
|
std::vector<uint8_t> expected_output = {
|
||||||
@ -223,7 +220,6 @@ TEST(GnssCryptoTest, TestComputeHMACSHA256_adkd4) { // key and message generated
|
|||||||
0xE6, 0x3F, 0xB7, 0xF4, 0xF5, 0x4D, 0x44, 0xAB, 0xEE, 0x4D,
|
0xE6, 0x3F, 0xB7, 0xF4, 0xF5, 0x4D, 0x44, 0xAB, 0xEE, 0x4D,
|
||||||
0xCE, 0xB9, 0x3D, 0xCF, 0x65, 0xCB, 0x3A, 0x5B, 0x81, 0x4A, 0x34, 0xE9};
|
0xCE, 0xB9, 0x3D, 0xCF, 0x65, 0xCB, 0x3A, 0x5B, 0x81, 0x4A, 0x34, 0xE9};
|
||||||
|
|
||||||
|
|
||||||
std::vector<uint8_t> output = d_crypto->computeHMAC_SHA_256(key, message);
|
std::vector<uint8_t> output = d_crypto->computeHMAC_SHA_256(key, message);
|
||||||
|
|
||||||
ASSERT_EQ(expected_output, output);
|
ASSERT_EQ(expected_output, output);
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#include <bitset>
|
#include <bitset>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <logging.h>
|
|
||||||
#include <osnma_msg_receiver.h>
|
#include <osnma_msg_receiver.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -25,26 +24,26 @@ protected:
|
|||||||
std::string page_even;
|
std::string page_even;
|
||||||
OSNMA_msg osnma_msg{};
|
OSNMA_msg osnma_msg{};
|
||||||
std::array<int8_t, 15> nma_position_filled;
|
std::array<int8_t, 15> nma_position_filled;
|
||||||
uint32_t d_GST_SIS{}; // 16 AUG 2023 05 00 01
|
uint32_t d_GST_SIS{}; // 16 AUG 2023 05 00 01
|
||||||
uint32_t TOW{};
|
uint32_t TOW{};
|
||||||
uint32_t WN{};
|
uint32_t WN{};
|
||||||
std::tm GST_START_EPOCH = {0, 0, 0, 22, 8 - 1, 1999 - 1900, 0}; // months start with 0 and years since 1900 in std::tm
|
std::tm GST_START_EPOCH = {0, 0, 0, 22, 8 - 1, 1999 - 1900, 0}; // months start with 0 and years since 1900 in std::tm
|
||||||
const uint32_t LEAP_SECONDS = 0;//13 + 5;
|
const uint32_t LEAP_SECONDS = 0; // 13 + 5;
|
||||||
void set_time(std::tm& input);
|
void set_time(std::tm& input);
|
||||||
// std::string log_name {"CONFIG1-2023-08-23-PKID1-OSNMA"};
|
// std::string log_name {"CONFIG1-2023-08-23-PKID1-OSNMA"};
|
||||||
std::string log_name {"CONFIG2-2023-07-27-PKID2-MT2-OSNMA"};
|
std::string log_name{"CONFIG2-2023-07-27-PKID2-MT2-OSNMA"};
|
||||||
void initializeGoogleLog();
|
// void initializeGoogleLog();
|
||||||
|
|
||||||
void SetUp() override
|
void SetUp() override
|
||||||
{
|
{
|
||||||
flag_CRC_test = false; // TODO what for?
|
flag_CRC_test = false; // TODO what for?
|
||||||
page_even = "";
|
page_even = "";
|
||||||
|
|
||||||
// std::tm input_time = {0, 0, 5, 16, 8 - 1, 2023 - 1900, 0};
|
// std::tm input_time = {0, 0, 5, 16, 8 - 1, 2023 - 1900, 0};
|
||||||
std::tm input_time = {0, 0, 0, 27, 7 - 1, 2023 - 1900, 0};
|
std::tm input_time = {0, 0, 0, 27, 7 - 1, 2023 - 1900, 0};
|
||||||
set_time(input_time);
|
set_time(input_time);
|
||||||
// std::string pemFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_PublicKey_20230803105952_newPKID_1.pem";
|
// std::string pemFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_PublicKey_20230803105952_newPKID_1.pem";
|
||||||
// std::string merkleFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_MerkleTree_20230803105953_newPKID_1.xml";
|
// std::string merkleFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_MerkleTree_20230803105953_newPKID_1.xml";
|
||||||
std::string pemFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_PublicKey_20230720113300_newPKID_2.pem";
|
std::string pemFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_PublicKey_20230720113300_newPKID_2.pem";
|
||||||
std::string merkleFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_MerkleTree_20230720113300_newPKID_2.xml";
|
std::string merkleFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_MerkleTree_20230720113300_newPKID_2.xml";
|
||||||
osnma = osnma_msg_receiver_make(pemFilePath, merkleFilePath);
|
osnma = osnma_msg_receiver_make(pemFilePath, merkleFilePath);
|
||||||
@ -58,121 +57,120 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
TEST_F(OsnmaMsgReceiverTest, TeslaKeyVerification) {
|
TEST_F(OsnmaMsgReceiverTest, TeslaKeyVerification)
|
||||||
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
// ----------
|
// ----------
|
||||||
osnma->d_tesla_key_verified = false;
|
osnma->d_tesla_key_verified = false;
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.kroot = {0x5B, 0xF8, 0xC9, 0xCB, 0xFC, 0xF7, 0x04, 0x22, 0x08, 0x14, 0x75, 0xFD, 0x44, 0x5D, 0xF0, 0xFF}; // Kroot, TOW 345570 GST_0 - 30
|
osnma->d_osnma_data.d_dsm_kroot_message.kroot = {0x5B, 0xF8, 0xC9, 0xCB, 0xFC, 0xF7, 0x04, 0x22, 0x08, 0x14, 0x75, 0xFD, 0x44, 0x5D, 0xF0, 0xFF}; // Kroot, TOW 345570 GST_0 - 30
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.ks = 4; // TABLE 10 --> 128 bits
|
osnma->d_osnma_data.d_dsm_kroot_message.ks = 4; // TABLE 10 --> 128 bits
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.alpha = 0x610BDF26D77B;
|
osnma->d_osnma_data.d_dsm_kroot_message.alpha = 0x610BDF26D77B;
|
||||||
// local_time_verification would do this operation. TODO - eliminate duplication.
|
// local_time_verification would do this operation. TODO - eliminate duplication.
|
||||||
osnma->d_GST_SIS = (1248 & 0x00000FFF) << 20 | (345630 & 0x000FFFFF);
|
osnma->d_GST_SIS = (1248 & 0x00000FFF) << 20 | (345630 & 0x000FFFFF);
|
||||||
osnma->d_GST_0 = ((1248 & 0x00000FFF) << 20 | (345600 & 0x000FFFFF)); // applicable time (GST_Kroot + 30)
|
osnma->d_GST_0 = ((1248 & 0x00000FFF) << 20 | (345600 & 0x000FFFFF)); // applicable time (GST_Kroot + 30)
|
||||||
osnma->d_receiver_time = osnma->d_GST_0 + 30 * std::floor((osnma->d_GST_SIS - osnma->d_GST_0) / 30); // Eq. 3 R.G.//345630;
|
osnma->d_receiver_time = osnma->d_GST_0 + 30 * std::floor((osnma->d_GST_SIS - osnma->d_GST_0) / 30); // Eq. 3 R.G.//345630;
|
||||||
|
|
||||||
osnma->d_tesla_keys.insert((std::pair<uint32_t, std::vector<uint8_t>>(345600,{0xEF, 0xF9, 0x99, 0x04, 0x0E, 0x19, 0xB5, 0x70, 0x83, 0x50, 0x60, 0xBE, 0xBD, 0x23, 0xED, 0x92}))); // K1, not needed, just for reference.
|
osnma->d_tesla_keys.insert((std::pair<uint32_t, std::vector<uint8_t>>(345600, {0xEF, 0xF9, 0x99, 0x04, 0x0E, 0x19, 0xB5, 0x70, 0x83, 0x50, 0x60, 0xBE, 0xBD, 0x23, 0xED, 0x92}))); // K1, not needed, just for reference.
|
||||||
std::vector<uint8_t> key = {0x2D, 0xC3, 0xA3, 0xCD, 0xB1, 0x17, 0xFA, 0xAD, 0xB8, 0x3B, 0x5F, 0x0B, 0x6F, 0xEA, 0x88, 0xEB}; // K2
|
std::vector<uint8_t> key = {0x2D, 0xC3, 0xA3, 0xCD, 0xB1, 0x17, 0xFA, 0xAD, 0xB8, 0x3B, 0x5F, 0x0B, 0x6F, 0xEA, 0x88, 0xEB}; // K2
|
||||||
uint32_t TOW = 345630;
|
uint32_t TOW = 345630;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
// ----------
|
// ----------
|
||||||
bool result = osnma->verify_tesla_key(key, TOW);
|
bool result = osnma->verify_tesla_key(key, TOW);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
// ----------
|
// ----------
|
||||||
ASSERT_TRUE(result);
|
ASSERT_TRUE(result);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
||||||
{
|
{
|
||||||
initializeGoogleLog();
|
// initializeGoogleLog();
|
||||||
// Arrange
|
// Arrange
|
||||||
// ----------
|
// ----------
|
||||||
// std::vector<TestVector> testVectors = readTestVectorsFromFile("/home/cgm/CLionProjects/osnma/data/16_AUG_2023_GST_05_00_01.csv");
|
// std::vector<TestVector> testVectors = readTestVectorsFromFile("/home/cgm/CLionProjects/osnma/data/16_AUG_2023_GST_05_00_01.csv");
|
||||||
std::vector<TestVector> testVectors = readTestVectorsFromFile("/home/cgm/CLionProjects/osnma/data/27_JUL_2023_GST_00_00_01.csv");
|
std::vector<TestVector> testVectors = readTestVectorsFromFile("/home/cgm/CLionProjects/osnma/data/27_JUL_2023_GST_00_00_01.csv");
|
||||||
if (testVectors.empty()){
|
if (testVectors.empty())
|
||||||
|
{
|
||||||
ASSERT_TRUE(false);
|
ASSERT_TRUE(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool end_of_hex_stream{false};
|
bool end_of_hex_stream{false};
|
||||||
int offset_byte{0};
|
int offset_byte{0};
|
||||||
int byte_index{0}; // index containing the last byte position of the hex stream that was retrieved. Takes advantage that all TVs have same size
|
int byte_index{0}; // index containing the last byte position of the hex stream that was retrieved. Takes advantage that all TVs have same size
|
||||||
const int SIZE_PAGE_BYTES{240/8}; // total bytes of a page
|
const int SIZE_PAGE_BYTES{240 / 8}; // total bytes of a page
|
||||||
const int SIZE_SUBFRAME_PAGES{15}; // number of pages of a subframe
|
const int SIZE_SUBFRAME_PAGES{15}; // number of pages of a subframe
|
||||||
const int SIZE_SUBFRAME_BYTES{SIZE_PAGE_BYTES*SIZE_SUBFRAME_PAGES}; // total bytes of a subframe
|
const int SIZE_SUBFRAME_BYTES{SIZE_PAGE_BYTES * SIZE_SUBFRAME_PAGES}; // total bytes of a subframe
|
||||||
const int DURATION_SUBFRAME{30}; // duration of a subframe, in seconds
|
const int DURATION_SUBFRAME{30}; // duration of a subframe, in seconds
|
||||||
|
|
||||||
const int DUMMY_PAGE{63};
|
const int DUMMY_PAGE{63};
|
||||||
bool flag_dummy_page{false};
|
bool flag_dummy_page{false};
|
||||||
std::cout << "OsnmaTestVectorsSimulation:" << " d_GST_SIS= " << d_GST_SIS
|
std::cout << "OsnmaTestVectorsSimulation:"
|
||||||
<< ", TOW=" << TOW
|
<< " d_GST_SIS= " << d_GST_SIS
|
||||||
<< ", WN=" << WN << std::endl;
|
<< ", TOW=" << TOW
|
||||||
|
<< ", WN=" << WN << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
// ----------
|
// ----------
|
||||||
|
|
||||||
// loop over all bytes of data. Note: all TestVectors have same amount of data.
|
// loop over all bytes of data. Note: all TestVectors have same amount of data.
|
||||||
while (end_of_hex_stream == false){
|
while (end_of_hex_stream == false)
|
||||||
|
{
|
||||||
// loop over all SVs, extract a subframe
|
// loop over all SVs, extract a subframe
|
||||||
for(const TestVector& tv : testVectors) { // loop over all SVs, extract a subframe
|
for (const TestVector& tv : testVectors)
|
||||||
std::cout << "OsnmaTestVectorsSimulation: SVID (PRN_a) "<< tv.svId << std::endl;
|
{ // loop over all SVs, extract a subframe
|
||||||
|
std::cout << "OsnmaTestVectorsSimulation: SVID (PRN_a) " << tv.svId << std::endl;
|
||||||
auto osnmaMsg_sptr = std::make_shared<OSNMA_msg>();
|
auto osnmaMsg_sptr = std::make_shared<OSNMA_msg>();
|
||||||
std::array<uint8_t, 15> hkroot{};
|
std::array<uint8_t, 15> hkroot{};
|
||||||
std::array<uint32_t, 15> mack{};
|
std::array<uint32_t, 15> mack{};
|
||||||
byte_index = offset_byte; // reset byte_index to the offset position for the next test vector. Offset is updated at the end of each Subframe (every 30 s or 450 Bytes)
|
byte_index = offset_byte; // reset byte_index to the offset position for the next test vector. Offset is updated at the end of each Subframe (every 30 s or 450 Bytes)
|
||||||
std::map<uint8_t, std::bitset<128>> words; // structure containing <WORD_NUMBER> and <EXTRACTED_BITS>
|
std::map<uint8_t, std::bitset<128>> words; // structure containing <WORD_NUMBER> and <EXTRACTED_BITS>
|
||||||
|
|
||||||
for (int idx = 0; idx < SIZE_SUBFRAME_PAGES; ++idx) // extract all pages of a subframe
|
for (int idx = 0; idx < SIZE_SUBFRAME_PAGES; ++idx) // extract all pages of a subframe
|
||||||
{
|
{
|
||||||
// extract bytes of complete page (odd+even) -- extract SIZE_PAGE from tv.navBits, starting from byte_index
|
// extract bytes of complete page (odd+even) -- extract SIZE_PAGE from tv.navBits, starting from byte_index
|
||||||
std::vector<uint8_t> page_bytes = extract_page_bytes(tv,byte_index,SIZE_PAGE_BYTES);
|
std::vector<uint8_t> page_bytes = extract_page_bytes(tv, byte_index, SIZE_PAGE_BYTES);
|
||||||
if(page_bytes.empty()){
|
if (page_bytes.empty())
|
||||||
std::cout<< "OsnmaTestVectorsSimulation: end of TestVectors \n" << "byte_index="<<byte_index<< " expected= " << 432000/8 << std::endl;
|
{
|
||||||
|
std::cout << "OsnmaTestVectorsSimulation: end of TestVectors \n"
|
||||||
|
<< "byte_index=" << byte_index << " expected= " << 432000 / 8 << std::endl;
|
||||||
end_of_hex_stream = true;
|
end_of_hex_stream = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// convert them to bitset representation using bytes_to_string
|
// convert them to bitset representation using bytes_to_string
|
||||||
std::string page_bits = bytes_to_str(page_bytes);
|
std::string page_bits = bytes_to_str(page_bytes);
|
||||||
// Extract the 40 OSNMA bits starting from the 18th bit
|
// Extract the 40 OSNMA bits starting from the 18th bit
|
||||||
std::string even_page = page_bits.substr(0, page_bits.size() / 2);;
|
std::string even_page = page_bits.substr(0, page_bits.size() / 2);
|
||||||
std::string odd_page = page_bits.substr( page_bits.size() / 2);
|
;
|
||||||
if(even_page.size() < 120 || odd_page.size() < 120 ){
|
std::string odd_page = page_bits.substr(page_bits.size() / 2);
|
||||||
std::cout<< "OsnmaTestVectorsSimulation: error parsing pages" << std::endl;
|
if (even_page.size() < 120 || odd_page.size() < 120)
|
||||||
|
{
|
||||||
|
std::cout << "OsnmaTestVectorsSimulation: error parsing pages" << std::endl;
|
||||||
}
|
}
|
||||||
bool even_odd_OK = even_page[0] == '0' && odd_page[0] == '1';
|
bool even_odd_OK = even_page[0] == '0' && odd_page[0] == '1';
|
||||||
bool page_type_OK = even_page[1] == '0' && odd_page[1] == '0';
|
bool page_type_OK = even_page[1] == '0' && odd_page[1] == '0';
|
||||||
bool tail_bits_OK = even_page.substr(even_page.size() - 6) == "000000" && odd_page.substr(odd_page.size() - 6) == "000000";
|
bool tail_bits_OK = even_page.substr(even_page.size() - 6) == "000000" && odd_page.substr(odd_page.size() - 6) == "000000";
|
||||||
if(!even_odd_OK || !page_type_OK || !tail_bits_OK)
|
if (!even_odd_OK || !page_type_OK || !tail_bits_OK)
|
||||||
std::cerr<< "OsnmaTestVectorsSimulation: error parsing pages." << std::endl;
|
std::cerr << "OsnmaTestVectorsSimulation: error parsing pages." << std::endl;
|
||||||
|
|
||||||
std::bitset<112> data_k(even_page.substr(2,112));
|
std::bitset<112> data_k(even_page.substr(2, 112));
|
||||||
std::bitset<16> data_j(odd_page.substr(2,16));
|
std::bitset<16> data_j(odd_page.substr(2, 16));
|
||||||
std::bitset<112> shifted_data_k = data_k;
|
std::bitset<112> shifted_data_k = data_k;
|
||||||
// uint8_t word_type = 0;
|
// uint8_t word_type = 0;
|
||||||
// for(int i = 0; i < 6; ++i) {
|
// for(int i = 0; i < 6; ++i) {
|
||||||
// word_type |= (data_k[104 + i] << i);
|
// word_type |= (data_k[104 + i] << i);
|
||||||
// }
|
// }
|
||||||
uint8_t word_type = static_cast<uint8_t>((shifted_data_k >>= 106).to_ulong()); // word type is the first 6 bits of the word
|
uint8_t word_type = static_cast<uint8_t>((shifted_data_k >>= 106).to_ulong()); // word type is the first 6 bits of the word
|
||||||
std::cout<< "OsnmaTestVectorsSimulation: received Word "<< static_cast<int>(word_type) << std::endl;
|
std::cout << "OsnmaTestVectorsSimulation: received Word " << static_cast<int>(word_type) << std::endl;
|
||||||
if( (word_type >= 1 && word_type <=5) || word_type == 6 || word_type == 10)
|
if ((word_type >= 1 && word_type <= 5) || word_type == 6 || word_type == 10)
|
||||||
{
|
{
|
||||||
// store raw word
|
// store raw word
|
||||||
std::bitset<128> data_combined(data_k.to_string() + data_j.to_string());
|
std::bitset<128> data_combined(data_k.to_string() + data_j.to_string());
|
||||||
words[word_type] = data_combined;
|
words[word_type] = data_combined;
|
||||||
}
|
}
|
||||||
if(word_type == DUMMY_PAGE)
|
if (word_type == DUMMY_PAGE)
|
||||||
flag_dummy_page = true;
|
flag_dummy_page = true;
|
||||||
// place it into osnma object.
|
// place it into osnma object.
|
||||||
std::bitset<40> osnmaBits(odd_page.substr(18, 40));
|
std::bitset<40> osnmaBits(odd_page.substr(18, 40));
|
||||||
@ -185,12 +183,13 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
|||||||
byte_index += SIZE_PAGE_BYTES;
|
byte_index += SIZE_PAGE_BYTES;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout<< "----------" << std::endl;
|
std::cout << "----------" << std::endl;
|
||||||
if(end_of_hex_stream)
|
if (end_of_hex_stream)
|
||||||
break;
|
break;
|
||||||
if(flag_dummy_page){
|
if (flag_dummy_page)
|
||||||
|
{
|
||||||
flag_dummy_page = false;
|
flag_dummy_page = false;
|
||||||
continue; // skip this SV
|
continue; // skip this SV
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fill osnma object
|
// Fill osnma object
|
||||||
@ -198,8 +197,8 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
|||||||
osnmaMsg_sptr->mack = mack;
|
osnmaMsg_sptr->mack = mack;
|
||||||
|
|
||||||
osnmaMsg_sptr->TOW_sf0 = d_GST_SIS & 0x000FFFFF;
|
osnmaMsg_sptr->TOW_sf0 = d_GST_SIS & 0x000FFFFF;
|
||||||
osnmaMsg_sptr->WN_sf0 = (d_GST_SIS & 0xFFF00000) >> 20 ;
|
osnmaMsg_sptr->WN_sf0 = (d_GST_SIS & 0xFFF00000) >> 20;
|
||||||
osnmaMsg_sptr->PRN = tv.svId; // PRNa
|
osnmaMsg_sptr->PRN = tv.svId; // PRNa
|
||||||
|
|
||||||
// TODO - refactor this logic, currently it is split
|
// TODO - refactor this logic, currently it is split
|
||||||
|
|
||||||
@ -210,14 +209,14 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
|||||||
if (words.find(i) == words.end())
|
if (words.find(i) == words.end())
|
||||||
{
|
{
|
||||||
ephClockStatusWordsReceived = false;
|
ephClockStatusWordsReceived = false;
|
||||||
std::cerr<< "OsnmaTestVectorsSimulation: error parsing words 1->5. "
|
std::cerr << "OsnmaTestVectorsSimulation: error parsing words 1->5. "
|
||||||
"Word "<< i << " should be received for each subframe but was not." << std::endl;
|
"Word "
|
||||||
|
<< i << " should be received for each subframe but was not." << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// extract bits as needed by osnma block
|
// extract bits as needed by osnma block
|
||||||
if(ephClockStatusWordsReceived)
|
if (ephClockStatusWordsReceived)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Define the starting position and length of bits to extract for each word
|
// Define the starting position and length of bits to extract for each word
|
||||||
std::map<uint8_t, std::pair<uint8_t, uint8_t>> extractionParams = {
|
std::map<uint8_t, std::pair<uint8_t, uint8_t>> extractionParams = {
|
||||||
{1, {6, 120}},
|
{1, {6, 120}},
|
||||||
@ -229,15 +228,15 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Fill NavData bits -- Iterate over the extraction parameters
|
// Fill NavData bits -- Iterate over the extraction parameters
|
||||||
for (const auto& param : extractionParams) {
|
for (const auto& param : extractionParams)
|
||||||
|
{
|
||||||
uint8_t wordKey = param.first;
|
uint8_t wordKey = param.first;
|
||||||
uint8_t start = param.second.first;
|
uint8_t start = param.second.first;
|
||||||
uint8_t length = param.second.second;
|
uint8_t length = param.second.second;
|
||||||
|
|
||||||
// Extract the required bits and fill osnma block
|
// Extract the required bits and fill osnma block
|
||||||
osnmaMsg_sptr->EphemerisClockAndStatusData_2 += words[wordKey].
|
osnmaMsg_sptr->EphemerisClockAndStatusData_2 += words[wordKey].to_string().substr(
|
||||||
to_string().substr(
|
start, length);
|
||||||
start, length);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,12 +244,12 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
|||||||
bool timingWordsReceived = words.find(6) != words.end() &&
|
bool timingWordsReceived = words.find(6) != words.end() &&
|
||||||
words.find(10) != words.end();
|
words.find(10) != words.end();
|
||||||
// extract bits as needed by osnma block
|
// extract bits as needed by osnma block
|
||||||
if(timingWordsReceived){
|
if (timingWordsReceived)
|
||||||
|
{
|
||||||
// Define the starting position and length of bits to extract for each word
|
// Define the starting position and length of bits to extract for each word
|
||||||
std::map<uint8_t, std::pair<uint8_t, uint8_t>> extractionParams = {
|
std::map<uint8_t, std::pair<uint8_t, uint8_t>> extractionParams = {
|
||||||
{6, {6, 99}},
|
{6, {6, 99}},
|
||||||
{10, {86, 42}}
|
{10, {86, 42}}};
|
||||||
};
|
|
||||||
|
|
||||||
// Fill NavData bits -- Iterate over the extraction parameters
|
// Fill NavData bits -- Iterate over the extraction parameters
|
||||||
for (const auto& param : extractionParams)
|
for (const auto& param : extractionParams)
|
||||||
@ -263,27 +262,26 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
|||||||
osnmaMsg_sptr->TimingData_2 += words[wordKey].to_string().substr(
|
osnmaMsg_sptr->TimingData_2 += words[wordKey].to_string().substr(
|
||||||
start, length);
|
start, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call the handler, as if it came from telemetry decoder block
|
// Call the handler, as if it came from telemetry decoder block
|
||||||
auto temp_obj = pmt::make_any(osnmaMsg_sptr);
|
auto temp_obj = pmt::make_any(osnmaMsg_sptr);
|
||||||
|
|
||||||
osnma->msg_handler_osnma(temp_obj); // osnma entry point
|
osnma->msg_handler_osnma(temp_obj); // osnma entry point
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(!end_of_hex_stream){
|
if (!end_of_hex_stream)
|
||||||
offset_byte = byte_index; // update offset for the next subframe
|
{
|
||||||
|
offset_byte = byte_index; // update offset for the next subframe
|
||||||
d_GST_SIS += DURATION_SUBFRAME;
|
d_GST_SIS += DURATION_SUBFRAME;
|
||||||
TOW = d_GST_SIS & 0x000FFFFF;
|
TOW = d_GST_SIS & 0x000FFFFF;
|
||||||
WN = (d_GST_SIS & 0xFFF00000) >> 20 ;
|
WN = (d_GST_SIS & 0xFFF00000) >> 20;
|
||||||
std::cout << "OsnmaTestVectorsSimulation:" << " d_GST_SIS= " << d_GST_SIS
|
std::cout << "OsnmaTestVectorsSimulation:"
|
||||||
|
<< " d_GST_SIS= " << d_GST_SIS
|
||||||
<< ", TOW=" << TOW
|
<< ", TOW=" << TOW
|
||||||
<< ", WN=" << WN << std::endl;
|
<< ", WN=" << WN << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -293,20 +291,24 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation)
|
|||||||
// TODO - create global vars with failed tags and compare to total tags (Tag Id for example)
|
// TODO - create global vars with failed tags and compare to total tags (Tag Id for example)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<TestVector> OsnmaMsgReceiverTest::readTestVectorsFromFile(const std::string& filename)
|
std::vector<TestVector> OsnmaMsgReceiverTest::readTestVectorsFromFile(const std::string& filename)
|
||||||
{
|
{
|
||||||
std::ifstream file(filename);
|
std::ifstream file(filename);
|
||||||
std::vector<TestVector> testVectors;
|
std::vector<TestVector> testVectors;
|
||||||
if (!file.is_open()) {
|
if (!file.is_open())
|
||||||
std::cerr<<"Error reading the file \"" << filename <<"\" \n";
|
{
|
||||||
|
std::cerr << "Error reading the file \"" << filename << "\" \n";
|
||||||
return testVectors;
|
return testVectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string line;
|
std::string line;
|
||||||
std::getline(file, line);
|
std::getline(file, line);
|
||||||
if (line != "SVID,NumNavBits,NavBitsHEX\r" ){
|
if (line != "SVID,NumNavBits,NavBitsHEX\r")
|
||||||
std::cerr<<"Error parsing first line" <<"\n";
|
{
|
||||||
}
|
std::cerr << "Error parsing first line"
|
||||||
|
<< "\n";
|
||||||
|
}
|
||||||
|
|
||||||
while (std::getline(file, line))
|
while (std::getline(file, line))
|
||||||
{
|
{
|
||||||
@ -329,23 +331,27 @@ std::vector<TestVector> OsnmaMsgReceiverTest::readTestVectorsFromFile(const std:
|
|||||||
|
|
||||||
return testVectors;
|
return testVectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<uint8_t> OsnmaMsgReceiverTest::parseNavBits(const std::string& hex)
|
std::vector<uint8_t> OsnmaMsgReceiverTest::parseNavBits(const std::string& hex)
|
||||||
{
|
{
|
||||||
std::vector<uint8_t> bytes;
|
std::vector<uint8_t> bytes;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < hex.length()-1; i += 2)
|
for (unsigned int i = 0; i < hex.length() - 1; i += 2)
|
||||||
{
|
{
|
||||||
std::string byteString = hex.substr(i, 2);
|
std::string byteString = hex.substr(i, 2);
|
||||||
uint8_t byte = (uint8_t) strtol(byteString.c_str(), NULL, 16);
|
uint8_t byte = (uint8_t)strtol(byteString.c_str(), NULL, 16);
|
||||||
bytes.push_back(byte);
|
bytes.push_back(byte);
|
||||||
}
|
}
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string OsnmaMsgReceiverTest::bytes_to_str(const std::vector<uint8_t>& bytes)
|
std::string OsnmaMsgReceiverTest::bytes_to_str(const std::vector<uint8_t>& bytes)
|
||||||
{
|
{
|
||||||
std::string bit_string;
|
std::string bit_string;
|
||||||
bit_string.reserve(bytes.size() * 8);
|
bit_string.reserve(bytes.size() * 8);
|
||||||
for(const auto& byte : bytes)
|
for (const auto& byte : bytes)
|
||||||
{
|
{
|
||||||
std::bitset<8> bits(byte);
|
std::bitset<8> bits(byte);
|
||||||
bit_string += bits.to_string();
|
bit_string += bits.to_string();
|
||||||
@ -353,6 +359,7 @@ std::string OsnmaMsgReceiverTest::bytes_to_str(const std::vector<uint8_t>& bytes
|
|||||||
return bit_string;
|
return bit_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Extracts a range of bytes from a TestVector's navBits vector.
|
* @brief Extracts a range of bytes from a TestVector's navBits vector.
|
||||||
*
|
*
|
||||||
@ -381,6 +388,8 @@ std::vector<uint8_t> OsnmaMsgReceiverTest::extract_page_bytes(const TestVector&
|
|||||||
|
|
||||||
return extracted_bytes;
|
return extracted_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Sets the time based on the given input.
|
* @brief Sets the time based on the given input.
|
||||||
*
|
*
|
||||||
@ -404,118 +413,37 @@ void OsnmaMsgReceiverTest::set_time(std::tm& input)
|
|||||||
uint32_t sec_in_week = 7 * 24 * 60 * 60;
|
uint32_t sec_in_week = 7 * 24 * 60 * 60;
|
||||||
uint32_t week_number = duration_sec.count() / sec_in_week;
|
uint32_t week_number = duration_sec.count() / sec_in_week;
|
||||||
uint32_t time_of_week = duration_sec.count() % sec_in_week;
|
uint32_t time_of_week = duration_sec.count() % sec_in_week;
|
||||||
this->WN = week_number;
|
this->WN = week_number;
|
||||||
this->TOW = time_of_week + LEAP_SECONDS;
|
this->TOW = time_of_week + LEAP_SECONDS;
|
||||||
// Return the week number and time of week as a pair
|
// Return the week number and time of week as a pair
|
||||||
|
|
||||||
// TODO: d_GST_SIS or d_receiver_time? doubt
|
// TODO: d_GST_SIS or d_receiver_time? doubt
|
||||||
// I am assuming that local realisation of receiver is identical to SIS GST time coming from W5 or W0
|
// I am assuming that local realisation of receiver is identical to SIS GST time coming from W5 or W0
|
||||||
this->d_GST_SIS = (this->WN & 0x00000FFF) << 20 | (this->TOW & 0x000FFFFF);
|
this->d_GST_SIS = (this->WN & 0x00000FFF) << 20 | (this->TOW & 0x000FFFFF);
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
void OsnmaMsgReceiverTest::initializeGoogleLog()
|
|
||||||
{
|
|
||||||
google::InitGoogleLogging(log_name.c_str());
|
|
||||||
FLAGS_minloglevel = 0; // INFO
|
|
||||||
FLAGS_logtostderr = 0; // add this line
|
|
||||||
FLAGS_log_dir = "/home/cgm/CLionProjects/osnma/build/src/tests/logs";
|
|
||||||
if (FLAGS_log_dir.empty())
|
|
||||||
{
|
|
||||||
std::cout << "Logging will be written at "
|
|
||||||
<< std::filesystem::temp_directory_path()
|
|
||||||
<< '\n'
|
|
||||||
<< "Use gnss-sdr --log_dir=/path/to/log to change that.\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
const std::filesystem::path p(FLAGS_log_dir);
|
|
||||||
if (!std::filesystem::exists(p))
|
|
||||||
{
|
|
||||||
std::cout << "The path "
|
|
||||||
<< FLAGS_log_dir
|
|
||||||
<< " does not exist, attempting to create it.\n";
|
|
||||||
std::error_code ec;
|
|
||||||
if (!std::filesystem::create_directory(p, ec))
|
|
||||||
{
|
|
||||||
std::cout << "Could not create the " << FLAGS_log_dir << " folder.\n";
|
|
||||||
gflags::ShutDownCommandLineFlags();
|
|
||||||
throw std::runtime_error("Could not create folder for logs");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::cout << "Logging will be written at " << FLAGS_log_dir << '\n';
|
|
||||||
}
|
|
||||||
catch (const std::exception& e)
|
|
||||||
{
|
|
||||||
std::cerr << e.what() << '\n';
|
|
||||||
std::cerr << "Could not create the " << FLAGS_log_dir << " folder.\n";
|
|
||||||
gflags::ShutDownCommandLineFlags();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TEST_F(OsnmaMsgReceiverTest, BuildTagMessageM0)
|
TEST_F(OsnmaMsgReceiverTest, BuildTagMessageM0)
|
||||||
{
|
{
|
||||||
// Arrange
|
|
||||||
// ----------
|
|
||||||
// m0
|
|
||||||
std::vector<uint8_t> expected_message = {
|
|
||||||
0x02, 0x4E, 0x05, 0x46, 0x3C, 0x01, 0x83, 0xA5, 0x91, 0x05, 0x1D, 0x69, 0x25, 0x80, 0x07, 0x6B,
|
|
||||||
0x3E, 0xEA, 0x81, 0x41, 0xBF, 0x03, 0xAD, 0xCB, 0x5A, 0xAD, 0xB2, 0x77, 0xAF, 0x6F, 0xCF, 0x21,
|
|
||||||
0xFB, 0x98, 0xFF, 0x7E, 0x83, 0xAF, 0xFC, 0x37, 0x02, 0x03, 0xB0, 0xD8, 0xE1, 0x0E, 0xB1, 0x4D,
|
|
||||||
0x11, 0x18, 0xE6, 0xB0, 0xE8, 0x20, 0x01, 0xA0, 0x00, 0xE5, 0x91, 0x00, 0x06, 0xD3, 0x1F, 0x00,
|
|
||||||
0x02, 0x68, 0x05, 0x4A, 0x02, 0xC2, 0x26, 0x07, 0xF7, 0xFC, 0x00
|
|
||||||
};
|
|
||||||
|
|
||||||
uint32_t TOW_Tag0 = 345660;
|
|
||||||
uint32_t TOW_NavData = TOW_Tag0 - 30;
|
|
||||||
uint32_t TOW_Key_Tag0 = TOW_Tag0 + 30 ;
|
|
||||||
uint32_t WN = 1248;
|
|
||||||
uint32_t PRNa = 2;
|
|
||||||
uint8_t CTR = 1;
|
|
||||||
|
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.ts = 9; // 40 bit
|
|
||||||
osnma->d_tesla_keys[TOW_Key_Tag0] = {0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6, 0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDB, 0xBC, 0x73}; // K4
|
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.mf = 0;
|
|
||||||
osnma->d_satellite_nav_data[PRNa][TOW_NavData].ephemeris_iono_vector_2 = "000011101001011001000100000101000111010110100100100101100000000000011101101011001111101110101010000001010000011011111100000011101011011100101101011010101011011011001001110111101011110110111111001111001000011111101110011000111111110111111010000011101011111111110000110111000000100000001110110000110110001110000100001110101100010100110100010001000110001110011010110000111010000010000000000001101000000000000011100101100100010000000000000110110100110001111100000000000000100110100000000101010010100000001011000010001001100000011111110111111111000000000";
|
|
||||||
osnma->d_osnma_data.d_nma_header.nmas = 0b10;
|
|
||||||
|
|
||||||
MACK_tag_and_info MTI;
|
|
||||||
MTI.tag = static_cast<uint64_t>(0xE37BC4F858);
|
|
||||||
MTI.tag_info.PRN_d = 0x02;
|
|
||||||
MTI.tag_info.ADKD = 0x00;
|
|
||||||
MTI.tag_info.cop = 0x0F;
|
|
||||||
Tag t0(MTI, TOW_Tag0, WN, PRNa, CTR);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Act
|
|
||||||
// ----------
|
|
||||||
auto computed_message = osnma->build_message(t0);
|
|
||||||
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
// ----------
|
|
||||||
ASSERT_TRUE(computed_message == expected_message);
|
|
||||||
|
|
||||||
}
|
|
||||||
TEST_F(OsnmaMsgReceiverTest, TagVerification) {
|
|
||||||
// Arrange
|
// Arrange
|
||||||
// ----------
|
// ----------
|
||||||
// Tag0
|
// m0
|
||||||
|
std::vector<uint8_t> expected_message = {
|
||||||
|
0x02, 0x4E, 0x05, 0x46, 0x3C, 0x01, 0x83, 0xA5, 0x91, 0x05, 0x1D, 0x69, 0x25, 0x80, 0x07, 0x6B,
|
||||||
|
0x3E, 0xEA, 0x81, 0x41, 0xBF, 0x03, 0xAD, 0xCB, 0x5A, 0xAD, 0xB2, 0x77, 0xAF, 0x6F, 0xCF, 0x21,
|
||||||
|
0xFB, 0x98, 0xFF, 0x7E, 0x83, 0xAF, 0xFC, 0x37, 0x02, 0x03, 0xB0, 0xD8, 0xE1, 0x0E, 0xB1, 0x4D,
|
||||||
|
0x11, 0x18, 0xE6, 0xB0, 0xE8, 0x20, 0x01, 0xA0, 0x00, 0xE5, 0x91, 0x00, 0x06, 0xD3, 0x1F, 0x00,
|
||||||
|
0x02, 0x68, 0x05, 0x4A, 0x02, 0xC2, 0x26, 0x07, 0xF7, 0xFC, 0x00};
|
||||||
|
|
||||||
uint32_t TOW_Tag0 = 345660;
|
uint32_t TOW_Tag0 = 345660;
|
||||||
uint32_t TOW_NavData = TOW_Tag0 - 30;
|
uint32_t TOW_NavData = TOW_Tag0 - 30;
|
||||||
uint32_t TOW_Key_Tag0 = TOW_Tag0 + 30 ;
|
uint32_t TOW_Key_Tag0 = TOW_Tag0 + 30;
|
||||||
uint32_t WN = 1248;
|
uint32_t WN = 1248;
|
||||||
uint32_t PRNa = 2;
|
uint32_t PRNa = 2;
|
||||||
uint8_t CTR = 1;
|
uint8_t CTR = 1;
|
||||||
|
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.ts = 9; // 40 bit
|
osnma->d_osnma_data.d_dsm_kroot_message.ts = 9; // 40 bit
|
||||||
osnma->d_tesla_keys[TOW_Key_Tag0] = {0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6, 0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDD, 0xBC, 0x73}; // K4
|
osnma->d_tesla_keys[TOW_Key_Tag0] = {0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6, 0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDB, 0xBC, 0x73}; // K4
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.mf = 0;
|
osnma->d_osnma_data.d_dsm_kroot_message.mf = 0;
|
||||||
osnma->d_satellite_nav_data[PRNa][TOW_NavData].ephemeris_iono_vector_2 = "000011101001011001000100000101000111010110100100100101100000000000011101101011001111101110101010000001010000011011111100000011101011011100101101011010101011011011001001110111101011110110111111001111001000011111101110011000111111110111111010000011101011111111110000110111000000100000001110110000110110001110000100001110101100010100110100010001000110001110011010110000111010000010000000000001101000000000000011100101100100010000000000000110110100110001111100000000000000100110100000000101010010100000001011000010001001100000011111110111111111000000000";
|
osnma->d_satellite_nav_data[PRNa][TOW_NavData].ephemeris_iono_vector_2 = "000011101001011001000100000101000111010110100100100101100000000000011101101011001111101110101010000001010000011011111100000011101011011100101101011010101011011011001001110111101011110110111111001111001000011111101110011000111111110111111010000011101011111111110000110111000000100000001110110000110110001110000100001110101100010100110100010001000110001110011010110000111010000010000000000001101000000000000011100101100100010000000000000110110100110001111100000000000000100110100000000101010010100000001011000010001001100000011111110111111111000000000";
|
||||||
osnma->d_osnma_data.d_nma_header.nmas = 0b10;
|
osnma->d_osnma_data.d_nma_header.nmas = 0b10;
|
||||||
@ -528,29 +456,62 @@ TEST_F(OsnmaMsgReceiverTest, TagVerification) {
|
|||||||
Tag t0(MTI, TOW_Tag0, WN, PRNa, CTR);
|
Tag t0(MTI, TOW_Tag0, WN, PRNa, CTR);
|
||||||
|
|
||||||
|
|
||||||
|
// Act
|
||||||
|
// ----------
|
||||||
|
auto computed_message = osnma->build_message(t0);
|
||||||
|
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
// ----------
|
||||||
|
ASSERT_TRUE(computed_message == expected_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST_F(OsnmaMsgReceiverTest, TagVerification)
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
// ----------
|
||||||
|
// Tag0
|
||||||
|
uint32_t TOW_Tag0 = 345660;
|
||||||
|
uint32_t TOW_NavData = TOW_Tag0 - 30;
|
||||||
|
uint32_t TOW_Key_Tag0 = TOW_Tag0 + 30;
|
||||||
|
uint32_t WN = 1248;
|
||||||
|
uint32_t PRNa = 2;
|
||||||
|
uint8_t CTR = 1;
|
||||||
|
|
||||||
|
osnma->d_osnma_data.d_dsm_kroot_message.ts = 9; // 40 bit
|
||||||
|
osnma->d_tesla_keys[TOW_Key_Tag0] = {0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6, 0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDD, 0xBC, 0x73}; // K4
|
||||||
|
osnma->d_osnma_data.d_dsm_kroot_message.mf = 0;
|
||||||
|
osnma->d_satellite_nav_data[PRNa][TOW_NavData].ephemeris_iono_vector_2 = "000011101001011001000100000101000111010110100100100101100000000000011101101011001111101110101010000001010000011011111100000011101011011100101101011010101011011011001001110111101011110110111111001111001000011111101110011000111111110111111010000011101011111111110000110111000000100000001110110000110110001110000100001110101100010100110100010001000110001110011010110000111010000010000000000001101000000000000011100101100100010000000000000110110100110001111100000000000000100110100000000101010010100000001011000010001001100000011111110111111111000000000";
|
||||||
|
osnma->d_osnma_data.d_nma_header.nmas = 0b10;
|
||||||
|
|
||||||
|
MACK_tag_and_info MTI;
|
||||||
|
MTI.tag = static_cast<uint64_t>(0xE37BC4F858);
|
||||||
|
MTI.tag_info.PRN_d = 0x02;
|
||||||
|
MTI.tag_info.ADKD = 0x00;
|
||||||
|
MTI.tag_info.cop = 0x0F;
|
||||||
|
Tag t0(MTI, TOW_Tag0, WN, PRNa, CTR);
|
||||||
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
// ----------
|
// ----------
|
||||||
bool result_tag0 = osnma->verify_tag(t0);
|
bool result_tag0 = osnma->verify_tag(t0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
// ----------
|
// ----------
|
||||||
//ASSERT_TRUE(result_tag0);
|
// ASSERT_TRUE(result_tag0);
|
||||||
|
|
||||||
// Tag3
|
// Tag3
|
||||||
uint32_t TOW_Tag3 = 345660;
|
uint32_t TOW_Tag3 = 345660;
|
||||||
uint32_t TOW_NavData_Tag3 = TOW_Tag3 - 30;
|
uint32_t TOW_NavData_Tag3 = TOW_Tag3 - 30;
|
||||||
uint32_t TOW_Key_Tag3 = TOW_Tag0 + 30 ;
|
uint32_t TOW_Key_Tag3 = TOW_Tag0 + 30;
|
||||||
WN = 1248;
|
WN = 1248;
|
||||||
PRNa = 2;
|
PRNa = 2;
|
||||||
CTR = 3;
|
CTR = 3;
|
||||||
|
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.ts = 9; // 40 bit
|
osnma->d_osnma_data.d_dsm_kroot_message.ts = 9; // 40 bit
|
||||||
osnma->d_tesla_keys[TOW_Key_Tag3] = {0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6, 0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDD, 0xBC, 0x73}; // K4
|
osnma->d_tesla_keys[TOW_Key_Tag3] = {0x69, 0xC0, 0x0A, 0xA7, 0x36, 0x42, 0x37, 0xA6, 0x5E, 0xBF, 0x00, 0x6A, 0xD8, 0xDD, 0xBC, 0x73}; // K4
|
||||||
osnma->d_osnma_data.d_dsm_kroot_message.mf = 0;
|
osnma->d_osnma_data.d_dsm_kroot_message.mf = 0;
|
||||||
osnma->d_satellite_nav_data[PRNa][TOW_NavData].utc_vector_2 =
|
osnma->d_satellite_nav_data[PRNa][TOW_NavData].utc_vector_2 =
|
||||||
"111111111111111111111111111111110000000000000000000000010001001001001000"
|
"111111111111111111111111111111110000000000000000000000010001001001001000"
|
||||||
@ -566,5 +527,4 @@ TEST_F(OsnmaMsgReceiverTest, TagVerification) {
|
|||||||
bool result_tag3 = osnma->verify_tag(t3);
|
bool result_tag3 = osnma->verify_tag(t3);
|
||||||
|
|
||||||
ASSERT_TRUE(result_tag0 && result_tag3);
|
ASSERT_TRUE(result_tag0 && result_tag3);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user