U
    8h;)                     @   s  U 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m	Z	m
Z
mZ e dkrpddlmZmZ n.e dkrddlmZmZ nddlmZmZ ejrd dlmZ eeB e je B e je B Zejed< eeB ejg eeB f B Zejed	< dd
ddZdd
ddZG dd deZej dkrJej!e"e dddZ#nej!e"e dddZ#ej$ej!B edB ddddZ%dS )    N   )_original_SSLContext_original_super_SSLContext#_truststore_SSLContext_dunder_class"_truststore_SSLContext_super_classWindows)_configure_context_verify_peercerts_implDarwin)Buffer_StrOrBytesPath_PasswordTypereturnc                  C   sT   t tdt z.ddlm  m  m  m}  t | dt W n tk
rN   Y nX dS )zqInjects the :class:`truststore.SSLContext` into the ``ssl``
    module by replacing :class:`ssl.SSLContext`.
    
SSLContextr   N)	setattrsslr   pip._vendor.urllib3.util.ssl__vendorurllib3utilssl_ImportErrorZurllib3_ssl r   YC:\Users\jeffr\AppData\Local\Temp\pip-install-hfyjq797\pip\pip\_vendor\truststore\_api.pyinject_into_ssl    s    r   c                  C   sN   t tdt z(ddlm  m  m  m}  t| _W n t	k
rH   Y nX dS )z@Restores the :class:`ssl.SSLContext` class to its original stater   r   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   extract_from_ssl/   s    
r   c                	   @   s  e Zd ZdZeedddZdSeddddZdTe	j	e
e
e
edB ejdB ejdddZdUejeje
edB ejdB ejdddZdVeeB eje B eje B dB eeB eje B eje B dB ejeddf ddddZdWeedB edB ddddZejjfejddddZeje ddddZ eje dddd Z!edd!d"d#Z"ej#dd$d%Z$e%eef dd&d'Z&e%eef dd(d)Z'ddd*d+Z(ej)dXej*d	 e+ej# d-d.d/Z,ej)dYej*d
 e+e d-d0d/Z,ej)dZe
ej#d-d1d/Z,d[e
e+ej# e+e B d-d2d/Z,ee
dd3d4Z-e-j.e
dd5d6d4Z-ee
dd7d8Z/e/j.e
dd5d9d8Z/eedd:d;Z0e0j.edd5d<d;Z0eej1dd=d>Z2e2j.ej1dd5d?d>Z2eej1dd@dAZ3e3j.ej1dd5dBdAZ3eej4ddCdDZ5e5j.ej4dd5dEdDZ5ee
ddFdGZ6e6j.e
dd5dHdGZ6eej7ddIdJZ8eeddKdLZ9eej:ddMdNZ;e;j.ej:dd5dOdNZ;eej<ddPdQZ=e=j.ej<dd5dRdQZ=dS )\r   z=SSLContext API that uses system certificates on all platformsr   c                 C   s   t ptS N)r   r   selfr   r   r   	__class__=   s    zSSLContext.__class__N)protocolr   c                 C   s(   t || _G dd dtj}|| j_d S )Nc                       s"   e Zd Zdd fddZ  ZS )z0SSLContext.__init__.<locals>.TruststoreSSLObjectNr   c                    s   t   }t| | jd |S )Nserver_hostname)superdo_handshake_verify_peercertsr$   )r    retr!   r   r   r&   L   s    
z=SSLContext.__init__.<locals>.TruststoreSSLObject.do_handshake)__name__
__module____qualname__r&   __classcell__r   r   r)   r   TruststoreSSLObjectG   s   r.   )r   _ctxr   	SSLObjectsslobject_class)r    r"   r.   r   r   r   __init__D   s    

zSSLContext.__init__FT)sockserver_sidedo_handshake_on_connectsuppress_ragged_eofsr$   sessionr   c              	   C   sb   t | j | jj||||||d}W 5 Q R X zt||d W n tk
r\   |   Y nX |S )N)r4   r$   r5   r6   r7   r#   )r   r/   wrap_socketr'   	Exceptionclose)r    r3   r4   r5   r6   r$   r7   Zssl_sockr   r   r   r8   S   s    zSSLContext.wrap_socket)incomingoutgoingr4   r$   r7   r   c              	   C   s0   t | j | jj|||||d}W 5 Q R X |S )N)r$   r4   r7   )r   r/   wrap_bio)r    r;   r<   r4   r$   r7   Zssl_objr   r   r   r=   o   s    zSSLContext.wrap_bior   )cafilecapathcadatar   c                 C   s   | j j|||dS )N)r>   r?   r@   )r/   load_verify_locations)r    r>   r?   r@   r   r   r   rA      s
      z SSLContext.load_verify_locations)certfilekeyfilepasswordr   c                 C   s   | j j|||dS )N)rB   rC   rD   )r/   load_cert_chain)r    rB   rC   rD   r   r   r   rE      s
      zSSLContext.load_cert_chain)purposer   c                 C   s   | j |S r   )r/   load_default_certs)r    rF   r   r   r   rG      s    zSSLContext.load_default_certs)alpn_protocolsr   c                 C   s   | j |S r   )r/   set_alpn_protocols)r    rH   r   r   r   rI      s    zSSLContext.set_alpn_protocols)npn_protocolsr   c                 C   s   | j |S r   )r/   set_npn_protocols)r    rJ   r   r   r   rK      s    zSSLContext.set_npn_protocols)_SSLContext__cipherlistr   c                 C   s   | j |S r   )r/   set_ciphers)r    rL   r   r   r   rM      s    zSSLContext.set_ciphersc                 C   s
   | j  S r   )r/   get_ciphersr   r   r   r   rN      s    zSSLContext.get_ciphersc                 C   s
   | j  S r   )r/   session_statsr   r   r   r   rO      s    zSSLContext.session_statsc                 C   s
   t  d S r   NotImplementedErrorr   r   r   r   cert_store_stats   s    zSSLContext.cert_store_statsc                 C   s   | j   d S r   )r/   set_default_verify_pathsr   r   r   r   rS      s    z#SSLContext.set_default_verify_paths.)binary_formr   c                 C   s   d S r   r   r    rT   r   r   r   get_ca_certs   s    zSSLContext.get_ca_certsc                 C   s   d S r   r   rU   r   r   r   rV      s    c                 C   s   d S r   r   rU   r   r   r   rV      s    c                 C   s
   t  d S r   rP   rU   r   r   r   rV      s    c                 C   s   | j jS r   r/   check_hostnamer   r   r   r   rX      s    zSSLContext.check_hostname)valuer   c                 C   s   || j _d S r   rW   r    rY   r   r   r   rX      s    c                 C   s   | j jS r   r/   hostname_checks_common_namer   r   r   r   r\      s    z&SSLContext.hostname_checks_common_namec                 C   s   || j _d S r   r[   rZ   r   r   r   r\      s    c                 C   s   | j jS r   r/   keylog_filenamer   r   r   r   r^      s    zSSLContext.keylog_filenamec                 C   s   || j _d S r   r]   rZ   r   r   r   r^      s    c                 C   s   | j jS r   )r/   maximum_versionr   r   r   r   r_      s    zSSLContext.maximum_versionc                 C   s   t j| j| d S r   )r   r_   __set__r/   rZ   r   r   r   r_      s     c                 C   s   | j jS r   )r/   minimum_versionr   r   r   r   ra      s    zSSLContext.minimum_versionc                 C   s   t j| j| d S r   )r   ra   r`   r/   rZ   r   r   r   ra      s     c                 C   s   | j jS r   )r/   optionsr   r   r   r   rb      s    zSSLContext.optionsc                 C   s   t j| j| d S r   )r   rb   r`   r/   rZ   r   r   r   rb      s     c                 C   s   | j jS r   r/   post_handshake_authr   r   r   r   rd      s    zSSLContext.post_handshake_authc                 C   s   || j _d S r   rc   rZ   r   r   r   rd      s    c                 C   s   | j jS r   )r/   r"   r   r   r   r   r"      s    zSSLContext.protocolc                 C   s   | j jS r   )r/   security_levelr   r   r   r   re      s    zSSLContext.security_levelc                 C   s   | j jS r   )r/   verify_flagsr   r   r   r   rf     s    zSSLContext.verify_flagsc                 C   s   t j| j| d S r   )r   rf   r`   r/   rZ   r   r   r   rf     s     c                 C   s   | j jS r   )r/   verify_moder   r   r   r   rg     s    zSSLContext.verify_modec                 C   s   t j| j| d S r   )r   rg   r`   r/   rZ   r   r   r   rg     s     )N)FTTNN)FNN)NNN)NN).).).)F)>r*   r+   r,   __doc__propertytyper!   intr2   socketboolstrr   
SSLSession	SSLSocketr8   	MemoryBIOr0   r=   bytesosPathLiketypingUnionrA   r   r   rE   PurposeSERVER_AUTHrG   IterablerI   rK   rM   ZAnyrN   dictrO   rR   rS   ZoverloadLiterallistrV   rX   setterr\   r^   
TLSVersionr_   ra   Optionsrb   rd   
_SSLMethodr"   re   VerifyFlagsrf   
VerifyModerg   r   r   r   r   r   :   s                   r   )      )sslobjr   c                 C   s   |   p
d}dd |D S )Nr   c                 S   s&   g | ]}t |tr|n
|tjqS r   )
isinstancerr   public_bytes_sslENCODING_DER.0certr   r   r   
<listcomp>  s   /_get_unverified_chain_bytes.<locals>.<listcomp>get_unverified_chainr   Zunverified_chainr   r   r   _get_unverified_chain_bytes  s    r   c                 C   s   |   p
d}dd |D S )Nr   c                 S   s   g | ]}| tjqS r   )r   r   r   r   r   r   r   r   (  s     r   r   r   r   r   r   r   &  s    )sock_or_sslobjr$   r   c                 C   sL   | }zt |ds|j}qW n tk
r.   Y nX t|}t| j||d dS )z{
    Verifies the peer certificates from an SSLSocket or SSLObject
    against the certificates in the OS trust store.
    r   r#   N)hasattr_sslobjAttributeErrorr   r	   context)r   r$   r   Z
cert_bytesr   r   r   r'   +  s    
  r'   )&rs   platformrl   r   sysru   r   Z_ssl_constantsr   r   r   r   systemZ_windowsr   r	   Z_macosZ_opensslZTYPE_CHECKINGZpip._vendor.typing_extensionsr   rn   rr   rt   r   Z	TypeAlias__annotations__Callabler   r   r   r   version_infor0   r|   r   rp   r'   r   r   r   r   <module>   s8    &$ b	
 