o
    "g;)                     @   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r8ddlmZmZ ne dkrGddlmZmZ nddlmZmZ ejrXd 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   sR   t tdt zddlm  m  m  m}  t | dt W dS  ty(   Y dS w )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urllib3_ssl 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_ssl/   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__=   s   zSSLContext.__class__Nprotocolc                 C   s(   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&   L   s   
z=SSLContext.__init__.<locals>.TruststoreSSLObject.do_handshaker   N)__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$   sessionc              	   C   sn   t | j | jj||||||d}W d    n1 sw   Y  z	t||d W |S  ty6   |   w )N)r5   r$   r6   r7   r8   r#   )r   r0   wrap_socketr'   	Exceptionclose)r    r4   r5   r6   r7   r$   r8   ssl_sockr   r   r   r9   S   s"   	zSSLContext.wrap_socketincomingoutgoingc                 C   sF   t | j | jj|||||d}W d    |S 1 sw   Y  |S )N)r$   r5   r8   )r   r0   wrap_bio)r    r=   r>   r5   r$   r8   ssl_objr   r   r   r?   o   s   
zSSLContext.wrap_biocafilecapathcadatar   c                 C      | j j|||dS )N)rA   rB   rC   )r0   load_verify_locations)r    rA   rB   rC   r   r   r   rE         z SSLContext.load_verify_locationscertfilekeyfilepasswordc                 C   rD   )N)rG   rH   rI   )r0   load_cert_chain)r    rG   rH   rI   r   r   r   rJ      rF   zSSLContext.load_cert_chainpurposec                 C      | j |S r   )r0   load_default_certs)r    rK   r   r   r   rM      s   zSSLContext.load_default_certsalpn_protocolsc                 C   rL   r   )r0   set_alpn_protocols)r    rN   r   r   r   rO         zSSLContext.set_alpn_protocolsnpn_protocolsc                 C   rL   r   )r0   set_npn_protocols)r    rQ   r   r   r   rR      rP   zSSLContext.set_npn_protocols_SSLContext__cipherlistc                 C   rL   r   )r0   set_ciphers)r    rS   r   r   r   rT      rP   zSSLContext.set_ciphersc                 C   
   | j  S r   )r0   get_ciphersr   r   r   r   rV         
zSSLContext.get_ciphersc                 C   rU   r   )r0   session_statsr   r   r   r   rX      rW   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   )r0   set_default_verify_pathsr   r   r   r   r^      s   z#SSLContext.set_default_verify_paths.binary_formc                 C      d S r   r   r    r_   r   r   r   get_ca_certs   s   zSSLContext.get_ca_certsc                 C   r`   r   r   ra   r   r   r   rb         c                 C   r`   r   r   ra   r   r   r   rb      rc   c                 C   rY   r   rZ   ra   r   r   r   rb      r]   c                 C      | j jS r   r0   check_hostnamer   r   r   r   rf         zSSLContext.check_hostnamevaluec                 C      || j _d S r   re   r    rh   r   r   r   rf         c                 C   rd   r   r0   hostname_checks_common_namer   r   r   r   rm      rg   z&SSLContext.hostname_checks_common_namec                 C   ri   r   rl   rj   r   r   r   rm      rk   c                 C   rd   r   r0   keylog_filenamer   r   r   r   ro      rg   zSSLContext.keylog_filenamec                 C   ri   r   rn   rj   r   r   r   ro      rk   c                 C   rd   r   )r0   maximum_versionr   r   r   r   rp      rg   zSSLContext.maximum_versionc                 C      t j| j| d S r   )r   rp   __set__r0   rj   r   r   r   rp         c                 C   rd   r   )r0   minimum_versionr   r   r   r   rt      rg   zSSLContext.minimum_versionc                 C   rq   r   )r   rt   rr   r0   rj   r   r   r   rt      rs   c                 C   rd   r   )r0   optionsr   r   r   r   ru      rg   zSSLContext.optionsc                 C   rq   r   )r   ru   rr   r0   rj   r   r   r   ru      rs   c                 C   rd   r   r0   post_handshake_authr   r   r   r   rw      rg   zSSLContext.post_handshake_authc                 C   ri   r   rv   rj   r   r   r   rw      rk   c                 C   rd   r   )r0   r"   r   r   r   r   r"      rg   zSSLContext.protocolc                 C   rd   r   )r0   security_levelr   r   r   r   rx      rg   zSSLContext.security_levelc                 C   rd   r   )r0   verify_flagsr   r   r   r   ry     rg   zSSLContext.verify_flagsc                 C   rq   r   )r   ry   rr   r0   rj   r   r   r   ry     rs   c                 C   rd   r   )r0   verify_moder   r   r   r   rz     rg   zSSLContext.verify_modec                 C   rq   r   )r   rz   rr   r0   rj   r   r   r   rz     rs   r   )FTTNN)FNN)NNN)NNr*   ).)F)>r+   r,   r-   __doc__propertytyper!   intr3   socketboolstrr   
SSLSession	SSLSocketr9   	MemoryBIOr1   r?   bytesosPathLiketypingUnionrE   r   r   rJ   PurposeSERVER_AUTHrM   IterablerO   rR   rT   AnyrV   dictrX   r\   r^   overloadLiterallistrb   rf   setterrm   ro   
TLSVersionrp   rt   Optionsru   rw   
_SSLMethodr"   rx   VerifyFlagsry   
VerifyModerz   r   r   r   r   r   :   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>  s    /_get_unverified_chain_bytes.<locals>.<listcomp>get_unverified_chainr   unverified_chainr   r   r   _get_unverified_chain_bytes  s   r   c                 C   r   )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$   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'   +  s   


r'   r*   )&r   platformr   r   sysr   r   _ssl_constantsr   r   r   r   system_windowsr   r	   _macos_opensslTYPE_CHECKINGpip._vendor.typing_extensionsr   r   r   r   r   	TypeAlias__annotations__Callabler   r   r   r   version_infor1   r   r   r   r'   r   r   r   r   <module>   s>   
 &$

 
b	
