
    @OOf!                     J   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlZd d	lmZ d d
lmZ d dlmZ d dlmZ 	 d dlmZ  G d de      Z	 ej4                  j6                    G d de      Z G d de      Z ejB                  Z"ejF                  Z$ejJ                  ejL                  z  Z' G d d      Z(de)dz  de(dz  fdZ* e* e jV                  d      xs  e jV                  d            Z,dededed ee)   dz  d!e)dz  dejZ                  fd"Z. ed#      dededed e/e)d$f   dz  d!e)dz  d%e d&e)dz  d'e)dz  d(e)dz  d)e0dejZ                  fd*       Z1 ed#      dededed e/e)d$f   dz  d!e)dz  d+e
dz  d,eejd                  e3e4   gef   dz  d-e0d.e/ejj                  d$f   d/ejl                  dejZ                  fd0       Z7d1ejd                  d2ed3e8d4e8d5e8de0fd6Z9d7e4de0fd8Z:d7e4de0fd9Z;y# e$ r dZY w xY w# e$ rZ ed      edZ[ww xY w):    N)Callable)Iterable)Enum)	lru_cache)Path)Any)BinaryIO)crypto)SSL)X509)certs)OP_LEGACY_SERVER_CONNECT   c                   l    e Zd Zej                  Zej
                  Zej                  Zej                  Zy)MethodN)__name__
__module____qualname__r   TLS_SERVER_METHODTLS_CLIENT_METHODDTLS_SERVER_METHODDTLS_CLIENT_METHOD     R/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/net/tls.pyr   r      s2    ----////r   r   zAYour installation of the cryptography Python package is outdated.c                       e Zd ZdZej
                  Zej                  Zej                  Z
ej                  Zej                  Zy)Versionr   N)r   r   r   	UNBOUNDEDr   SSL3_VERSIONSSL3TLS1_VERSIONTLS1TLS1_1_VERSIONTLS1_1TLS1_2_VERSIONTLS1_2TLS1_3_VERSIONTLS1_3r   r   r   r   r   *   s>    IDDFFFr   r   c                   <    e Zd Zej                  Zej
                  Zy)VerifyN)r   r   r   r   VERIFY_NONEVERIFY_PEERr   r   r   r*   r*   3   s    //K//Kr   r*   c                   J    e Zd ZdefdZd Z dej                  deddfdZd Z	y)	MasterSecretLoggerfilenamec                 n    |j                         | _        d | _        t        j                         | _        y N)
expanduserr/   f	threadingLocklock)selfr/   s     r   __init__zMasterSecretLogger.__init__>   s'     ++-"&NN$	r   
connectionkeymaterialreturnNc                    | j                   5  | j                  b| j                  j                  j	                  dd       | j                  j                  d      | _        | j                  j                  d       | j                  j                  |dz          | j                  j                          d d d        y # 1 sw Y   y xY w)NT)parentsexist_okab   
)r6   r3   r/   parentmkdiropenwriteflush)r7   r9   r:   s      r   __call__zMasterSecretLogger.__call__F   s    YY 	vv~$$**4$*G++D1U#FFLLu,-FFLLN	 	 	s   B'B==Cc                     | j                   5  | j                  | j                  j                          d d d        y # 1 sw Y   y xY wr1   )r6   r3   close)r7   s    r   rH   zMasterSecretLogger.closeO   s5    YY 	vv!	 	 	s	   '=A)
r   r   r   r   r8   r   
ConnectionbytesrF   rH   r   r   r   r.   r.   =   s8    % % $H3>>  $ r   r.   r/   r;   c                 0    | rt        t        |             S y r1   )r.   r   )r/   s    r   make_master_secret_loggerrL   U   s    !$x.11r   MITMPROXY_SSLKEYLOGFILESSLKEYLOGFILEmethodmin_versionmax_versioncipher_list
ecdh_curvec                    t        j                  | j                        }t         j                  j	                  |j
                  |j                        }|t         j                  j                  |j
                  |j                        z  }|dk7  rt        d|d|d      |j                  t               |%	 |j                  t        j                  |             |(	 |j                  dj                  d |D                     t"        r|j%                  t"               |S # t        $ r}t        d|       |d }~ww xY w# t         j                   $ r}t        d|       |d }~ww xY w)	N   z(Error setting TLS versions (min_version=z, max_version=z?). The version you specified may be unavailable in your libssl.z$Elliptic curve specification error:    :c              3   <   K   | ]  }|j                           y wr1   )encode).0xs     r   	<genexpr>z&_create_ssl_context.<locals>.<genexpr>   s     -NQahhj-Ns   z SSL cipher specification error: )r   Contextvalue_libSSL_CTX_set_min_proto_version_contextSSL_CTX_set_max_proto_versionRuntimeErrorset_optionsDEFAULT_OPTIONSset_tmp_ecdhr
   get_elliptic_curve
ValueErrorset_cipher_listjoinErrorlog_master_secretset_keylog_callback)rO   rP   rQ   rR   rS   contextokes           r   _create_ssl_contextrp   `   s^    kk&,,'G		/	/0@0@+BSBS	TB#((
0
01A1A;CTCT
UUB	Qw7;.;. IK K
 	
 ( 	R  !:!::!FG
 	N##DII-N+-N$NO
 ##$56N  	R!EaSIJPQQ	R yy 	N!A!EFAM	Ns0   :$D% !'E %	E.D==EE,E''E,   .verifyca_path
ca_pemfileclient_certlegacy_server_connectc        
            t        | ||||      }
|
j                  |j                  d        ||t        j                         }	 |
j                  ||       |r#	 |
j                  |       |
j                  |       |	r|
j                  t               |
S # t        j                  $ r}t        d|d|d      |d }~ww xY w# t        j                  $ r}t        d|       |d }~ww xY w)NrO   rP   rQ   rR   rS   z-Cannot load trusted certificates (ca_pemfile=z
, ca_path=).z$Cannot load TLS client certificate: )rp   
set_verifyr]   certifiwhereload_verify_locationsr   rj   rb   use_privatekey_fileuse_certificate_chain_filerc   r   )rO   rP   rQ   rR   rS   rr   rs   rt   ru   rv   rm   ro   s               r   create_proxy_server_contextr      s    /G v||T*:-]]_
%%j': 	R''4..{; 45N! 99 <[zL
	 yy 	R!EaSIJPQQ	Rs0   B "C C)B<<CC+C&&C+
chain_filealpn_select_callbackrequest_client_certextra_chain_certsdhparamsc        
            t        | ||||      }
|	 |
j                  t        |      d        |t        |      sJ |
j                  |       |r/|
j                  t        j                  j                  t               n*|
j                  t        j                  j                  d        |D ]!  }|
j                  |j                                # |	rBt        j                   j#                  |
j$                  |	      }t        j&                  |dk(         |
S # t        j                  $ r}t        d| d      |d }~ww xY w)Nrx   zCannot load certificate chain (ry      )rp   r}   strr   rj   rb   callableset_alpn_select_callbackrz   r*   r,   r]   
accept_allr+   add_extra_chain_certto_pyopensslr^   SSL_CTX_set_tmp_dhr`   _openssl_assert)rO   rP   rQ   rR   rS   r   r   r   r   r   rm   ro   iress                 r   create_client_proxy_contextr      s.    /G 	X))#j/4@ ',---(()=> 	6--33Z@6--33T: 7$$Q^^%567 hh))'*:*:HEC1H%N7 yy 	X!@BOPVWW	Xs   D D>)D99D>conn_x509errno	err_depthis_cert_verifiedc                      y)NTr   )r   r   r   r   r   s        r   r   r      s     r   dc                 p    t        |       dkD  xr' | d   dk(  xr | d   dk(  xr d| d   cxk  xr dk  S c S )zq
    Returns:
        True, if the passed bytes could be the start of a TLS record
        False, otherwise.
    rU   r      r      lenr   s    r   starts_like_tls_recordr      sE     q6A:P!A$$,P1Q44<PDAaD<PD<PP<PPr   c                 p    t        |       dkD  xr' | d   dk(  xr | d   dk(  xr d| d   cxk  xr dk  S c S )zr
    Returns:
        True, if the passed bytes could be the start of a DTLS record
        False, otherwise.
    rU   r   r   r         r   r   s    r   starts_like_dtls_recordr     sE     q6A:P!A$$,P1Q44<PDAaD<PD<PP<PPr   )<osr4   collections.abcr   r   enumr   	functoolsr   pathlibr   typingr   r	   r{   OpenSSLr
   r   OpenSSL.cryptor   	mitmproxyr   OpenSSL.SSLr   ImportErrorr   r^   TLS_server_methodAttributeErrorro   rb   r   r*   r&   DEFAULT_MIN_VERSIONr   DEFAULT_MAX_VERSIONOP_CIPHER_SERVER_PREFERENCEOP_NO_COMPRESSIONrd   r.   r   rL   getenvrk   r\   rp   tupleboolr   rI   listrJ   CertDHParamsr   intr   r   r   r   r   r   <module>r      sY   	  $ $          #40T 0HH d  "T "
 nn '' 11C4I4II 0d
 7ID7P  .BII'(FIBIIo,F 
'' ' 	'
 #%' d
' 	[['T 3** * 	*
 sCx4'* d
* * 4Z* d
* t*  * 	[[* *Z 333 3 	3
 sCx4'3 d
3 t3 #CNNDK#@##EFM3 3 UZZ_-3 nn3 	[[3 3l>>
  	
  

Qe 
Q 
QQu Q Qe  #"#  
Ks*   H "H HHH"	HH"