New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpo-32433: Optimized HMAC digest #5023
Conversation
Doc/library/hmac.rst
Outdated
| Return digest of *msg* for given secret *key* and *digestmod*. The | ||
| function is equivalent to ``HMAC(key, msg, digestmod).digest()``, but | ||
| uses an optimized C or inline implementation, which is faster for messages | ||
| that fit into memory. The parameters *key*, *msg*, and *digestmod* have |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I realize digestmod matches the parameter name in hmac.new, but it is an antiquated name from the days when the only two hash functions were top level modules. how about just calling it digest on the new API?
Are there any hash function modules with a new method left anywhere that anyone actually uses? Why continue to support that old idiom in new APIs?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I though about it but then decided to keep the new function compatible to the old PEP.
Since you also dislike the old name, let's use digest in the new function.
Lib/test/test_hmac.py
Outdated
| hmac.digest(key, data, digestmod='md5'), | ||
| binascii.unhexlify(digest) | ||
| ) | ||
| orig = hmac._openssl_md_meths |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
from unittest import mock
...
with mock.patch('hmac._openssl_md_meths', {}):
...0100b1c
to
7fd218c
Compare
|
@gpshead Are you ok with the new code? I'd like to get the feature into 3.7. |
|
|
||
|
|
||
| def digest(key, msg, digest): | ||
| """Fast inline implementation of HMAC |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
describe the parameters so that interactive users doing help(hmac.digest) see something useful.
| @@ -0,0 +1,2 @@ | |||
| The hmac module now has hmac.digest(), which provides an optimized HMAC | |||
| digest for short messages. | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the "for short messages" part true? does anything care how long the message is? I'd just trim those words from the sentence. :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"short" for some arbitrary measurement. After all the message has to fit into memory. Anything up to 64kB should be fine. :p
The hmac module now has hmac.digest(), which provides an optimized HMAC digest for short messages. hmac.digest() is up to three times faster than hmac.HMAC().digest(). Signed-off-by: Christian Heimes <christian@python.org>
|
@tiran: Please replace |


The hmac module now has hmac.digest(), which provides an optimized HMAC
digest for short messages. hmac.digest() is up to three times faster
than hmac.HMAC().digest().
Signed-off-by: Christian Heimes christian@python.org
https://bugs.python.org/issue32433