From 2aa67951ec876f992ab15701950916ef7a623934 Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Wed, 1 Dec 2021 14:30:58 +0300 Subject: [PATCH] [*] Pub certs for PoA chaining --- .../block-poa/dap_chain_cs_block_poa.c | 14 ++++++++------ .../block-pos/dap_chain_cs_block_pos.c | 2 +- .../consensus/dag-poa/dap_chain_cs_dag_poa.c | 12 +++++++----- .../consensus/dag-pos/dap_chain_cs_dag_pos.c | 19 ++++++++++--------- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/modules/consensus/block-poa/dap_chain_cs_block_poa.c b/modules/consensus/block-poa/dap_chain_cs_block_poa.c index aa93918c49..f6725f0474 100644 --- a/modules/consensus/block-poa/dap_chain_cs_block_poa.c +++ b/modules/consensus/block-poa/dap_chain_cs_block_poa.c @@ -190,13 +190,15 @@ static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) l_poa_pvt->auth_certs = DAP_NEW_Z_SIZE ( dap_cert_t *, l_poa_pvt->auth_certs_count * sizeof(dap_cert_t)); char l_cert_name[512]; for (size_t i = 0; i < l_poa_pvt->auth_certs_count ; i++ ){ - dap_snprintf(l_cert_name,sizeof(l_cert_name),"%s.%lu",l_poa_pvt->auth_certs_prefix, i); - if ( (l_poa_pvt->auth_certs[i] = dap_cert_find_by_name( l_cert_name)) != NULL ) { - log_it(L_NOTICE, "Initialized auth cert \"%s\"", l_cert_name); - } else{ - log_it(L_ERROR, "Can't find cert \"%s\"", l_cert_name); - return -1; + dap_snprintf(l_cert_name,sizeof(l_cert_name),"%s.%zu",l_poa_pvt->auth_certs_prefix, i); + if ((l_poa_pvt->auth_certs[i] = dap_cert_find_by_name( l_cert_name)) == NULL) { + dap_snprintf(l_cert_name,sizeof(l_cert_name),"%s.%zu.pub",l_poa_pvt->auth_certs_prefix, i); + if ((l_poa_pvt->auth_certs[i] = dap_cert_find_by_name( l_cert_name)) == NULL) { + log_it(L_ERROR, "Can't find cert \"%s\"", l_cert_name); + return -1; + } } + log_it(L_NOTICE, "Initialized auth cert \"%s\"", l_cert_name); } } } diff --git a/modules/consensus/block-pos/dap_chain_cs_block_pos.c b/modules/consensus/block-pos/dap_chain_cs_block_pos.c index 90ffe94de3..6d3973d71e 100644 --- a/modules/consensus/block-pos/dap_chain_cs_block_pos.c +++ b/modules/consensus/block-pos/dap_chain_cs_block_pos.c @@ -146,7 +146,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf dap_chain_cs_block_pos_t *l_pos = DAP_CHAIN_CS_BLOCK_POS(l_blocks); const char * l_sign_cert_str = NULL; - if ( ( l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg,"block-pos","sign-cert") ) != NULL ) { + if ((l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg,"block-pos","sign-cert")) != NULL) { dap_cert_t *l_sign_cert = dap_cert_find_by_name(l_sign_cert_str); if (l_sign_cert == NULL) { log_it(L_ERROR, "Can't load sign certificate, name \"%s\" is wrong", l_sign_cert_str); diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c index ef2ef81218..766da49dfc 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -268,12 +268,14 @@ static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) char l_cert_name[512]; for (size_t i = 0; i < l_poa_pvt->auth_certs_count ; i++ ){ dap_snprintf(l_cert_name,sizeof(l_cert_name),"%s.%zu",l_poa_pvt->auth_certs_prefix, i); - if ( (l_poa_pvt->auth_certs[i] = dap_cert_find_by_name( l_cert_name)) != NULL ) { - log_it(L_NOTICE, "Initialized auth cert \"%s\"", l_cert_name); - } else{ - log_it(L_ERROR, "Can't find cert \"%s\"", l_cert_name); - return -1; + if ((l_poa_pvt->auth_certs[i] = dap_cert_find_by_name( l_cert_name)) == NULL) { + dap_snprintf(l_cert_name,sizeof(l_cert_name),"%s.%zu.pub",l_poa_pvt->auth_certs_prefix, i); + if ((l_poa_pvt->auth_certs[i] = dap_cert_find_by_name( l_cert_name)) == NULL) { + log_it(L_ERROR, "Can't find cert \"%s\"", l_cert_name); + return -1; + } } + log_it(L_NOTICE, "Initialized auth cert \"%s\"", l_cert_name); } } } diff --git a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c index 367d76b0e5..41a169960b 100644 --- a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c +++ b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c @@ -146,18 +146,19 @@ static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_net_c dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG ( a_chain ); dap_chain_cs_dag_pos_t * l_pos = DAP_CHAIN_CS_DAG_POS( l_dag ); - const char * l_events_sign_wallet = NULL; - if ( ( l_events_sign_wallet = dap_config_get_item_str(a_chain_net_cfg,"dag-pos","events-sign-wallet") ) != NULL ) { - - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_events_sign_wallet, dap_chain_wallet_get_path(g_config)); - if (!l_wallet) { - log_it(L_ERROR,"Can't load events sign wallet, name \"%s\" is wrong", l_events_sign_wallet); + const char * l_sign_cert_str = NULL; + if ((l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg, "dag-pos", "sign-cert")) != NULL) { + dap_cert_t *l_sign_cert = dap_cert_find_by_name(l_sign_cert_str); + if (l_sign_cert == NULL) { + log_it(L_ERROR, "Can't load sign certificate, name \"%s\" is wrong", l_sign_cert_str); + } else if (l_sign_cert->enc_key->priv_key_data) { + PVT(l_pos)->events_sign_key = l_sign_cert->enc_key; + log_it(L_NOTICE, "Loaded \"%s\" certificate to sign PoS events", l_sign_cert_str); } else { - PVT(l_pos)->events_sign_key = dap_chain_wallet_get_key(l_wallet, 0); - log_it(L_NOTICE,"Loaded \"%s\" wallet to sign pos event", l_events_sign_wallet); + log_it(L_ERROR, "Certificate \"%s\" has no private key", l_sign_cert_str); } } else { - log_it(L_WARNING, "Events sign wallet is empty for %s chain, can't sing any events for it", a_chain->name); + log_it(L_ERROR, "No sign certificate provided, can't sign any events"); } return 0; } -- GitLab