a f @sjddlmZddlZddlZddlZddlZGdddZddZddd Zd d Z d d Z dddZ dS))absolute_importNc@seZdZdZddZdS)DevNullza Simple class to supress errors which may occur when importing hashlib in FIPS mode. cCsdS)N)selfmsgrr,/usr/lib/python3.9/site-packages/oci/fips.pywritesz DevNull.writeN)__name__ __module__ __qualname____doc__rrrrrr srcCs8t|}|tdddl}t|ds4|j|_dS)zQ Override libcrypto and add FIPS_mode function to ssl if it is not there rN FIPS_mode)ctypesZCDLLZ FIPS_mode_setZc_intsslhasattrr)fips_libcrypto_pathZ _bs_cryptorrrroverride_libcryptos   rcCs tddS)zm Placeholder md5 function for hashlib so it won't segfault when called after enabling FIPS mode. zmd5 disabled for fipsN) ValueError)Zintitial_messagerrrmd5!src CsBtj}ztt_ddl}Wnttfy0Yn0|t_t|_dS)z hashlib.md5 is imported by urllib3, which is required by requests, which is used by oci (python sdk). This will cause errors so we need to patch hashlib. rN)sysstderrrhashlib RuntimeErrorrr)rrrrrpatch_hashlib_md5*s rcCsZddl}ddl}t|dsdS|dkr.dSz|d}WdStyTYn0dS)zZ Verify that ssl.FIPS_mode() returns 1 and that using md5 raises an exception rNrFr Hello World T)rrrrr hexdigestr)rrdigestrrr is_fips_mode;s   rcCstdttt}|t|sRdtj vr>tj d}ndtj vrRtj d}|rt |ddl }z| d }tWntyYn0|d|tr|dn |d dS) zG Enable FIPS mode by overriding libcrypto and patching hashlib z{}.{}ZFIPS_LIBCRYPTO_PATHZ"OCI_PYTHON_SDK_FIPS_LIBCRYPTO_PATHrNrzUsing '{}' for libcyptozFIPS mode is activezFailed to enter FIPS mode)loggingZ getLoggerformatr idenable_fips_modeZ addHandlerZ NullHandlerosenvironrrrrrrinforerror)rloggerrrrrrr#Ss&       r#)r)N) Z __future__rrrr r$rrrrrr#rrrrs