From 5bbac0460844ba6172fbd69d50b292e506ba0cbb Mon Sep 17 00:00:00 2001
From: Constantin Papizh <p.const@bk.ru>
Date: Fri, 11 Sep 2020 16:54:35 +0300
Subject: [PATCH] Dup func fixed

---
 dap-sdk/crypto/src/dap_enc_key.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/dap-sdk/crypto/src/dap_enc_key.c b/dap-sdk/crypto/src/dap_enc_key.c
index 69aac31009..d105cb5c14 100755
--- a/dap-sdk/crypto/src/dap_enc_key.c
+++ b/dap-sdk/crypto/src/dap_enc_key.c
@@ -639,18 +639,25 @@ dap_enc_key_serealize_t* dap_enc_key_serealize(dap_enc_key_t * key)
  */
 dap_enc_key_t* dap_enc_key_dup(dap_enc_key_t * a_key)
 {
-    dap_enc_key_t * l_ret = DAP_NEW_S_SIZE(dap_enc_key_t,sizeof(*l_ret) );
-    memcpy(l_ret,a_key,sizeof (*a_key));
-
-    l_ret->priv_key_data = DAP_NEW_Z_SIZE(byte_t, l_ret->priv_key_data_size);
-    memcpy(l_ret->priv_key_data, a_key->priv_key_data, a_key->priv_key_data_size);
-    l_ret->pub_key_data = DAP_NEW_Z_SIZE(byte_t, a_key->pub_key_data_size);
-    memcpy(l_ret->pub_key_data, a_key->pub_key_data, a_key->pub_key_data_size);
+    if (!a_key || a_key->type == DAP_ENC_KEY_TYPE_INVALID) {
+        return NULL;
+    }
+    dap_enc_key_t *l_ret = dap_enc_key_new(a_key->type);
+    if (l_ret->priv_key_data_size) {
+        l_ret->priv_key_data = DAP_NEW_Z_SIZE(byte_t, a_key->priv_key_data_size);
+        l_ret->priv_key_data_size = a_key->priv_key_data_size;
+        memcpy(l_ret->priv_key_data, a_key->priv_key_data, a_key->priv_key_data_size);
+    }
+    if (a_key->pub_key_data_size) {
+        l_ret->pub_key_data = DAP_NEW_Z_SIZE(byte_t, a_key->pub_key_data_size);
+        l_ret->pub_key_data_size =  a_key->pub_key_data_size;
+        memcpy(l_ret->pub_key_data, a_key->pub_key_data, a_key->pub_key_data_size);
+    }
     if(a_key->_inheritor_size) {
-        l_ret->_inheritor = DAP_NEW_Z_SIZE(byte_t, a_key->_inheritor_size );
+        l_ret->_inheritor = DAP_NEW_Z_SIZE(byte_t, a_key->_inheritor_size);
+        l_ret->_inheritor_size = a_key->_inheritor_size;
         memcpy(l_ret->_inheritor, a_key->_inheritor, a_key->_inheritor_size);
     }
-
     return l_ret;
 }
 
-- 
GitLab