diff --git a/dap-sdk/crypto/src/dap_enc_key.c b/dap-sdk/crypto/src/dap_enc_key.c index 69aac3100950811fae7b7f007c85abaad88e5b2e..d105cb5c14ecb487c84e2b4753fb3352a5bf0b3c 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; }