
    kj(                     @   U d dl Z 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mZ 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  G d de      Z	 ej<                  j>                    G d de      Z#e#jH                  e#jJ                  e#jL                  e#jN                  fZ(e)e#df   e*d<    G d de      Z+e#jX                  Z-e#jH                  Z.ej^                  ej`                  z  Z1e	de#fd       Z2i Z3e4e5ef   e*d<   ejl                  jo                         D ](  Z8 e9e8e      s  ee8             Z:e:e3e:jv                  <   * ejx                  de5defd        Z=ejx                  dEd!       Z=de5dz  dedz  fd"Z= G d# d$      Z>d%e5dz  de>dz  fd&Z? e? e j                  d'      xs  e j                  d(            ZAd)ed*e#d+e#d,ee5   dz  d-edz  dej                  fd.ZC e
d/      d)ed*e#d+e#d,e)e5df   dz  d-edz  d0e+d1e5dz  d2e5dz  d3e5dz  d4eDdej                  fd5       ZE e
d/      d)ed*e#d+e#d,e)e5df   dz  d-edz  d6edz  d7eej                  eGeH   gef   dz  d8eDd9e)ej                  df   d:ej                  dej                  fd;       ZKd<ej                  d=ej                  j                  d>eNd?eNd@eNdeDfdAZOdBeHdeDfdCZPdBeHdeDfdDZQy# e$ r dZY w xY w# e $ rZ! e"d      e!dZ![!ww xY w)F    N)Callable)Iterable)Enum)cache)	lru_cache)Path)Any)BinaryIO)EllipticCurve)EllipticCurveOID)get_curve_for_oid)ObjectIdentifier)SSL)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     Z/home/ubuntu/.cache/pipx/cdb5059130eadca/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    .INSECURE_TLS_MIN_VERSIONSc                   <    e Zd Zej                  Zej
                  Zy)VerifyN)r   r   r   r   VERIFY_NONEVERIFY_PEERr   r   r   r.   r.   @   s    //K//Kr   r.   versionc                    t        j                  t         j                        }|j                  d       |j	                  | j
                         |j                  | j
                         t        j                  |      }|j                          	 |j                  d       y # t         j                  $ r Y yt         j                  $ r Y yw xY w)Ns   @SECLEVEL=0:ALLi   TF)r   Contextr   set_cipher_listset_min_proto_versionvalueset_max_proto_version
Connectionset_connect_staterecvWantReadErrorError)r1   
client_ctxclient_conns      r   is_supported_versionr?   J   s    S223J 12$$W]]3$$W]]3..,K!!# 99 s   B# #C8CC	EC_CURVESnamereturnc                      y Nr   rA   s    r   	get_curverF   d   s    +.r   c                      y rD   r   rE   s    r   rF   rF   h   s    #&r   c                     | y t         |    S rD   )r@   rE   s    r   rF   rF   l   s    |T?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 rD   )
expanduserrK   f	threadingLocklock)selfrK   s     r   __init__zMasterSecretLogger.__init__s   s'     ++-"&NN$	r   
connectionkeymaterialrB   Nc                    | 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   
)rQ   rN   rK   parentmkdiropenwriteflush)rR   rT   rU   s      r   __call__zMasterSecretLogger.__call__{   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rD   )rQ   rN   close)rR   s    r   rb   zMasterSecretLogger.close   s5    YY 	vv!	 	 	s	   '=A)
r   r   r   r   rS   r   r8   bytesr`   rb   r   r   r   rJ   rJ   r   s8    % % $H3>>  $ r   rJ   rK   c                 0    | rt        t        |             S y rD   )rJ   r   )rK   s    r   make_master_secret_loggerre      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                  |       |(	 |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rD   )encode).0xs     r   	<genexpr>z&_create_ssl_context.<locals>.<genexpr>   s     -NQahhj-Ns   z SSL cipher specification error: )r   r3   r6   _libSSL_CTX_set_min_proto_version_contextSSL_CTX_set_max_proto_versionRuntimeErrorset_optionsDEFAULT_OPTIONSset_tmp_ecdh
ValueErrorr4   joinr<   log_master_secretset_keylog_callback)rh   ri   rj   rk   rl   contextokes           r   _create_ssl_contextr      sS    kk&,,'G		/	/0@0@+BSBS	TB#((
0
01A1A;CTCT
UUB	Qw7;.;. IK K
 	
 ( 	R  ,
 	N##DII-N+-N$NO
 ##$56N  	R!EaSIJPQQ	R yy 	N!A!EFAM	Ns0   :D 'D2 	D/D**D/2EEE   verifyca_path
ca_pemfileclient_certlegacy_server_connectc        
         0   t        | ||||      }
|
j                  |j                  d        ||t        j                         }	 |
j                  ||       |rM	 |
j                  |       |
j                  |       t        j                  j                  |
j                  d       |	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rh   ri   rj   rk   rl   z-Cannot load trusted certificates (ca_pemfile=z
, ca_path=).z$Cannot load TLS client certificate:    )r   
set_verifyr6   certifiwhereload_verify_locationsr   r<   ry   use_privatekey_fileuse_certificate_chain_fileru   SSL_CTX_set_post_handshake_authrw   rz   r   )rh   ri   rj   rk   rl   r   r   r   r   r   r   r   s               r   create_proxy_server_contextr      s    /G v||T*:-]]_
%%j': 	R''4..{;
 	001A1A1E45N' 99 <[zL
	 yy 	R!EaSIJPQQ	Rs0   C  "C.  C+C&&C+.DDD
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)Nr   zCannot load certificate chain (r   r   )r   r   strr   r<   ry   callableset_alpn_select_callbackr   r.   r0   r6   
accept_allr/   add_extra_chain_certto_cryptographyru   SSL_CTX_set_tmp_dhrw   _openssl_assert)rh   ri   rj   rk   rl   r   r   r   r   r   r   r   iress                 r   create_client_proxy_contextr      s0    /G 	X))#j/4@ ',---(()=> 	6--33Z@6--33T: :$$Q%6%6%89: 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.
    rn   r      r      lenr   s    r   starts_like_tls_recordr   2  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.
    rn   r   r   r         r   r   s    r   starts_like_dtls_recordr   ?  sE     q6A:P!A$$,P1Q44<PDAaD<PD<PP<PPr   )rA   NrB   N)RosrO   typingcollections.abcr   r   enumr   	functoolsr   r   pathlibr   r	   r
   r   OpenSSL,cryptography.hazmat.primitives.asymmetric.ecr   r   r   cryptography.x509r   r   	mitmproxyr   OpenSSL.SSLr   ImportErrorr   ru   TLS_server_methodAttributeErrorr   ry   r    r!   r#   r%   r'   r,   tuple__annotations__r.   r)   DEFAULT_MIN_VERSIONDEFAULT_MAX_VERSIONOP_CIPHER_SERVER_PREFERENCEOP_NO_COMPRESSIONr{   r?   r@   dictr   __dict__valuesoid
isinstancecurverA   overloadrF   rJ   re   getenvr   r3   r   boolr   r8   listrc   CertDHParamsr   cryptoX509intr   r   r   r   r   r   <module>r      ss   	   $ $         F I J .  #40T 0HH d   LLLLNN	2 5#. "T "
 nn '' 11C4I4II '  $ ')	4]"# ($$++- &C#'(&!#&( %	%**&  .C .M .  .  &  &C$J =4#7  0d
 7ID7P  .BII'(FIBIIo,F 
'' ' 	'
 #%' $' 	[['T 3-- - 	-
 sCx4'- $- - 4Z- d
- t-  - 	[[- -` 333 3 	3
 sCx4'3 $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K	  #"#  
Ks*   +K< =L
 <LL
L	LL