summaryrefslogtreecommitdiff
path: root/slowequals.c
diff options
context:
space:
mode:
authorTristan Seligmann <mithrandi@mithrandi.net>2014-12-14 02:38:36 +0200
committerTristan Seligmann <mithrandi@mithrandi.net>2014-12-14 02:38:36 +0200
commit1c9bb4abe32f01584d62f3b5b35713b42c984eb9 (patch)
tree37ae90cb0411eeb8a27b3520ead69b75e193233a /slowequals.c
parent01a1602f34e1df099b1d5a2e426d17951ad45666 (diff)
parentc107c413ea127c652fe798d6b50441f34e6ffe9c (diff)
Merge tag 'v1.20' into dgit/experimental
Diffstat (limited to 'slowequals.c')
-rw-r--r--slowequals.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/slowequals.c b/slowequals.c
new file mode 100644
index 0000000..48e488e
--- /dev/null
+++ b/slowequals.c
@@ -0,0 +1,26 @@
+#include <string.h>
+
+/* Implements a constant time version of strcmp()
+ * Will return 1 if a and b are equal, 0 if they are not */
+int slow_equals(const char* a, const char* b)
+{
+ size_t lena, lenb, diff, i;
+ lena = strlen(a);
+ lenb = strlen(b);
+ diff = strlen(a) ^ strlen(b);
+
+ for(i=0; i<lena && i<lenb; i++)
+ {
+ diff |= a[i] ^ b[i];
+ }
+ if (diff == 0)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+