mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-03-25 21:17:37 +00:00
hashutil: add constant-time comparison function, to avoid timing attacks when python's short-circuiting data-dependent == operator is used to, say, check a write-enabler
This commit is contained in:
parent
6599eae6f9
commit
01e2032669
@ -601,6 +601,12 @@ class HashUtilTests(unittest.TestCase):
|
||||
h2.update("foo")
|
||||
self.failUnlessEqual(h1, h2.digest())
|
||||
|
||||
def test_constant_time_compare(self):
|
||||
self.failUnless(hashutil.constant_time_compare("a", "a"))
|
||||
self.failUnless(hashutil.constant_time_compare("ab", "ab"))
|
||||
self.failIf(hashutil.constant_time_compare("a", "b"))
|
||||
self.failIf(hashutil.constant_time_compare("a", "aa"))
|
||||
|
||||
class Abbreviate(unittest.TestCase):
|
||||
def test_time(self):
|
||||
a = abbreviate.abbreviate_time
|
||||
|
@ -189,3 +189,7 @@ def ssk_readkey_data_hash(IV, readkey):
|
||||
return tagged_pair_hash(MUTABLE_DATAKEY_TAG, IV, readkey, KEYLEN)
|
||||
def ssk_storage_index_hash(readkey):
|
||||
return tagged_hash(MUTABLE_STORAGEINDEX_TAG, readkey, KEYLEN)
|
||||
|
||||
def constant_time_compare(a, b):
|
||||
n = os.urandom(8)
|
||||
return bool(tagged_hash(n, a) == tagged_hash(n, b))
|
||||
|
Loading…
x
Reference in New Issue
Block a user