X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Futils.c;h=c629ae0b50cd94a5b0169ca868e6f2c55357a525;hp=3b221f59f0ef731f62b0369314de5964bdf855fd;hb=c9084dfa2654349efcaffd51f120399f903f756a;hpb=09cdaab47ac84ce60669ac841683c710f56cc5a9 diff --git a/src/utils.c b/src/utils.c index 3b221f59..c629ae0b 100644 --- a/src/utils.c +++ b/src/utils.c @@ -78,3 +78,18 @@ unsigned int bitfield_to_int(const void *bitfield, size_t size) { memcpy(&value, bitfield, size); return value; } + +/** + * As memcmp(), but constant-time. + * Returns 0 when data is equal, non-zero otherwise. + */ +int memcmp_constant_time (const void *a, const void *b, size_t size) { + const uint8_t *a1 = a, *b1 = b; + int ret = 0; + size_t i; + + for (i = 0; i < size; i++) + ret |= *a1++ ^ *b1++; + + return ret; +}