@@ -86,12 +86,12 @@ def __usedforsecurity_check(md, name, *args, **kwargs):
8686        raise  ValueError (name  +  " is blocked when usedforsecurity=True" )
8787    return  md (* args , ** kwargs )
8888
89- # If _hashlib is in FIPS mode, use the above wrapper to ensure builtin  
90- # implementation checks  usedforsecurity kwarg. It means all builtin  
91- # implementations are treated as an unapproved implementation, as they  
92- # are unlikely to have been certified by NIST . 
89+ # If the  _hashlib OpenSSL wrapper  is in FIPS mode, wrap other implementations  
90+ # to check the  usedforsecurity kwarg. All builtin implementations are treated  
91+ # as only available for useforsecurity=False purposes in the presence of such  
92+ # a configured and linked OpenSSL . 
9393def  __get_wrapped_builtin (md , name ):
94-     if  _hashlib   is   not   None   and   _hashlib . get_fips_mode ()  !=  0 :
94+     if  __openssl_fips_mode  !=  0 :
9595        from  functools  import  partial 
9696        return  partial (__usedforsecurity_check , md , name )
9797    return  md 
@@ -188,10 +188,15 @@ def __hash_new(name, data=b'', **kwargs):
188188    __get_hash  =  __get_openssl_constructor 
189189    algorithms_available  =  algorithms_available .union (
190190            _hashlib .openssl_md_meth_names )
191+     try :
192+         __openssl_fips_mode  =  _hashlib .get_fips_mode ()
193+     except  ValueError :
194+         __openssl_fips_mode  =  0 
191195except  ImportError :
192196    _hashlib  =  None 
193197    new  =  __py_new 
194198    __get_hash  =  __get_builtin_constructor 
199+     __openssl_fips_mode  =  0 
195200
196201try :
197202    # OpenSSL's PKCS5_PBKDF2_HMAC requires OpenSSL 1.0+ with HMAC and SHA 
0 commit comments