diff options
author | Vincent Palatin <vpalatin@chromium.org> | 2017-02-22 10:37:39 +0100 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-02-23 16:02:02 -0800 |
commit | bff020fc6b25fe5dc0245c811d9f53b7c518aa08 (patch) | |
tree | 562e1fbd78c7155a4ca17dd3e5a134ab5242ebed /common/util.c | |
parent | b8c4f23f75e7994b419f17301b18837487ab597e (diff) | |
download | chrome-ec-bff020fc6b25fe5dc0245c811d9f53b7c518aa08.tar.gz |
util: add constant-time memcmp
Import from vboot_reference the constant-time memcmp implementation
for safer usage in cryptography code.
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
BRANCH=none
BUG=chrome-os-partner:62991
TEST=run curve25519 test
Change-Id: I9c4c61e15912c978e13b6cc002af879c8ae8f630
Reviewed-on: https://chromium-review.googlesource.com/446098
Commit-Ready: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'common/util.c')
-rw-r--r-- | common/util.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/common/util.c b/common/util.c index 042523d2b9..bc4001ee22 100644 --- a/common/util.c +++ b/common/util.c @@ -188,6 +188,25 @@ int memcmp(const void *s1, const void *s2, size_t len) return 0; } +/* Constant-time memory comparison */ +int safe_memcmp(const void *s1, const void *s2, size_t size) +{ + const uint8_t *us1 = s1; + const uint8_t *us2 = s2; + int result = 0; + + if (size == 0) + return 0; + + /* + * Code snippet without data-dependent branch due to Nate Lawson + * (nate@root.org) of Root Labs. + */ + while (size--) + result |= *us1++ ^ *us2++; + + return result != 0; +} void *memcpy(void *dest, const void *src, size_t len) { |