+
    iO                         R t ^ RIHtHt ^ RIHt ^ RIt^ RIt^ RIH	t	 ^ RI
HtHtHt ^ RIHtHtHtHt  ! R R]4      t ! R	 R
]4      t^ RIHtHt  ! R R]4      tR# )z(tests for passlib.utils.(des|pbkdf2|md4))with_statementdivision)hexlifyN)UnknownHashError)PY3uJYTHON)TestCase	TEST_MODE
skipUnlesshbc                   \   a  ] tR t^t o RtRtRR.t. ROtR tR t	R t
R tR	 tR
 tRtV tR# )HashInfoTestztest various crypto functionszpasslib.crypto.digesthashlibianac                t   ^ RI Hp ^ RIHpHp \
        P                  ! 4       pVP                  4        V P                  VP                  4       \
        P                  ! RR4       \
        P                  ! RR4       V P                  V! \        R4      4      R4       V P                  V! R4      R4       V P                  \        VR	4       V! W0P                  4       FU  p\!        V P"                  4       F9  w  rgWV,          pV F&  p	V! W4      p
V P                  WR
V	: RV: R24       K(  	  K;  	  KW  	  R	# )znorm_hash_name())chain)norm_hash_name_known_hash_namesignorez.*unknown hashz.*unsupported hashMD4md4s   MD4Nzname=z	, format=:)	itertoolsr   passlib.crypto.digestr   r   warningscatch_warnings	__enter__
addCleanup__exit__filterwarningsassertEqualr   assertRaises	TypeErrornorm_hash_samples	enumeratenorm_hash_formats)selfr   r   r   ctxrowidxformatcorrectvalueresults   &          ^/var/www/html/photoedit/myenv/lib/python3.14/site-packages/passlib/tests/test_crypto_digest.pytest_norm_hash_name HashInfoTest.test_norm_hash_name.   s    #K %%'%*:;*>? 	%159/7)^T: *,B,BCC()?)?@( E+E:F$$VW>C>D&FG !  A D    c                   ^ RI Hp V P                  \        VR4       V P                  \        VR4       V P                  \        VR4       V P	                  V! R4      \
        P                  ^^@34        \
        P                  ! R4       RpV'       dV   V! R4      pV^ ,          pV P	                  W4^^@34       V P	                  \        V! R	4      P                  4       4      R
4       MV P                  \        VR4        \
        P                  ! R4       RpV! R4      pV^ ,          pV'       g   ^ RI
Hp V P                  WF4       V P	                  W4^^@34       V P	                  \        V! R	4      P                  4       4      R4       V P                  V! R4      V! R4      4       R#   \         d    Rp EL0i ; i  \         d    Rp Li ; i)zlookup_hash() -- constructorlookup_hashnew__name__sha4md5shaTFs   abcs(   0164b8a914cd2a5e74c4f7ff082c4d97f1edf880r   )r   s    a448017aaf21d8525fc10ae87aa6729dN)r   r5   r"   
ValueErrorr!   r   r9   r6   r   digestpasslib.crypto._md4r   assertIs)r'   r5   has_sharecordconsthas_md4r   s   &      r/   test_lookup_hash_ctor"HashInfoTest.test_lookup_hash_ctorI   s   5 	*k59*k:>*k6: 	U+gkk2r-BC	KKG  'F1IEVR_5WU6]%9%9%;<HJ j+u=	KKG U#q	/MM%%R1v!5!5!78<	> 	k%(+e*<=9  	G	   	G	s$   6F. G .F?>F?GGc                   ^ RI Hp V P                  \        VR4       V! RRR7      pV P	                  VP
                  4       V P                  \        RVP                  4       V P                  VP                  R4       V P                  VP                  R4       V P                  VP                  R4       V! RRR7      pV P                  W24       R# )z"lookup_hash() -- unknown hash namer4   xxx256Frequiredzunknown hash: 'xxx256'N)r   r5   r"   r   assertFalse	supportedassertRaisesRegexrA   r!   namedigest_size
block_sizer>   )r'   r5   infoinfo2s   &   r/   test_lookup_hash_w_unknown_name,HashInfoTest.test_lookup_hash_w_unknown_namew   s    5 	*KB 8e4(/1I4::VH-))40$/ Hu5e"r2   c                   ^ RI HpHp V! RRR7      P                  '       g   V P	                  R4      hV! 4        V P                  VR4       RpV P                  \        W1R4       V! RRR7      pV P                  VP                  V4       V P                  \        W4P                  4       V P                  VP                  ^4       V P                  VP                  ^@4       R# )z,
lookup_hash() -- test set_mock_fips_mode()
)r5   _set_mock_fips_moder9   FrG   zmd5 not supportedz'md5' hash disabled for fipsN)r   r5   rT   rJ   skipTestr   rK   r   assertRegex
error_textrA   r!   rM   rN   )r'   r5   rT   patrO   s   &    r/   test_mock_fips_mode HashInfoTest.test_mock_fips_mode   s     	K 551;;;-- 344 	+U3,/5I551#./jjA 	))2."-r2   c                "   ^ RI Hp V! R4      pV P                  VP                  R4       V P                  VP                  R4       V P                  VP
                  ^@4       V P                  VP                  ^ 4       V P                  V! R4      V4       V! R4      pV P                  VP                  R4       V P                  VP                  R4       V P                  VP
                  ^@4       V P                  VP                  ^4       R# )zlookup_hash() -- metadatar4   sha256sha-256zSHA2-256r9   N)r   r5   r!   rL   	iana_namerN   rM   r>   r'   r5   rO   s   &  r/   test_lookup_hash_metadata&HashInfoTest.test_lookup_hash_metadata   s     	6 8$H-3"-))2.k*-t4 5!E*/"-))2.r2   c                    ^ RI Hp V! R4      pV P                  V! V4      V4       V P                  V! VP                  4      V4       V P	                  \
        V^{4       R# )z lookup_hash() -- alternate typesr4   r\   N)r   r5   r>   rA   r"   r#   r_   s   &  r/   test_lookup_hash_alt_types'HashInfoTest.test_lookup_hash_alt_types   sM     	68$k$'.k$**-t4)[#6r2    N))r9   r9   zSCRAM-MD5-PLUSzMD-5)sha1zsha-1zSCRAM-SHA-1SHA1)r\   r]   SHA_256zsha2-256)	ripemd160z
ripemd-160zSCRAM-RIPEMD-160	RIPEmd160ripemdzSCRAM-RIPEMD)sha4_256zsha4-256zSHA4-256z	SHA-4-256)test128ztest-128TEST128)test2ro   zTEST-2)	test3_128z	test3-128z
TEST-3-128)r7   
__module____qualname____firstlineno____doc__descriptionPrefixr&   r$   r0   rC   rQ   rY   r`   rc   __static_attributes____classdictcell____classdict__s   @r/   r   r      sH     '/ #F+"G6,>\#&.2/(	7 	7r2   r   c                   ,  a  ] tR t^t o RtRtR]! R4      R^R]! R4      3RRRR^R	]! R
4      3RRR^R	]! R4      3RRR^R	]! R4      3RRRRR	]! R4      3RRRRR]! R4      3.t]'       g   ]P                  RRRRR]! R4      34       R t
R tRtV tR# )Pbkdf1_Testztest kdf helperszpasslib.crypto.digest.pbkdf1   password78578E5A5D63CB06  rf    dc19847e05c64d2faf10ebfb4a3d2a20   saltr9   848475c6a8531a5d27 8475c6a8531a5d27e386cd496457812cN(4a8fd48e426ed081b535be5769892fa396293efbr    f7f2e91100a8f96190f2dd177cb26453c                v    ^ RI Hp V P                   F"  w  r#rErgV! WbW4V4      pV P                  W4       K$  	  R# )test reference vectorspbkdf1N)r   r   pbkdf1_testsr!   )	r'   r   secretsaltroundskeylenr<   r,   r.   s	   &        r/   
test_knownPbkdf1_Test.test_known   s9    0=A=N=N9F&&FD&AFV- >Or2   c                  a ^ RI Ho RV3R llpV! 4        V P                  \        V^R7       V P                  \        V^R7       V P                  \        VRR7       V P                  \        V^ R7       V P                  \        VR	R7       V P                  \        VRR
7       V P                  \        V^RR7       V P                  \        VR	R
7       R# )test border casesr   r9   c                    < S! W@WV4      # Nre   )r   r   r   r   hashr   s   &&&&&r/   helper'Pbkdf1_Test.test_border.<locals>.helper   s    $f==r2   r   r   missing)r   r   1r   )r   r   N)   secretr      r   r9   )r   r   r"   r#   r;   )r'   r   r   s   & @r/   test_borderPbkdf1_Test.test_border   s    0	> 	)VA6)V!4 	*f9= 	*fQ7)VC8 	*fR8*fReD)VC8r2   re   )r|   r   r~       r9   r2   )r7   rq   rr   rs   rt   ru   r   r   r   appendr   r   rv   rw   rx   s   @r/   r{   r{      s     6 
b+,dBCe@fg
 	7	gtQ"T(;	gtQ"5G2HI	gtR3U0VW	gtT5"5W2XY	gtT626`3ab!L$ '4ub9[6\]	
.9 9r2   r{   )pbkdf2_hmacPBKDF2_BACKENDSc                     a  ] tR tRt o RtRRP                  ]4      ,          t. ]! R4      RR^^3N]! R4      RR^^3N]! R	4      RR^^ 3N]! R
4      RRR^ 3N]! R4      RR^^ 3N]! R4      RDRR^ 3N]! R4      RERR^ 3N]! R4      RR^^3N]! R4      RR^^3N]! R4      RRR^3N]! R4      RRR^3N]! R4      RRR^3N]! R4      R]! R4      R ^@R!3N]! R"4      R#R^^@R$3N]! R%4      R&R'R(^@R$3N]! R)4      RR^^ R$3N]! R*4      RR^^ R$3N]! R+4      RRR^ R$3N]! R,4      RRR^(R$3N]! R-4      R.RR/^ R$3N]! R04      RR.R/^ R$3N]! R14      RRR^R$3N]! R24      RR^^ R!3N]! R34      RR^^ R!3N]! R44      RRR^ R!3N]! R54      RR^^HR!3N]! R4      RR^^R63N]! R74      R8R^
^R63N]! R94      R8R^
R:R63N]! R;4      R8R^>^(R<3N]! R=4      R8R^>^(R>3Nt	R? t
R@ tRA tRB tRCtV tR:# )F
Pbkdf2Testi  ztest pbkdf2() supportz2passlib.crypto.digest.pbkdf2_hmac() <backends: %s>z,  cdedb5281bb2f801565a1122b2563515r|   s   ATHENA.MIT.EDUraeburn 01dbee7f4a9e243e988b62c73cda935d@01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86@5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13i  @d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ees   4VxxV4@139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1s   pass phrase equals block size@9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82as   pass phrase exceeds block size(0c60c80f961f0e71f3a9b524af6012062fe037a6r   (ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957(4b007901b765489abead49d926f721d065a429c1i   23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsalt 56fa6aa75548099dcc37d7f03425e0c3s	   pass words   sa ltڀ887CFF169EA8335235D8004242AA7D6187A41E3187DF0CE14E256D85ED97A97357AAA8FF0A3871AB9EEFF458392F462F495487387F685B7472FC6C29E293F0A0s   helloڀ9290F727ED06C38BA4549EF7DE25CF5642659211B7FC076F2D28FEFD71784BB8D8F6FB244A8CC5C06240631B97008565A120764C0EE9C2CB0073994D79080136i'  sha512ڀ55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783s   passwdr\   ڀ4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8ds   Passwords   NaCli8 @120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9@9e83f279c040f2a11aa4a02b24c418f2d3cb39560c9627fa4f47e3bcc2897c3dr2   i   @ea5808411eb0c7e830deab55096cee582761e22a9bc034e3ece925225b07bf46 89b69d0516f829893c696226650a8687@867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252@e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53c@d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5ڐ6e23f27638084b0f7ea1734e0d9841f55dd29ea60a834466f3396bac801fac1eeb63802f03a0b4acd7603e3699c8b74437be83ff01ad7f55dac1ef60f4d56480c35ee68fd52c6936rf    e248fb6b13365146f8ac6307cc222812r   (e248fb6b13365146f8ac6307cc2228127872da6dNPb1d5485772e6f76d5ebdc11b38d3eff0a5b2bd50dc11f937e86ecacd0cd40d1b9113e0734e3b76a3r9   Pea014cc01f78d3883cac364bb5d054e2be238fb0b6081795a9d84512126e3129062104d2183464c4r   c                    V P                    FI  pVR,          w  r#rEp\        V4      ^8X  d
   V^,          MRp\        WsWEV4      pV P                  W4       KK  	  R# )r   :N   Nrf   N)pbkdf2_test_vectorslenr   r!   )	r'   r)   r,   r   r   r   r   r<   r.   s	   &        r/   r   Pbkdf2Test.test_known  sS    ++C47G1GT6"3x1}SV&F vFFV-	 ,r2   c                T   ^ RI Hp  ^ RIpRpT P	                  RV9   V4        ^ RIHp VP                  R8g  pT P	                  RV9   V4       ^ R	IH	p V'       d   V P                  R
V4       R# V P                  RV4       R#   \         d    Rp Li ; i  \         d    Rp Lmi ; i)z$verify expected backends are present)r   NTF
fastpbkdf2r   r   zhashlib-ssl)r   zbuiltin-from-byteszbuiltin-unpack)r   r   r   ImportErrorr!   r   r   rq   passlib.utils.compatr   assertIn)r'   r   r   has_fastpbkdf2r   has_hashlib_sslr   s   &      r/   test_backendsPbkdf2Test.test_backends  s    9	#!N 	8.I	$+)44	AO 	/9?K 	-MM.@ MM*O<%  	#"N	#  	$#O	$s"   B B BBB'&B'c                @   R
R lpV! 4        V P                  \        VRR7       V P                  \        V^ R7       V P                  \        VRR7       V! ^R7       V P                  \        VRR7       V P                  \        V^ R7       V P                  \        VRR7       V P                  \        VRR7       V P                  \        V^R7       V P                  \        V^R7       V P                  \        VRR	7       V P                  \        V^R	7       R# )r   Nc                     \        W@WV4      # r   r   r   r   r   r   r<   s   &&&&&r/   r   &Pbkdf2Test.test_border.<locals>.helper      vtVDDr2   r   xr   r   r   foor<   r|   r   r   Nrf   r   l   O )r"   r;   r#   OverflowErrorr'   r   s   & r/   r   Pbkdf2Test.test_border  s   	E 	*fR8*fQ7)VC8 	a*fR8*fQ7 	-G)VC8 	)V!4)VA6 	*fU;)VA6r2   c                    RR lpV P                  \        V! RR7      4      ^4       V P                  \        V! RR7      4      ^ 4       R# )ztest keylen==NoneNrf   c                     \        W@WV4      # r   r   r   s   &&&&&r/   r   .Pbkdf2Test.test_default_keylen.<locals>.helper  r   r2   r   r\   r   )r!   r   r   s   & r/   test_default_keylenPbkdf2Test.test_default_keylen  s<    	EV623R8V845r:r2   re   s@   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXsA   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r7   rq   rr   rs   rt   joinr   ru   r   r   r   r   r   r   rv   rw   rx   s   @r/   r   r     s    LtyyYhOiiI
 565q"I
 565q"I
* UV5q")I
6 UV5tR5I
B UV@!RAI
N UV94MI
Z UV:D"YI
j =>WaiI
t =>WasI
~ =>WdB}I
V GH+7b	UI
d 56
D"cI
t  ! "  ! " b(	sI
P  V W7Ar8OI
\  V WWeR[I
h UVWaXgI
r UVWaXqI
| UVWdB{I
F  % &+-Tb(	EI
T UVWdBSI
^ UVS$H]I
h 56dBgI
r UVWaXqI
| UVWaX{I
F UVWdBEI
P  " # ,-T2xOI
` =>WaV_I
p 567BFoI
x =>7BfwI
@  & '7BEI
J  & '7BEII
V.=878; ;r2   r   )rt   
__future__r   r   binasciir   r   r   passlib.excr   r   r   r   r   passlib.tests.utilsr	   r
   r   r   r   r{   r   r   r   r   re   r2   r/   <module>r      sV    . 0    ) / / C C
l78 l7f79( 79| ?T; T;r2   