
    hg@                        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
 d dlmZ d dlmZmZmZmZmZ d dlmZ dZdZdZd	 Zd
 Z G d d          ZeZej        ej        e         ej        edf         f         Zej         eef         Z! G d d          Z" G d dej#                  Z$ G d dej%                  Z& G d dej'                  Z(dS )    N)decode)PyAsn1Error)char
constraint	namedtypetaguniv)serializableii3s  
-----BEGIN DH PARAMETERS-----
MIICCAKCAgEAyT6LzpwVFS3gryIo29J5icvgxCnCebcdSe/NHMkD8dKJf8suFCg3
O2+dguLakSVif/t6dhImxInJk230HmfC8q93hdcg/j8rLGJYDKu3ik6H//BAHKIv
j5O9yjU3rXCfmVJQic2Nne39sg3CreAepEts2TvYHhVv3TEAzEqCtOuTjgDv0ntJ
Gwpj+BJBRQGG9NvprX1YGJ7WOFBP/hWU7d6tgvE6Xa7T/u9QIKpYHMIkcN/l3ZFB
chZEqVlyrcngtSXCROTPcDOQ6Q8QzhaBJS+Z6rcsd7X+haiQqvoFcmaJ08Ks6LQC
ZIL2EtYJw8V8z7C0igVEBIADZBI6OTbuuhDwRw//zU1uq52Oc48CIZlGxTYG/Evq
o9EWAXUYVzWkDSTeBH1r4z/qLPE2cnhtMxbFxuvK53jGB0emy2y1Ei6IhKshJ5qX
IB/aE7SSHyQ3MDHHkCmQJCsOd4Mo26YX61NZ+n501XjqpCBQ2+DfZCBh8Va2wDyv
A2Ryg9SUz8j0AXViRNMJgJrr446yro/FuJZwnQcO3WQnXeqSBnURqKjmqkeFP+d8
6mk2tqJaY507lRNqtGlLnj7f5RNoBFJDCLBNurVgfvq9TCVWKDIFD4vZRjCrnl6I
rD693XKIHUCWOjMh1if6omGXKHH40QuME2gNa50+YPn1iYDl88uDbbMCAQI=
-----END DH PARAMETERS-----
c                 ,   t           j                                        }|                    t           j        j        |           t           j                                        }|                    t          t          j                    dz                       |	                    d           ||
                                _        | |
                                _        |                    d           |                    |           |                    |
                                           |                    |           |                    t           j                            ddd          t           j                            ddd	          t           j                            d
dd          t           j                            ddd          t           j                            ddd|          g           |                    |d           ||fS )N'      ]s   basicConstraintsTs   CA:TRUEs
   nsCertTypeFs   sslCA   extendedKeyUsagesb   serverAuth,clientAuth,emailProtection,timeStamping,msCodeInd,msCodeCom,msCTLSign,msSGC,msEFS,nsSGCs   keyUsages   keyCertSign, cRLSigns   subjectKeyIdentifiers   hashsubjectsha256)OpenSSLcryptoPKeygenerate_keyTYPE_RSAX509set_serial_numberinttimeset_versionget_subjectCNOgmtime_adj_notBeforegmtime_adj_notAfter
set_issuer
set_pubkeyadd_extensionsX509Extensionsign)organizationcnexpkey_sizekeycerts         `/var/www/fb-scrape/myenv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/certs.py	create_car.   '   s   
.



CW^,h777>  D3ty{{U233444QD'Dj)))S!!!OOD$$&&'''OOC$$	
 	

 	$$	
 	

 	$$q	
 	

 	$$#	
 	

 	$$#	 	% 	
 	
+   8 	IIc89    c                    g }|D ]j}	 t          j        |                    d                     |                    d|z             C# t          $ r |                    d|z             Y gw xY wd                    |          }t          j                                        }|	                    d           |
                    t                     |                    |                                           |duot          |          dk     }|r||                                _        |||                                _        |                    t%          t'          j                    dz                       |rK|                    d	           |                    t          j                            d
| |          g           |                    t          j                            ddd          g           |                    |                                           |                    | d           t5          |          S )a^  
        Generates a dummy certificate.

        privkey: CA private key
        cacert: CA certificate
        commonname: Common name for the generated certificate.
        sans: A list of Subject Alternate Names.
        organization: Organization name for the generated certificate.

        Returns cert if operation succeeded, None if not.
    asciis   IP:%ss   DNS:%ss   , r   N@   r   r      subjectAltNamer   Fs   serverAuth,clientAuthr   )	ipaddress
ip_addressr   append
ValueErrorjoinr   r   r   r    r!   DEFAULT_EXP_DUMMY_CERTr"   r   lenr   r   r   r   r   r   r$   r%   r#   
get_pubkeyr&   Cert)	privkeycacert
commonnamesansr'   ssir,   is_valid_commonnames	            r-   
dummy_certrD   S   sL    
B $ $	$ '!2!2333 IIhl####  	% 	% 	%IIi!m$$$$$	% 
BB>  Dj)))3444OOF&&(()))$73z??R#7   + *+3ty{{U233444	 	
^))!''	  	
 	
 	
 	$$$	
 	
    	OOF%%''(((IIgx   ::s   'A"A-,A-c                       e Zd Zd ZdS )CertStoreEntryc                 0    || _         || _        || _        d S Nr,   
privatekey
chain_file)selfr,   rJ   rK   s       r-   __init__zCertStoreEntry.__init__   s    	$$r/   N)__name__
__module____qualname__rM    r/   r-   rF   rF      s#        % % % % %r/   rF   .c                      e Zd ZdZdZd Zd Zed             Ze	dde
j        e         fd            Zeej        d	                         Zeddefd
            Zddedede
j        e         ddfdZdedefdZedede
j        e         fd            Z	 dde
j        e         de
j        e         de
j        e         de
j        dej        j        ef         fdZdS )	CertStorez8
        Implements an in-memory certificate store.
    d   c                 Z    || _         || _        || _        || _        i | _        g | _        d S rH   )default_privatekey
default_cadefault_chain_filedhparamscertsexpire_queue)rL   rV   rW   rX   rY   s        r-   rM   zCertStore.__init__   s7     #5$"4 ;=
r/   c                    | j                             |           t          | j                   | j        k    rF| j                             d          fd| j                                        D             | _        d S d S )Nr   c                 (    i | ]\  }}|k    ||S rQ   rQ   ).0kvds      r-   
<dictcomp>z$CertStore.expire.<locals>.<dictcomp>   s$    HHH41aa!Qr/   )r[   r6   r:   	STORE_CAPpoprZ   items)rL   entryra   s     @r-   expirezCertStore.expire   s}      '''t !!DN22!%%a((AHHHH4:+;+;+=+=HHHDJJJ 32r/   c                 <   t           j                            |           sBt          | d          5 }|                    t
                     d d d            n# 1 swxY w Y   t          j        j        	                    | 
                    t          j                              d          }|t          j        j        j        k    rt          j        j                            |t          j        j        j                  }t          j        j                            |t          j        j        j        t          j        j        j        t          j        j        j                  }t          j        j                            |t          j        j        j                  }|S d S )Nwb   r)ospathexistsopenwriteDEFAULT_DHPARAMr   SSL_libBIO_new_fileencodesysgetfilesystemencoding_ffiNULLgcBIO_freePEM_read_bio_DHparamsDH_free)rl   fbiodhs       r-   load_dhparamzCertStore.load_dhparam   sd   
 w~~d## 	)dD!! )Q((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) k++DKK8Q8S8S,T,TVZ[['+"'''+"%%c7;+;+DEEC!77 % % %	' 'B
 !$$R)9)ABBBI ('s   AAAN
passphrasec                 ~   t           j                            ||dz             }t           j                            |          s|                     |||          \  }}nt          |d          5 }|                                }	d d d            n# 1 swxY w Y   t          j        	                    t          j        j
        |	          }t          j                            t          j        j
        |	|          }t           j                            ||dz             }
|                     |
          } | ||||          S )N-ca.pemrb-dhparam.pem)rk   rl   r8   rm   create_storern   readr   r   load_certificateFILETYPE_PEMload_privatekeyr   )clsrl   basenamer*   r   ca_pathr+   car}   rawdh_pathr   s               r-   
from_storezCertStore.from_store   sL   ',,tX	%9::w~~g&& 	&&tXx@@GCgt$$ ffhh              00+ B .00+ C ',,tX%>??g&&s3GR(((s   .BBBc               #      K   t          j        d          } t          j        | dz             	 dV  t          j        |            dS # t          j        |            w xY w)z
            Context to temporarily set umask to its original value bitor 0o77.
            Useful when writing private keys to disk so that only the owner
            will be able to read them.
        r   ?   N)rk   umask)original_umasks    r-   umask_secretzCertStore.umask_secret   sd       !
$&'''	%EEEH^$$$$$BH^$$$$s   A	 	Ac                    t           j                            |           st          j        |            |p|}|p|}t	          ||||          \  }}t
                                          5  t          t           j                            | |dz             d          5 }|	                    t          j                            t          j        j        |                     |	                    t          j                            t          j        j        |                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          t           j                            | |dz             d          5 }|	                    t          j                            t          j        j        |                     d d d            n# 1 swxY w Y   t          t           j                            | |dz             d          5 }|	                    t          j                            t          j        j        |                     d d d            n# 1 swxY w Y   t          t           j                            | |dz             d          5 }t          j                                        }	|	                    |           |	                    |	                                           d d d            n# 1 swxY w Y   t
                                          5  t          t           j                            | |dz             d          5 }t          j                                        }	|	                    |           |	                    |           |	                    |	                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          t           j                            | |dz             d          5 }|	                    t&                     d d d            n# 1 swxY w Y   ||fS )	N)r'   r(   r)   r*   r   ri   z-ca-cert.pemz-ca-cert.cerz-ca-cert.p12z-ca.p12r   )rk   rl   rm   makedirsr.   rS   r   rn   r8   ro   r   r   dump_privatekeyr   dump_certificatePKCS12set_certificateexportset_privatekeyrp   )
rl   r   r*   r'   r(   expiryr+   r   r}   p12s
             r-   r   zCertStore.create_store   s   w~~d## 	K#/x^8"&S[\\\R##%% 	 	tBGLLx)?S,T,TVZ'['[ 	_`GG..N/    GG//N/   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "',,tX%>??FF 	!GG//N/   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "',,tX%>??FF 	!GG//N/   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "',,tX%>??FF 	"!.''))C###GGCJJLL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" ##%% 	" 	"tBGLLx)?S,T,TVZ'['[ 	"_`.''))C###s###GGCJJLL!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" "',,tX%>??FF 	%!GGO$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% Bws   +2EBD."E.D2	2E5D2	6EE	E	AGGGAII"IAK>>LL"2O'A0OO'O	O'O	O''O+.O+#Q

QQspecrl   returnc                    t          |d          5 }|                                }d d d            n# 1 swxY w Y   t          t          j                            t          j        j        |                    }	 t          j                            t          j        j        ||          }n# t          $ r
 | j	        }Y nw xY w| 
                    t          |||          |                    d                     d S )Nr   idna)rn   r   r<   r   r   r   r   r   	ExceptionrV   add_certrF   rt   )rL   r   rl   r   r}   r   r,   rJ   s           r-   add_cert_filezCertStore.add_cert_file  s3   $ 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	N+++  	1 77+ JJ  	1 	1 	10JJJ	14T22KK	
 	
 	
 	
 	
s   266:0B+ +B?>B?rf   namesc                     |j         j        r|| j        |j         j        <   |j         j        D ]}|| j        |<   |D ]}|| j        |<   dS )z
            Adds a cert to the certstore. We register the CN in the cert plus
            any SANs, and also the list of names provided as an argument.
        N)r,   r(   rZ   altnames)rL   rf   r   rB   s       r-   r   zCertStore.add_cert/  sg    
 := 	.(-DJuz}%$ 	" 	"A!DJqMM 	" 	"A!DJqMM	" 	"r/   dnc           	          |                      d          }| g}t          dt          |                    D ]5}|                    dd                    ||d                   z              6|S )z
        Return all asterisk forms for a domain. For example, for www.example.com this will return
        [b"www.example.com", b"*.example.com", b"*.com"]. The single wildcard "*" is omitted.
           .   s   *.N)splitranger:   r6   r8   )r   partsretrB   s       r-   asterisk_formszCertStore.asterisk_forms;  sl     dq#e**%% 	5 	5AJJutyyqrr3334444
r/   r?   r@   r'   r<   c           	      |    g }|r(|                                          |                     |D ]*}|                                          |                     +|                    d           |                    |t          |          f           t	          t           fd|          d          }|r j        |         }net          t           j	         j
        |||           j	         j                  }| j        |t          |          f<                        |           |j        |j        |j        fS )aM  
            Returns an (cert, privkey, cert_chain) tuple.

            commonname: Common name for the generated certificate. Must be a
            valid, plain-ASCII, IDNA-encoded domain name.

            sans: A list of Subject Alternate Names.

            organization: Organization name for the generated certificate.
           *c                     | j         v S rH   )rZ   )r+   rL   s    r-   <lambda>z$CertStore.get_cert.<locals>.<lambda>a  s    sdj0 r/   NrI   )extendr   r6   tuplenextfilterrZ   rF   rD   rV   rW   rX   rg   r,   rJ   rK   )rL   r?   r@   r'   potential_keyssnamerf   s   `       r-   get_certzCertStore.get_certG  s`   " 02 	C!!$"5"5j"A"ABBB 	: 	:A!!$"5"5a"8"89999d###z5;;78880000.AA
 
  	Jt$EE"+O " "  224 4 4E 5:DJ
E$KK01KKz5+U-===r/   rH   )rN   rO   rP   __doc__rc   rM   rg   staticmethodr   classmethodtypingOptionalbytesr   
contextlibcontextmanagerr   DEFAULT_EXPr   strr   rF   r   Listr   Tupler   rq   r   r   rQ   r/   r-   rS   rS      s         I  I I I   \& ) )foe>T ) ) ) [)$ % %  \% <@TR] 1 1 1 \1f
 
# 
S 
foe>T 
`d 
 
 
 
&
"n 
"e 
" 
" 
" 
" 	5 	V[%7 	 	 	 \	 48	,> ,>.,> +e$,> !/%0	,>
 
fgk.3	4,> ,> ,> ,> ,> ,>r/   rS   c                   X   e Zd Z ej         ej        d ej                                         e	j
        e	j        e	j        d                               ej        d ej                                         e	j
        e	j        e	j        d                                        ZdS )_GeneralNamedNSNamer   )implicitTag	iPAddress   N)rN   rO   rP   r   
NamedTypes	NamedTyper   	IA5Stringsubtyper   TagtagClassContexttagFormatSimpler	   OctetStringcomponentTyperQ   r/   r-   r   r   v  s        (I(	I~t~'7'7'?'? 3S5H!LL (@ (
 (
 	 	 		K)9)9););)C)C 3S5H!LL *D *
 *
 	 		 MMMr/   r   c                   ^    e Zd Z e            Zej        j         ej	        dd          z   ZdS )_GeneralNamesr   i   N)
rN   rO   rP   r   r   r	   
SequenceOfsizeSpecr   ValueSizeConstraintrQ   r/   r-   r   r     s:         LNNM'&
&q$//0HHHr/   r   c                   P   e Zd Zd Zd Zd Zd Zed             Zed             Z	ed             Z
d Zd	 Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             ZdS )r<   c                     || _         dS )zQ
            Returns a (common name, [subject alternative names]) tuple.
        N)x509)rL   r,   s     r-   rM   zCert.__init__  s     			r/   c                 Z    |                      d          |                     d          k    S )Nr   )digest)rL   others     r-   __eq__zCert.__eq__  s%    {{8$$X(>(>>>r/   c                 *    |                                  S rH   )to_pemrL   s    r-   	get_statezCert.get_state  s    {{}}r/   c                 n    t           j                            t           j        j        |          | _        d S rH   )r   r   r   r   r   )rL   states     r-   	set_statezCert.set_state  s%    N33GN4OQVWW			r/   c                 ,    |                      |          S rH   )from_pem)r   r   s     r-   
from_statezCert.from_state  s    ||E"""r/   c                 v    t           j                            t           j        j        |          } | |          S rH   )r   r   r   r   )r   txtr   s      r-   r   zCert.from_pem  s,    ~..w~/JCPPs4yyr/   c                 T    t          j        |          }|                     |          S rH   )sslDER_cert_to_PEM_certr   )r   derpems      r-   from_derzCert.from_der  s$    &s++||C   r/   c                 j    t           j                            t           j        j        | j                  S rH   )r   r   r   r   r   r   s    r-   r   zCert.to_pem  s)    ~..N'I  	r/   c                 6    | j                             |          S rH   )r   r   )rL   r   s     r-   r   zCert.digest  s    y%%%r/   c                 X    | j                                                                         S rH   )r   
get_issuerget_componentsr   s    r-   issuerzCert.issuer  s"    y##%%44666r/   c                     | j                                         }t          j                            |                    d          d          S Nr1   z%Y%m%d%H%M%SZ)r   get_notBeforedatetimestrptimer   rL   ts     r-   	notbeforezCert.notbefore  s:    I##%% ))!((7*;*;_MMMr/   c                     | j                                         }t          j                            |                    d          d          S r   )r   get_notAfterr  r  r   r  s     r-   notafterzCert.notafter  s:    I""$$ ))!((7*;*;_MMMr/   c                 4    | j                                         S rH   )r   has_expiredr   s    r-   r  zCert.has_expired  s    y$$&&&r/   c                 X    | j                                                                         S rH   )r   r   r   r   s    r-   r   zCert.subject  s"    y$$&&55777r/   c                 4    | j                                         S rH   )r   get_serial_numberr   s    r-   serialzCert.serial  s    y**,,,r/   c                     | j                                         }t          j        j        dt          j        j        di}|                    |                                d          |                                fS )NRSADSAUNKNOWN)	r   r;   r   r   r   TYPE_DSAgettypebits)rL   pktypess      r-   keyinfozCert.keyinfo  s`    Y!!##N#UN#U

 IIbggii++GGII
 	
r/   c                 F    d }| j         D ]}|d         dk    r|d         }|S )Nr   s   CNr   r   rL   crB   s      r-   r(   zCert.cn  s4     	 	Atu}}aDr/   c                 F    d }| j         D ]}|d         dk    r|d         }|S )Nr      Or   r   r  s      r-   r'   zCert.organization  s4     	 	Att||aDr/   c                    g }t          | j                                                  D ]}| j                            |          }|                                dk    r	 t          |                                t                                }n# t          $ r Y qw xY w|d         D ]K}|d         	                                r/|d         
                                }|                    |           L|S )z8
        Returns:
            All DNS altnames.
        r3   )asn1Specr   )r   r   get_extension_countget_extensionget_short_namer   get_datar   r   hasValueasOctetsr6   )rL   r   rB   extdeces         r-   r   zCert.altnames  s     ty446677 
	+ 
	+A)))!,,C!!##'888 -//JJJCC"   HQ + +At}} +aDMMOO ***s   /B
BBN)rN   rO   rP   rM   r   r   r   r   r   r   r   r   r   propertyr   r  r	  r  r   r  r  r(   r'   r   rQ   r/   r-   r<   r<     s         ? ? ?  X X X # # [#   [ ! ! [!  
& & & 7 7 X7 N N XN N N XN ' ' X' 8 8 X8 - - X- 	
 	
 X	
   X   X   X  r/   r<   ))r   r  r4   rk   r   ru   r   r   r   pyasn1.codec.der.decoderr   pyasn1.errorr   pyasn1.typer   r   r   r   r	   +seleniumwire.thirdparty.mitmproxy.coretypesr
   r   r9   rp   r.   rD   rF   r   TCustomCertIdr   r   TGeneratedCertIdUnionTCertIdrS   Choicer   r   r   Serializabler<   rQ   r/   r-   <module>r6     s            				 



 



    + + + + + + $ $ $ $ $ $ > > > > > > > > > > > > > > D D D D D D ! ") ) )X5 5 5p% % % % % % % % < 6UCZ8P PQ 
,}&66
7[> [> [> [> [> [> [> [>|	 	 	 	 	4; 	 	 	0 0 0 0 0DO 0 0 0q q q q q<$ q q q q qr/   