diff --git a/dap-sdk/crypto/src/dap_uuid.c b/dap-sdk/crypto/src/dap_uuid.c index 0a9138563ed87744d884c0b0a3ee01a17876d3de..ac4a1304962e06ce0b9b4f2e3f109046f33c9a0f 100644 --- a/dap-sdk/crypto/src/dap_uuid.c +++ b/dap-sdk/crypto/src/dap_uuid.c @@ -22,6 +22,7 @@ */ #include <time.h> #include <stdatomic.h> + #include "KeccakHash.h" #include "SimpleFIPS202.h" #include "dap_uuid.h" @@ -30,8 +31,7 @@ #define LOG_TAG "dap_uuid" -atomic_uint_fast32_t s_global_counter32=0; -atomic_uint_fast16_t s_global_counter16=0; +static atomic_uint_fast32_t s_global_counter = 0; /** * @brief dap_uuid_generate_ui64 @@ -41,10 +41,10 @@ atomic_uint_fast16_t s_global_counter16=0; uint128_t dap_uuid_generate_uint128() { uint32_t l_input[4] ={ - [0]=random_uint32_t(UINT32_MAX), - [1]=time(NULL), - [2]=s_global_counter32++, - [3]=random_uint32_t(UINT32_MAX) + [0] = random_uint32_t(UINT32_MAX), + [1] = time(NULL), + [2] = atomic_fetch_add(&s_global_counter, 1), + [3] = random_uint32_t(UINT32_MAX) }; uint128_t l_output; SHAKE128((unsigned char *) &l_output,sizeof (l_output), (unsigned char*) &l_input,sizeof (l_input)); @@ -61,11 +61,11 @@ uint128_t dap_uuid_generate_uint128() uint64_t dap_uuid_generate_uint64() { uint32_t l_ts = (uint32_t) time(NULL); - uint16_t l_input[4] ={ - [0]=dap_random_uint16(), - [1]= l_ts % UINT16_MAX, - [2]= s_global_counter16++, - [3]= dap_random_uint16() + uint16_t l_input[4] = { + [0] = dap_random_uint16(), + [1] = time(NULL) & UINT16_MAX, /* time(NULL) % UINT16_MAX */ + [2] = (uint16_t) atomic_fetch_add(&s_global_counter, 1), + [3] = dap_random_uint16() }; uint64_t l_output; SHAKE128((unsigned char *) &l_output,sizeof (l_output), (unsigned char*) &l_input,sizeof (l_input));