aboutsummaryrefslogtreecommitdiffstats
path: root/src/_cffi_src/hazmat_src/constant_time.c
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2015-05-19 13:05:21 -0700
committerPaul Kehrer <paul.l.kehrer@gmail.com>2015-06-07 23:27:54 -0500
commit68b3b1ea8661b98c7afc3243e84c998601b70f18 (patch)
tree08ae523d4f6a76f005e53d4d06d30528fcd9b120 /src/_cffi_src/hazmat_src/constant_time.c
parentca820de5c681d5bb53cb8376eaf7bc85c4bbcdd3 (diff)
downloadcryptography-68b3b1ea8661b98c7afc3243e84c998601b70f18.tar.gz
cryptography-68b3b1ea8661b98c7afc3243e84c998601b70f18.tar.bz2
cryptography-68b3b1ea8661b98c7afc3243e84c998601b70f18.zip
convert to cffi 1.0 precompile system
Diffstat (limited to 'src/_cffi_src/hazmat_src/constant_time.c')
-rw-r--r--src/_cffi_src/hazmat_src/constant_time.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/_cffi_src/hazmat_src/constant_time.c b/src/_cffi_src/hazmat_src/constant_time.c
new file mode 100644
index 00000000..0a48fe83
--- /dev/null
+++ b/src/_cffi_src/hazmat_src/constant_time.c
@@ -0,0 +1,22 @@
+// This file is dual licensed under the terms of the Apache License, Version
+// 2.0, and the BSD License. See the LICENSE file in the root of this
+// repository for complete details.
+
+uint8_t Cryptography_constant_time_bytes_eq(uint8_t *a, size_t len_a,
+ uint8_t *b, size_t len_b) {
+ size_t i = 0;
+ uint8_t mismatch = 0;
+ if (len_a != len_b) {
+ return 0;
+ }
+ for (i = 0; i < len_a; i++) {
+ mismatch |= a[i] ^ b[i];
+ }
+
+ /* Make sure any bits set are copied to the lowest bit */
+ mismatch |= mismatch >> 4;
+ mismatch |= mismatch >> 2;
+ mismatch |= mismatch >> 1;
+ /* Now check the low bit to see if it's set */
+ return (mismatch & 1) == 0;
+}