From 7bc11c65cf2f7a9ba5dc06e3075d39e7f74a9f6e Mon Sep 17 00:00:00 2001 From: "Ruslan (The BadAss SysMan) Laishev" <ruslan.laishev@demlabs.net> Date: Mon, 28 Feb 2022 22:01:19 +0300 Subject: [PATCH] bugfix-5737 - Improved UUID generation by using GCC atomic. --- dap-sdk/crypto/src/dap_uuid.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/dap-sdk/crypto/src/dap_uuid.c b/dap-sdk/crypto/src/dap_uuid.c index 0a9138563e..ac4a130496 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)); -- GitLab