diff options
author | Benjamin Peterson <benjamin@python.org> | 2014-05-11 23:11:44 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2014-05-11 23:11:44 (GMT) |
commit | 629026aecc6bbb7cf8df25f7699eaf97d8e45701 (patch) | |
tree | 9e3f3097933a1d4ab83265f34271ad8cbacc29ad /Doc/library/hmac.rst | |
parent | e9314e4a3c7bf9bc297922bbc130ec3dc004654c (diff) | |
download | cpython-629026aecc6bbb7cf8df25f7699eaf97d8e45701.zip cpython-629026aecc6bbb7cf8df25f7699eaf97d8e45701.tar.gz cpython-629026aecc6bbb7cf8df25f7699eaf97d8e45701.tar.bz2 |
backport hmac.compare_digest to partially implement PEP 466 (closes #21306)
Backport from Alex Gaynor.
Diffstat (limited to 'Doc/library/hmac.rst')
-rw-r--r-- | Doc/library/hmac.rst | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Doc/library/hmac.rst b/Doc/library/hmac.rst index f88a03e..09e819a 100644 --- a/Doc/library/hmac.rst +++ b/Doc/library/hmac.rst @@ -38,6 +38,13 @@ An HMAC object has the following methods: This string will be the same length as the *digest_size* of the digest given to the constructor. It may contain non-ASCII characters, including NUL bytes. + .. warning:: + + When comparing the output of :meth:`digest` to an externally-supplied + digest during a verification routine, it is recommended to use the + :func:`compare_digest` function instead of the ``==`` operator + to reduce the vulnerability to timing attacks. + .. method:: HMAC.hexdigest() @@ -45,6 +52,13 @@ An HMAC object has the following methods: containing only hexadecimal digits. This may be used to exchange the value safely in email or other non-binary environments. + .. warning:: + + When comparing the output of :meth:`hexdigest` to an externally-supplied + digest during a verification routine, it is recommended to use the + :func:`compare_digest` function instead of the ``==`` operator + to reduce the vulnerability to timing attacks. + .. method:: HMAC.copy() @@ -52,6 +66,25 @@ An HMAC object has the following methods: compute the digests of strings that share a common initial substring. +This module also provides the following helper function: + +.. function:: compare_digest(a, b) + + Return ``a == b``. This function uses an approach designed to prevent + timing analysis by avoiding content-based short circuiting behaviour, + making it appropriate for cryptography. *a* and *b* must both be of the + same type: either :class:`unicode` or a :term:`bytes-like object`. + + .. note:: + + If *a* and *b* are of different lengths, or if an error occurs, + a timing attack could theoretically reveal information about the + types and lengths of *a* and *b*--but not their values. + + + .. versionadded:: 2.7.7 + + .. seealso:: Module :mod:`hashlib` |