
    XR_O                         d Z ddlmZmZ ddlmZ ddlZddlZddlm	Z	 ddl
mZmZmZ ddlmZmZmZmZ  G d d	e          Z G d
 de          ZddlmZmZ  G d de          ZdS )z(tests for passlib.utils.(des|pbkdf2|md4)    )with_statementdivision)hexlifyN)UnknownHashError)PY3uJYTHON)TestCase	TEST_MODE
skipUnlesshbc                   J    e Zd ZdZdZddgZg dZd Zd Zd Z	d	 Z
d
 Zd ZdS )HashInfoTestz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                    ddl m} ddlm}m} t          j                    }|                                 |                     |j	                   t          j
        dd           t          j
        dd           |                      |t          d                    d           |                      |d	          d           |                     t          |d
            ||| j                  D ]S}t!          | j                  D ]<\  }}||         }|D ],}	 ||	|          }
|                     |
|d|	d|d           -=Td
S )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              B/usr/lib/python3/dist-packages/passlib/tests/test_crypto_digest.pytest_norm_hash_namez HashInfoTest.test_norm_hash_name.   s   ######KKKKKKKK %''%%%*:;;;*>??? 	%115999//777)^T::: 5*D,BCC 	G 	GC()?@@ G GVc(  G GE+^E6::F$$VWW>Cee>Dff&FG G G GGG	G 	G    c                 ,   ddl m} |                     t          |d           |                     t          |d           |                     t          |d           |                      |d          t
          j        ddf           	 t          j        d	           d
}n# t          $ r d}Y nw xY w|rk |d	          }|d         }|                     ||ddf           |                     t           |d          	                                          d           n|                     t          |d	           	 t          j        d           d
}n# t          $ r d}Y nw xY w |d          }|d         }|sddl
m} |                     ||           |                     ||ddf           |                     t           |d          	                                          d           |                      |d           |d                     dS )zlookup_hash() -- constructorr   lookup_hashnew__name__sha4r      @   shaTF   s   abcs(   0164b8a914cd2a5e74c4f7ff082c4d97f1edf880r&   )r&   s    a448017aaf21d8525fc10ae87aa6729dN)r)   rC   r1   
ValueErrorr0   r   r   rD   r   digestpasslib.crypto._md4r&   assertIs)r6   rC   has_sharecordconsthas_md4r&   s          r>   test_lookup_hash_ctorz"HashInfoTest.test_lookup_hash_ctorI   sl   555555 	*k5999*k:>>>*k6::: 	U++gk2r-BCCC	KGG 	 	 	GGG	 	> [''F1IEVeR_555WUU6]]%9%9%;%;<<HJ J J J j+u===	KGG 	 	 	GGG	U##q	 	&//////MM%%%%%R111v!5!5!7!788<	> 	> 	> 	kk%((++e*<*<=====s$   B B.-B.;E E! E!c                    ddl m} |                     t          |d            |dd          }|                     |j                   |                     t          d|j                   |                     |j	        d           |                     |j
        d           |                     |j        d            |dd          }|                     ||           dS )z"lookup_hash() -- unknown hash namer   rB   xxx256Frequiredzunknown hash: 'xxx256'N)r)   rC   r1   r   assertFalse	supportedassertRaisesRegexrQ   r0   namedigest_size
block_sizerN   )r6   rC   infoinfo2s       r>   test_lookup_hash_w_unknown_namez,HashInfoTest.test_lookup_hash_w_unknown_namew   s    555555 	*KBBB {8e444(((/1I4:VVVH---)4000$/// Hu555eT"""""r@   c                    ddl m}m}  |dd          j        s|                     d           |             |                     |d           d}|                     t          ||d            |dd          }|                     |j	        |           |                     t          ||j
                   |                     |j        d           |                     |j        d	           d
S )z<
        lookup_hash() -- test set_mock_fips_mode()
        r   )rC   _set_mock_fips_moder   FrV   zmd5 not supportedz'md5' hash disabled for fipsrG   rH   N)r)   rC   rb   rY   skipTestr-   rZ   r   assertRegex
error_textrQ   r0   r\   r]   )r6   rC   rb   patr^   s        r>   test_mock_fips_modez HashInfoTest.test_mock_fips_mode   s    	KJJJJJJJ {55111; 	5-- 3444 	+U333,/k5III{55111#.../djAAA 	)2..."-----r@   c                 ,   ddl m}  |d          }|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           |                      |d          |            |d          }|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d	           d
S )zlookup_hash() -- metadatar   rB   r   r   rH       zSHA2-256r   rG   N)r)   rC   r0   r[   	iana_namer]   r\   rN   r6   rC   r^   s      r>   test_lookup_hash_metadataz&HashInfoTest.test_lookup_hash_metadata   s    	655555 {8$$H---333"---)2...kk*--t444 {5!!E***///"---)2.....r@   c                     ddl m}  |d          }|                      ||          |           |                      ||j                  |           |                     t
          |d           dS )z lookup_hash() -- alternate typesr   rB   r   {   N)r)   rC   rN   rQ   r1   r2   rk   s      r>   test_lookup_hash_alt_typesz'HashInfoTest.test_lookup_hash_alt_types   s     	655555{8$$kk$''...kk$*--t444)[#66666r@   N)rE   
__module____qualname____doc__descriptionPrefixr5   r3   r?   rS   r`   rg   rl   ro    r@   r>   r   r      s        ''/ #F+  "G G G6,> ,> ,>\# # #&. . .2/ / /(	7 	7 	7 	7 	7r@   r   c                   F   e Zd ZdZdZd ed          ddd ed          fd	dd
ddd ed          fdd
ddd ed          fdd
ddd ed          fdd
ddd ed          fdd
ddd ed          fgZes$e                    dd
ddd ed          f           d Z	d Z
dS )Pbkdf1_Testztest kdf helperszpasslib.crypto.digest.pbkdf1   password78578E5A5D63CB06  rG   r    dc19847e05c64d2faf10ebfb4a3d2a20)rw      saltry   r   r   r@   r{      r   84   8475c6a8531a5d27 8475c6a8531a5d27e386cd496457812cN(4a8fd48e426ed081b535be5769892fa396293efbr&    f7f2e91100a8f96190f2dd177cb26453c                 ~    ddl m} | j        D ].\  }}}}}} ||||||          }|                     ||           /dS )test reference vectorsr   pbkdf1N)r)   r   pbkdf1_testsr0   )	r6   r   secretsaltroundskeylenrL   r;   r=   s	            r>   
test_knownzPbkdf1_Test.test_known   sm    000000=A=N 	. 	.9FD&&&'VFFD&&AAFVW----	. 	.r@   c                    ddl m dfd	} |             |                     t          |d           |                     t          |d	           |                     t          |d
           |                     t          |d           |                     t          |d           |                     t          |d           |                     t          |dd           |                     t          |d           dS )test border casesr   r      secretr{   r|   r   c                 "     || |||          S Nrt   )r   r   r   r   hashr   s        r>   helperz'Pbkdf1_Test.test_border.<locals>.helper   s    6$ff===r@   r   r   missing)r   r   1r      )r   r   N)r   r{   r|   r|   r   )r)   r   r1   r2   rK   )r6   r   r   s     @r>   test_borderzPbkdf1_Test.test_border   s&   000000	> 	> 	> 	> 	> 	> 	)VA666)V!444 	*f9=== 	*fQ777)VC888 	*fR888*fReDDD)VC88888r@   )rE   rp   rq   rr   rs   r   r   r	   appendr   r   rt   r@   r>   rv   rv      s3       6 
bb+,,dBCe@f@fg
 	7	gtQ""T((;	gtQ""5G2H2HI	gtR3U0V0VW	gtT5""5W2X2XY	gtT6226`3a3ab!L$  
'4ubb9[6\6\]	
 	
 	
. . .9 9 9 9 9r@   rv   )pbkdf2_hmacPBKDF2_BACKENDSc                   v   e Zd ZdZdd                    e          z  Zg  ed          ddddf ed	          ddd
df ed          ddd
df ed          ddddf ed          ddddf ed          ddddf ed          ddddf ed          ddddf ed          ddd
df ed          ddddf ed          dd dd!f ed"          d#d$ddf ed%          d& ed'          d(d)d*f ed+          d,ddd)d-f ed.          d/d0d1d)d-f ed2          ddddd-f ed3          ddd
dd-f ed4          ddddd-f ed5          dd dd6d-f ed7          d8dd9dd-f ed:          dd8d9dd-f ed;          d#d$ddd-f ed<          ddddd*f ed=          ddd
dd*f ed>          ddddd*f ed?          dd dd@d*f ed          dddddAf edB          dCddDddAf edE          dCddDdFdAf edG          dCddHd6dIf edJ          dCddHd6dKfZdL Z	dM Z
dN ZdO ZdFS )P
Pbkdf2Testztest pbkdf2() supportz2passlib.crypto.digest.pbkdf2_hmac() <backends: %s>z,  cdedb5281bb2f801565a1122b2563515rw   s   ATHENA.MIT.EDUraeburnr|   rG    01dbee7f4a9e243e988b62c73cda935d   @01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86ri   @5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13i  @d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ees   4VxxV4   @139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1s@   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase equals block size@9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82asA   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase exceeds block size(0c60c80f961f0e71f3a9b524af6012062fe037a6r{   rJ   (ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957(4b007901b765489abead49d926f721d065a429c1i   23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsalt    56fa6aa75548099dcc37d7f03425e0c3s	   pass words   sa ltڀ887CFF169EA8335235D8004242AA7D6187A41E3187DF0CE14E256D85ED97A97357AAA8FF0A3871AB9EEFF458392F462F495487387F685B7472FC6C29E293F0A0s   helloڀ9290F727ED06C38BA4549EF7DE25CF5642659211B7FC076F2D28FEFD71784BB8D8F6FB244A8CC5C06240631B97008565A120764C0EE9C2CB0073994D79080136i'  rH   sha512ڀ55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783s   passwdr   ڀ4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8ds   Passwords   NaCli8 @120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9(   @9e83f279c040f2a11aa4a02b24c418f2d3cb39560c9627fa4f47e3bcc2897c3dr@   i   @ea5808411eb0c7e830deab55096cee582761e22a9bc034e3ece925225b07bf46 89b69d0516f829893c696226650a8687@867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252@e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53c@d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5ڐ6e23f27638084b0f7ea1734e0d9841f55dd29ea60a834466f3396bac801fac1eeb63802f03a0b4acd7603e3699c8b74437be83ff01ad7f55dac1ef60f4d56480c35ee68fd52c6936H   r    e248fb6b13365146f8ac6307cc222812r   
   (e248fb6b13365146f8ac6307cc2228127872da6dNPb1d5485772e6f76d5ebdc11b38d3eff0a5b2bd50dc11f937e86ecacd0cd40d1b9113e0734e3b76a3>   r   Pea014cc01f78d3883cac364bb5d054e2be238fb0b6081795a9d84512126e3129062104d2183464c4r&   c                     | j         D ]X}|dd         \  }}}}}t          |          dk    r|d         nd}t          |||||          }|                     ||           YdS )r   Nr      r   )pbkdf2_test_vectorslenr   r0   )	r6   r8   r;   r   r   r   r   rL   r=   s	            r>   r   zPbkdf2Test.test_known  s    + 	. 	.C47G1GVT66"3xx1}}SVV&F vvFFFVW----		. 	.r@   c                 \   ddl m} 	 ddl}d}n# t          $ r d}Y nw xY w|                     d|v |           	 ddlm} |j        dk    }n# t          $ r d}Y nw xY w|                     d	|v |           dd
lm	} |r| 
                    d|           dS | 
                    d|           dS )z$verify expected backends are presentr   )r   NTF
fastpbkdf2r   r   zhashlib-ssl)r   zbuiltin-from-byteszbuiltin-unpack)r)   r   r   ImportErrorr0   r   r   rp   passlib.utils.compatr   assertIn)r6   r   r   has_fastpbkdf2r   has_hashlib_sslr   s          r>   test_backendszPbkdf2Test.test_backends  s$   999999	#!NN 	# 	# 	#"NNN	#8.III	$++++++)4	AOO 	$ 	$ 	$#OOO	$/9?KKK 	-,,,,, 	=MM.@@@@@ MM*O<<<<<s    A AAc                    dd} |             |                      t          |d           |                      t          |d	           |                      t          |d
            |d           |                      t          |d           |                      t          |d	           |                      t          |d           |                      t          |d
           |                      t          |d           |                      t          |d           |                      t          |d           |                      t          |d           dS )r   rw   r{   r|   Nr   c                 (    t          || |||          S r   r   r   r   r   r   rL   s        r>   r   z&Pbkdf2Test.test_border.<locals>.helper      vvtVVDDDr@   r   r   r   xr   l   O r   r   r   foorL   rw   r{   r|   Nr   )r1   rK   r2   OverflowErrorr6   r   s     r>   r   zPbkdf2Test.test_border  sq   	E 	E 	E 	E 	*fR888*fQ777)VC888 	a*fR888*fQ777 	-GGG)VC888 	)V!444)VA666 	*fU;;;)VA66666r@   c                     dd}|                      t           |d                    d           |                      t           |d	                    d
           dS )ztest keylen==Nonerw   r{   r|   Nr   c                 (    t          || |||          S r   r   r   s        r>   r   z.Pbkdf2Test.test_default_keylen.<locals>.helper  r   r@   r   rJ   r   ri   r   )r0   r   r   s     r>   test_default_keylenzPbkdf2Test.test_default_keylen  sv    	E 	E 	E 	EVV622233R888VV844455r:::::r@   )rE   rp   rq   rr   joinr   rs   r   r   r   r   r   r   rt   r@   r>   r   r     s       LtyyYhOiOiiI
 5665q"I
 5665q"I
* UVV5q")I
6 UVV5tR5I
B UVV@!RAI
N UVV94MI
Z UVV:D"YI
j =>>WaiI
t =>>WasI
~ =>>WdB}I
V GHH+7b	UI
d 566
D"cI
t r ! " " r ! " " b(	sI
P  V W W7Ar8OI
\  V W WWeR[I
h UVVWaXgI
r UVVWaXqI
| UVVWdB{I
F  % & &+-Tb(	EI
T UVVWdBSI
^ UVVS$H]I
h 566dBgI
r UVVWaXqI
| UVVWaX{I
F UVVWdBEI
P  " # # ,-T2xOI
` =>>WaV_I
p 5667BFoI
x =>>7BfwI
@  & ' '7BEI
J  & ' '7BEII
V. . .= = =87 7 78; ; ; ; ;r@   r   )rr   
__future__r   r   binasciir   r   r*   passlib.excr   r   r   r   r	   passlib.tests.utilsr
   r   r   r   r   rv   r)   r   r   r   rt   r@   r>   <module>r      sU   . . 0 / / / / / / /         ) ( ( ( ( ( / / / / / / / / / / C C C C C C C C C C C C
l7 l7 l7 l7 l78 l7 l7 l7f79 79 79 79 79( 79 79 79| ? > > > > > > >T; T; T; T; T; T; T; T; T; T;r@   