blob: e6ce99b669ab97c117bf259cc8e1a03d1442a1af [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
Nick Coghlan807770e2012-06-15 21:14:08 +100074 Returns the equivalent of ``a == b``, but avoids content based
75 short circuiting behaviour to reduce the vulnerability to timing
76 analysis. The inputs must be :class:`bytes` instances.
77
78 Using a short circuiting comparison (that is, one that terminates as soon
79 as it finds any difference between the values) to check digests for
80 correctness can be problematic, as it introduces a potential
81 vulnerability when an attacker can control both the message to be checked
82 *and* the purported signature value. By keeping the plaintext consistent
83 and supplying different signature values, an attacker may be able to use
84 timing variations to search the signature space for the expected value in
85 O(n) time rather than the desired O(2**n).
Charles-François Natali7feb9f42012-05-13 19:53:07 +020086
87 .. note::
88
Nick Coghlan807770e2012-06-15 21:14:08 +100089 While this function reduces the likelihood of leaking the contents of
90 the expected digest via a timing attack, it still uses short circuiting
91 behaviour based on the *length* of the inputs. It is assumed that the
92 expected length of the digest is not a secret, as it is typically
93 published as part of a file format, network protocol or API definition.
Charles-François Natali7feb9f42012-05-13 19:53:07 +020094
Charles-François Natali9b704ec2012-05-15 21:00:32 +020095 .. versionadded:: 3.3
Charles-François Natali7feb9f42012-05-13 19:53:07 +020096
Georg Brandl116aa622007-08-15 14:28:22 +000097.. seealso::
98
99 Module :mod:`hashlib`
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000100 The Python module providing secure hash functions.