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

[!] More crypto fixes

parent 61e4df79
No related branches found
No related tags found
No related merge requests found
Pipeline #6971 passed with stage
in 11 seconds
......@@ -2,7 +2,7 @@ project(cellframe-sdk C)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_C_STANDARD 11)
set(CELLFRAME_SDK_NATIVE_VERSION "2.6-105")
set(CELLFRAME_SDK_NATIVE_VERSION "2.6-106")
add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
set(DAPSDK_MODULES "")
......
......@@ -164,7 +164,7 @@ dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a
l_shift_mem += sizeof(uint64_t);
memcpy(&kind, a_buf + l_shift_mem, sizeof(dilithium_kind_t));
l_shift_mem += sizeof (dilithium_kind_t);
if(l_buflen_internal != a_buflen)
if(l_buflen_internal != (uint64_t) a_buflen)
return NULL ;
dilithium_param_t p;
if(!dilithium_params_init(&p, kind))
......@@ -176,17 +176,17 @@ dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a
l_shift_mem += sizeof(uint64_t);
if( l_sign->sig_len> (UINT64_MAX - l_shift_mem ) ){
log_it(L_ERROR,"::read_signature() Buflen inside signature %zd is too big ", l_sign->sig_len);
log_it(L_ERROR,"::read_signature() Buflen inside signature %"DAP_UINT64_FORMAT_u" is too big ", l_sign->sig_len);
return NULL;
}
// Dirty hack for old 32 bit version serializations
if( l_sign->sig_len + l_shift_mem + 8 == a_buflen ){
if( l_sign->sig_len + l_shift_mem + 8 == (uint64_t) a_buflen ){
return dap_enc_dilithium_read_signature_old(a_buf,a_buflen);
}
if( a_buflen < (l_shift_mem + l_sign->sig_len) ){
log_it(L_ERROR,"::read_signature() Buflen %zd is smaller than all fields together(%zd)", a_buflen,
if( (uint64_t) a_buflen < (l_shift_mem + l_sign->sig_len) ){
log_it(L_ERROR,"::read_signature() Buflen %zd is smaller than all fields together(%"DAP_UINT64_FORMAT_u")", a_buflen,
l_shift_mem + l_sign->sig_len );
return NULL;
}
......@@ -194,7 +194,7 @@ dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a
l_sign->sig_data = DAP_NEW_SIZE(unsigned char, l_sign->sig_len);
if (!l_sign->sig_data)
log_it(L_ERROR,"::read_signature() Can't allocate sig_data %zd size", l_sign->sig_len);
log_it(L_ERROR,"::read_signature() Can't allocate sig_data %"DAP_UINT64_FORMAT_u" size", l_sign->sig_len);
memcpy(l_sign->sig_data, a_buf + l_shift_mem, l_sign->sig_len);
l_shift_mem += l_sign->sig_len;
......@@ -209,13 +209,13 @@ dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a
*/
dilithium_signature_t* dap_enc_dilithium_read_signature_old(uint8_t *a_buf, size_t a_buflen)
{
if( !a_buf || (a_buflen < (sizeof(uint32_t) + sizeof(dilithium_kind_t)) ) )
if( !a_buf || (a_buflen < (sizeof(uint32_t) + sizeof(uint32_t)) ) )
return NULL ;
dilithium_kind_t kind;
uint32_t kind;
uint32_t l_buflen_internal = 0;
memcpy(&l_buflen_internal, a_buf, sizeof(uint32_t));
memcpy(&kind, a_buf + sizeof(uint32_t), sizeof(dilithium_kind_t));
if(l_buflen_internal != a_buflen)
memcpy(&kind, a_buf + sizeof(uint32_t), sizeof(uint32_t));
if(l_buflen_internal != (uint32_t) a_buflen)
return NULL ;
dilithium_param_t p;
if(!dilithium_params_init(&p, kind))
......@@ -223,10 +223,24 @@ dilithium_signature_t* dap_enc_dilithium_read_signature_old(uint8_t *a_buf, size
dilithium_signature_t* l_sign = DAP_NEW(dilithium_signature_t);
l_sign->kind = kind;
size_t l_shift_mem = sizeof(uint32_t) + sizeof(dilithium_kind_t);
uint64_t l_shift_mem = sizeof(uint32_t) + sizeof(uint32_t);
memcpy(&l_sign->sig_len, a_buf + l_shift_mem, sizeof(unsigned long long));
if( l_sign->sig_len> (UINT64_MAX - l_shift_mem ) ){
log_it(L_ERROR,"::read_signature_old() Buflen inside signature %"DAP_UINT64_FORMAT_u" is too big ", l_sign->sig_len);
return NULL;
}
if( (uint64_t) a_buflen < (l_shift_mem + l_sign->sig_len) ){
log_it(L_ERROR,"::read_signature_old() Buflen %zd is smaller than all fields together(%" DAP_UINT64_FORMAT_u")", a_buflen,
l_shift_mem + l_sign->sig_len );
return NULL;
}
l_shift_mem += sizeof(unsigned long long);
l_sign->sig_data = DAP_NEW_SIZE(unsigned char, l_sign->sig_len);
if (!l_sign->sig_data)
log_it(L_ERROR,"::read_signature_old() Can't allocate sig_data %"DAP_UINT64_FORMAT_u" size", l_sign->sig_len);
memcpy(l_sign->sig_data, a_buf + l_shift_mem, l_sign->sig_len);
l_shift_mem += l_sign->sig_len;
return l_sign;
......@@ -288,7 +302,7 @@ dilithium_private_key_t* dap_enc_dilithium_read_private_key(const uint8_t *a_buf
uint64_t l_buflen = 0;
memcpy(&l_buflen, a_buf, sizeof(uint64_t));
memcpy(&kind, a_buf + sizeof(uint64_t), sizeof(dilithium_kind_t));
if(l_buflen != a_buflen)
if(l_buflen != (uint64_t) a_buflen)
return NULL;
dilithium_param_t p;
if(!dilithium_params_init(&p, kind))
......@@ -311,20 +325,20 @@ dilithium_private_key_t* dap_enc_dilithium_read_private_key(const uint8_t *a_buf
/* Deserialize a private key. */
dilithium_private_key_t* dap_enc_dilithium_read_private_key_old(const uint8_t *a_buf, size_t a_buflen)
{
if(!a_buf || a_buflen < (sizeof(uint32_t) + sizeof(dilithium_kind_t)))
if(!a_buf || a_buflen < (sizeof(uint32_t) + sizeof(uint32_t)))
return NULL;
dilithium_kind_t kind;
uint32_t l_buflen = 0;
memcpy(&l_buflen, a_buf, sizeof(uint32_t));
memcpy(&kind, a_buf + sizeof(uint32_t), sizeof(dilithium_kind_t));
if(l_buflen != a_buflen)
memcpy(&kind, a_buf + sizeof(uint32_t), sizeof(uint32_t));
if(l_buflen != (uint32_t) a_buflen)
return NULL;
dilithium_param_t p;
if(!dilithium_params_init(&p, kind))
return NULL;
if(a_buflen < (sizeof(uint64_t) + sizeof(dilithium_kind_t) + p.CRYPTO_SECRETKEYBYTES ) ){
if(a_buflen < (sizeof(uint32_t) + sizeof(uint32_t) + p.CRYPTO_SECRETKEYBYTES ) ){
log_it(L_ERROR,"::read_private_key() Buflen %zd is smaller than all fields together(%zd)", a_buflen,
sizeof(uint64_t) + sizeof(dilithium_kind_t) + p.CRYPTO_SECRETKEYBYTES );
sizeof(uint32_t) + sizeof(uint32_t) + p.CRYPTO_SECRETKEYBYTES );
return NULL;
}
......@@ -332,7 +346,7 @@ dilithium_private_key_t* dap_enc_dilithium_read_private_key_old(const uint8_t *a
l_private_key->kind = kind;
l_private_key->data = DAP_NEW_SIZE(unsigned char, p.CRYPTO_SECRETKEYBYTES);
memcpy(l_private_key->data, a_buf + sizeof(uint32_t) + sizeof(dilithium_kind_t), p.CRYPTO_SECRETKEYBYTES);
memcpy(l_private_key->data, a_buf + sizeof(uint32_t) + sizeof(uint32_t), p.CRYPTO_SECRETKEYBYTES);
return l_private_key;
}
......@@ -343,7 +357,7 @@ dilithium_public_key_t* dap_enc_dilithium_read_public_key(const uint8_t *a_buf,
log_it(L_ERROR,"::read_public_key() NULL buffer on input");
return NULL;
}
if(a_buflen < (sizeof(uint64_t) + sizeof(dilithium_kind_t))){
if( a_buflen < (sizeof(uint64_t) + sizeof(dilithium_kind_t))){
log_it(L_ERROR,"::read_public_key() Buflen %zd is smaller than first two fields(%zd)", a_buflen,sizeof(uint64_t) + sizeof(dilithium_kind_t) );
return NULL;
}
......@@ -352,8 +366,10 @@ dilithium_public_key_t* dap_enc_dilithium_read_public_key(const uint8_t *a_buf,
uint64_t l_buflen = 0;
memcpy(&l_buflen, a_buf, sizeof(uint64_t));
memcpy(&kind, a_buf + sizeof(uint64_t), sizeof(dilithium_kind_t));
if(l_buflen != a_buflen){
log_it(L_ERROR,"::read_public_key() Buflen field inside buffer is %u when expected to be %u", l_buflen, a_buflen);
if(l_buflen != (uint64_t) 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;
}
dilithium_param_t p;
......@@ -403,16 +419,16 @@ dilithium_public_key_t* dap_enc_dilithium_read_public_key_old(const uint8_t *a_b
log_it(L_ERROR,"::read_public_key() NULL buffer on input");
return NULL;
}
if(a_buflen < (sizeof(uint64_t) + sizeof(dilithium_kind_t))){
log_it(L_ERROR,"::read_public_key() Buflen %zd is smaller than first two fields(%zd)", a_buflen,sizeof(uint64_t) + sizeof(dilithium_kind_t) );
if(a_buflen < (sizeof(uint32_t) + sizeof(uint32_t))){
log_it(L_ERROR,"::read_public_key() Buflen %zd is smaller than first two fields(%zd)", a_buflen,sizeof(uint32_t) + sizeof(uint32_t) );
return NULL;
}
dilithium_kind_t kind;
uint32_t kind;
uint32_t l_buflen = 0;
memcpy(&l_buflen, a_buf, sizeof(uint32_t));
memcpy(&kind, a_buf + sizeof(uint32_t), sizeof(dilithium_kind_t));
if(l_buflen != a_buflen)
memcpy(&kind, a_buf + sizeof(uint32_t), sizeof(uint32_t));
if(l_buflen != (uint32_t) a_buflen)
return NULL;
dilithium_param_t p;
if(!dilithium_params_init(&p, kind)){
......@@ -420,9 +436,9 @@ dilithium_public_key_t* dap_enc_dilithium_read_public_key_old(const uint8_t *a_b
return NULL;
}
if(a_buflen < (sizeof(uint64_t) + sizeof(dilithium_kind_t) + p.CRYPTO_PUBLICKEYBYTES ) ){
if(a_buflen < (sizeof(uint32_t) + sizeof(uint32_t) + p.CRYPTO_PUBLICKEYBYTES ) ){
log_it(L_ERROR,"::read_public_key_old() Buflen %zd is smaller than all fields together(%zd)", a_buflen,
sizeof(uint64_t) + sizeof(dilithium_kind_t) + p.CRYPTO_PUBLICKEYBYTES );
sizeof(uint32_t) + sizeof(uint32_t) + p.CRYPTO_PUBLICKEYBYTES );
return NULL;
}
......
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