From 95c55df38eacca2468fe20b74edc903f8094caa0 Mon Sep 17 00:00:00 2001 From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net> Date: Fri, 22 Feb 2019 18:03:51 +0700 Subject: [PATCH] [+] Extract sign by number from event --- dap_chain_cs_dag_event.c | 24 ++++++++++++++++++++++++ dap_chain_cs_dag_event.h | 6 ++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/dap_chain_cs_dag_event.c b/dap_chain_cs_dag_event.c index 4987b27..94aa4ad 100644 --- a/dap_chain_cs_dag_event.c +++ b/dap_chain_cs_dag_event.c @@ -24,6 +24,9 @@ #include "dap_common.h" #include "dap_enc_key.h" + +#include "dap_chain_sign.h" + #include "dap_chain_datum.h" #include "dap_chain_cs_dag.h" #include "dap_chain_cs_dag_event.h" @@ -88,3 +91,24 @@ dap_chain_datum_t* dap_chain_cs_dag_event_get_datum(dap_chain_cs_dag_event_t * a return (dap_chain_datum_t*) l_signs+l_signs_offset; } +/** + * @brief dap_chain_cs_dag_event_get_sign + * @param a_event + * @param a_sign_number + * @return + */ +dap_chain_sign_t * dap_chain_cs_dag_event_get_sign( dap_chain_cs_dag_event_t * a_event, uint16_t a_sign_number) +{ + if (a_event->header.signs_count < a_sign_number ){ + uint8_t * l_signs = a_event->hashes_n_signs_n_datum + +a_event->header.hash_count*sizeof(dap_chain_hash_fast_t); + uint16_t l_signs_offset = 0; + uint16_t l_signs_passed; + for ( l_signs_passed=0; l_signs_passed < a_sign_number; l_signs_passed++){ + dap_chain_sign_t * l_sign = (dap_chain_sign_t *) l_signs+l_signs_offset; + l_signs_offset+=l_sign->header.sign_pkey_size+l_sign->header.sign_size+sizeof(l_sign->header); + } + return (dap_chain_sign_t*) l_signs + l_signs_offset; + }else + return NULL; +} diff --git a/dap_chain_cs_dag_event.h b/dap_chain_cs_dag_event.h index 5833783..0d02264 100644 --- a/dap_chain_cs_dag_event.h +++ b/dap_chain_cs_dag_event.h @@ -23,9 +23,10 @@ */ #pragma once +#include "dap_enc_key.h" #include "dap_chain_common.h" #include "dap_chain_datum.h" - +#include "dap_chain_sign.h" typedef struct dap_chain_cs_dag dap_chain_cs_dag_t; @@ -43,7 +44,8 @@ typedef struct dap_chain_cs_dag_event { dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_new(dap_chain_cs_dag_t * a_dag, dap_chain_datum_t * a_datum, dap_enc_key_t * a_key, dap_chain_hash_fast_t * a_hashes, size_t a_hashes_count); + void dap_chain_cs_dag_event_delete(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_event); dap_chain_datum_t* dap_chain_cs_dag_event_get_datum(dap_chain_cs_dag_event_t * a_event); - +dap_chain_sign_t * dap_chain_cs_dag_event_get_sign( dap_chain_cs_dag_event_t * a_event, uint16_t a_sign_number); -- GitLab