o
    6i,                     @   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Zd dlZddl	m
Z
mZmZmZ e dkr@ddlmZmZ ne dkrOddlmZmZ nddlmZmZ ejr`d 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ZdddZ G dd deZ!ej"dkrdej#d
e$e fddZ%ndej#d
e$e fddZ%dej&ej#B dedB d
df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   s   t tdt zddlm  m  m  m}  t | dt W n	 ty&   Y nw zddl	m
} t|dd}|durDt |dttj W dS W dS  tyP   Y dS w )zqInjects the :class:`truststore.SSLContext` into the ``ssl``
    module by replacing :class:`ssl.SSLContext`.
    
SSLContextr   N)adapters_preloaded_ssl_context)setattrsslr   pip._vendor.urllib3.util.ssl__vendorurllib3utilssl_ImportErrorpip._vendor.requestsr   getattrPROTOCOL_TLS_CLIENT)urllib3_sslrequests_adapterspreloaded_context r    Z/root/parts/websockify/install/lib/python3.10/site-packages/pip/_vendor/truststore/_api.pyinject_into_ssl"   s(   
r"   c                  C   sL   t tdt zddlm  m  m  m}  t| _W dS  t	y%   Y dS w )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_sslB   s   r#   c                   @   s   e Zd ZdZedefddZd]deddfddZ			
	
		d^de	j	de
de
de
dedB dejdB dejfddZ				d_dejdejde
dedB dejdB dejfddZ			d`deeB eje B eje B dB deeB eje B eje B dB dejeddf ddfddZ		dadededB dedB ddfd d!Zejjfd"ejddfd#d$Zd%eje ddfd&d'Z d(eje ddfd)d*Z!d+eddfd,d-Z"dej#fd.d/Z$de%eef fd0d1Z&de%eef fd2d3Z'dbd4d5Z(ej)	6dcd7ej*d	 de+ej# fd8d9Z,ej)dcd7ej*d
 de+e fd:d9Z,ej)dcd7e
dej#fd;d9Z,ddd7e
de+ej# e+e B fd<d9Z,ede
fd=d>Z-e-j.d?e
ddfd@d>Z-ede
fdAdBZ/e/j.d?e
ddfdCdBZ/edefdDdEZ0e0j.d?eddfdFdEZ0edej1fdGdHZ2e2j.d?ej1ddfdIdHZ2edej1fdJdKZ3e3j.d?ej1ddfdLdKZ3edej4fdMdNZ5e5j.d?ej4ddfdOdNZ5ede
fdPdQZ6e6j.d?e
ddfdRdQZ6edej7fdSdTZ8edefdUdVZ9edej:fdWdXZ;e;j.d?ej:ddfdYdXZ;edej<fdZd[Z=e=j.d?ej<ddfd\d[Z=dS )er   z=SSLContext API that uses system certificates on all platformsr   c                 C   s   t ptS N)r   r   selfr    r    r!   	__class__P   s   zSSLContext.__class__Nprotocolc                 C   s2   t || _t | _G dd dtj}|| j_d S )Nc                       s   e Zd Zd fddZ  ZS )z0SSLContext.__init__.<locals>.TruststoreSSLObjectr   Nc                    s   t   }t| | jd |S )Nserver_hostname)superdo_handshake_verify_peercertsr*   )r&   retr'   r    r!   r,   `   s   
z=SSLContext.__init__.<locals>.TruststoreSSLObject.do_handshaker   N)__name__
__module____qualname__r,   __classcell__r    r    r/   r!   TruststoreSSLObject[   s    r5   )r   _ctx	threadingLock	_ctx_lockr   	SSLObjectsslobject_class)r&   r(   r5   r    r    r!   __init__W   s   


zSSLContext.__init__FTsockserver_sidedo_handshake_on_connectsuppress_ragged_eofsr*   sessionc           	   	   C   s   t  /}| j |t| j W d    n1 sw   Y  | jj||||||d}W d    n1 s6w   Y  z	t||d W |S  tyP   |	   w )N)r>   r*   r?   r@   rA   r)   )

contextlib	ExitStackr9   enter_contextr   r6   wrap_socketr-   	Exceptionclose)	r&   r=   r>   r?   r@   r*   rA   stackssl_sockr    r    r!   rE   g   s(   
zSSLContext.wrap_socketincomingoutgoingc                 C   sF   t | j | jj|||||d}W d    |S 1 sw   Y  |S )N)r*   r>   rA   )r   r6   wrap_bio)r&   rJ   rK   r>   r*   rA   ssl_objr    r    r!   rL      s   
zSSLContext.wrap_biocafilecapathcadatar   c                 C      | j j|||dS )N)rN   rO   rP   )r6   load_verify_locations)r&   rN   rO   rP   r    r    r!   rR         z SSLContext.load_verify_locationscertfilekeyfilepasswordc                 C   rQ   )N)rT   rU   rV   )r6   load_cert_chain)r&   rT   rU   rV   r    r    r!   rW      rS   zSSLContext.load_cert_chainpurposec                 C      | j |S r$   )r6   load_default_certs)r&   rX   r    r    r!   rZ      s   zSSLContext.load_default_certsalpn_protocolsc                 C   rY   r$   )r6   set_alpn_protocols)r&   r[   r    r    r!   r\         zSSLContext.set_alpn_protocolsnpn_protocolsc                 C   rY   r$   )r6   set_npn_protocols)r&   r^   r    r    r!   r_      r]   zSSLContext.set_npn_protocols_SSLContext__cipherlistc                 C   rY   r$   )r6   set_ciphers)r&   r`   r    r    r!   ra      r]   zSSLContext.set_ciphersc                 C   
   | j  S r$   )r6   get_ciphersr%   r    r    r!   rc         
zSSLContext.get_ciphersc                 C   rb   r$   )r6   session_statsr%   r    r    r!   re      rd   zSSLContext.session_statsc                 C      t  r$   NotImplementedErrorr%   r    r    r!   cert_store_stats      zSSLContext.cert_store_statsc                 C   s   | j   d S r$   )r6   set_default_verify_pathsr%   r    r    r!   rk      s   z#SSLContext.set_default_verify_paths.binary_formc                 C      d S r$   r    r&   rl   r    r    r!   get_ca_certs   s   zSSLContext.get_ca_certsc                 C   rm   r$   r    rn   r    r    r!   ro         c                 C   rm   r$   r    rn   r    r    r!   ro      rp   c                 C   rf   r$   rg   rn   r    r    r!   ro      rj   c                 C      | j jS r$   r6   check_hostnamer%   r    r    r!   rs         zSSLContext.check_hostnamevaluec                 C      || j _d S r$   rr   r&   ru   r    r    r!   rs         c                 C   rq   r$   r6   hostname_checks_common_namer%   r    r    r!   rz      rt   z&SSLContext.hostname_checks_common_namec                 C   rv   r$   ry   rw   r    r    r!   rz      rx   c                 C   rq   r$   r6   keylog_filenamer%   r    r    r!   r|      rt   zSSLContext.keylog_filenamec                 C   rv   r$   r{   rw   r    r    r!   r|      rx   c                 C   rq   r$   )r6   maximum_versionr%   r    r    r!   r}      rt   zSSLContext.maximum_versionc                 C      t j| j| d S r$   )r   r}   __set__r6   rw   r    r    r!   r}         c                 C   rq   r$   )r6   minimum_versionr%   r    r    r!   r      rt   zSSLContext.minimum_versionc                 C   r~   r$   )r   r   r   r6   rw   r    r    r!   r      r   c                 C   rq   r$   )r6   optionsr%   r    r    r!   r     rt   zSSLContext.optionsc                 C   r~   r$   )r   r   r   r6   rw   r    r    r!   r     r   c                 C   rq   r$   r6   post_handshake_authr%   r    r    r!   r     rt   zSSLContext.post_handshake_authc                 C   rv   r$   r   rw   r    r    r!   r     rx   c                 C   rq   r$   )r6   r(   r%   r    r    r!   r(     rt   zSSLContext.protocolc                 C   rq   r$   )r6   security_levelr%   r    r    r!   r     rt   zSSLContext.security_levelc                 C   rq   r$   )r6   verify_flagsr%   r    r    r!   r     rt   zSSLContext.verify_flagsc                 C   r~   r$   )r   r   r   r6   rw   r    r    r!   r      r   c                 C   rq   r$   )r6   verify_moder%   r    r    r!   r   &  rt   zSSLContext.verify_modec                 C   r~   r$   )r   r   r   r6   rw   r    r    r!   r   *  r   r$   )FTTNN)FNN)NNN)NNr0   ).)F)>r1   r2   r3   __doc__propertytyper'   intr<   socketboolstrr   
SSLSession	SSLSocketrE   	MemoryBIOr:   rL   bytesosPathLiketypingUnionrR   r   r   rW   PurposeSERVER_AUTHrZ   Iterabler\   r_   ra   Anyrc   dictre   ri   rk   overloadLiterallistro   rs   setterrz   r|   
TLSVersionr}   r   Optionsr   r   
_SSLMethodr(   r   VerifyFlagsr   
VerifyModer   r    r    r    r!   r   M   s   
%




 "r   )      sslobjc                 C      |   pd}dd |D S )Nr    c                 S   s&   g | ]}t |tr|n|tjqS r    )
isinstancer   public_bytes_sslENCODING_DER.0certr    r    r!   
<listcomp>8  s    /_get_unverified_chain_bytes.<locals>.<listcomp>get_unverified_chainr   unverified_chainr    r    r!   _get_unverified_chain_bytes6  s   r   c                 C   r   )Nr    c                 S   s   g | ]}| tjqS r    )r   r   r   r   r    r    r!   r   A  s    r   r   r   r    r    r!   r   ?  s   sock_or_sslobjr*   c                 C   sR   | }zt |ds|j}t |drW n	 ty   Y nw 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   
cert_bytesr    r    r!   r-   D  s   


r-   r0   )(rB   r   platformr   r   sysr7   r   r   _ssl_constantsr   r   r   r   system_windowsr   r	   _macos_opensslTYPE_CHECKINGtyping_extensionsr   r   r   r   r   	TypeAlias__annotations__Callabler   r"   r#   r   version_infor:   r   r   r   r-   r    r    r    r!   <module>   sB   
 &$

  
h	
