blob: 3fa0bd66ae5b9d35cd22c5fd29f3d8695c42ff72 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`hmac` --- Keyed-Hashing for Message Authentication
2========================================================
3
4.. module:: hmac
Georg Brandl80b75fd2010-10-17 09:43:35 +00005 :synopsis: Keyed-Hashing for Message Authentication (HMAC) implementation
6 for Python.
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Gerhard Häring <ghaering@users.sourceforge.net>
8.. sectionauthor:: Gerhard Häring <ghaering@users.sourceforge.net>
9
Raymond Hettinger469271d2011-01-27 20:38:46 +000010**Source code:** :source:`Lib/hmac.py`
11
12--------------
Georg Brandl116aa622007-08-15 14:28:22 +000013
Georg Brandl116aa622007-08-15 14:28:22 +000014This module implements the HMAC algorithm as described by :rfc:`2104`.
15
16
Georg Brandl036490d2009-05-17 13:00:36 +000017.. function:: new(key, msg=None, digestmod=None)
Georg Brandl116aa622007-08-15 14:28:22 +000018
Georg Brandl80b75fd2010-10-17 09:43:35 +000019 Return a new hmac object. *key* is a bytes object giving the secret key. If
20 *msg* is present, the method call ``update(msg)`` is made. *digestmod* is
21 the digest constructor or module for the HMAC object to use. It defaults to
22 the :func:`hashlib.md5` constructor.
Georg Brandl116aa622007-08-15 14:28:22 +000023
Georg Brandl116aa622007-08-15 14:28:22 +000024
25An HMAC object has the following methods:
26
Georg Brandl9701eb62012-02-05 09:25:22 +010027.. method:: HMAC.update(msg)
Georg Brandl116aa622007-08-15 14:28:22 +000028
Georg Brandl80b75fd2010-10-17 09:43:35 +000029 Update the hmac object with the bytes object *msg*. Repeated calls are
30 equivalent to a single call with the concatenation of all the arguments:
31 ``m.update(a); m.update(b)`` is equivalent to ``m.update(a + b)``.
Georg Brandl116aa622007-08-15 14:28:22 +000032
33
Georg Brandl9701eb62012-02-05 09:25:22 +010034.. method:: HMAC.digest()
Georg Brandl116aa622007-08-15 14:28:22 +000035
Georg Brandl80b75fd2010-10-17 09:43:35 +000036 Return the digest of the bytes passed to the :meth:`update` method so far.
37 This bytes object will be the same length as the *digest_size* of the digest
38 given to the constructor. It may contain non-ASCII bytes, including NUL
39 bytes.
Georg Brandl116aa622007-08-15 14:28:22 +000040
Charles-François Natali7feb9f42012-05-13 19:53:07 +020041 .. warning::
42
43 When comparing the output of :meth:`digest` to an externally-supplied
44 digest during a verification routine, it is recommended to use the
Nick Coghlan807770e2012-06-15 21:14:08 +100045 :func:`compare_digest` function instead of the ``==`` operator
46 to reduce the vulnerability to timing attacks.
Charles-François Natali7feb9f42012-05-13 19:53:07 +020047
Georg Brandl116aa622007-08-15 14:28:22 +000048
Georg Brandl9701eb62012-02-05 09:25:22 +010049.. method:: HMAC.hexdigest()
Georg Brandl116aa622007-08-15 14:28:22 +000050
Georg Brandl80b75fd2010-10-17 09:43:35 +000051 Like :meth:`digest` except the digest is returned as a string twice the
52 length containing only hexadecimal digits. This may be used to exchange the
53 value safely in email or other non-binary environments.
Georg Brandl116aa622007-08-15 14:28:22 +000054
Charles-François Natali7feb9f42012-05-13 19:53:07 +020055 .. warning::
56
Nick Coghlan807770e2012-06-15 21:14:08 +100057 The output of :meth:`hexdigest` should not be compared directly to an
58 externally-supplied digest during a verification routine. Instead, the
59 externally supplied digest should be converted to a :class:`bytes`
60 value and compared to the output of :meth:`digest` with
61 :func:`compare_digest`.
Charles-François Natali7feb9f42012-05-13 19:53:07 +020062
Georg Brandl116aa622007-08-15 14:28:22 +000063
Georg Brandl9701eb62012-02-05 09:25:22 +010064.. method:: HMAC.copy()
Georg Brandl116aa622007-08-15 14:28:22 +000065
66 Return a copy ("clone") of the hmac object. This can be used to efficiently
67 compute the digests of strings that share a common initial substring.
68
69
Charles-François Natali7feb9f42012-05-13 19:53:07 +020070This module also provides the following helper function:
71
Nick Coghlan807770e2012-06-15 21:14:08 +100072.. function:: compare_digest(a, b)
Charles-François Natali7feb9f42012-05-13 19:53:07 +020073
Georg Brandla1bc35f2012-06-24 16:07:33 +020074 Return ``a == b``. This function uses an approach designed to prevent timing
75 analysis by avoiding content based short circuiting behaviour. The inputs
76 must either both support the buffer protocol (e.g. :class:`bytes` and
77 :class:`bytearray` instances) or be ASCII-only :class:`str` instances as
78 returned by :meth:`hexdigest`. :class:`bytes` and :class:`str` instances
79 can't be mixed.
Nick Coghlan807770e2012-06-15 21:14:08 +100080
Georg Brandla1bc35f2012-06-24 16:07:33 +020081 Using a short circuiting comparison (that is, one that terminates as soon as
82 it finds any difference between the values) to check digests for correctness
83 can be problematic, as it introduces a potential vulnerability when an
84 attacker can control both the message to be checked *and* the purported
85 signature value. By keeping the plaintext consistent and supplying different
86 signature values, an attacker may be able to use timing variations to search
87 the signature space for the expected value in O(n) time rather than the
88 desired O(2**n).
Charles-François Natali7feb9f42012-05-13 19:53:07 +020089
90 .. note::
91
Georg Brandla1bc35f2012-06-24 16:07:33 +020092 While this function reduces the likelihood of leaking the contents of the
93 expected digest via a timing attack, it still may leak some timing
Christian Heimes6cea6552012-06-24 13:48:32 +020094 information when the input values differ in lengths as well as in error
Georg Brandla1bc35f2012-06-24 16:07:33 +020095 cases like unsupported types or non ASCII strings. When the inputs have
96 different length the timing depends solely on the length of ``b``. It is
97 assumed that the expected length of the digest is not a secret, as it is
98 typically published as part of a file format, network protocol or API
99 definition.
Charles-François Natali7feb9f42012-05-13 19:53:07 +0200100
Charles-François Natali9b704ec2012-05-15 21:00:32 +0200101 .. versionadded:: 3.3
Charles-François Natali7feb9f42012-05-13 19:53:07 +0200102
Georg Brandla1bc35f2012-06-24 16:07:33 +0200103
Georg Brandl116aa622007-08-15 14:28:22 +0000104.. seealso::
105
106 Module :mod:`hashlib`
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000107 The Python module providing secure hash functions.