Skip to content

Commit e57f5eb

Browse files
committed
utils: delete handrolled constant time comparison function in favor of sodium_memcmp
1 parent 4c00de9 commit e57f5eb

File tree

6 files changed

+3
-79
lines changed

6 files changed

+3
-79
lines changed

CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ add_executable(datum_gateway
3333
src/datum_stratum_tests.c
3434
src/datum_submitblock.c
3535
src/datum_utils.c
36-
src/datum_utils_tests.c
3736
src/thirdparty_base58.c
3837
src/thirdparty_segwit_addr.c
3938
${CMAKE_CURRENT_BINARY_DIR}/web_resources.h

src/datum_api.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
#include <assert.h>
3939
#include <limits.h>
40+
#include <sodium.h>
4041
#include <stdio.h>
4142
#include <stdlib.h>
4243
#include <string.h>
@@ -431,7 +432,7 @@ int datum_api_do_error(struct MHD_Connection * const connection, const unsigned
431432
}
432433

433434
bool datum_api_check_admin_password_only(struct MHD_Connection * const connection, const char * const password, const create_response_func_t auth_failure_response_creator) {
434-
if (datum_secure_strequals(datum_config.api_admin_password, datum_config.api_admin_password_len, password) && datum_config.api_admin_password_len) {
435+
if (sodium_memcmp(datum_config.api_admin_password, password, datum_config.api_admin_password_len) && datum_config.api_admin_password_len) {
435436
return true;
436437
}
437438
DLOG_DEBUG("Wrong password in request");
@@ -491,7 +492,7 @@ bool datum_api_check_admin_password(struct MHD_Connection * const connection, co
491492
datum_api_submit_uncached_response(connection, MHD_HTTP_FORBIDDEN, auth_failure_response_creator());
492493
return false;
493494
}
494-
if (!datum_secure_strequals(datum_config.api_csrf_token, sizeof(datum_config.api_csrf_token)-1, json_string_value(j_csrf))) {
495+
if (!sodium_memcmp(datum_config.api_csrf_token, json_string_value(j_csrf), sizeof(datum_config.api_csrf_token)-1)) {
495496
DLOG_DEBUG("Wrong CSRF token in request");
496497
datum_api_submit_uncached_response(connection, MHD_HTTP_FORBIDDEN, auth_failure_response_creator());
497498
return false;

src/datum_gateway.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ struct arguments {
8383

8484
void datum_stratum_tests(void);
8585
void datum_conf_tests(void);
86-
void datum_utils_tests(void);
8786

8887
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
8988
struct arguments *arguments = state->input;
@@ -103,7 +102,6 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
103102
exit(0);
104103
break;
105104
case 0x101: // test
106-
datum_utils_tests();
107105
datum_conf_tests();
108106
datum_stratum_tests();
109107
exit(datum_test_failed);

src/datum_utils.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -825,19 +825,6 @@ void datum_reexec() {
825825
abort();
826826
}
827827

828-
bool datum_secure_strequals(const char *secret, size_t secret_len, const char *guess) {
829-
const size_t guess_len = strlen(guess);
830-
size_t acc = secret_len ^ guess_len;
831-
if (!secret_len) {
832-
secret = ""; // null byte avoids dereferencing out of bounds
833-
secret_len = 1;
834-
}
835-
for (size_t i = 0; i < guess_len; ++i) {
836-
acc |= ((size_t)guess[i]) ^ ((size_t)secret[i % secret_len]);
837-
}
838-
return !acc;
839-
}
840-
841828
const char *dynamic_hash_unit(double * const inout_hashrate){
842829
if (*inout_hashrate >= 1000000.0) {
843830
*inout_hashrate /= 1000000.0;

src/datum_utils.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ int datum_atoi_strict(const char *s, size_t size);
8686
bool datum_str_to_bool_strict(const char *s, bool *out);
8787
char **datum_deepcopy_charpp(const char * const *p);
8888
void datum_reexec();
89-
bool datum_secure_strequals(const char *secret, const size_t secret_len, const char *guess);
9089
const char *dynamic_hash_unit(double *inout_hashrate);
9190

9291

src/datum_utils_tests.c

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)