o
    _6dO                     @   s   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	 d	eZG d
d deZddlmZmZ G d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                   @   sT   e Zd ZdZdZddgZg dZdd Zdd	 Zd
d Z	dd Z
dd Zdd ZdS )HashInfoTestztest various crypto functionszpasslib.crypto.digesthashlibZiana))md5r   zSCRAM-MD5-PLUSzMD-5)sha1zsha-1zSCRAM-SHA-1SHA1)sha256sha-256ZSHA_256zsha2-256)Z	ripemd160z
ripemd-160zSCRAM-RIPEMD-160Z	RIPEmd160ZripemdzSCRAM-RIPEMD)Zsha4_256zsha4-256zSHA4-256z	SHA-4-256)Ztest128ztest-128ZTEST128)test2r   zTEST-2)Z	test3_128z	test3-128z
TEST-3-128c              
   C   s   ddl m} ddlm}m} t }|  | |j	 t
dd t
dd | |tdd | |d	d | t|d
 ||| jD ]%}t| jD ]\}}|| }|D ]}	||	|}
| |
|d|	|f  qXqNqGd
S )znorm_hash_name()r   )chain)norm_hash_name_known_hash_namesignorez.*unknown hashz.*unsupported hashZMD4md4s   MD4Nzname=%r, format=%r:)	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result r0   wC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\passlib/tests/test_crypto_digest.pytest_norm_hash_name.   s.   
z HashInfoTest.test_norm_hash_namec                 C   s^  ddl m} | t|d | t|d | t|d | |dtjddf z	td	 d
}W n ty;   d}Y nw |r\|d	}|d }| ||ddf | t|d	 d n| t|d	 z	td d
}W n tyw   d}Y nw |d}|d }|sddl
m} | || | ||ddf | t|d	 d | |d|d dS )zlookup_hash() -- constructorr   lookup_hashnew__name__Zsha4r      @   shaTF   s   abcs(   0164b8a914cd2a5e74c4f7ff082c4d97f1edf880r   )r   s    a448017aaf21d8525fc10ae87aa6729dN)r   r4   r#   
ValueErrorr"   r   r   r5   r   digestZpasslib.crypto._md4r   assertIs)r(   r4   Zhas_sharecordconstZhas_md4r   r0   r0   r1   test_lookup_hash_ctorI   sF   

z"HashInfoTest.test_lookup_hash_ctorc                 C   s   ddl m} | t|d |ddd}| |j | td|j | |j	d | |j
d | |jd |ddd}| || dS )z"lookup_hash() -- unknown hash namer   r3   Zxxx256Frequiredzunknown hash: 'xxx256'N)r   r4   r#   r   ZassertFalse	supportedassertRaisesRegexr?   r"   namedigest_size
block_sizer=   )r(   r4   infoZinfo2r0   r0   r1   test_lookup_hash_w_unknown_namew   s   z,HashInfoTest.test_lookup_hash_w_unknown_namec                 C   s   ddl m}m} |dddjs| d|  | |d d}| t||d |ddd}| |j	| | t||j
 | |jd | |jd	 d
S )z<
        lookup_hash() -- test set_mock_fips_mode()
        r   )r4   _set_mock_fips_moder   FrA   zmd5 not supportedz'md5' hash disabled for fipsr7   r8   N)r   r4   rJ   rC   ZskipTestr   rD   r   assertRegexZ
error_textr?   r"   rF   rG   )r(   r4   rJ   patrH   r0   r0   r1   test_mock_fips_mode   s   
z HashInfoTest.test_mock_fips_modec                 C   s   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   r3   r   r   r8       zSHA2-256r   r7   N)r   r4   r"   rE   Z	iana_namerG   rF   r=   r(   r4   rH   r0   r0   r1   test_lookup_hash_metadata   s   z&HashInfoTest.test_lookup_hash_metadatac                 C   sH   ddl m} |d}| ||| | ||j| | t|d dS )z lookup_hash() -- alternate typesr   r3   r   {   N)r   r4   r=   r?   r#   r$   rO   r0   r0   r1   test_lookup_hash_alt_types   s
   z'HashInfoTest.test_lookup_hash_alt_typesN)r6   
__module____qualname____doc__descriptionPrefixr'   r%   r2   r@   rI   rM   rP   rR   r0   r0   r0   r1   r      s    .r   c                   @   s   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sRedd
dddedf dd Z	dd Z
dS )Pbkdf1_Testztest kdf helperszpasslib.crypto.digest.pbkdf1   passwordZ78578E5A5D63CB06  r7   r   Z dc19847e05c64d2faf10ebfb4a3d2a20)rX      saltrY   r   r       rZ      r   Z84   Z8475c6a8531a5d27Z 8475c6a8531a5d27e386cd496457812cNZ(4a8fd48e426ed081b535be5769892fa396293efbr   Z f7f2e91100a8f96190f2dd177cb26453c           	      C   sD   ddl m} | jD ]\}}}}}}||||||}| || q	dS )test reference vectorsr   pbkdf1N)r   r`   pbkdf1_testsr"   )	r(   r`   secretsaltroundskeylenr<   r-   r/   r0   r0   r1   
test_known   s
   zPbkdf1_Test.test_knownc                    s   ddl m  d fdd	}|  | jt|dd	 | jt|dd
 | jt|dd | jt|dd | jt|dd | jt|dd | jt|ddd | jt|dd dS )test border casesr   r_      secretrZ   r\   r   c                    s    || |||S Nr0   )rb   rc   rd   re   hashr_   r0   r1   helper      z'Pbkdf1_Test.test_border.<locals>.helperrb   rc   missing)rj   rd   1re      )re   rj   N)rh   rZ   r\   r\   r   )r   r`   r#   r$   r;   r(   rk   r0   r_   r1   test_border   s   zPbkdf1_Test.test_border)r6   rS   rT   rU   rV   r   ra   r   appendrf   rv   r0   r0   r0   r1   rW      s"    rW   )pbkdf2_hmacPBKDF2_BACKENDSc                   @   s  e Zd ZdZdde 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dLdM Z	dNdO Z
dPdQ ZdRdS ZdFS )T
Pbkdf2Testztest pbkdf2() supportz2passlib.crypto.digest.pbkdf2_hmac() <backends: %s>z, Z cdedb5281bb2f801565a1122b2563515rX   s   ATHENA.MIT.EDUraeburnr\   r7   Z 01dbee7f4a9e243e988b62c73cda935d   Z@01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86rN   Z@5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13i  Z@d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ees   4VxxV4   Z@139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1s@   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase equals block sizeZ@9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82asA   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase exceeds block sizeZ(0c60c80f961f0e71f3a9b524af6012062fe037a6rZ   r:   Z(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957Z(4b007901b765489abead49d926f721d065a429c1i   Z23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsalt   Z 56fa6aa75548099dcc37d7f03425e0c3s	   pass words   sa ltZ887CFF169EA8335235D8004242AA7D6187A41E3187DF0CE14E256D85ED97A97357AAA8FF0A3871AB9EEFF458392F462F495487387F685B7472FC6C29E293F0A0s   helloZ9290F727ED06C38BA4549EF7DE25CF5642659211B7FC076F2D28FEFD71784BB8D8F6FB244A8CC5C06240631B97008565A120764C0EE9C2CB0073994D79080136i'  r8   sha512Z55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783s   passwdr   Z4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8ds   Passwords   NaCli8 Z@120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17bZ@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43Z@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aZP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9(   Z@9e83f279c040f2a11aa4a02b24c418f2d3cb39560c9627fa4f47e3bcc2897c3dr[   i   Z@ea5808411eb0c7e830deab55096cee582761e22a9bc034e3ece925225b07bf46Z 89b69d0516f829893c696226650a8687Z@867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252Z@e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cZ@d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5Z6e23f27638084b0f7ea1734e0d9841f55dd29ea60a834466f3396bac801fac1eeb63802f03a0b4acd7603e3699c8b74437be83ff01ad7f55dac1ef60f4d56480c35ee68fd52c6936H   r   Z e248fb6b13365146f8ac6307cc222812rh   
   Z(e248fb6b13365146f8ac6307cc2228127872da6dNZPb1d5485772e6f76d5ebdc11b38d3eff0a5b2bd50dc11f937e86ecacd0cd40d1b9113e0734e3b76a3>   r   ZPea014cc01f78d3883cac364bb5d054e2be238fb0b6081795a9d84512126e3129062104d2183464c4r   c           	      C   sZ   | j D ]'}|dd \}}}}}t|dkr|d nd}t|||||}| || qdS )r^   Nr|      r   )pbkdf2_test_vectorslenrx   r"   )	r(   r*   r-   rb   rc   rd   re   r<   r/   r0   r0   r1   rf     s   
zPbkdf2Test.test_knownc                 C   s   ddl m} zddl}d}W n ty   d}Y nw | d|v | zddlm} |jdk}W n ty:   d}Y nw | d	|v | dd
lm	} |rS| 
d| dS | 
d| dS )z$verify expected backends are presentr   )ry   NTF
fastpbkdf2rx   r   zhashlib-ssl)r   zbuiltin-from-byteszbuiltin-unpack)r   ry   r   ImportErrorr"   r   rx   rS   passlib.utils.compatr   ZassertIn)r(   ry   r   Zhas_fastpbkdf2rx   Zhas_hashlib_sslr   r0   r0   r1   test_backends  s&   zPbkdf2Test.test_backendsc                 C   s   ddd}|  | j t|dd	 | j t|d
d	 | j t|dd	 |dd | j t|dd | j t|d
d | j t|dd | j t|dd | j t|dd | j t|dd | j t|dd | j t|dd dS )rg   rX   rZ   r\   Nr   c                 S      t || |||S ri   r   rb   rc   rd   re   r<   r0   r0   r1   rk     rl   z&Pbkdf2Test.test_border.<locals>.helperrr   rp   r   xrs   l   O r|   rn   rm   Zfoor<   rX   rZ   r\   Nr   )r#   r;   r$   OverflowErrorru   r0   r0   r1   rv     s   

zPbkdf2Test.test_borderc                 C   s:   ddd}|  t|ddd	 |  t|d
dd dS )ztest keylen==NonerX   rZ   r\   Nr   c                 S   r   ri   r   r   r0   r0   r1   rk     rl   z.Pbkdf2Test.test_default_keylen.<locals>.helperr   r:   r   rN   r   )r"   r   ru   r0   r0   r1   test_default_keylen  s   
zPbkdf2Test.test_default_keylen)r6   rS   rT   rU   joinry   rV   r   r   rf   r   rv   r   r0   r0   r0   r1   rz     sJ   	!'-5:?KRZh
n
t
y
~
   
  
  
  
  
  $
  )  1
  9
  =
  A
  F
  Lrz   )rU   
__future__r   r   binasciir   r   r   Zpasslib.excr   r   r   r   r   Zpasslib.tests.utilsr	   r
   r   r   r   rW   r   rx   ry   rz   r0   r0   r0   r1   <module>   s     4>