aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/utils/utils.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2015-04-11 16:44:18 +0200
committerMartin Willi <martin@revosec.ch>2015-04-14 11:51:54 +0200
commitb833963270fbffe3186f5c71c7584c2347a44038 (patch)
tree75e2d440ec3f27ca6f25b899c592e51258e21c26 /src/libstrongswan/utils/utils.c
parent39e1ddec2ed3480e0edc07bbabfacbf907dc4e3f (diff)
downloadstrongswan-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.c19
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;