diff --git a/dap-sdk b/dap-sdk index 19c0dd72cb192c0baabc45fc2ae57df0e15aedb8..0d874199566279240c67dfccaf29cc1640a82c92 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 19c0dd72cb192c0baabc45fc2ae57df0e15aedb8 +Subproject commit 0d874199566279240c67dfccaf29cc1640a82c92 diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 1aa3e20bb54dceb162c9417e96553195945ea925..9e84e2ca26f4cf5531ea4964965d0e30c68c3f6b 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -269,9 +269,11 @@ struct json_object *s_net_states_json_collect(dap_chain_net_t * l_net); static void s_net_states_notify(dap_chain_net_t * l_net); //static void s_net_proc_kill( dap_chain_net_t * a_net ); -int s_net_init(const char * a_net_name, uint16_t a_acl_idx); +static int s_net_init(const char * a_net_name, uint16_t a_acl_idx); -int s_net_load(dap_chain_net_t *a_net); +static int s_net_load(dap_chain_net_t *a_net); + +static int s_net_init_node_addr_cert(); // Notify callback for GlobalDB changes static void s_gbd_history_callback_notify(dap_global_db_context_t *a_context, dap_store_obj_t *a_obj, void *a_arg); @@ -342,6 +344,10 @@ int dap_chain_net_init() "\tPrint list of PoA cerificates for this network\n"); s_debug_more = dap_config_get_item_bool_default(g_config,"chain_net","debug_more",false); + if(s_net_init_node_addr_cert()) { + log_it(L_ERROR,"Error init node-addr cert"); + return -1; + } char * l_net_dir_str = dap_strdup_printf("%s/network", dap_config_path()); DIR * l_net_dir = opendir( l_net_dir_str); @@ -2551,34 +2557,13 @@ int s_net_init(const char * a_net_name, uint16_t a_acl_idx) uint8_t *l_pub_key_data = NULL; // read pub key - char *l_addr_key = dap_strdup_printf("node-addr-%s", l_net->pub.name); + char *l_addr_key = dap_strdup_printf("node-addr"); l_pub_key_data = dap_global_db_get_sync(GROUP_LOCAL_NODE_ADDR, l_addr_key, &l_pub_key_data_size, NULL, NULL); // generate a new pub key if it doesn't exist if(!l_pub_key_data || !l_pub_key_data_size){ - - const char * l_certs_name_str = l_addr_key; - dap_cert_t ** l_certs = NULL; - size_t l_certs_size = 0; - dap_cert_t * l_cert = NULL; - // Load certs or create if not found - if(!dap_cert_parse_str_list(l_certs_name_str, &l_certs, &l_certs_size)) { // Load certs - const char *l_cert_folder = dap_cert_get_folder(0); - // create new cert - if(l_cert_folder) { - char *l_cert_path = dap_strdup_printf("%s/%s.dcert", l_cert_folder, l_certs_name_str); - l_cert = dap_cert_generate(l_certs_name_str, l_cert_path, DAP_ENC_KEY_TYPE_SIG_DILITHIUM); - DAP_DELETE(l_cert_path); - } - } - if(l_certs_size > 0) - l_cert = l_certs[0]; - if(l_cert) { - l_pub_key_data = dap_enc_key_serialize_pub_key(l_cert->enc_key, &l_pub_key_data_size); - // save pub key - if(l_pub_key_data && l_pub_key_data_size > 0) - dap_global_db_set(GROUP_LOCAL_NODE_ADDR, l_addr_key, l_pub_key_data, l_pub_key_data_size, false, - NULL, NULL); - } + log_it(L_CRITICAL, "Memory allocation error"); + dap_config_close(l_cfg); + return -1; } // generate addr from pub_key dap_chain_hash_fast_t l_hash; @@ -3786,3 +3771,57 @@ char *dap_chain_net_links_dump(dap_chain_net_t *a_net) { dap_string_free(l_str_downlinks, true); return l_res_str; } + +/** + * @brief init node addr and set in gdb + * @param - + * @return 0 if no errors + */ +int s_net_init_node_addr_cert() +{ + dap_config_t *l_cfg = NULL; + dap_string_t *l_cfg_path = dap_string_new("cellframe-node"); + + if( !(l_cfg = dap_config_open(l_cfg_path->str)) ) { + log_it(L_ERROR,"Can't open default node config"); + dap_string_free(l_cfg_path,true); + return -1; + } + dap_string_free(l_cfg_path,true); + + const char * l_node_addr_type = dap_config_get_item_str_default(l_cfg , "general" ,"node_addr_type","auto"); + // use unique addr from pub key + size_t l_pub_key_data_size = 0; + uint8_t *l_pub_key_data = NULL; + + // read pub key + char *l_addr_key = dap_strdup_printf("node-addr"); + l_pub_key_data = dap_global_db_get_sync(GROUP_LOCAL_NODE_ADDR, l_addr_key, &l_pub_key_data_size, NULL, NULL); + // generate a new pub key if it doesn't exist + if(!l_pub_key_data || !l_pub_key_data_size) { + const char *l_certs_name_str = l_addr_key; + dap_cert_t **l_certs = NULL; + size_t l_certs_size = 0; + dap_cert_t *l_cert = NULL; + // Load certs or create if not found + if(!dap_cert_parse_str_list(l_certs_name_str, &l_certs, &l_certs_size)) { // Load certs + const char *l_cert_folder = dap_cert_get_folder(0); + // create new cert + if(l_cert_folder) { + char *l_cert_path = dap_strdup_printf("%s/%s.dcert", l_cert_folder, l_certs_name_str); + l_cert = dap_cert_generate(l_certs_name_str, l_cert_path, DAP_ENC_KEY_TYPE_SIG_DILITHIUM); + DAP_DELETE(l_cert_path); + } + } + if(l_certs_size > 0) + l_cert = l_certs[0]; + if(l_cert) { + l_pub_key_data = dap_enc_key_serialize_pub_key(l_cert->enc_key, &l_pub_key_data_size); + // save pub key + if(l_pub_key_data && l_pub_key_data_size > 0) + dap_global_db_set(GROUP_LOCAL_NODE_ADDR, l_addr_key, l_pub_key_data, l_pub_key_data_size, false, + NULL, NULL); + } + } + return 0; +} \ No newline at end of file