Skip to content
Snippets Groups Projects
Commit 6adf3996 authored by Dmitriy A. Gerasimov's avatar Dmitriy A. Gerasimov
Browse files

[+] More checks

parent 2bda9aaa
No related branches found
No related tags found
No related merge requests found
...@@ -133,13 +133,13 @@ uint8_t* dap_enc_dilithium_write_signature(dilithium_signature_t* a_sign, size_t ...@@ -133,13 +133,13 @@ uint8_t* dap_enc_dilithium_write_signature(dilithium_signature_t* a_sign, size_t
/* Deserialize a signature */ /* Deserialize a signature */
dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a_buflen) dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a_buflen)
{ {
if(!a_buf || a_buflen < (sizeof(size_t) + sizeof(dilithium_kind_t))) if( !a_buf || (a_buflen < (sizeof(size_t) + sizeof(dilithium_kind_t)) ) )
return NULL ; return NULL ;
dilithium_kind_t kind; dilithium_kind_t kind;
size_t l_buflen = 0; size_t l_buflen_internal = 0;
memcpy(&l_buflen, a_buf, sizeof(size_t)); memcpy(&l_buflen_internal, a_buf, sizeof(size_t));
memcpy(&kind, a_buf + sizeof(size_t), sizeof(dilithium_kind_t)); memcpy(&kind, a_buf + sizeof(size_t), sizeof(dilithium_kind_t));
if(l_buflen != a_buflen) if(l_buflen_internal != a_buflen)
return NULL ; return NULL ;
dilithium_param_t p; dilithium_param_t p;
if(!dilithium_params_init(&p, kind)) if(!dilithium_params_init(&p, kind))
......
...@@ -319,34 +319,50 @@ int dap_sign_verify(dap_sign_t * a_chain_sign, const void * a_data, const size_t ...@@ -319,34 +319,50 @@ int dap_sign_verify(dap_sign_t * a_chain_sign, const void * a_data, const size_t
{ {
int l_ret; int l_ret;
if (!a_chain_sign || !a_data) if (!a_chain_sign || !a_data)
return -1; return -2;
dap_enc_key_t * l_key = dap_sign_to_enc_key(a_chain_sign); dap_enc_key_t * l_key = dap_sign_to_enc_key(a_chain_sign);
size_t l_sign_size = a_chain_sign->header.sign_size;
size_t l_sign_ser_size; if ( ! l_key ){
uint8_t *l_sign_ser = dap_sign_get_sign(a_chain_sign, &l_sign_ser_size); log_it(L_WARNING,"Incorrect signature, can't extract key");
return -3;
}
size_t l_sign_data_ser_size;
uint8_t *l_sign_data_ser = dap_sign_get_sign(a_chain_sign, &l_sign_data_ser_size);
if ( ! l_sign_data_ser ){
log_it(L_WARNING,"Incorrect signature, can't extract serialized signature's data ");
return -4;
}
size_t l_sign_data_size = a_chain_sign->header.sign_size;
// deserialize signature // deserialize signature
uint8_t * l_sign = dap_enc_key_deserealize_sign(l_key->type, l_sign_ser, &l_sign_size); uint8_t * l_sign_data = dap_enc_key_deserealize_sign(l_key->type, l_sign_data_ser, &l_sign_data_size);
if ( ! l_sign_data ){
log_it(L_WARNING,"Incorrect signature, can't deserialize signature's data");
return -5;
}
//uint8_t * l_sign = a_chain_sign->pkey_n_sign + a_chain_sign->header.sign_pkey_size; //uint8_t * l_sign = a_chain_sign->pkey_n_sign + a_chain_sign->header.sign_pkey_size;
switch (l_key->type) { switch (l_key->type) {
case DAP_ENC_KEY_TYPE_SIG_TESLA: case DAP_ENC_KEY_TYPE_SIG_TESLA:
case DAP_ENC_KEY_TYPE_SIG_PICNIC: case DAP_ENC_KEY_TYPE_SIG_PICNIC:
case DAP_ENC_KEY_TYPE_SIG_DILITHIUM: case DAP_ENC_KEY_TYPE_SIG_DILITHIUM:
if(l_key->dec_na(l_key, a_data, a_data_size, l_sign, l_sign_size) > 0) if(l_key->dec_na(l_key, a_data, a_data_size, l_sign_data, l_sign_data_size) > 0)
l_ret = 0; l_ret = 0;
else else
l_ret = 1; l_ret = 1;
break; break;
case DAP_ENC_KEY_TYPE_SIG_BLISS: case DAP_ENC_KEY_TYPE_SIG_BLISS:
if(dap_enc_sig_bliss_verify_sign(l_key, a_data, a_data_size, l_sign, l_sign_size) != BLISS_B_NO_ERROR) if(dap_enc_sig_bliss_verify_sign(l_key, a_data, a_data_size, l_sign_data, l_sign_data_size) != BLISS_B_NO_ERROR)
l_ret = 0; l_ret = 0;
else else
l_ret = 1; l_ret = 1;
break; break;
default: default:
l_ret = -1; l_ret = -6;
} }
dap_enc_key_signature_delete(l_key->type, l_sign); dap_enc_key_signature_delete(l_key->type, l_sign_data);
dap_enc_key_delete(l_key); dap_enc_key_delete(l_key);
return l_ret; return l_ret;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment