mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
[ sf.net patch # 1121611 ]
A new hashlib module to replace the md5 and sha modules. It adds support for additional secure hashes such as SHA-256 and SHA-512. The hashlib module uses OpenSSL for fast platform optimized implementations of algorithms when available. The old md5 and sha modules still exist as wrappers around hashlib to preserve backwards compatibility.
This commit is contained in:
parent
33a5f2af59
commit
f21a5f7739
21 changed files with 2589 additions and 53 deletions
24
Lib/hmac.py
24
Lib/hmac.py
|
@ -28,27 +28,33 @@ class HMAC:
|
|||
|
||||
key: key for the keyed hash object.
|
||||
msg: Initial input for the hash, if provided.
|
||||
digestmod: A module supporting PEP 247. Defaults to the md5 module.
|
||||
digestmod: A module supporting PEP 247. *OR*
|
||||
A hashlib constructor returning a new hash object.
|
||||
Defaults to hashlib.md5.
|
||||
"""
|
||||
|
||||
if key is _secret_backdoor_key: # cheap
|
||||
return
|
||||
|
||||
if digestmod is None:
|
||||
import md5
|
||||
digestmod = md5
|
||||
import hashlib
|
||||
digestmod = hashlib.md5
|
||||
|
||||
self.digestmod = digestmod
|
||||
self.outer = digestmod.new()
|
||||
self.inner = digestmod.new()
|
||||
self.digest_size = digestmod.digest_size
|
||||
if callable(digestmod):
|
||||
self.digest_cons = digestmod
|
||||
else:
|
||||
self.digest_cons = lambda d='': digestmod.new(d)
|
||||
|
||||
self.outer = self.digest_cons()
|
||||
self.inner = self.digest_cons()
|
||||
self.digest_size = self.inner.digest_size
|
||||
|
||||
blocksize = 64
|
||||
ipad = "\x36" * blocksize
|
||||
opad = "\x5C" * blocksize
|
||||
|
||||
if len(key) > blocksize:
|
||||
key = digestmod.new(key).digest()
|
||||
key = self.digest_cons(key).digest()
|
||||
|
||||
key = key + chr(0) * (blocksize - len(key))
|
||||
self.outer.update(_strxor(key, opad))
|
||||
|
@ -70,7 +76,7 @@ class HMAC:
|
|||
An update to this copy won't affect the original object.
|
||||
"""
|
||||
other = HMAC(_secret_backdoor_key)
|
||||
other.digestmod = self.digestmod
|
||||
other.digest_cons = self.digest_cons
|
||||
other.digest_size = self.digest_size
|
||||
other.inner = self.inner.copy()
|
||||
other.outer = self.outer.copy()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue