mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-18 21:23:02 +00:00
Add unit tests for GNSS_crypto
Introduced unit tests in `gnss_crypto_test.cc` to verify the functionality set_public_key and verify_signature. The added tests check the correctness of signature verification and public key import processes. Further minor changes
This commit is contained in:
parent
ce6036e431
commit
80e6d8df18
@ -592,7 +592,8 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, in
|
|||||||
|
|
||||||
// get osnma message if the needed nav data is available
|
// get osnma message if the needed nav data is available
|
||||||
auto adkd_4_12_nav_data_available = d_flag_osnma_iono_and_time && d_flag_osnma_ephemeris;
|
auto adkd_4_12_nav_data_available = d_flag_osnma_iono_and_time && d_flag_osnma_ephemeris;
|
||||||
if (d_band == '1' && d_inav_nav.have_new_nma() == true && adkd_4_12_nav_data_available == true && d_flag_osnma_utc_model == true)
|
auto newOSNMA = d_inav_nav.have_new_nma();
|
||||||
|
if (d_band == '1' && newOSNMA && adkd_4_12_nav_data_available == true && d_flag_osnma_utc_model == true)
|
||||||
{
|
{
|
||||||
const std::shared_ptr<OSNMA_msg> tmp_obj = std::make_shared<OSNMA_msg>(d_inav_nav.get_osnma_msg());
|
const std::shared_ptr<OSNMA_msg> tmp_obj = std::make_shared<OSNMA_msg>(d_inav_nav.get_osnma_msg());
|
||||||
this->message_port_pub(pmt::mp("OSNMA_from_TLM"), pmt::make_any(tmp_obj));
|
this->message_port_pub(pmt::mp("OSNMA_from_TLM"), pmt::make_any(tmp_obj));
|
||||||
|
@ -305,10 +305,10 @@ void osnma_msg_receiver::read_dsm_block(const std::shared_ptr<OSNMA_msg>& osnma_
|
|||||||
* */
|
* */
|
||||||
void osnma_msg_receiver::process_dsm_message(const std::vector<uint8_t>& dsm_msg, const std::shared_ptr<OSNMA_msg>& osnma_msg)
|
void osnma_msg_receiver::process_dsm_message(const std::vector<uint8_t>& dsm_msg, const std::shared_ptr<OSNMA_msg>& osnma_msg)
|
||||||
{
|
{
|
||||||
|
// DSM-KROOT message
|
||||||
if (d_osnma_data.d_dsm_header.dsm_id < 12)
|
if (d_osnma_data.d_dsm_header.dsm_id < 12)
|
||||||
{
|
{
|
||||||
LOG(WARNING) << "OSNMA: DSM-KROOT message received.";
|
LOG(WARNING) << "OSNMA: DSM-KROOT message received.";
|
||||||
// DSM-KROOT message
|
|
||||||
d_osnma_data.d_dsm_kroot_message.nb_dk = d_dsm_reader->get_number_blocks_index(dsm_msg[0]);
|
d_osnma_data.d_dsm_kroot_message.nb_dk = d_dsm_reader->get_number_blocks_index(dsm_msg[0]);
|
||||||
d_osnma_data.d_dsm_kroot_message.pkid = d_dsm_reader->get_pkid(dsm_msg);
|
d_osnma_data.d_dsm_kroot_message.pkid = d_dsm_reader->get_pkid(dsm_msg);
|
||||||
d_osnma_data.d_dsm_kroot_message.cidkr = d_dsm_reader->get_cidkr(dsm_msg);
|
d_osnma_data.d_dsm_kroot_message.cidkr = d_dsm_reader->get_cidkr(dsm_msg);
|
||||||
|
@ -160,7 +160,7 @@ const std::unordered_map<std::string, uint16_t> OSNMA_TABLE_15 = {
|
|||||||
{std::string("SHA-256"), 512},
|
{std::string("SHA-256"), 512},
|
||||||
{std::string("SHA-512"), 1056}}; // key: ECDSA Curve and hash function, value: {l_ds_bits}
|
{std::string("SHA-512"), 1056}}; // key: ECDSA Curve and hash function, value: {l_ds_bits}
|
||||||
|
|
||||||
const std::string PEMFILE_DEFAULT("./OSNMA_PublicKey_20210920133026.pem");
|
const std::string PEMFILE_DEFAULT("../data/OSNMA_PublicKey_20240115100000_newPKID_1.pem");
|
||||||
const std::string MERKLEFILE_DEFAULT("./OSNMA_MerkleTree_20210920133026.xml");
|
const std::string MERKLEFILE_DEFAULT("./OSNMA_MerkleTree_20210920133026.xml");
|
||||||
|
|
||||||
class Mack_lookup
|
class Mack_lookup
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include <gnutls/abstract.h>
|
#include <gnutls/abstract.h>
|
||||||
#include <gnutls/crypto.h>
|
#include <gnutls/crypto.h>
|
||||||
#include <gnutls/x509.h>
|
#include <gnutls/x509.h>
|
||||||
|
#include <iomanip>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -63,6 +64,11 @@ Gnss_Crypto::~Gnss_Crypto()
|
|||||||
EC_KEY_free(d_PublicKey);
|
EC_KEY_free(d_PublicKey);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#else // GNU-TLS
|
||||||
|
if (d_PublicKey != NULL) {
|
||||||
|
gnutls_pubkey_deinit(d_PublicKey);
|
||||||
|
d_PublicKey = NULL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,9 +479,11 @@ void Gnss_Crypto::readPublicKeyFromPEM(const std::string& pemFilePath)
|
|||||||
std::cerr << "GnuTLS: error reading the Public Key from file "
|
std::cerr << "GnuTLS: error reading the Public Key from file "
|
||||||
<< pemFilePath
|
<< pemFilePath
|
||||||
<< ". Aborting import" << std::endl;
|
<< ". Aborting import" << std::endl;
|
||||||
|
std::cerr << "GnuTLS error: " << gnutls_strerror(ret) << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
d_PublicKey = pubkey;
|
|
||||||
|
pubkey_copy(pubkey, &d_PublicKey);
|
||||||
gnutls_pubkey_deinit(pubkey);
|
gnutls_pubkey_deinit(pubkey);
|
||||||
#endif
|
#endif
|
||||||
std::cout << "Public key successfully read from file " << pemFilePath << std::endl;
|
std::cout << "Public key successfully read from file " << pemFilePath << std::endl;
|
||||||
@ -486,6 +494,7 @@ bool Gnss_Crypto::verify_signature(const std::vector<uint8_t>& message, const st
|
|||||||
{
|
{
|
||||||
if (!have_public_key())
|
if (!have_public_key())
|
||||||
{
|
{
|
||||||
|
std::cerr << "GnuTLS error: public key not available"<< std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool success = false;
|
bool success = false;
|
||||||
@ -539,10 +548,16 @@ bool Gnss_Crypto::verify_signature(const std::vector<uint8_t>& message, const st
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
|
// // GNU-TLS
|
||||||
|
// gnutls_global_init();
|
||||||
|
// // debug info gnu-tls remove when not needed anymore!
|
||||||
|
// gnutls_global_set_log_level(9);
|
||||||
|
// gnutls_global_set_log_function(Gnss_Crypto::my_log_func);
|
||||||
|
|
||||||
unsigned int bit_size;
|
unsigned int bit_size;
|
||||||
if (gnutls_pubkey_get_pk_algorithm(d_PublicKey, &bit_size) != GNUTLS_PK_ECDSA)
|
if (gnutls_pubkey_get_pk_algorithm(d_PublicKey, &bit_size) != GNUTLS_PK_ECDSA)
|
||||||
{
|
{
|
||||||
std::cout << "GnuTLS: the Public Key does not contain a ECDSA key. Aborting signature verification" << std::endl;
|
std::cerr << "GnuTLS: the Public Key does not contain a ECDSA key. Aborting signature verification" << std::endl;
|
||||||
}
|
}
|
||||||
gnutls_datum_t signature_{};
|
gnutls_datum_t signature_{};
|
||||||
signature_.data = const_cast<uint8_t*>(signature.data());
|
signature_.data = const_cast<uint8_t*>(signature.data());
|
||||||
@ -557,8 +572,9 @@ bool Gnss_Crypto::verify_signature(const std::vector<uint8_t>& message, const st
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::cerr << "GnuTLS: message authentication failed" << std::endl;
|
std::cerr << "GnuTLS error: " << gnutls_strerror(ret) << std::endl;
|
||||||
}
|
}
|
||||||
|
// gnutls_global_deinit();
|
||||||
#endif
|
#endif
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
@ -603,10 +619,40 @@ std::vector<uint8_t> Gnss_Crypto::getMerkleRoot(const std::vector<std::vector<ui
|
|||||||
void Gnss_Crypto::set_public_key(const std::vector<uint8_t>& publicKey)
|
void Gnss_Crypto::set_public_key(const std::vector<uint8_t>& publicKey)
|
||||||
{
|
{
|
||||||
#if USE_OPENSSL_FALLBACK
|
#if USE_OPENSSL_FALLBACK
|
||||||
// TODO - convert to OSSL PubKey format
|
// TODO
|
||||||
#else
|
#else
|
||||||
// GNU-TLS
|
// // GNU-TLS
|
||||||
// TODO - convert to gnutls_pubkey_st
|
// gnutls_global_init();
|
||||||
|
//
|
||||||
|
// // debug info gnu-tls remove when not needed anymore!
|
||||||
|
// gnutls_global_set_log_level(9);
|
||||||
|
// gnutls_global_set_log_function(Gnss_Crypto::my_log_func);
|
||||||
|
|
||||||
|
|
||||||
|
gnutls_pubkey_t pubkey;
|
||||||
|
gnutls_datum_t pemDatum = {const_cast<unsigned char*>(publicKey.data()), static_cast<unsigned int>(publicKey.size())};
|
||||||
|
gnutls_pubkey_init(&pubkey);
|
||||||
|
int ret = gnutls_pubkey_import(pubkey, &pemDatum, GNUTLS_X509_FMT_PEM);
|
||||||
|
//ret = gnutls_pubkey_import_x509_raw(pubkey, &pemDatum,GNUTLS_X509_FMT_PEM,0);
|
||||||
|
if (ret != GNUTLS_E_SUCCESS)
|
||||||
|
{
|
||||||
|
gnutls_pubkey_deinit(pubkey);
|
||||||
|
std::cerr << "GnuTLS: error setting the public key "
|
||||||
|
<< ". Aborting import" << std::endl;
|
||||||
|
std::cerr << "GnuTLS error: " << gnutls_strerror(ret) << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// d_PublicKey = pubkey;
|
||||||
|
pubkey_copy(pubkey, &d_PublicKey);
|
||||||
|
// std::cout << "pubkey: " << std::endl;
|
||||||
|
// print_pubkey_hex(pubkey);
|
||||||
|
// std::cout << "d_PublicKey before : " << std::endl;
|
||||||
|
// print_pubkey_hex(d_PublicKey);
|
||||||
|
gnutls_pubkey_deinit(pubkey);
|
||||||
|
// std::cout << "d_PublicKey after: " << std::endl;
|
||||||
|
// print_pubkey_hex(d_PublicKey);
|
||||||
|
|
||||||
|
// gnutls_global_deinit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -621,3 +667,63 @@ std::vector<uint8_t> Gnss_Crypto::get_public_key()
|
|||||||
#endif
|
#endif
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Gnss_Crypto::my_log_func(int level, const char *msg) {
|
||||||
|
fprintf(stderr, "<GnuTLS %d> %s", level, msg);}
|
||||||
|
|
||||||
|
// gnutls-specific functions
|
||||||
|
void Gnss_Crypto::print_pubkey_hex(gnutls_pubkey_t pubkey)
|
||||||
|
{
|
||||||
|
gnutls_datum_t key_datum;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
// Export the public key from pubkey to memory in DER format
|
||||||
|
ret = gnutls_pubkey_export2(pubkey, GNUTLS_X509_FMT_PEM, &key_datum);
|
||||||
|
if (ret < 0) {
|
||||||
|
std::cerr << "Failed to export public key: " << gnutls_strerror(ret) << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
// Iterate through each byte in key_datum.data and print its hex value
|
||||||
|
for (unsigned int i = 0; i < key_datum.size; ++i) {
|
||||||
|
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<std::uint32_t>(key_datum.data[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Public key in hex format: 0x" << ss.str() << std::endl;
|
||||||
|
|
||||||
|
// Free the memory allocated to key_datum.data
|
||||||
|
gnutls_free(key_datum.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Gnss_Crypto::pubkey_copy(gnutls_pubkey_t src, gnutls_pubkey_t* dest)
|
||||||
|
{
|
||||||
|
gnutls_datum_t key_datum;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
// Export the public key from src to memory
|
||||||
|
ret = gnutls_pubkey_export2(src, GNUTLS_X509_FMT_PEM, &key_datum);
|
||||||
|
if(ret < 0) {
|
||||||
|
gnutls_free(key_datum.data);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize dest
|
||||||
|
ret = gnutls_pubkey_init(dest);
|
||||||
|
if(ret < 0) {
|
||||||
|
gnutls_free(key_datum.data);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Import the public key data from key_datum to dest
|
||||||
|
ret = gnutls_pubkey_import(*dest, &key_datum, GNUTLS_X509_FMT_PEM);
|
||||||
|
gnutls_free(key_datum.data);
|
||||||
|
|
||||||
|
if(ret < 0) {
|
||||||
|
gnutls_pubkey_deinit(*dest);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -67,6 +67,10 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
gnutls_pubkey_t d_PublicKey{};
|
gnutls_pubkey_t d_PublicKey{};
|
||||||
|
void set_ecc_key(const std::vector<uint8_t>& pK, const std::vector<uint8_t> ecP);
|
||||||
|
static void my_log_func(int level, const char* msg);
|
||||||
|
void print_pubkey_hex(gnutls_pubkey_t);
|
||||||
|
bool pubkey_copy(gnutls_pubkey_t src, gnutls_pubkey_t* dest);
|
||||||
#endif
|
#endif
|
||||||
std::vector<uint8_t> d_x_4_0;
|
std::vector<uint8_t> d_x_4_0;
|
||||||
std::vector<uint8_t> d_x_3_1;
|
std::vector<uint8_t> d_x_3_1;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
add_subdirectory(unit-tests/signal-processing-blocks/libs)
|
add_subdirectory(unit-tests/signal-processing-blocks/libs)
|
||||||
add_subdirectory(system-tests/libs)
|
add_subdirectory(system-tests/libs)
|
||||||
|
include_directories("${GNSSSDR_SOURCE_DIR}/src/core/receiver")
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Google Test - https://github.com/google/googletest
|
# Google Test - https://github.com/google/googletest
|
||||||
@ -1267,3 +1268,37 @@ endif()
|
|||||||
if(ENABLE_BENCHMARKS)
|
if(ENABLE_BENCHMARKS)
|
||||||
add_subdirectory(benchmarks)
|
add_subdirectory(benchmarks)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
# Configure the test executable:
|
||||||
|
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()
|
||||||
|
|
||||||
|
# Link libraries that gnss_crypto_test requires:
|
||||||
|
target_link_libraries(gnss_crypto_test
|
||||||
|
PRIVATE
|
||||||
|
Boost::thread
|
||||||
|
Gflags::gflags
|
||||||
|
Glog::glog
|
||||||
|
GTest::GTest
|
||||||
|
GTest::Main
|
||||||
|
core_system_parameters
|
||||||
|
)
|
||||||
|
|
||||||
|
# Include any directories your test needs for header files:
|
||||||
|
target_include_directories(gnss_crypto_test
|
||||||
|
PRIVATE
|
||||||
|
#${GNSSSDR_SOURCE_DIR}/src/algorithms,
|
||||||
|
#${GNSSSDR_SOURCE_DIR}/src/core,
|
||||||
|
#${GNSSSDR_SOURCE_DIR}/src/core/receiver,
|
||||||
|
${GNSSSDR_SOURCE_DIR}/src/core/system_parameters)
|
||||||
|
endif()
|
@ -72,6 +72,7 @@ DECLARE_string(log_dir);
|
|||||||
#include "unit-tests/signal-processing-blocks/adapter/adapter_test.cc"
|
#include "unit-tests/signal-processing-blocks/adapter/adapter_test.cc"
|
||||||
#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/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"
|
||||||
|
@ -0,0 +1,147 @@
|
|||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include "gnss_crypto.h"
|
||||||
|
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
|
||||||
|
// 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
|
||||||
|
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};
|
||||||
|
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, 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"
|
||||||
|
std::unique_ptr<Gnss_Crypto> d_crypto = std::make_unique<Gnss_Crypto>();
|
||||||
|
|
||||||
|
// RG example - key is raw 520 bits example shown
|
||||||
|
// 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,
|
||||||
|
//
|
||||||
|
// 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, 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
|
||||||
|
//
|
||||||
|
// };
|
||||||
|
|
||||||
|
// RG example crt exported and convert PK.pem - key is raw 1000 bits ,..., why mismatch!? does key get truncated?
|
||||||
|
// 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,
|
||||||
|
// 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 P 256 public key and own message generated (2024-02-19-Own-Key-ECDSA-openssl)
|
||||||
|
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,
|
||||||
|
|
||||||
|
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 };
|
||||||
|
|
||||||
|
d_crypto->set_public_key(publicKey);
|
||||||
|
|
||||||
|
ASSERT_TRUE(d_crypto->have_public_key());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 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,
|
||||||
|
// 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, 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,
|
||||||
|
// 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,
|
||||||
|
// 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,
|
||||||
|
// 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,
|
||||||
|
// 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,
|
||||||
|
// 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,
|
||||||
|
// 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 };
|
||||||
|
|
||||||
|
}
|
@ -1,29 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by cghio on 17.01.24.
|
|
||||||
//
|
|
||||||
#include "gtest/gtest.h"
|
|
||||||
#include "gnss_crypto.h"
|
|
||||||
//#include "std"
|
|
||||||
#ifndef GNSS_SDR_GNSS_CRYPTO_SHA2_TEST_H
|
|
||||||
#define GNSS_SDR_GNSS_CRYPTO_SHA2_TEST_H
|
|
||||||
|
|
||||||
class OsnmaCryptoTest : public :: testing ::Test{
|
|
||||||
};
|
|
||||||
|
|
||||||
TEST_F(OsnmaCryptoTest, basicTest)
|
|
||||||
{
|
|
||||||
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);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // GNSS_SDR_GNSS_CRYPTO_SHA2_TEST_H
|
|
Loading…
Reference in New Issue
Block a user