
    &`e&                        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mZmZm	Z	m
Z
  ej                    dk    r	ddlmZmZ n$ ej                    dk    r	ddlmZmZ nddlmZmZ ej        rd dlmZ eez  e j        e         z  e j        e         z  Zej        ed<   eez  ej        g eez  f         z  Zej        ed	<   ddZddZ G d de
          Zdej        ej         z  dedz  d
df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                      t          t          dt                     	 ddlmc m}  t          | dt                     dS # t          $ r Y dS w xY w)zqInjects the :class:`truststore.SSLContext` into the ``ssl``
    module by replacing :class:`ssl.SSLContext`.
    
SSLContextr   N)setattrsslr   urllib3.util.ssl_utilssl_ImportErrorurllib3_ssls    /lib/python3.11/site-packages/truststore/_api.pyinject_into_sslr      sp     Cz***/////////\:66666   s   > 
AAc                      t          t          dt                     	 ddlmc m}  t          | _        dS # t          $ r Y dS w xY w)z@Restores the :class:`ssl.SSLContext` class to its original stater   r   N)r   r   r   r   r   r   r   r   r   s    r   extract_from_sslr   .   se    C3444/////////!5   s   4 
AAc                      e Zd ZdZedefd            ZdBdeddfdZ	 	 	 	 	 dCd	e	j	        d
e
de
de
dedz  dej        dz  dej        fdZ	 	 	 dDdej        dej        d
e
dedz  dej        dz  dej        fdZ	 	 	 dEdeez  ej        e         z  ej        e         z  dz  deez  ej        e         z  ej        e         z  dz  dej        eddf         ddfdZ	 	 dFdededz  dedz  ddfdZej        j        fdej        ddfdZdej        e         ddfdZ d ej        e         ddfd!Z!d"eddfd#Z"dej#        fd$Z$de%eef         fd%Z&de%eef         fd&Z'ej(        	 dGd(ej)        d         de*ej#                 fd)            Z+ej(        dGd(ej)        d         de*e         fd*            Z+ej(        dGd(e
dej#        fd+            Z+dHd(e
de*ej#                 e*e         z  fd,Z+ede
fd-            Z,e,j-        d.e
ddfd/            Z,ede
fd0            Z.e.j-        d.e
ddfd1            Z.edefd2            Z/e/j-        d.eddfd3            Z/edej0        fd4            Z1e1j-        d.ej0        ddfd5            Z1edej0        fd6            Z2e2j-        d.ej0        ddfd7            Z2edej3        fd8            Z4e4j-        d.ej3        ddfd9            Z4ede
fd:            Z5e5j-        d.e
ddfd;            Z5edej6        fd<            Z7edefd=            Z8edej9        fd>            Z:e:j-        d.ej9        ddfd?            Z:edej;        fd@            Z<e<j-        d.ej;        ddfdA            Z<dS )Ir   z=SSLContext API that uses system certificates on all platformsr   c                     t           pt          S N)r   r   selfs    r   	__class__zSSLContext.__class__<   s    
 3@j@    Nprotocolc                 v    t          |          | _         G d dt          j                  }|| j        _        d S )Nc                         e Zd Zd fdZ xZS )0SSLContext.__init__.<locals>.TruststoreSSLObjectr   Nc                 t    t                                                      }t          | | j                   |S )Nserver_hostname)superdo_handshake_verify_peercertsr+   )r"   retr#   s     r   r-   z=SSLContext.__init__.<locals>.TruststoreSSLObject.do_handshakeK   s3    gg**,,!$8LMMMM
r$   r   N)__name__
__module____qualname__r-   __classcell__)r#   s   @r   TruststoreSSLObjectr(   F   s=        
         r$   r5   )r   _ctxr   	SSLObjectsslobject_class)r"   r%   r5   s      r   __init__zSSLContext.__init__C   sO    (22		 	 	 	 	#- 	 	 	 %8	!!!r$   FTsockserver_sidedo_handshake_on_connectsuppress_ragged_eofsr+   sessionc           	      
   t          | j                  5  | j                            ||||||          }d d d            n# 1 swxY w Y   	 t          ||           n## t          $ r |                                  w xY w|S )N)r;   r+   r<   r=   r>   r*   )r	   r6   wrap_socketr.   	Exceptionclose)r"   r:   r;   r<   r=   r+   r>   ssl_socks           r   r@   zSSLContext.wrap_socketR   s      	** 	 	y,,' /(?%9 -  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 		hHHHHH 	 	 	NN	 s   !AA	AA    B incomingoutgoingc                     t          | j                  5  | j                            |||||          }d d d            n# 1 swxY w Y   |S )N)r+   r;   r>   )r	   r6   wrap_bio)r"   rD   rE   r;   r+   r>   ssl_objs          r   rG   zSSLContext.wrap_bion   s      	** 	 	i(( /' )  G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s    AAAcafilecapathcadatar   c                 <    | j                             |||          S )N)rI   rJ   rK   )r6   load_verify_locations)r"   rI   rJ   rK   s       r   rM   z SSLContext.load_verify_locations   s*     y..& / 
 
 	
r$   certfilekeyfilepasswordc                 <    | j                             |||          S )N)rN   rO   rP   )r6   load_cert_chain)r"   rN   rO   rP   s       r   rR   zSSLContext.load_cert_chain   s*     y((w ) 
 
 	
r$   purposec                 6    | j                             |          S r    )r6   load_default_certs)r"   rS   s     r   rU   zSSLContext.load_default_certs   s     y++G444r$   alpn_protocolsc                 6    | j                             |          S r    )r6   set_alpn_protocols)r"   rV   s     r   rX   zSSLContext.set_alpn_protocols   s    y++N;;;r$   npn_protocolsc                 6    | j                             |          S r    )r6   set_npn_protocols)r"   rY   s     r   r[   zSSLContext.set_npn_protocols   s    y**=999r$   _SSLContext__cipherlistc                 6    | j                             |          S r    )r6   set_ciphers)r"   r\   s     r   r^   zSSLContext.set_ciphers   s    y$$\222r$   c                 4    | j                                         S r    )r6   get_ciphersr!   s    r   r`   zSSLContext.get_ciphers   s    y$$&&&r$   c                 4    | j                                         S r    )r6   session_statsr!   s    r   rb   zSSLContext.session_stats   s    y&&(((r$   c                     t                      r    NotImplementedErrorr!   s    r   cert_store_statszSSLContext.cert_store_stats       !###r$   .binary_formc                     d S r     r"   rh   s     r   get_ca_certszSSLContext.get_ca_certs   s	     	r$   c                     d S r    rj   rk   s     r   rl   zSSLContext.get_ca_certs       r$   c                     d S r    rj   rk   s     r   rl   zSSLContext.get_ca_certs   rn   r$   c                     t                      r    rd   rk   s     r   rl   zSSLContext.get_ca_certs   rg   r$   c                     | j         j        S r    r6   check_hostnamer!   s    r   rs   zSSLContext.check_hostname       y''r$   valuec                     || j         _        d S r    rr   r"   ru   s     r   rs   zSSLContext.check_hostname   s    #(	   r$   c                     | j         j        S r    r6   hostname_checks_common_namer!   s    r   rz   z&SSLContext.hostname_checks_common_name   s    y44r$   c                     || j         _        d S r    ry   rw   s     r   rz   z&SSLContext.hostname_checks_common_name   s    05	---r$   c                     | j         j        S r    r6   keylog_filenamer!   s    r   r~   zSSLContext.keylog_filename       y((r$   c                     || j         _        d S r    r}   rw   s     r   r~   zSSLContext.keylog_filename   s    $)	!!!r$   c                     | j         j        S r    )r6   maximum_versionr!   s    r   r   zSSLContext.maximum_version   r   r$   c                 P    t           j                            | j        |           d S r    )r   r   __set__r6   rw   s     r   r   zSSLContext.maximum_version   .    "2::Iu	
 	
 	
 	
 	
r$   c                     | j         j        S r    )r6   minimum_versionr!   s    r   r   zSSLContext.minimum_version   r   r$   c                 P    t           j                            | j        |           d S r    )r   r   r   r6   rw   s     r   r   zSSLContext.minimum_version   r   r$   c                     | j         j        S r    )r6   optionsr!   s    r   r   zSSLContext.options   s    y  r$   c                 P    t           j                            | j        |           d S r    )r   r   r   r6   rw   s     r   r   zSSLContext.options   s.    "*22Iu	
 	
 	
 	
 	
r$   c                     | j         j        S r    r6   post_handshake_authr!   s    r   r   zSSLContext.post_handshake_auth   s    y,,r$   c                     || j         _        d S r    r   rw   s     r   r   zSSLContext.post_handshake_auth   s    (-	%%%r$   c                     | j         j        S r    )r6   r%   r!   s    r   r%   zSSLContext.protocol   s    y!!r$   c                     | j         j        S r    )r6   security_levelr!   s    r   r   zSSLContext.security_level   rt   r$   c                     | j         j        S r    )r6   verify_flagsr!   s    r   r   zSSLContext.verify_flags  s    y%%r$   c                 P    t           j                            | j        |           d S r    )r   r   r   r6   rw   s     r   r   zSSLContext.verify_flags  s.    "/77Iu	
 	
 	
 	
 	
r$   c                     | j         j        S r    )r6   verify_moder!   s    r   r   zSSLContext.verify_mode  s    y$$r$   c                 P    t           j                            | j        |           d S r    )r   r   r   r6   rw   s     r   r   zSSLContext.verify_mode  s.    ".66Iu	
 	
 	
 	
 	
r$   r    )FTTNN)FNN)NNN)NN).)F)=r1   r2   r3   __doc__propertytyper#   intr9   socketboolstrr   
SSLSession	SSLSocketr@   	MemoryBIOr7   rG   bytesosPathLiketypingUnionrM   r   r   rR   PurposeSERVER_AUTHrU   IterablerX   r[   r^   Anyr`   dictrb   rf   overloadLiterallistrl   rs   setterrz   r~   
TLSVersionr   r   Optionsr   r   
_SSLMethodr%   r   VerifyFlagsr   
VerifyModer   rj   r$   r   r   r   9   s       GGA4 A A A XA8 8 8 8 8 8 8$ "(,%)&*)- m  "&	
 # t $& 
   @ "&*)- - - 	
 t $& 
   ( NRMQ48	
 
ebk#..U1CCdJ
 ebk#..U1CCdJ
 S(D01	

 

 
 
 
 +/)-	
 
!
 !4'
  $&	

 

 
 
 
 &)[%<5 5{5	5 5 5 5
<1E <$ < < < <:vs/C : : : : :3 3 3 3 3 3'VZ ' ' ' ')tCH~ ) ) ) )$$sCx. $ $ $ $ _36 !>%0	fj	   _
 _ t(< tE{    _ _  vz    _$ $ $fj9IDQVK9W $ $ $ $ ( ( ( ( X( )D )T ) ) ) ) 5T 5 5 5 X5 !'6 6$ 6 6 6 ('6 ) ) ) ) X) *S *T * * * * ) ) ) ) X) 
S^ 
 
 
 
 

 ) ) ) ) X) 
S^ 
 
 
 
 

 ! ! ! ! X! ^
S[ 
T 
 
 
 ^

 -T - - - X- . .$ . . .  . "#. " " " X" ( ( ( ( X( &co & & & X& 
#/ 
d 
 
 
 

 %S^ % % % X% 
 
D 
 
 
 
 
 
r$   r   sock_or_sslobjr+   c                     | }	 t          |d          s|j        }t          |d          n# t          $ r Y nw xY w|                                pd}d |D             }t	          | j        ||           dS )z{
    Verifies the peer certificates from an SSLSocket or SSLObject
    against the certificates in the OS trust store.
    get_unverified_chainrj   c                 L    g | ]!}|                     t          j                  "S rj   )public_bytes_sslENCODING_DER).0certs     r   
<listcomp>z%_verify_peercerts.<locals>.<listcomp>+  s)    TTT4$##D$566TTTr$   r*   N)hasattr_sslobjAttributeErrorr   r
   context)r   r+   sslobjunverified_chain
cert_bytess        r   r.   r.     s     +F&"899 	$^F &"899 	$    	##%%+  UTCSTTTJ
O     s   ', 
99r0   )"r   platformr   r   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   r   r7   r.   rj   r$   r   <module>r      s   					   



              8?	!!DDDDDDDDDX_(""BBBBBBBBBDDDDDDDD	 )(((((( %(%K"+c2B$BR[QVEW$W! W W W"%+C%K0P"Pv P P P      [
 [
 [
 [
 [
3 [
 [
 [
|MCM1DG$J	     r$   