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