From 2c5cb7e34e5c7092c6a0b972be58e4607b52d704 Mon Sep 17 00:00:00 2001 From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net> Date: Mon, 18 Nov 2019 15:09:27 +0700 Subject: [PATCH] [-] Wallet address is removed from file, field in structure replaced with padding to keep compatibility [*] New wallet is created without, wallet address is getting with network id --- dap_chain_wallet.c | 14 +++++--------- dap_chain_wallet.h | 5 ++--- dap_chain_wallet_internal.h | 2 +- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/dap_chain_wallet.c b/dap_chain_wallet.c index 0c5fca8..c2e6a80 100755 --- a/dap_chain_wallet.c +++ b/dap_chain_wallet.c @@ -131,8 +131,7 @@ 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_chain_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); @@ -147,7 +146,7 @@ dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const c 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); + if ( dap_chain_wallet_save(l_wallet) == 0 ) return l_wallet; @@ -177,14 +176,15 @@ 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_chain_cert_to_addr (l_wallet_internal->certs[0], a_net_id) : NULL; } /** @@ -252,7 +252,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); @@ -349,9 +348,6 @@ dap_chain_wallet_t * dap_chain_wallet_open_file(const char * a_file_name) 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 19ebad9..e838b3c 100755 --- a/dap_chain_wallet.h +++ b/dap_chain_wallet.h @@ -41,15 +41,14 @@ void dap_chain_wallet_deinit(); 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_chain_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_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_enc_key_t * dap_chain_wallet_get_key( dap_chain_wallet_t * a_wallet,uint32_t a_key_idx); diff --git a/dap_chain_wallet_internal.h b/dap_chain_wallet_internal.h index deb4aeb..3657b78 100755 --- a/dap_chain_wallet_internal.h +++ b/dap_chain_wallet_internal.h @@ -46,7 +46,7 @@ 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; -- GitLab