32 lines
1 KiB
Python
32 lines
1 KiB
Python
# Author: Hubert Kario (c) 2015
|
|
# see LICENCE file for legal information regarding use of this file
|
|
|
|
"""hashlib that handles FIPS mode."""
|
|
|
|
# Because we are extending the hashlib module, we need to import all its
|
|
# fields to suppport the same uses
|
|
# pylint: disable=unused-wildcard-import, wildcard-import
|
|
from hashlib import *
|
|
# pylint: enable=unused-wildcard-import, wildcard-import
|
|
import hashlib
|
|
|
|
|
|
def _fipsFunction(func, *args, **kwargs):
|
|
"""Make hash function support FIPS mode."""
|
|
try:
|
|
return func(*args, **kwargs)
|
|
except ValueError:
|
|
return func(*args, usedforsecurity=False, **kwargs)
|
|
|
|
|
|
# redefining the function is exactly what we intend to do
|
|
# pylint: disable=function-redefined
|
|
def md5(*args, **kwargs):
|
|
"""MD5 constructor that works in FIPS mode."""
|
|
return _fipsFunction(hashlib.md5, *args, **kwargs)
|
|
|
|
|
|
def new(*args, **kwargs):
|
|
"""General constructor that works in FIPS mode."""
|
|
return _fipsFunction(hashlib.new, *args, **kwargs)
|
|
# pylint: enable=function-redefined
|