summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-04-30 14:43:35 -0400
committerNick Mathewson <nickm@torproject.org>2019-04-30 14:45:51 -0400
commit309467c64e007ea6841c07fdee35eaff0146d541 (patch)
tree88c91e103774d713036dfd7b465db24400fdb3ff
parent847fc3280d4a77859c28f4c6c91c2cdf863c5c43 (diff)
downloadtor-309467c64e007ea6841c07fdee35eaff0146d541.tar.gz
tor-309467c64e007ea6841c07fdee35eaff0146d541.zip
Rename tor_mem_is_zero to fast_mem_is_zero()
For memeq and friends, "tor_" indicates constant-time and "fast_" indicates optimized. I'm fine with leaving the constant-time "safe_mem_is_zero" with its current name, but the "tor_" prefix on the current optimized version is misleading. Also, make the tor_digest*_is_zero() uniformly constant-time, and add a fast_digest*_is_zero() version to use as needed. A later commit in this branch will fix all the users of tor_mem_is_zero(). Closes ticket 30309.
-rw-r--r--changes/bug303093
-rw-r--r--src/lib/string/util_string.c9
-rw-r--r--src/lib/string/util_string.h8
3 files changed, 13 insertions, 7 deletions
diff --git a/changes/bug30309 b/changes/bug30309
new file mode 100644
index 0000000000..6cbbe8d156
--- /dev/null
+++ b/changes/bug30309
@@ -0,0 +1,3 @@
+ o Code simplification and refactoring:
+ - Rename tor_mem_is_zero() to fast_mem_is_zero(), to emphasize that
+ it is not a constant-time function. Closes ticket 30309.
diff --git a/src/lib/string/util_string.c b/src/lib/string/util_string.c
index 0c4e399008..f5061a11d2 100644
--- a/src/lib/string/util_string.c
+++ b/src/lib/string/util_string.c
@@ -71,7 +71,7 @@ tor_memstr(const void *haystack, size_t hlen, const char *needle)
/** Return true iff the 'len' bytes at 'mem' are all zero. */
int
-tor_mem_is_zero(const char *mem, size_t len)
+fast_mem_is_zero(const char *mem, size_t len)
{
static const char ZERO[] = {
0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
@@ -95,17 +95,14 @@ tor_mem_is_zero(const char *mem, size_t len)
int
tor_digest_is_zero(const char *digest)
{
- static const uint8_t ZERO_DIGEST[] = {
- 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
- };
- return tor_memeq(digest, ZERO_DIGEST, DIGEST_LEN);
+ return safe_mem_is_zero(digest, DIGEST_LEN);
}
/** Return true iff the DIGEST256_LEN bytes in digest are all zero. */
int
tor_digest256_is_zero(const char *digest)
{
- return tor_mem_is_zero(digest, DIGEST256_LEN);
+ return safe_mem_is_zero(digest, DIGEST256_LEN);
}
/** Remove from the string <b>s</b> every character which appears in
diff --git a/src/lib/string/util_string.h b/src/lib/string/util_string.h
index da4fab159c..7e8af0578c 100644
--- a/src/lib/string/util_string.h
+++ b/src/lib/string/util_string.h
@@ -20,7 +20,13 @@ const void *tor_memmem(const void *haystack, size_t hlen, const void *needle,
size_t nlen);
const void *tor_memstr(const void *haystack, size_t hlen,
const char *needle);
-int tor_mem_is_zero(const char *mem, size_t len);
+int fast_mem_is_zero(const char *mem, size_t len);
+#define fast_digest_is_zero(d) fast_mem_is_zero((d), DIGEST_LEN)
+#define fast_digetst256_is_zero(d) fast_mem_is_zero((d), DIGEST256_LEN)
+
+// XXXX remove this after we replace all users.
+#define tor_mem_is_zero fast_mem_is_zero
+
int tor_digest_is_zero(const char *digest);
int tor_digest256_is_zero(const char *digest);