
    gO                         S r SSKJrJr  SSKJr  SSKrSSKrSSKJ	r	  SSK
JrJrJr  SSKJrJrJrJr   " S S	\5      r " S
 S\5      rSSKJrJr   " S S\5      rg)z(tests for passlib.utils.(des|pbkdf2|md4)    )with_statementdivision)hexlifyN)UnknownHashError)PY3uJYTHON)TestCase	TEST_MODE
skipUnlesshbc                   P    \ rS rSrSrSrSS/r/ SQrS rS r	S	 r
S
 rS rS rSrg)HashInfoTest   ztest various crypto functionszpasslib.crypto.digesthashlibiana))md5r   zSCRAM-MD5-PLUSzMD-5)sha1zsha-1zSCRAM-SHA-1SHA1)sha256sha-256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)test2r   zTEST-2)	test3_128z	test3-128z
TEST-3-128c                 j   SSK Jn  SSKJnJn  [
        R                  " 5       nUR                  5         U R                  UR                  5        [
        R                  " SS5        [
        R                  " SS5        U R                  U" [        S5      5      S5        U R                  U" S	5      S5        U R                  [        US
5        U" X0R                  5       HQ  n[!        U R"                  5       H5  u  pgXV   nU H&  n	U" X5      n
U R                  XSU	< SU< S35        M(     M7     MS     g
)znorm_hash_name()r   )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              Y/home/matz/Project1/venv/lib/python3.13/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                    SSK Jn  U R                  [        US5        U R                  [        US5        U R                  [        US5        U R	                  U" S5      [
        R                  SS45         [
        R                  " S	5        S
nU(       aQ  U" S	5      nUS   nU R	                  X4SS45        U R	                  [        U" S5      R                  5       5      S5        OU R                  [        US	5         [
        R                  " S5        S
nU" S5      nUS   nU(       d  SSK
Jn  U R                  XF5        U R	                  X4SS45        U R	                  [        U" S5      R                  5       5      S5        U R                  U" S5      U" S5      5        g! [         a    Sn GN$f = f! [         a    Sn Nf = f)zlookup_hash() -- constructorr   lookup_hashnew__name__sha4r      @   shaTFr   s   abcs(   0164b8a914cd2a5e74c4f7ff082c4d97f1edf880r'   )r'   s    a448017aaf21d8525fc10ae87aa6729dN)r*   rE   r2   
ValueErrorr1   r   r   rF   r   digestpasslib.crypto._md4r'   assertIs)r7   rE   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# >F6 #F32F36GGc                    SSK Jn  U R                  [        US5        U" SSS9nU R	                  UR
                  5        U R                  [        SUR                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U" SSS9nU R                  X25        g)z"lookup_hash() -- unknown hash namer   rD   xxx256Frequiredzunknown hash: 'xxx256'N)r*   rE   r2   r   assertFalse	supportedassertRaisesRegexrR   r1   namedigest_size
block_sizerO   )r7   rE   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"rB   c                    SSK JnJn  U" SSS9R                  (       d  U R	                  S5      eU" 5         U R                  US5        SnU R                  [        X1S5        U" SSS9nU R                  UR                  U5        U R                  [        X4R                  5        U R                  UR                  S5        U R                  UR                  S	5        g
)z,
lookup_hash() -- test set_mock_fips_mode()
r   )rE   _set_mock_fips_moder   FrX   zmd5 not supportedz'md5' hash disabled for fipsrI   rJ   N)r*   rE   re   r[   skipTestr.   r\   r   assertRegex
error_textrR   r1   r^   r_   )r7   rE   re   patr`   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."-rB   c                     SSK Jn  U" S5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  U" S5      U5        U" S5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S	5        g
)zlookup_hash() -- metadatar   rD   r   r   rJ       zSHA2-256r   rI   N)r*   rE   r1   r]   	iana_namer_   r^   rO   r7   rE   r`   s      r?   test_lookup_hash_metadata&HashInfoTest.test_lookup_hash_metadata   s     	6 8$H-3"-))2.k*-t4 5!E*/"-))2.rB   c                     SSK Jn  U" S5      nU R                  U" U5      U5        U R                  U" UR                  5      U5        U R	                  [
        US5        g)z lookup_hash() -- alternate typesr   rD   r   {   N)r*   rE   rO   rR   r2   r3   ro   s      r?   test_lookup_hash_alt_types'HashInfoTest.test_lookup_hash_alt_types   sM     	68$k$'.k$**-t4)[#6rB    N)rG   
__module____qualname____firstlineno____doc__descriptionPrefixr6   r4   r@   rT   rb   rj   rp   rt   __static_attributes__rv   rB   r?   r   r      s@    '/ #F+"G6,>\#&.2/(	7rB   r   c                      \ rS rSrSrSrS\" S5      SSS\" S	5      4S
SSSSS\" S5      4SSSSS\" S5      4SSSSS\" S5      4SSSSS\" S5      4SSSSS\" S5      4/r\(       d  \R                  SSSSS\" S5      45        S r
S rSrg)Pbkdf1_Test   ztest kdf helperszpasslib.crypto.digest.pbkdf1   password78578E5A5D63CB06  rI   r    dc19847e05c64d2faf10ebfb4a3d2a20)r      saltr   r   r   rB   r      r   84   8475c6a8531a5d27 8475c6a8531a5d27e386cd496457812cN(4a8fd48e426ed081b535be5769892fa396293efbr'    f7f2e91100a8f96190f2dd177cb26453c                 t    SSK Jn  U R                   H"  u  p#pEpgU" XbX4U5      nU R                  X5        M$     g)test reference vectorsr   pbkdf1N)r*   r   pbkdf1_testsr1   )	r7   r   secretsaltroundskeylenrM   r<   r>   s	            r?   
test_knownPbkdf1_Test.test_known   s9    0=A=N=N9F&&FD&AFV- >OrB   c                   ^ SSK Jm  SU4S jjnU" 5         U R                  [        USS9  U R                  [        USS9  U R                  [        USS	9  U R                  [        USS
9  U R                  [        USS
9  U R                  [        USS9  U R                  [        USSS9  U R                  [        USS9  g)test border casesr   r   r   r   c                    > T" X@XU5      $ Nrv   )r   r   r   r   hashr   s        r?   helper'Pbkdf1_Test.test_border.<locals>.helper   s    $f==rB   r   r   missing)r   r   1r      )r   r   N)   secretr   r   r   r   )r*   r   r2   r3   rL   )r7   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8rB   rv   )rG   rw   rx   ry   rz   r{   r   r   r	   appendr   r   r|   rv   rB   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\]	
.9rB   r~   )pbkdf2_hmacPBKDF2_BACKENDSc                      \ rS rSrSrSSR                  \5      -  r/ \" S5      SSSS	4P\" S
5      SSSS	4P\" S5      SSSS4P\" S5      SSSS4P\" S5      SSSS4P\" S5      SSSS4P\" S5      SSSS4P\" S5      SSSS4P\" S5      SSSS4P\" S5      SSSS4P\" S5      S S!SS"4P\" S#5      S$S%SS	4P\" S&5      S'\" S(5      S)S*S+4P\" S,5      S-SSS*S.4P\" S/5      S0S1S2S*S.4P\" S35      SSSSS.4P\" S45      SSSSS.4P\" S55      SSSSS.4P\" S65      S S!SS7S.4P\" S85      S9SS:SS.4P\" S;5      SS9S:SS.4P\" S<5      S$S%SS	S.4P\" S=5      SSSSS+4P\" S>5      SSSSS+4P\" S?5      SSSSS+4P\" S@5      S S!SSAS+4P\" S5      SSSSSB4P\" SC5      SDSSES	SB4P\" SF5      SDSSESGSB4P\" SH5      SDSSIS7SJ4P\" SK5      SDSSIS7SL4Pr	SM r
SN rSO rSP rSQrgG)R
Pbkdf2Testi  ztest pbkdf2() supportz2passlib.crypto.digest.pbkdf2_hmac() <backends: %s>z,  cdedb5281bb2f801565a1122b2563515r   s   ATHENA.MIT.EDUraeburnr   rI    01dbee7f4a9e243e988b62c73cda935d   @01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86rm   @5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13i  @d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ees   4VxxV4   @139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1s@   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase equals block size@9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82asA   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase exceeds block size(0c60c80f961f0e71f3a9b524af6012062fe037a6r   r   (ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957(4b007901b765489abead49d926f721d065a429c1i   23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsalt    56fa6aa75548099dcc37d7f03425e0c3s	   pass words   sa ltڀ887CFF169EA8335235D8004242AA7D6187A41E3187DF0CE14E256D85ED97A97357AAA8FF0A3871AB9EEFF458392F462F495487387F685B7472FC6C29E293F0A0s   helloڀ9290F727ED06C38BA4549EF7DE25CF5642659211B7FC076F2D28FEFD71784BB8D8F6FB244A8CC5C06240631B97008565A120764C0EE9C2CB0073994D79080136i'  rJ   sha512ڀ55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783s   passwdr   ڀ4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8ds   Passwords   NaCli8 @120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9(   @9e83f279c040f2a11aa4a02b24c418f2d3cb39560c9627fa4f47e3bcc2897c3drB   i   @ea5808411eb0c7e830deab55096cee582761e22a9bc034e3ece925225b07bf46 89b69d0516f829893c696226650a8687@867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252@e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53c@d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5ڐ6e23f27638084b0f7ea1734e0d9841f55dd29ea60a834466f3396bac801fac1eeb63802f03a0b4acd7603e3699c8b74437be83ff01ad7f55dac1ef60f4d56480c35ee68fd52c6936H   r    e248fb6b13365146f8ac6307cc222812r   
   (e248fb6b13365146f8ac6307cc2228127872da6dNPb1d5485772e6f76d5ebdc11b38d3eff0a5b2bd50dc11f937e86ecacd0cd40d1b9113e0734e3b76a3>   r   Pea014cc01f78d3883cac364bb5d054e2be238fb0b6081795a9d84512126e3129062104d2183464c4r'   c                     U R                    H@  nUSS u  p#pEn[        U5      S:X  a  US   OSn[        XsXEU5      nU R                  X5        MB     g)r   Nr      r   )pbkdf2_test_vectorslenr   r1   )	r7   r9   r<   r   r   r   r   rM   r>   s	            r?   r   Pbkdf2Test.test_known  sU    ++C47G1GT6"3x1}SV&F vFFV-	 ,rB   c                 J   SSK Jn   SSKnSnU R	                  SU;   U5         SSKJn  UR                  S:g  nU R	                  S	U;   U5        SS
KJ	n  U(       a  U R                  SU5        gU R                  SU5        g! [         a    Sn Nf = f! [         a    Sn Nhf = f)z$verify expected backends are presentr   )r   NTF
fastpbkdf2r   r   zhashlib-ssl)r   zbuiltin-from-byteszbuiltin-unpack)r*   r   r   ImportErrorr1   r   r   rw   passlib.utils.compatr   assertIn)r7   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                    SS jnU" 5         U R                  [        USS9  U R                  [        USS9  U R                  [        USS9  U" SS9  U R                  [        USS9  U R                  [        USS9  U R                  [        US	S9  U R                  [        USS9  U R                  [        US
S9  U R                  [        US
S9  U R                  [        USS9  U R                  [        US
S9  g)r   r   Nc                     [        X@XU5      $ r   r   r   r   r   r   rM   s        r?   r   &Pbkdf2Test.test_border.<locals>.helper      vtVDDrB   r   r   r   xr   l   O r   r   r   foorM   r   r   r   Nr   )r2   rL   r3   OverflowErrorr7   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6rB   c                     SS jnU R                  [        U" SS95      S5        U R                  [        U" SS95      S5        g)	ztest keylen==NoneNr   c                     [        X@XU5      $ r   r   r   s        r?   r   .Pbkdf2Test.test_default_keylen.<locals>.helper  r   rB   r   r   r   rm   r   )r1   r   r   s     r?   test_default_keylenPbkdf2Test.test_default_keylen  s<    	EV623R8V845r:rB   rv   )rG   rw   rx   ry   rz   joinr   r{   r   r   r   r   r   r   r|   rv   rB   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;rB   r   )rz   
__future__r   r   binasciir   r   r+   passlib.excr   r   r   r   r	   passlib.tests.utilsr
   r   r   r   r   r~   r*   r   r   r   rv   rB   r?   <module>r      sV    . 0    ) / / C C
l78 l7f79( 79| ?T; T;rB   