Browse code

Move memcmp_constant_time() to crypto.h

This function is quite useful other places, so make it generally
accessible.

[DS: changed function declaration to static inline during commit]

Signed-off-by: David Sommerseth <davids@openvpn.net>
Acked-by: Steffan Karger <steffan@karger.me>
Message-Id: <1476388771-16492-2-git-send-email-davids@openvpn.net>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg12698.html

David Sommerseth authored on 2016/10/14 04:59:27
Showing 2 changed files
... ...
@@ -66,24 +66,6 @@
66 66
 #define CRYPT_ERROR(format) \
67 67
   do { msg (D_CRYPT_ERRORS, "%s: " format, error_prefix); goto error_exit; } while (false)
68 68
 
69
-/**
70
- * As memcmp(), but constant-time.
71
- * Returns 0 when data is equal, non-zero otherwise.
72
- */
73
-static int
74
-memcmp_constant_time (const void *a, const void *b, size_t size) {
75
-  const uint8_t * a1 = a;
76
-  const uint8_t * b1 = b;
77
-  int ret = 0;
78
-  size_t i;
79
-
80
-  for (i = 0; i < size; i++) {
81
-      ret |= *a1++ ^ *b1++;
82
-  }
83
-
84
-  return ret;
85
-}
86
-
87 69
 static void
88 70
 openvpn_encrypt_aead (struct buffer *buf, struct buffer work,
89 71
 	 struct crypto_options *opt) {
... ...
@@ -476,6 +476,24 @@ void get_tls_handshake_key (const struct key_type *key_type,
476 476
  * Inline functions
477 477
  */
478 478
 
479
+/**
480
+ * As memcmp(), but constant-time.
481
+ * Returns 0 when data is equal, non-zero otherwise.
482
+ */
483
+static inline int
484
+memcmp_constant_time (const void *a, const void *b, size_t size) {
485
+  const uint8_t * a1 = a;
486
+  const uint8_t * b1 = b;
487
+  int ret = 0;
488
+  size_t i;
489
+
490
+  for (i = 0; i < size; i++) {
491
+      ret |= *a1++ ^ *b1++;
492
+  }
493
+
494
+  return ret;
495
+}
496
+
479 497
 static inline bool
480 498
 key_ctx_bi_defined(const struct key_ctx_bi* key)
481 499
 {