File: //lib/python3.9/site-packages/oci/__pycache__/fips.cpython-39.opt-1.pyc
a
���f� � @ sj d dl mZ d dlZd dlZd dlZd dlZG dd� d�Zdd� Zddd �Zd
d� Z dd
� Z
ddd�ZdS )� )�absolute_importNc @ s e Zd ZdZdd� ZdS )�DevNullza
Simple class to supress errors which may occur when importing hashlib
in FIPS mode.
c C s d S )N� )�self�msgr r �,/usr/lib/python3.9/site-packages/oci/fips.py�write s z
DevNull.writeN)�__name__�
__module__�__qualname__�__doc__r r r r r r s r c C s8 t �| �}|�t �d�� ddl}t|d�s4|j|_dS )zQ
Override libcrypto and add FIPS_mode function to ssl if it is not there
� r N� FIPS_mode)�ctypesZCDLLZ
FIPS_mode_setZc_int�ssl�hasattrr )�fips_libcrypto_pathZ
_bs_cryptor r r r �override_libcrypto s
r � c C s t d��dS )zm
Placeholder md5 function for hashlib so it won't segfault when called after
enabling FIPS mode.
zmd5 disabled for fipsN)�
ValueError)Zintitial_messager r r �md5! s r c C sB t j} zt� t _ddl}W n ttfy0 Y n0 | 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.
r N)�sys�stderrr �hashlib�RuntimeErrorr r )r r r r r �patch_hashlib_md5* s r c C sZ ddl } ddl}t|d�sdS |�� dkr.dS z| �d��� }W dS tyT Y n0 dS )zZ
Verify that ssl.FIPS_mode() returns 1 and that using md5 raises an
exception
r Nr Fr
� Hello World
T)r r r r r � hexdigestr )r r �digestr r r �is_fips_mode; s
r c C s� t �d�ttt���}|�t �� � | sRdtj v r>tj d } ndtj v rRtj d } | r�t
| � ddl}z|�d��
� }t� W n ty� Y n0 |�d�| �� t� r�|�d� n
|�d � dS )
zG
Enable FIPS mode by overriding libcrypto and patching hashlib
z{}.{}ZFIPS_LIBCRYPTO_PATHZ"OCI_PYTHON_SDK_FIPS_LIBCRYPTO_PATHr Nr zUsing '{}' for libcyptozFIPS mode is activezFailed to enter FIPS mode)�loggingZ getLogger�formatr �id�enable_fips_modeZ
addHandlerZNullHandler�os�environr r r r r r �infor �error)r �loggerr r r r r r# S s&