1
- """HMAC (Keyed-Hashing for Message Authentication) Python module.
1
+ """HMAC (Keyed-Hashing for Message Authentication) module.
2
2
3
3
Implements the HMAC algorithm as described by RFC 2104.
4
4
"""
@@ -30,23 +30,25 @@ class HMAC:
30
30
"""
31
31
blocksize = 64 # 512-bit HMAC; can be changed in subclasses.
32
32
33
- def __init__ (self , key , msg = None , digestmod = None ):
33
+ def __init__ (self , key , msg = None , digestmod = '' ):
34
34
"""Create a new HMAC object.
35
35
36
- key: key for the keyed hash object.
37
- msg: Initial input for the hash, if provided .
38
- digestmod: Required. A module supporting PEP 247. *OR*
39
- A hashlib constructor returning a new hash object. *OR*
40
- A hash name suitable for hashlib.new() .
36
+ key: bytes or buffer, key for the keyed hash object.
37
+ msg: bytes or buffer, Initial input for the hash or None .
38
+ digestmod: A hash name suitable for hashlib.new(). *OR*
39
+ A hashlib constructor returning a new hash object. *OR*
40
+ A module supporting PEP 247 .
41
41
42
- Note: key and msg must be a bytes or bytearray objects.
42
+ Required as of 3.8, despite its position after the optional
43
+ msg argument. Passing it as a keyword argument is
44
+ recommended, though not required for legacy API reasons.
43
45
"""
44
46
45
47
if not isinstance (key , (bytes , bytearray )):
46
48
raise TypeError ("key: expected bytes or bytearray, but got %r" % type (key ).__name__ )
47
49
48
- if digestmod is None :
49
- raise ValueError ( '`digestmod` is required.' )
50
+ if not digestmod :
51
+ raise TypeError ( "Missing required parameter 'digestmod'." )
50
52
51
53
if callable (digestmod ):
52
54
self .digest_cons = digestmod
@@ -90,8 +92,7 @@ def name(self):
90
92
return "hmac-" + self .inner .name
91
93
92
94
def update (self , msg ):
93
- """Update this hashing object with the string msg.
94
- """
95
+ """Feed data from msg into this hashing object."""
95
96
self .inner .update (msg )
96
97
97
98
def copy (self ):
@@ -119,7 +120,7 @@ def _current(self):
119
120
def digest (self ):
120
121
"""Return the hash value of this hashing object.
121
122
122
- This returns a string containing 8-bit data . The object is
123
+ This returns the hmac value as bytes . The object is
123
124
not altered in any way by this function; you can continue
124
125
updating the object after calling this function.
125
126
"""
@@ -132,30 +133,34 @@ def hexdigest(self):
132
133
h = self ._current ()
133
134
return h .hexdigest ()
134
135
135
- def new (key , msg = None , digestmod = None ):
136
+ def new (key , msg = None , digestmod = '' ):
136
137
"""Create a new hashing object and return it.
137
138
138
- key: The starting key for the hash.
139
- msg: if available, will immediately be hashed into the object's starting
140
- state.
139
+ key: bytes or buffer, The starting key for the hash.
140
+ msg: bytes or buffer, Initial input for the hash, or None.
141
+ digestmod: A hash name suitable for hashlib.new(). *OR*
142
+ A hashlib constructor returning a new hash object. *OR*
143
+ A module supporting PEP 247.
144
+
145
+ Required as of 3.8, despite its position after the optional
146
+ msg argument. Passing it as a keyword argument is
147
+ recommended, though not required for legacy API reasons.
141
148
142
- You can now feed arbitrary strings into the object using its update()
149
+ You can now feed arbitrary bytes into the object using its update()
143
150
method, and can ask for the hash value at any time by calling its digest()
144
- method .
151
+ or hexdigest() methods .
145
152
"""
146
153
return HMAC (key , msg , digestmod )
147
154
148
155
149
156
def digest (key , msg , digest ):
150
- """Fast inline implementation of HMAC
157
+ """Fast inline implementation of HMAC.
151
158
152
- key: key for the keyed hash object.
153
- msg: input message
159
+ key: bytes or buffer, The key for the keyed hash object.
160
+ msg: bytes or buffer, Input message.
154
161
digest: A hash name suitable for hashlib.new() for best performance. *OR*
155
162
A hashlib constructor returning a new hash object. *OR*
156
163
A module supporting PEP 247.
157
-
158
- Note: key and msg must be a bytes or bytearray objects.
159
164
"""
160
165
if (_hashopenssl is not None and
161
166
isinstance (digest , str ) and digest in _openssl_md_meths ):
0 commit comments