
    "JjS                        S SK Jr  S SKrS SKJs  Jr  S SKrS SK	r	S SK
r
S SKJr  S SKrS SKrS SKJrJrJrJrJrJr  S SKJrJrJr  S SKJr  S SKJr  S rS	 rS
 r S r!g)    )annotationsN)Path)verify_signaturePUBLIC_KEY_NPUBLIC_KEY_ETEST_PUBLIC_KEY_NTEST_PUBLIC_KEY_ETEST_PRIVATE_KEY_D)encrypt_tokendecrypt_tokenensure_dirs)RedactingFilter)Configc                 X   Sn [         R                  " U 5      R                  5       nSnSU-   U-   n[        R	                  US5      n[        U[        [        5      nUR                  SS5      R                  5       n[        X[        [        S9nSoUL o(       Gd  [        R                  " SU	4S	Xx45      S
[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS
S[        R                  " 5       ;   d  [        R                   " U 5      (       a  [        R"                  " U 5      OSS[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OSS[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OSS[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS[        R"                  " U5      [        R"                  " U5      S.-  n
SSU
0-  n[%        [        R&                  " U5      5      eS =n=pSn[        X[        [        S9nSoUL o(       Gd  [        R                  " SU4SX45      S
[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS
[        R"                  " U5      S[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OSS[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OSS[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS[        R"                  " U5      [        R"                  " U5      S.-  nSSU0-  n[%        [        R&                  " U5      5      eS =n=n=pSnSnUU-  n[        X[        [        S9nSnUUL nU(       Gd  [        R                  " SU4SUU45      S
[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS
S[        R                  " 5       ;   d  [        R                   " U 5      (       a  [        R"                  " U 5      OS[        R"                  " U5      [        R"                  " U5      S[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OSS[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS[        R"                  " U5      [        R"                  " U5      S.-  nSSU0-  n[%        [        R&                  " U5      5      eS =n=n=n=n=nnSn[        U U5      nSn	UU	L o(       Gd#  [        R                  " SU4SUU	45      S
[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS
S[        R                  " 5       ;   d  [        R                   " U 5      (       a  [        R"                  " U 5      OS[        R"                  " U5      [        R"                  " U5      [        R"                  " U	5      S.-  nS S!U0-  n[%        [        R&                  " U5      5      eS =n=n=pS"n[        U U5      nSn	UU	L o(       Gd#  [        R                  " SU4SUU	45      S
[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS
S[        R                  " 5       ;   d  [        R                   " U 5      (       a  [        R"                  " U 5      OS[        R"                  " U5      [        R"                  " U5      [        R"                  " U	5      S.-  nS S!U0-  n[%        [        R&                  " U5      5      eS =n=n=p[        X5      nSnUUL ow(       GdY  [        R                  " SU4S#UU45      S
[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS
S[        R                  " 5       ;   d  [        R                   " U 5      (       a  [        R"                  " U 5      OSS[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS[        R"                  " U5      [        R"                  " U5      S$.-  nS%S&U0-  n
[%        [        R&                  " U
5      5      eS =n=p}[        [(        :g  o(       d  [        R                  " S'U4S([        [(        45      S[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OSS)[        R                  " 5       ;   d  [        R                   " [(        5      (       a  [        R"                  " [(        5      OS)S*.-  nS+S,U0-  n[%        [        R&                  " U5      5      eS ng )-Ns   test update release contents   010	`He  s     big   )neTis)zO%(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py2)s, n=%(py3)s, e=%(py4)s)
} is %(py9)sr   messagevalid_sig_hexr   r	   )py0py1py2py3py4py6py9zassert %(py11)spy11s   modified messageF)zP%(py7)s
{%(py7)s = %(py0)s(%(py2)s, %(py3)s, n=%(py4)s, e=%(py5)s)
} is %(py10)s)r   r   r   r   py5py7py10zassert %(py12)spy12ab)z^%(py10)s
{%(py10)s = %(py0)s(%(py1)s, (%(py3)s * %(py5)s), n=%(py7)s, e=%(py8)s)
} is %(py13)s)r   r   r   r!   r"   py8r#   py13zassert %(py15)spy151234)z9%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
} is %(py8)s)r   r   r   r!   r&   assert %(py10)sr#    )z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} is %(py7)s)r   r   r   r   r"   zassert %(py9)sr   !=z%(py0)s != %(py2)sr   r   r   assert %(py4)sr   )hashlibsha256digestint
from_bytespowr
   r   to_byteshexr   r	   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   )r   sha256_hashasn1_prefixpaddedmsig_intr   @py_assert5@py_assert8@py_assert7@py_format10@py_format12@py_assert1@py_assert6@py_assert9@py_format11@py_format13@py_assert2@py_assert4@py_assert12@py_assert11@py_format14@py_format16@py_format9@py_assert3@py_format8@py_format3@py_format5s                               CD:\Programs\laragon\www\wolf\agent\tests\test_security_hardening.pytest_rsa_signature_verificationr\      s$   
 -G..)002K bK2[@;NFvu%A!'):;G$$S%0446MG6GK\]eaeeaeeeeee]eeeeeeeeeeeeeeeeGeeeeGeeeeee]eeee]eeeeee6Geeee6GeeeeeeK\eeeeK\eee]eeeaeeeeeeee 0r/BSWhirmrrmrrrrrrirrrrrrrrrrrrr/rrrrrrrrrrrrrrrrBSrrrrBSrrrrrrWhrrrrWhrrrirrrmrrrrrrrr &*cCcTCZcG3DHYZc^ccZ^ccccccZ^cccccccccccccccccGccccGcccTcccCcccccc3Dcccc3DccccccHYccccHYcccZccc^ccccccccc &,5GV,55,55555,5555555555555555G5555G555V555,5555555555%'1GR(1E1(E11111(E1111111111111111G1111G111R111(111E1111111
 G3<u<3u<<<<<3u<<<<<<<<<<<<<<<<G<<<<G<<<<<<]<<<<]<<<3<<<u<<<<<<<,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,    c                    Sn Sn[        X5      nUR                  nSoC" U5      oU(       d  SS[        R                  " 5       ;   d  [        R
                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =n=pEX!:g  o3(       d  [        R                  " SU4SX!45      S[        R                  " 5       ;   d  [        R
                  " U5      (       a  [        R                  " U5      OSS	[        R                  " 5       ;   d  [        R
                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS n[        X 5      n	X:H  o3(       d  [        R                  " SU4SX45      S[        R                  " 5       ;   d  [        R
                  " U	5      (       a  [        R                  " U	5      OSS	[        R                  " 5       ;   d  [        R
                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS n[        R                  " [        5         [        US5      n
X:g  o3(       d  [        R                  " SU4SX45      S[        R                  " 5       ;   d  [        R
                  " U
5      (       a  [        R                  " U
5      OSS	[        R                  " 5       ;   d  [        R
                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS nS S S 5        Sn[        X5      oDU:H  oU(       Gd  [        R                  " SU4SXK45      S[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R
                  " U5      (       a  [        R                  " U5      OSS[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R
                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS =pEg ! , (       d  f       GN= f)N!fp_test_machine_fingerprint_12345wp_agent_secret_token_value_xyzzwp_enc:zLassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.startswith
}(%(py4)s)
}	encrypted)r   r   r   r   r,   r.   tokenr/   r0   r   ==)z%(py0)s == %(py2)s	decryptedwrong_fingerprintwrong_decryptedwp_agent_legacy_plain_token)z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} == %(py6)sr   plaintext_tokenfingerprint)r   r   r   r   r   zassert %(py8)sr&   )r   
startswithr;   r<   r9   r=   r>   r?   r@   r:   r   pytestraises	Exception)rj   rb   ra   rK   rW   rF   @py_format7rY   rZ   re   rg   ri   rV   s                r[    test_token_encryption_decryptionrp   3   s   5K-E e1I*	*	*********9****9******	**********999 i5I999 
y	! (	3FG'''''''''''''''''''''%''''%'''''''	 
" 4O6I/IIIII6IIIIII=IIII=IIIIIIIIIIIIIIII+IIII+III6IIIIII/IIII/IIIIIII 
"	!s   C4U88
Vc                    [        5       n  " S S[        R                  5      nU" S5      nU R                  o3" U5      nSoTUL of(       Gd  [        R
                  " SU4SXE45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=n=peSoR                  oIU;   o(       d  [        R
                  " SU
4SX45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pSoR                  oIU;  o(       d  [        R
                  " SU
4SX45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pU" SS5      nU R                  o3" U5      nSoTUL of(       Gd  [        R
                  " SU4SXE45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=n=peUR                  S   n	SoU:H  o(       do  [        R
                  " SU
4SX45      [        R                  " U	5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pU" S5      nU R                  o3" U5      nSoTUL of(       Gd  [        R
                  " SU4SXE45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=n=peSoR                  oIU;   o(       d  [        R
                  " SU
4SX45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pU" S 5      nU R                  o3" U5      nSoTUL of(       Gd  [        R
                  " SU4SXE45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=n=peS!oR                  oIU;  o(       d  [        R
                  " SU
4SX45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pSoR                  oIU;   o(       d  [        R
                  " SU
4SX45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pU" S"S#S$045      nU R                  o3" U5      nSoTUL of(       Gd  [        R
                  " SU4SXE45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=n=peUR                  S#   n	SoU:H  o(       do  [        R
                  " SU
4SX45      [        R                  " U	5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pg )%Nc                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )&test_log_redaction.<locals>.MockRecordQ    c           	     J   > [         TU ]  S[        R                  SSXS 5        g )Ntest_loggerzpath/to/file
   )super__init__loggingINFO)selfmsgargs	__class__s      r[   rz   /test_log_redaction.<locals>.MockRecord.__init__R   s    G]GLL."cY]^r]   )ru   )__name__
__module____qualname____firstlineno__rz   __static_attributes____classcell__)r   s   @r[   
MockRecordrs   Q   s    	_ 	_r]   r   z,Connecting with token: wp_agent_123456789abcTr   )zL%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.filter
}(%(py3)s)
} is %(py8)sfrec)r   r   r   r!   r&   r*   r#   z***)in)z+%(py1)s in %(py5)s
{%(py5)s = %(py3)s.msg
})r   r   r!   zassert %(py7)sr"   wp_agent_123456789abc)not in)z/%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.msg
}zToken is %s)wp_agent_123r   zwp_***rc   )z%(py1)s == %(py4)s)r   r   zassert %(py6)sr   z Failed with password=secret_passzpassword=***z'Authorization: Bearer my_jwt_token_heremy_jwt_token_herez Register body: %(install_token)sinstall_tokenwp_install_123)r   r{   	LogRecordfilterr9   r:   r;   r<   r=   r>   r?   r@   r~   r   )r   r   r   rK   rQ   rH   rL   rV   rN   @py_assert0rP   @py_format6rX   rW   rZ   ro   s                   r[   test_log_redactionr   L   so   A_W&& _
 C
DC88 8C= D D     =      1    1   8      C    C   =   D       GGG55CCG"1''1'11111"111"111111#1111#111'1111111 ]$5
6C88 8C= D D     =      1    1   8      C    C   =   D       88A;"("(""""";""";"""(""""""" 7
8C88 8C= D D     =      1    1   8      C    C   =   D       $WW$W$$$$$>$$$>$$$$$$S$$$$S$$$W$$$$$$$ >
?C88 8C= D D     =      1    1   8      C    C   =   D       -gg-g--------------c----c---g-------GGG55CCG 7?L\:]9_
`C88 8C= D D     =      1    1   8      C    C   =   D       88O$0000000$000$0000000000r]   c                 6   [         R                  " 5        n [        U 5      n[        S00 SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS
_SS_SS_SS_SUS-  _SUS-  _SUS-  _S US!-  _6n[	        U5        [
        R                  S":w  Gat  So1U-  oDR                  oU" 5       ofR                  nS#oU-  n	S$oU
:H  o(       Gd  [        R                  " S%U4S&X45      S'[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS'[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U
5      S(.-  nS)S*U0-  n[        [        R                   " U5      5      eS =n=n=n=n=n=n=n	=pSo1U-  oDR                  oU" 5       ofR                  nS#oU-  n	S$oU
:H  o(       Gd  [        R                  " S%U4S&X45      S'[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS'[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U
5      S(.-  nS)S*U0-  n[        [        R                   " U5      5      eS =n=n=n=n=n=n=n	=pS!o1U-  oDR                  oU" 5       ofR                  nS#oU-  n	S$oU
:H  o(       Gd  [        R                  " S%U4S&X45      S'[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS'[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U
5      S(.-  nS)S*U0-  n[        [        R                   " U5      5      eS =n=n=n=n=n=n=n	=pSo1U-  nS+oTU-  ofR                  o" 5       oR                  nS#nUU-  nS$nUU:H  nU(       Gd$  [        R                  " S%U4S,UU45      S'[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS'[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S-.-  nS.S/U0-  n[        [        R                   " U5      5      eS =n=n=n=n=n=n=n=n=n=nnS S S 5        g ! , (       d  f       g = f)1Napi_urlzhttps://api.wolfpanel.netrelease_channelstable	server_id123agent_versionz0.1.0heartbeat_interval<   api_mockTconnect_urlr+   
mysql_userrootmysql_passwordmysql_socketupdate_timeoutbackup_retention   update_retention   download_timeout   etc_diretcopt_diroptvar_dirvarlog_dirlognti  i  rc   )zz(%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).stat
}()
}.st_mode
} & %(py11)s) == %(py15)sbase)r   r   r!   r"   r   r    r(   zassert %(py17)spy17secrets)z(%(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s
{%(py8)s = ((%(py0)s / %(py2)s) / %(py5)s).stat
}()
}.st_mode
} & %(py14)s) == %(py18)s)r   r   r!   r&   r#   r$   py14py18zassert %(py20)spy20ru   )tempfileTemporaryDirectoryr   r   r   osnamestatst_moder9   r:   r;   r<   r=   r>   r?   r@   )tmpr   cfgrK   rW   rQ   rL   rG   @py_assert10rR   @py_assert14@py_assert13rU   @py_format18rH   rM   rS   @py_assert15@py_assert17@py_assert16@py_format19@py_format21s                         r[    test_least_privilege_permissionsr   q   s]   		$	$	&#Cy 
/
$
 
 "	

  "
 
 
 
 
 
 
 
 
  
 5L
  5L!
" 5L#
$ 5L%
, 	C 77d? A5LA&&A&(A00A5A58AEAEAAAAA8AAAAAADAAAADAAA5AAA&AAA(AAA0AAA5AAAEAAAAAAAA A5LA&&A&(A00A5A58AEAEAAAAA8AAAAAADAAAADAAA5AAA&AAA(AAA0AAA5AAAEAAAAAAAA A5LA&&A&(A00A5A58AEAEAAAAA8AAAAAADAAAADAAA5AAA&AAA(AAA0AAA5AAAEAAAAAAAA M5LM9M9,M22M24M<<MuM<uDMMDMMMMMDMMMMMMDMMMMDMMM5MMM9MMM2MMM4MMM<MMMuMMMMMMMMMMMM? 
'	&	&s   W+X


X)"
__future__r   builtinsr;   _pytest.assertion.rewrite	assertionrewriter9   r{   r   r   pathlibr   r1   rl   updater   r   r   r   r	   r
   identityr   r   r   loggerr   configr   r\   rp   r   r   ru   r]   r[   <module>r      sH    "    	     y y > > " -DJ2"1J Nr]   