
    'h@                        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jF                        Z$ G d dejJ                        Z& G d dejN                        Z(y)    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                  j                         }|j                  t         j                  j                  |       t         j                  j                         }|j                  t        t        j                         dz               |j                  d       ||j                         _        | |j                         _        |j                  d       |j                  |       |j                  |j                                |j!                  |       |j#                  t         j                  j%                  ddd      t         j                  j%                  ddd	      t         j                  j%                  d
dd      t         j                  j%                  ddd      t         j                  j%                  ddd|      g       |j'                  |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         g/var/www/html/scrapers/gsc/venv/lib/python3.12/site-packages/seleniumwire/thirdparty/mitmproxy/certs.py	create_car.   '   s   
..


CW^^,,h7>> D3tyy{U234QD'Dj)S!OOD$$&'OOC$$	

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

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

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

 	$$#	 	% 	
+ 8 	IIc89    c                    g }|D ];  }	 t        j                  |j                  d             |j                  d|z         = dj                  |      }t        j                  j                         }|j                  d       |j                  t               |j                  |j                                |duxr t        |      dk  }|r||j                         _        |||j                         _        |j#                  t%        t'        j&                         dz               |rC|j)                  d	       |j+                  t        j                  j-                  d
| |      g       |j+                  t        j                  j-                  ddd      g       |j/                  |j1                                |j3                  | d       t5        |      S # t        $ r |j                  d|z         Y w xY w)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   s    
B $	$  '!23 IIhl#$ 
BB>> Dj)34OOF&&()$73z?R#7   *+3tyy{U234	^^))!''	 	
 	$$$	
  	OOF%%'(IIgx :K  	%IIi!m$	%s   $GG;:G;c                       e Zd Zd Zy)CertStoreEntryc                 .    || _         || _        || _        y 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
j2                  dej6                  j8                  ef   fdZy)	CertStorez8
        Implements an in-memory certificate store.
    d   c                 X    || _         || _        || _        || _        i | _        g | _        y rH   )default_privatekey
default_cadefault_chain_filedhparamscertsexpire_queue)rL   rV   rW   rX   rY   s        r-   rM   zCertStore.__init__   s1     #5$"4 ;=
r/   c                 4   | j                   j                  |       t        | j                         | j                  kD  rU| j                   j	                  d      }| j
                  j                         D ci c]  \  }}||k7  s|| c}}| _        y y c c}}w )Nr   )r[   r6   r:   	STORE_CAPpoprZ   items)rL   entrydkvs        r-   expirezCertStore.expire   sx      't  !DNN2!!%%a(A+/::+;+;+=H41aa!Q$HDJ 3Hs   6BBc                    t         j                  j                  |       s*t        | d      5 }|j	                  t
               d d d        t        j                  j                  j                  | j                  t        j                               d      }|t        j                  j                  j                  k7  r,t        j                  j                  j                  |t        j                  j                  j                         }t        j                  j                  j#                  |t        j                  j                  j                  t        j                  j                  j                  t        j                  j                  j                        }t        j                  j                  j                  |t        j                  j                  j$                        }|S y # 1 sw Y   xY w)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)ri   fbiodhs       r-   load_dhparamzCertStore.load_dhparam   sD   
 ww~~d#dD! )Q() kk++DKK8Q8Q8S,TVZ['++""'''++""%%c7;;+;+;+D+DEC!!77  %%  %%  %%	'B
 !!$$R)9)9)A)ABBI (	) )s   G**G4N
passphrasec                 v   t         j                  j                  ||dz         }t         j                  j                  |      s| j	                  |||      \  }}nt        |d      5 }|j                         }	d d d        t        j                  j                  t        j                  j                  	      }t        j                  j                  t        j                  j                  |	|      }t         j                  j                  ||dz         }
| j                  |
      } | ||||      S # 1 sw Y   xY w)N-ca.pemrb-dhparam.pem)rh   ri   r8   rj   create_storerk   readr   r   load_certificateFILETYPE_PEMload_privatekeyr}   )clsri   basenamer*   r~   ca_pathr+   carz   rawdh_pathr|   s               r-   
from_storezCertStore.from_store   s    '',,tX	%9:ww~~g&&&tXx@GCgt$ ffh00++B ..00++C '',,tX%>?g&3GR(( s   &D//D8c               #      K   t        j                  d      } t        j                  | dz         	 d t        j                  |        y# t        j                  |        w xY w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)rh   umask)original_umasks    r-   umask_secretzCertStore.umask_secret   sF      !
$&'	%HH^$BHH^$s   .A%A A%A""A%c                 6   t         j                  j                  |       st        j                  |        |xs |}|xs |}t	        ||||      \  }}t
        j                         5  t        t         j                  j                  | |dz         d      5 }|j                  t        j                  j                  t        j                  j                  |             |j                  t        j                  j                  t        j                  j                  |             d d d        d d d        t        t         j                  j                  | |dz         d      5 }|j                  t        j                  j                  t        j                  j                  |             d d d        t        t         j                  j                  | |dz         d      5 }|j                  t        j                  j                  t        j                  j                  |             d d d        t        t         j                  j                  | |dz         d      5 }t        j                  j                         }	|	j!                  |       |j                  |	j#                                d d d        t
        j                         5  t        t         j                  j                  | |dz         d      5 }t        j                  j                         }	|	j!                  |       |	j%                  |       |j                  |	j#                                d d d        d d d        t        t         j                  j                  | |dz         d      5 }|j                  t&               d d d        ||fS # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   &xY w# 1 sw Y   xY w# 1 sw Y   ?xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ||fS xY w)	N)r'   r(   r)   r*   r   rf   z-ca-cert.pemz-ca-cert.cerz-ca-cert.p12z-ca.p12r   )rh   ri   rj   makedirsr.   rS   r   rk   r8   rl   r   r   dump_privatekeyr   dump_certificatePKCS12set_certificateexportset_privatekeyrm   )
ri   r   r*   r'   r(   expiryr+   r   rz   p12s
             r-   r   zCertStore.create_store   s   ww~~d#KK#/x^8"&S[\R##% 	tBGGLLx)?S,TVZ'[ 	_`GG..NN// GG//NN//	 	 "'',,tX%>?F 	!GG//NN//	 "'',,tX%>?F 	!GG//NN//	 "'',,tX%>?F 	"!..'')C#GGCJJL!	" ##% 	"tBGGLLx)?S,TVZ'[ 	"_`..'')C#s#GGCJJL!		" 	" "'',,tX%>?F 	%!GGO$	% BwQ	 	 	 		 		 		" 	"	" 	" 	" 	"	% Bws}   '.O BN3$O !AOAOAO'.P 4A O4P P3N=	8O  O
OO$'O14O=	9P  P	Pspecri   returnc                    t        |d      5 }|j                         }d d d        t        t        j                  j                  t        j                  j                              }	 t        j                  j                  t        j                  j                  ||      }| j                  t        |||      |j                  d             y # 1 sw Y   xY w# t        $ r | j                  }Y Pw xY w)Nr   idna)rk   r   r<   r   r   r   r   r   	ExceptionrV   add_certrF   rq   )rL   r   ri   r~   rz   r   r,   rJ   s           r-   add_cert_filezCertStore.add_cert_file  s    $ 	&&(C	NN++++	1 77++J 	4T2KK	
	 	  	100J	1s   C(9C CC21C2r`   namesc                     |j                   j                  r#|| j                  |j                   j                  <   |j                   j                  D ]  }|| j                  |<    |D ]  }|| j                  |<    y)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   r`   r   rB   s       r-   r   zCertStore.add_cert/  sg    
 ::==(-DJJuzz}}%$$ 	"A!DJJqM	" 	"A!DJJqM	"r/   dnc           	          | j                  d      }| g}t        dt        |            D ](  }|j                  ddj	                  ||d       z          * |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;  sW     dq#e*% 	5AJJutyyqr334	5
r/   r?   r@   r'   r<   c           	      l    g }|r |j                   j                  |             |D ]"  }|j                   j                  |             $ |j                  d       |j                  |t        |      f       t	        t         fd|      d      }|r j                  |   }nnt        t         j                   j                  |||       j                   j                        }| j                  |t        |      f<    j                  |       |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    sdjj0 r/   NrI   )extendr   r6   tuplenextfilterrZ   rF   rD   rV   rW   rX   rd   r,   rJ   rK   )rL   r?   r@   r'   potential_keyssnamer`   s   `       r-   get_certzCertStore.get_certG  s   " 02!!$"5"5j"AB 	:A!!$"5"5a"89	:d#z5;780.A
 JJt$E"++OO "  22224E 5:DJJ
E$K01KKzz5++U-=-===r/   rH   )rN   rO   rP   __doc__r]   rM   rd   staticmethodr}   classmethodtypingOptionalbytesr   
contextlibcontextmanagerr   DEFAULT_EXPr   strr   rF   r   Listr   Tupler   rn   r   r   rQ   r/   r-   rS   rS      s^    II  & )fooe>T ) )$ %  % <@TR] 1 1f
# 
S 
fooe>T 
`d 
&
"n 
"e 
" 	5 	V[[%7 	 	 48	,>.,> ++e$,> !//%0	,>
 
fgkk..3	4,>r/   rS   c                      e Zd Z ej                   ej
                  d ej                         j                   e	j                  e	j                  e	j                  d                   ej
                  d ej                         j                   e	j                  e	j                  e	j                  d                        Zy)_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'?'? 3 3S5H5H!L (@ (
 	 		K)9)9)9);)C)C 3 3S5H5H!L *D *
 		Mr/   r   c                   n    e Zd Z e       Zej                  j                   ej                  dd      z   Zy)_GeneralNamesr   i   N)
rN   rO   rP   r   r   r	   
SequenceOfsizeSpecr   ValueSizeConstraintrQ   r/   r-   r   r     s/     NM''&
&&q$/0Hr/   r   c                       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y)r<   c                     || _         y)zQ
            Returns a (common name, [subject alternative names]) tuple.
        N)x509)rL   r,   s     r-   rM   zCert.__init__  s     	r/   c                 H    | j                  d      |j                  d      k(  S )Nr   )digest)rL   others     r-   __eq__zCert.__eq__  s    {{8$X(>>>r/   c                 "    | j                         S rH   )to_pemrL   s    r-   	get_statezCert.get_state  s    {{}r/   c                 ~    t         j                  j                  t         j                  j                  |      | _        y rH   )r   r   r   r   r   )rL   states     r-   	set_statezCert.set_state  s%    NN33GNN4O4OQVW	r/   c                 $    | j                  |      S rH   )from_pem)r   r   s     r-   
from_statezCert.from_state  s    ||E""r/   c                     t         j                  j                  t         j                  j                  |      } | |      S rH   )r   r   r   r   )r   txtr   s      r-   r   zCert.from_pem  s,    ~~..w~~/J/JCP4yr/   c                 N    t        j                  |      }| j                  |      S rH   )sslDER_cert_to_PEM_certr   )r   derpems      r-   from_derzCert.from_der  s!    &&s+||C  r/   c                     t         j                  j                  t         j                  j                  | j                        S rH   )r   r   r   r   r   r   s    r-   r   zCert.to_pem  s-    ~~..NN''II 	r/   c                 8    | j                   j                  |      S rH   )r   r   )rL   r   s     r-   r   zCert.digest  s    yy%%r/   c                 R    | j                   j                         j                         S rH   )r   
get_issuerget_componentsr   s    r-   issuerzCert.issuer  s    yy##%4466r/   c                     | j                   j                         }t        j                  j                  |j	                  d      d      S Nr1   z%Y%m%d%H%M%SZ)r   get_notBeforedatetimestrptimer   rL   ts     r-   	notbeforezCert.notbefore  s6    II##%  ))!((7*;_MMr/   c                     | j                   j                         }t        j                  j                  |j	                  d      d      S r   )r   get_notAfterr   r   r   r  s     r-   notafterzCert.notafter  s6    II""$  ))!((7*;_MMr/   c                 6    | j                   j                         S rH   )r   has_expiredr   s    r-   r  zCert.has_expired  s    yy$$&&r/   c                 R    | j                   j                         j                         S rH   )r   r   r   r   s    r-   r   zCert.subject  s    yy$$&5577r/   c                 6    | j                   j                         S rH   )r   get_serial_numberr   s    r-   serialzCert.serial  s    yy**,,r/   c                    | j                   j                         }t        j                  j                  dt        j                  j
                  di}|j                  |j                         d      |j                         fS )NRSADSAUNKNOWN)	r   r;   r   r   r   TYPE_DSAgettypebits)rL   pktypess      r-   keyinfozCert.keyinfo  sb    YY!!#NN##UNN##U

 IIbggi+GGI
 	
r/   c                 H    d }| j                   D ]  }|d   dk(  s|d   } |S )Nr   s   CNr   r   rL   crB   s      r-   r(   zCert.cn  s5     	Atu}aD	 r/   c                 H    d }| j                   D ]  }|d   dk(  s|d   } |S )Nr      Or   r   r  s      r-   r'   zCert.organization  s5     	Att|aD	 r/   c                    g }t        | j                  j                               D ]  }| j                  j                  |      }|j	                         dk(  s2	 t        |j                         t                     }|d   D ]:  }|d   j                         s|d   j                         }|j                  |       <  |S # t        $ r Y w xY w)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     tyy4467 
	+A))))!,C!!#'88 -/JC Q +At}}aDMMO *+
	+  # s   #C	CC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 # #   ! !
& 7 7 N N N N ' ' 8 8 - - 	
 	
      r/   r<   ))r   r   r4   rh   r   rr   r   r   r   pyasn1.codec.der.decoderr   pyasn1.errorr   pyasn1.typer   r   r   r   r	   +seleniumwire.thirdparty.mitmproxy.coretypesr
   r   r9   rm   r.   rD   rF   r   TCustomCertIdr   r   TGeneratedCertIdUnionTCertIdrS   Choicer   r   r   Serializabler<   rQ   r/   r-   <module>r3     s       	 
 
    + $ > > D ! ")X5p% % << 6UCZ8P PQ 
,,}&66
7[> [>|	4;; 	0DOO 0q<$$ qr/   