diff --git a/.gitignore b/.gitignore index 4bf974a8994c2ee687383ddb4194759098412bb5..b6eb71ba4601efdbc251fd08cb1d2cd7751e17d8 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,6 @@ modules.order Module.symvers Mkfile.old dkms.conf +/build/ +/.cproject +/.project diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..592ddeed7c0a2840b78e36d903fd71aa27a873e9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "libdap"] + path = libdap + url = https://github.com/kelvinblockchain/libdap +[submodule "test/libdap-test"] + path = test/libdap-test + url = https://github.com/kelvinblockchain/libdap-test/ +[submodule "libdap-chain"] + path = libdap-chain + url = https://github.com/kelvinblockchain/libdap-chain diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..c3f4e90422f4902a3fe6085544711b69f779775e --- /dev/null +++ b/.travis.yml @@ -0,0 +1,21 @@ +language: c +compiler: gcc +dist: xenial +notifications: + email: false + +before_install: + - git submodule init + - git submodule update --recursive + +script: + - mkdir build + - cd build + - cmake ../ + - make + - ctest --verbose + +addons: + apt: + sources: + - ubuntu-toolchain-r-test diff --git a/CMakeLists.txt b/CMakeLists.txt index bcc690816734967ed8e62af1b8f34b474ed29d85..50b6ce128e95e14f822e03d494280a3b240807ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,13 @@ set(DAP_CHAIN_CRYPTO_HEADERS ) +if(NOT (${SUBMODULES_NO_BUILD} MATCHES ON)) + add_subdirectory(libdap) + add_subdirectory(libdap-chain) + enable_testing() + add_subdirectory(test) +endif() + add_subdirectory(monero_crypto) include_directories("${monero_crypto_INCLUDE_DIRS}") diff --git a/dap_chain_cert.c b/dap_chain_cert.c index a0f881fc7485eed95e8fdd51527fe40f96c23b4d..f87982634de623145966a1d2ff19c08e3b2e80d4 100644 --- a/dap_chain_cert.c +++ b/dap_chain_cert.c @@ -248,8 +248,10 @@ void dap_chain_cert_delete(dap_chain_cert_t * a_cert) { dap_chain_cert_item_t * l_cert_item = NULL; HASH_FIND_STR(s_certs, a_cert->name, l_cert_item); - if ( l_cert_item ) + if ( l_cert_item ){ HASH_DEL(s_certs,l_cert_item); + DAP_DELETE (l_cert_item); + } if( a_cert->enc_key ) dap_enc_key_delete (a_cert->enc_key ); diff --git a/dap_chain_cert_file.c b/dap_chain_cert_file.c index b6af8f33013a5236206aea1d2f3fa4dd59339a32..348b43b0bc663f0f4e296d326470010571664c37 100644 --- a/dap_chain_cert_file.c +++ b/dap_chain_cert_file.c @@ -103,11 +103,15 @@ uint8_t* dap_chain_cert_save_mem(dap_chain_cert_t * a_cert, uint32_t *a_cert_siz l_hdr.ts_last_used = l_key->last_used_timestamp; l_hdr.sign_type = dap_chain_sign_type_from_key_type ( l_key->type ); - l_data = DAP_NEW_SIZE(void, sizeof(l_hdr) + l_priv_key_data_size + l_pub_key_data_size + l_hdr.metadata_size); + + l_data = DAP_NEW_SIZE(void, sizeof(l_hdr) + DAP_CHAIN_CERT_ITEM_NAME_MAX + l_priv_key_data_size + l_pub_key_data_size + l_hdr.metadata_size); memcpy(l_data +l_data_offset, &l_hdr ,sizeof(l_hdr) ); l_data_offset += sizeof(l_hdr); + memcpy(l_data +l_data_offset, a_cert->name, DAP_CHAIN_CERT_ITEM_NAME_MAX );//save cert name + l_data_offset += DAP_CHAIN_CERT_ITEM_NAME_MAX; + memcpy(l_data +l_data_offset, l_pub_key_data ,l_pub_key_data_size ); l_data_offset += l_pub_key_data_size; @@ -153,7 +157,7 @@ dap_chain_cert_t* dap_chain_cert_file_load(const char * a_cert_file_path) }else{ l_ret = dap_chain_cert_mem_load(l_data,l_file_size); } - + DAP_DELETE(l_data); } lb_exit: if( l_file ) @@ -187,7 +191,12 @@ dap_chain_cert_t* dap_chain_cert_mem_load(void * a_data, size_t a_data_size) goto l_exit; } - l_ret = DAP_NEW_Z(dap_chain_cert_t); + char l_name[DAP_CHAIN_CERT_ITEM_NAME_MAX]; + memcpy(l_name, l_data +l_data_offset, DAP_CHAIN_CERT_ITEM_NAME_MAX );//save cert name + l_data_offset += DAP_CHAIN_CERT_ITEM_NAME_MAX; + + //l_ret = DAP_NEW_Z(dap_chain_cert_t); + l_ret = dap_chain_cert_new(l_name); l_ret->enc_key = dap_enc_key_new( dap_chain_sign_type_to_key_type( l_hdr.sign_type )); l_ret->enc_key->last_used_timestamp = l_hdr.ts_last_used; diff --git a/libdap b/libdap new file mode 160000 index 0000000000000000000000000000000000000000..581d28044d21461982965e904e30e9a8171ee732 --- /dev/null +++ b/libdap @@ -0,0 +1 @@ +Subproject commit 581d28044d21461982965e904e30e9a8171ee732 diff --git a/libdap-chain b/libdap-chain new file mode 160000 index 0000000000000000000000000000000000000000..7e3e787bed969d4aa0554fa45ccba024a00f316b --- /dev/null +++ b/libdap-chain @@ -0,0 +1 @@ +Subproject commit 7e3e787bed969d4aa0554fa45ccba024a00f316b diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..19060335f8dcd28078d1cd0f9309443fae642bd4 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,18 @@ +if(TARGET chain_crypto_test) + return() # The project has already been built. +endif() +project(chain_crypto_test) + +add_subdirectory(libdap-test) + +file(GLOB SOURCES *.c) +file(GLOB HEADERS *.h) + +add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS}) + +target_link_libraries(${PROJECT_NAME} dap_test dap_core dap_crypto dap_chain) + +add_test( + NAME chain_crypto_test + COMMAND chain_crypto_test +) diff --git a/test/dap_chain_cert_save_tests.c b/test/dap_chain_cert_save_tests.c new file mode 100644 index 0000000000000000000000000000000000000000..9e1930faedfbbafa3f7d0de5ad4121ccc55fec88 --- /dev/null +++ b/test/dap_chain_cert_save_tests.c @@ -0,0 +1,64 @@ +#include <stdint.h> +#include <stdlib.h> +#include <unistd.h> + +#include "dap_test.h" +#include "dap_enc_key.h" +#include "dap_chain_cert.h" +#include "dap_chain_cert_file.h" + +#define CERT_FILE_PATH "cert_file_path.tmp" + +static void test_cert_memory_file(dap_enc_key_type_t a_key_type) +{ + uint32_t l_cert_buf_size = 0; + dap_chain_cert_t *l_cert = dap_chain_cert_generate_mem("name 1", a_key_type); + dap_assert_PIF(l_cert, "Fail create cert"); + uint8_t * l_cert_buf = dap_chain_cert_save_mem(l_cert, &l_cert_buf_size); + dap_assert_PIF(l_cert_buf, "Fail save cert to memory"); + dap_chain_cert_delete(l_cert); + + dap_chain_cert_t *l_cert2 = dap_chain_cert_mem_load(l_cert_buf, l_cert_buf_size); + dap_assert_PIF(l_cert2, "Fail read cert from memory"); + + dap_chain_cert_delete(l_cert2); + DAP_DELETE(l_cert_buf); + + dap_pass_msg("Save and load cert in memory successfully"); + + dap_chain_cert_t *l_certf = dap_chain_cert_generate_mem("name 2", a_key_type); + int l_res = dap_chain_cert_save_file(l_certf, CERT_FILE_PATH); + dap_assert_PIF(!l_res, "Fail save cert to file"); + dap_chain_cert_delete(l_certf); + + dap_chain_cert_t *l_certf2 = dap_chain_cert_file_load(CERT_FILE_PATH); + dap_assert_PIF(l_certf2, "Fail load cert from file"); + dap_chain_cert_delete(l_certf2); + // delete temp file + unlink(CERT_FILE_PATH); + + dap_pass_msg("Save and load cert in file successfully"); + +} + +void init_test_case() +{ + dap_enc_key_init(); +} + +void cleanup_test_case() +{ + dap_enc_key_deinit(); +} + +void dap_chain_cert_save_tests_run(void) +{ + dap_print_module_name("dap_chain_cert_save"); + init_test_case(); + + test_cert_memory_file(DAP_ENC_KEY_TYPE_SIG_BLISS); + test_cert_memory_file(DAP_ENC_KEY_TYPE_SIG_TESLA); + test_cert_memory_file(DAP_ENC_KEY_TYPE_SIG_PICNIC); + + cleanup_test_case(); +} diff --git a/test/dap_chain_cert_save_tests.h b/test/dap_chain_cert_save_tests.h new file mode 100644 index 0000000000000000000000000000000000000000..eb7d56fe843285619205fdc82dabaa1b49a20e04 --- /dev/null +++ b/test/dap_chain_cert_save_tests.h @@ -0,0 +1,4 @@ +#pragma once +#include "dap_test.h" + +void dap_chain_cert_save_tests_run(void); diff --git a/test/libdap-test b/test/libdap-test new file mode 160000 index 0000000000000000000000000000000000000000..b76175acc517f085c319c8e66c62bd143f96bf94 --- /dev/null +++ b/test/libdap-test @@ -0,0 +1 @@ +Subproject commit b76175acc517f085c319c8e66c62bd143f96bf94 diff --git a/test/main.c b/test/main.c new file mode 100644 index 0000000000000000000000000000000000000000..fd16469cbd7f6f591504a065d93d4de445e09b7b --- /dev/null +++ b/test/main.c @@ -0,0 +1,9 @@ +#include "dap_common.h" +#include "dap_chain_cert_save_tests.h" + +int main(void) { + // switch off debug info from library + set_log_level(L_CRITICAL); + dap_chain_cert_save_tests_run(); + return 0; +}