U
    EZh                     @   sB  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZ deejejej  ddddZedd	d
dZejejeejg eje f f ejdddZG dd dZeddddZeej e  ejdkr,e j ddk	r,ej!de"dd dd Z#e#ej$ dS )    N)utils)InternalError)_opensslopenssl)CONDITIONAL_NAMES)okerrorsreturnc                 C   s(   |s$|d krt  }td||d S )Nah  Unknown OpenSSL error. This error is commonly encountered when another library is not cleaning up the OpenSSL error stack. If you are using cryptography with another library that uses OpenSSL try disabling it before reporting a bug. Otherwise please file an issue at https://github.com/pyca/cryptography/issues with information on how to reproduce this. ({!r}))r   Zcapture_error_stackr   format)libr   r    r   s/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/bindings/openssl/binding.py_openssl_assert   s    r   )loadedr	   c                 C   s   | st dd S )Na1  OpenSSL 3.0's legacy provider failed to load. This is a fatal error by default, but cryptography supports running without legacy algorithms by setting the environment variable CRYPTOGRAPHY_OPENSSL_NO_LEGACY. If you did not expect this error, you have likely made a mistake with your OpenSSL configuration.)RuntimeError)r   r   r   r   _legacy_provider_error(   s    r   )r   conditional_namesr	   c                 C   sj   t d}| |_t }| D ]\}}t| |s||  qt| D ]}||krFt||t| | qF|S )Nr   )	types
ModuleTypeZ_original_libsetitemsgetattrupdatedirsetattr)r   r   Zconditional_libZexcluded_names	conditionZnames_cbattrr   r   r   build_conditional_library3   s    

r   c                   @   s   e Zd ZU dZdZejed< ej	Z	dZ
e Ze	jZejed< dZe	jZejed< dddd	Zddd
dZeddddZeddddZeddddZdS )Bindingz
    OpenSSL API wrapper.
    Nr   F_legacy_provider_default_provider)r	   c                 C   s   |    d S N_ensure_ffi_initialized)selfr   r   r   __init__R   s    zBinding.__init__c                 C   s   t | j| jj | j| jjd| _t | j| j| jjk | j| jjd| j_t | j| jj| jjk | j| jjd}t | j|dk d S )Ns   bases   fips   )	r   r   #CRYPTOGRAPHY_OPENSSL_300_OR_GREATEROSSL_PROVIDER_loadffiNULLZ_base_providerZ_fips_providerZ"EVP_default_properties_enable_fips)r$   resr   r   r   _enable_fipsU   s      zBinding._enable_fipsc                 C   s0   | j   | j jr,| j  }t| j |dk d S )N)r&      )r   ZERR_clear_errorZ"CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINEZ Cryptography_add_osrandom_enginer   )clsresultr   r   r   _register_osrandom_enginee   s    

z!Binding._register_osrandom_enginec              	   C   s   | j  | jsttjt| _d| _|   | jjrtj	
dsl| j| jjd| _| j| jjk| _t| j | j| jjd| _t| j| j| jjk W 5 Q R X d S )NTZCRYPTOGRAPHY_OPENSSL_NO_LEGACYs   legacys   default)
_init_lock_lib_loadedr   r   r   r   r0   r'   osenvirongetr(   r)   r*   r   _legacy_provider_loadedr   r    r   r.   r   r   r   r#   q   s2      
  zBinding._ensure_ffi_initializedc                 C   s   |    d S r!   r"   r7   r   r   r   init_static_locks   s    zBinding.init_static_locks)__name__
__module____qualname____doc__r   typingClassVar__annotations__r   r)   r2   	threadingLockr1   r*   r   Anyr6   r    r%   r,   classmethodr0   r#   r8   r   r   r   r   r   E   s    
r   )versionr	   c                 C   sL   t jt jj}| d|kr.td| |tt jt j	 t
 k d S )Nasciia  The version of cryptography does not match the loaded shared object. This can happen if you have multiple copies of cryptography installed in your Python path. Please try creating a new virtual environment to resolve this issue. Loaded python version: {}, shared object version: {})r   r)   stringr   ZCRYPTOGRAPHY_PACKAGE_VERSIONencodeImportErrorr
   r   ZOpenSSL_version_numr   openssl_version)rD   Zso_package_versionr   r   r   _verify_package_version   s     
rJ   win32PROCESSOR_ARCHITEW6432zYou are using cryptography on a 32-bit Python on a 64-bit Windows Operating System. Cryptography will be significantly faster if you switch to using a 64-bit Python.r-   )
stacklevelc                 C   s$   | j s | js | js tdtj d S )NzSupport for OpenSSL less than version 1.1.1d is deprecated and the next release of cryptography will drop support. Please upgrade your OpenSSL to version 1.1.1d or newer.)Z$CRYPTOGRAPHY_OPENSSL_111D_OR_GREATERZCRYPTOGRAPHY_IS_LIBRESSLZCRYPTOGRAPHY_IS_BORINGSSLwarningswarnr   ZDeprecatedIn40)r   r   r   r   _verify_openssl_version   s    rP   )N)%r3   sysr@   r   r=   rN   Zcryptographyr   Zcryptography.exceptionsr   Z"cryptography.hazmat.bindings._rustr   r   Z1cryptography.hazmat.bindings.openssl._conditionalr   boolOptionalListZOpenSSLErrorr   r   rB   DictstrCallabler   r   rJ   __version__r8   platformr4   r5   rO   UserWarningrP   r   r   r   r   r   <module>   sH    P
	