diff options
author | Martin Willi <martin@revosec.ch> | 2015-04-11 16:44:18 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2015-04-14 11:51:54 +0200 |
commit | b833963270fbffe3186f5c71c7584c2347a44038 (patch) | |
tree | 75e2d440ec3f27ca6f25b899c592e51258e21c26 /src/libstrongswan/utils/utils.c | |
parent | 39e1ddec2ed3480e0edc07bbabfacbf907dc4e3f (diff) | |
download | strongswan-b833963270fbffe3186f5c71c7584c2347a44038.tar.bz2 strongswan-b833963270fbffe3186f5c71c7584c2347a44038.tar.xz |
utils: Add a constant time memeq() variant for cryptographic purposes
Diffstat (limited to 'src/libstrongswan/utils/utils.c')
-rw-r--r-- | src/libstrongswan/utils/utils.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/libstrongswan/utils/utils.c b/src/libstrongswan/utils/utils.c index 02a720945..3d5e3dfc9 100644 --- a/src/libstrongswan/utils/utils.c +++ b/src/libstrongswan/utils/utils.c @@ -112,6 +112,25 @@ void memwipe_noinline(void *ptr, size_t n) /** * Described in header. */ +bool memeq_const(const void *x, const void *y, size_t len) +{ + const u_char *a, *b; + u_int bad = 0; + size_t i; + + a = (const u_char*)x; + b = (const u_char*)y; + + for (i = 0; i < len; i++) + { + bad |= a[i] != b[i]; + } + return !bad; +} + +/** + * Described in header. + */ void *memstr(const void *haystack, const char *needle, size_t n) { const u_char *pos = haystack; |