Permalink
Browse files

Python 3.3 includes a fast time-independent comparison function, so use

it when available.
  • Loading branch information...
1 parent e5805a9 commit a759f9a0bd7f45db86bb9ffc336fa99d7b86a50d @bdarnell bdarnell committed Sep 29, 2012
Showing with 14 additions and 11 deletions.
  1. +14 −11 tornado/web.py
View
@@ -2047,17 +2047,20 @@ def reverse(self, *args):
url = URLSpec
-def _time_independent_equals(a, b):
- if len(a) != len(b):
- return False
- result = 0
- if type(a[0]) is int: # python3 byte strings
- for x, y in zip(a, b):
- result |= x ^ y
- else: # python2
- for x, y in zip(a, b):
- result |= ord(x) ^ ord(y)
- return result == 0
+if hasattr(hmac, 'compare_digest'): # python 3.3
+ _time_independent_equals = hmac.compare_digest
+else:
+ def _time_independent_equals(a, b):
+ if len(a) != len(b):
+ return False
+ result = 0
+ if type(a[0]) is int: # python3 byte strings
+ for x, y in zip(a, b):
+ result |= x ^ y
+ else: # python2
+ for x, y in zip(a, b):
+ result |= ord(x) ^ ord(y)
+ return result == 0
def create_signed_value(secret, name, value):

0 comments on commit a759f9a

Please sign in to comment.