diff options
author | Tim Peters <tim.peters@gmail.com> | 2004-03-20 20:11:29 +0000 |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2004-03-20 20:11:29 +0000 |
commit | a5dd293edc1c796cf3299c493163f5b80f50ce47 (patch) | |
tree | 5e8af0d7660f5340327450c8ea43e6072af120fb /Lib/hmac.py | |
parent | c57d0110e37da312d0e0289968e04533bbe8f1dd (diff) | |
download | cpython-a5dd293edc1c796cf3299c493163f5b80f50ce47.tar.gz |
Speed HMAC.copy() by installing a secret backdoor argument to
HMAC.__init__(). Adapted from SF patch 895445 "hmac.HMAC.copy() speedup"
by Trevor Perrin, who reported that this approach increased throughput
of his hmac-intensive app by 30%.
Diffstat (limited to 'Lib/hmac.py')
-rw-r--r-- | Lib/hmac.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Lib/hmac.py b/Lib/hmac.py index db9b404c9a..11b0fb33f4 100644 --- a/Lib/hmac.py +++ b/Lib/hmac.py @@ -12,6 +12,11 @@ def _strxor(s1, s2): # hashing module used. digest_size = None +# A unique object passed by HMAC.copy() to the HMAC constructor, in order +# that the latter return very quickly. HMAC("") in contrast is quite +# expensive. +_secret_backdoor_key = [] + class HMAC: """RFC2104 HMAC class. @@ -25,6 +30,10 @@ class HMAC: msg: Initial input for the hash, if provided. digestmod: A module supporting PEP 247. Defaults to the md5 module. """ + + if key is _secret_backdoor_key: # cheap + return + if digestmod is None: import md5 digestmod = md5 @@ -60,8 +69,9 @@ class HMAC: An update to this copy won't affect the original object. """ - other = HMAC("") + other = HMAC(_secret_backdoor_key) other.digestmod = self.digestmod + other.digest_size = self.digest_size other.inner = self.inner.copy() other.outer = self.outer.copy() return other |