diff --git a/dap-sdk/crypto/include/dap_enc_dilithium.h b/dap-sdk/crypto/include/dap_enc_dilithium.h index f79abef200251f939cacf876b13cc55c12fac7e8..4871227a8e8162659ebad1cd7074f2851a138f88 100755 --- a/dap-sdk/crypto/include/dap_enc_dilithium.h +++ b/dap-sdk/crypto/include/dap_enc_dilithium.h @@ -29,7 +29,7 @@ size_t dap_enc_dilithium_calc_signature_unserialized_size(void); static inline size_t dap_enc_dilithium_calc_signagture_size(dilithium_signature_t* a_sign) { - return sizeof(uint64_t) * 3 + a_sign->sig_len; + return sizeof(uint64_t) * 2 + sizeof(uint32_t) + a_sign->sig_len; } uint8_t* dap_enc_dilithium_write_signature(dilithium_signature_t* a_sign, size_t *a_sign_out); diff --git a/dap-sdk/crypto/src/dap_enc_dilithium.c b/dap-sdk/crypto/src/dap_enc_dilithium.c index a7538443a1b754852cf34ae8bc23867bd93d206c..4825ca399b987bba1d003d58816632a1d28a16dd 100755 --- a/dap-sdk/crypto/src/dap_enc_dilithium.c +++ b/dap-sdk/crypto/src/dap_enc_dilithium.c @@ -134,9 +134,9 @@ uint8_t* dap_enc_dilithium_write_signature(dilithium_signature_t* a_sign, size_t memcpy(l_buf, &l_buflen, sizeof(uint64_t)); l_shift_mem += sizeof(uint64_t); - uint64_t l_kind = a_sign->kind; - memcpy(l_buf + l_shift_mem, &l_kind, sizeof(uint64_t)); - l_shift_mem += sizeof(uint64_t); + uint32_t l_kind = a_sign->kind; + memcpy(l_buf + l_shift_mem, &l_kind, sizeof(uint32_t)); + l_shift_mem += sizeof(uint32_t); memcpy(l_buf + l_shift_mem, &a_sign->sig_len, sizeof(uint64_t)); l_shift_mem += sizeof(uint64_t); memcpy(l_buf + l_shift_mem, a_sign->sig_data, a_sign->sig_len ); @@ -154,29 +154,26 @@ dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a log_it(L_ERROR,"::read_signature() NULL buffer on input"); return NULL; } - if(a_buflen < sizeof(uint64_t) * 3){ + if(a_buflen < sizeof(uint64_t) * 2 + sizeof(uint32_t)){ log_it(L_ERROR,"::read_signature() Buflen %zd is smaller than first three fields(%zd)", a_buflen, - sizeof(uint64_t) * 3); + sizeof(uint64_t) * 2 + sizeof(uint32_t)); return NULL; } - uint64_t l_shift_mem = 0; - uint64_t kind; + uint32_t kind; uint64_t l_buflen = 0; memcpy(&l_buflen, a_buf, sizeof(uint64_t)); + uint64_t l_shift_mem = sizeof(uint64_t); if (l_buflen != a_buflen) { if (l_buflen << 32 >> 32 != a_buflen) { log_it(L_ERROR,"::read_public_key() Buflen field inside buffer is %"DAP_UINT64_FORMAT_U" when expected to be %"DAP_UINT64_FORMAT_U, l_buflen, (uint64_t)a_buflen); return NULL; - }else { - memcpy(&kind, a_buf + sizeof(uint32_t), sizeof(uint32_t)); - l_shift_mem = 2 * sizeof(uint32_t); // + sizeof(uint32_t) for old2 variant, oh } - } else { - memcpy(&kind, a_buf + sizeof(uint64_t), sizeof(uint64_t)); - l_shift_mem = 2 * sizeof(uint64_t); + l_shift_mem = sizeof(uint32_t); } + memcpy(&kind, a_buf + sizeof(uint32_t), sizeof(uint32_t)); + l_shift_mem += sizeof(uint32_t); dilithium_param_t p; if(!dilithium_params_init(&p, kind)) return NULL ; diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c index ff77a020c336b6e09d0f9ed8a82885483de67e4c..09a66dfb1312bc82119a9417d1fdf4efe558768b 100755 --- a/dap-sdk/crypto/src/dap_sign.c +++ b/dap-sdk/crypto/src/dap_sign.c @@ -374,8 +374,9 @@ int dap_sign_verify(dap_sign_t * a_chain_sign, const void * a_data, const size_t if ( ! l_sign_data ){ log_it(L_WARNING,"Incorrect signature, can't deserialize signature's data"); + l_sign_data_size = a_chain_sign->header.sign_size; + uint8_t * l_sign_data = dap_enc_key_deserealize_sign(l_key->type, l_sign_data_ser, &l_sign_data_size); dap_enc_key_delete(l_key); - dap_enc_key_signature_delete(l_key->type, l_sign_data); return -5; }