diff --git a/CMakeLists.txt b/CMakeLists.txt index 761ed7e08d4f63d03154a7332e560aa94cc64ebb..b0f8e7f872df84a9dd89e9b7a71acac08c66ca13 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,6 @@ if(WIN32) include_directories(../3rdparty/wepoll/include/) include_directories(../3rdparty/uthash/src/) include_directories(../3rdparty/libjson-c/) - include_directories(../3rdparty/libmagic/src/) include_directories(../3rdparty/curl/include/) include_directories(../3rdparty/libsqlite3/) endif() diff --git a/dap_chain_wallet.c b/dap_chain_wallet.c index 0c5fca88e11cfe90e2a7da9b39fe992b5324759e..7b45bd1b08bf715f58126e73f3e6207b1e8fccc4 100755 --- a/dap_chain_wallet.c +++ b/dap_chain_wallet.c @@ -53,7 +53,7 @@ #include "dap_common.h" #include "dap_strfuncs.h" #include "dap_string.h" -#include "dap_chain_cert_file.h" +#include "dap_cert_file.h" #include "dap_chain_wallet.h" #include "dap_chain_wallet_internal.h" @@ -63,7 +63,7 @@ * @brief dap_chain_wallet_init * @return */ -int dap_chain_wallet_init() +int dap_chain_wallet_init(void) { // load certificates from existing wallets const char *c_wallets_path = dap_chain_wallet_get_path(g_config); @@ -98,7 +98,7 @@ int dap_chain_wallet_init() /** * @brief dap_chain_wallet_deinit */ -void dap_chain_wallet_deinit() +void dap_chain_wallet_deinit(void) { } @@ -131,23 +131,22 @@ RET: * @details Creates new wallet * @return Wallet, new wallet or NULL if errors */ -dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_chain_net_id_t a_net_id, - dap_chain_sign_type_t a_sig_type) +dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_sign_type_t a_sig_type) { dap_chain_wallet_t * l_wallet = DAP_NEW_Z(dap_chain_wallet_t); DAP_CHAIN_WALLET_INTERNAL_LOCAL_NEW(l_wallet); l_wallet->name = strdup(a_wallet_name); l_wallet_internal->certs_count = 1; - l_wallet_internal->certs = DAP_NEW_Z_SIZE(dap_chain_cert_t *,l_wallet_internal->certs_count); + l_wallet_internal->certs = DAP_NEW_Z_SIZE(dap_cert_t *,l_wallet_internal->certs_count); size_t l_file_name_size = strlen(a_wallet_name)+strlen(a_wallets_path)+13; l_wallet_internal->file_name = DAP_NEW_Z_SIZE (char, l_file_name_size); dap_snprintf(l_wallet_internal->file_name,l_file_name_size,"%s/%s.dwallet",a_wallets_path,a_wallet_name); - l_wallet_internal->certs[0] = dap_chain_cert_generate_mem(a_wallet_name, - dap_chain_sign_type_to_key_type(a_sig_type)); - l_wallet_internal->addr = dap_chain_cert_to_addr (l_wallet_internal->certs[0],a_net_id); + l_wallet_internal->certs[0] = dap_cert_generate_mem(a_wallet_name, + dap_sign_type_to_key_type(a_sig_type)); + if ( dap_chain_wallet_save(l_wallet) == 0 ) return l_wallet; @@ -177,14 +176,28 @@ void dap_chain_wallet_close( dap_chain_wallet_t * a_wallet) /** * @brief dap_chain_wallet_get_addr * @param a_wallet + * @param a_net_id * @return */ -dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet) +dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet, dap_chain_net_id_t a_net_id) { if(!a_wallet) return NULL; DAP_CHAIN_WALLET_INTERNAL_LOCAL(a_wallet); - return l_wallet_internal->addr; + return a_net_id.uint64? dap_cert_to_addr (l_wallet_internal->certs[0], a_net_id) : NULL; +} + +/** + * @brief dap_cert_to_addr + * @param a_cert + * @param a_net_id + * @return + */ +dap_chain_addr_t * dap_cert_to_addr(dap_cert_t * a_cert, dap_chain_net_id_t a_net_id) +{ + dap_chain_addr_t * l_addr = DAP_NEW_Z(dap_chain_addr_t); + dap_chain_addr_fill(l_addr, a_cert->enc_key, &a_net_id); + return l_addr; } /** @@ -193,11 +206,11 @@ dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet) * @param a_pkey_idx * @return serialized object if success, NULL if not */ -dap_chain_pkey_t* dap_chain_wallet_get_pkey( dap_chain_wallet_t * a_wallet,uint32_t a_pkey_idx ) +dap_pkey_t* dap_chain_wallet_get_pkey( dap_chain_wallet_t * a_wallet,uint32_t a_pkey_idx ) { DAP_CHAIN_WALLET_INTERNAL_LOCAL(a_wallet); if( l_wallet_internal->certs_count > a_pkey_idx ){ - return dap_chain_cert_to_pkey(l_wallet_internal->certs[a_pkey_idx]); + return dap_cert_to_pkey(l_wallet_internal->certs[a_pkey_idx]); }else{ log_it( L_WARNING, "No pkey with index %u in the wallet (total size %u)",a_pkey_idx,l_wallet_internal->certs_count); return 0; @@ -252,7 +265,6 @@ int dap_chain_wallet_save(dap_chain_wallet_t * a_wallet) l_file_hdr.signature = DAP_CHAIN_WALLETS_FILE_SIGNATURE; l_file_hdr.type = 0; l_file_hdr.version = 1; - l_file_hdr.net_id = l_wallet_internal->addr->net_id; size_t i; // write header fwrite(&l_file_hdr,1,sizeof(l_file_hdr),l_file); @@ -264,8 +276,8 @@ int dap_chain_wallet_save(dap_chain_wallet_t * a_wallet) for ( i = 0; i < l_wallet_internal->certs_count ; i ++) { dap_chain_wallet_cert_hdr_t l_wallet_cert_hdr = {0}; l_wallet_cert_hdr.version = 1; - uint8_t * l_buf = dap_chain_cert_mem_save(l_wallet_internal->certs[i], &l_wallet_cert_hdr.cert_raw_size); - //l_wallet_cert_hdr.cert_raw_size = dap_chain_cert_save_mem_size( l_wallet_internal->certs[i] ); + uint8_t * l_buf = dap_cert_mem_save(l_wallet_internal->certs[i], &l_wallet_cert_hdr.cert_raw_size); + //l_wallet_cert_hdr.cert_raw_size = dap_cert_save_mem_size( l_wallet_internal->certs[i] ); //uint8_t * l_buf = DAP_NEW_SIZE (uint8_t, l_wallet_cert_hdr.cert_raw_size); fwrite( &l_wallet_cert_hdr,1, sizeof (l_wallet_cert_hdr), l_file); if ( l_buf ){ @@ -339,19 +351,16 @@ dap_chain_wallet_t * dap_chain_wallet_open_file(const char * a_file_name) } // read certs fseek(l_file,sizeof (l_file_hdr) + sizeof(uint16_t) + name_len,SEEK_SET); - l_wallet_internal->certs = DAP_NEW_Z_SIZE(dap_chain_cert_t *,l_wallet_internal->certs_count * sizeof(dap_chain_cert_t *)); + l_wallet_internal->certs = DAP_NEW_Z_SIZE(dap_cert_t *,l_wallet_internal->certs_count * sizeof(dap_cert_t *)); for (i = 0; i < l_wallet_internal->certs_count; i++ ){ dap_chain_wallet_cert_hdr_t l_cert_hdr={0}; fread(&l_cert_hdr,1,sizeof(l_cert_hdr),l_file); uint8_t * l_data = DAP_NEW_SIZE(uint8_t,l_cert_hdr.cert_raw_size); fread(l_data,1,l_cert_hdr.cert_raw_size,l_file); - l_wallet_internal->certs[i] = dap_chain_cert_mem_load(l_data,l_cert_hdr.cert_raw_size); + l_wallet_internal->certs[i] = dap_cert_mem_load(l_data,l_cert_hdr.cert_raw_size); DAP_DELETE (l_data); } fclose(l_file); - // make addr - if(l_wallet_internal->certs_count>0) - l_wallet_internal->addr = dap_chain_cert_to_addr (l_wallet_internal->certs[0], l_file_hdr.net_id); return l_wallet; } else { log_it(L_ERROR,"Wrong wallet file signature: corrupted file or wrong format"); diff --git a/dap_chain_wallet.h b/dap_chain_wallet.h index 19ebad978a549608bf72e1f3702ed1065ce43f4b..2dbb780c655876616b203504ea174be126fb06a2 100755 --- a/dap_chain_wallet.h +++ b/dap_chain_wallet.h @@ -25,8 +25,9 @@ #pragma once #include "dap_chain_common.h" #include "dap_enc_key.h" -#include "dap_chain_pkey.h" -#include "dap_chain_sign.h" +#include "dap_pkey.h" +#include "dap_sign.h" +#include "dap_cert.h" #include "dap_chain_net.h" typedef struct dap_chain_wallet{ @@ -36,22 +37,23 @@ typedef struct dap_chain_wallet{ } dap_chain_wallet_t; -int dap_chain_wallet_init(); -void dap_chain_wallet_deinit(); +int dap_chain_wallet_init(void); +void dap_chain_wallet_deinit(void); const char* dap_chain_wallet_get_path(dap_config_t * a_config); -dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_chain_net_id_t a_net_id, - dap_chain_sign_type_t a_sig_type); // Creates new one if not found +dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_sign_type_t a_sig_type); // Creates new one if not found dap_chain_wallet_t * dap_chain_wallet_open_file(const char * a_file_name); dap_chain_wallet_t * dap_chain_wallet_open(const char * a_wallet_name, const char * a_wallets_path); int dap_chain_wallet_save(dap_chain_wallet_t * a_wallet); void dap_chain_wallet_close( dap_chain_wallet_t * a_wallet); -dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet); +dap_chain_addr_t * dap_cert_to_addr(dap_cert_t * a_cert, dap_chain_net_id_t a_net_id); + +dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet, dap_chain_net_id_t a_net_id); size_t dap_chain_wallet_get_certs_number( dap_chain_wallet_t * a_wallet); -dap_chain_pkey_t * dap_chain_wallet_get_pkey( dap_chain_wallet_t * a_wallet,uint32_t a_key_idx); +dap_pkey_t * dap_chain_wallet_get_pkey( dap_chain_wallet_t * a_wallet,uint32_t a_key_idx); dap_enc_key_t * dap_chain_wallet_get_key( dap_chain_wallet_t * a_wallet,uint32_t a_key_idx); int dap_chain_wallet_save_file( dap_chain_wallet_t * a_wallet); diff --git a/dap_chain_wallet_internal.h b/dap_chain_wallet_internal.h index deb4aeb2e40884688de8c3f3b5132a721cd011d2..dfaaaf7a5bfcfc599d24b413bad980980da3100b 100755 --- a/dap_chain_wallet_internal.h +++ b/dap_chain_wallet_internal.h @@ -24,8 +24,8 @@ #pragma once -#include "dap_chain_cert.h" -#include "dap_chain_cert_file.h" +#include "dap_cert.h" +#include "dap_cert_file.h" #include "dap_chain_common.h" #include "dap_chain_wallet.h" @@ -39,14 +39,14 @@ typedef struct dap_chain_wallet_cert_hdr{ typedef struct dap_chain_wallet_cert{ dap_chain_wallet_cert_hdr_t header; - dap_chain_cert_file_t cert_raw; /// Raw certs data + dap_cert_file_t cert_raw; /// Raw certs data } DAP_ALIGN_PACKED dap_chain_wallet_cert_t; typedef struct dap_chain_wallet_file_hdr{ uint64_t signature; uint32_t version; uint8_t type; /// Wallets storage type 0x00 - uncompressed and unencrypted - dap_chain_net_id_t net_id; // Network where the wallet certificate is used + uint64_t padding; uint8_t certs[]; } DAP_ALIGN_PACKED dap_chain_wallet_file_hdr_t; @@ -61,7 +61,7 @@ typedef struct dap_chain_wallet_internal dap_chain_addr_t *addr; char * file_name; size_t certs_count; - dap_chain_cert_t ** certs; + dap_cert_t ** certs; } dap_chain_wallet_internal_t; #define DAP_CHAIN_WALLET_INTERNAL(a) ((dap_chain_wallet_internal_t *) a->_internal )