B
    u9aV                 @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZdd ZG dd dejZ	G dd dejZ
G dd	 d	ejZG d
d dejZG dd dejZedkre  dS )    Nc                s   t   fdd}|S )Nc           	      s,   t   t jdtd  | |S Q R X d S )Nignore)category)warningscatch_warningsfilterwarningsDeprecationWarning)argskwargs)func /usr/lib/python3.7/test_hmac.pywrapper   s    
zignore_warning.<locals>.wrapper)	functoolswraps)r
   r   r   )r
   r   ignore_warning
   s    r   c               @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestVectorsTestCasec                sn    fdd}|ddd |ddd |d	d
d |t tdddd |ddd |ddd |ddd d S )Nc          	      s,  t j| |tjd} |  |   | t	|  |j
d  |jd  |jd t j| |dd} |  |   | t	|  |j
d  |jd  |jd  t j| |ddt	| tjdi $  t j| |ddt	| W d Q R X d S )N)	digestmodzhmac-md5   @   md5)digestzhmac._openssl_md_meths)hmacHMAChashlibr   assertEqual	hexdigestupperr   binascii	unhexlifynamedigest_size
block_sizeunittestmockpatch)keydatar   h)selfr   r   md5test   s&    z5TestVectorsTestCase.test_md5_vectors.<locals>.md5tests   s   Hi There 9294727A3638BB1C13F48EF8158BFC9Ds   Jefes   what do ya want for nothing?Z 750c783e6ab0b503eaa86e310a5db738s   s2   Z 56be34521d144c88dbb8c733f0e8b3f6      s2   Z 697eaf0aca3a3aea3a75164746ffaa79s   s   Test With TruncationZ 56461ef2342edc00f9bab995690efd4csP   s6   Test Using Larger Than Block-Size Key - Hash Key FirstZ 6b1ab7fe4bd7bf8f0b62e6ce61b9d0cdsI   Test Using Larger Than Block-Size Key and Larger Than One Block-Size DataZ 6f630fad67cda0ee1fb1f562db3aa53e)bytesrange)r(   r)   r   )r(   r   test_md5_vectors   s,    z$TestVectorsTestCase.test_md5_vectorsc                sn    fdd}|ddd |ddd |d	d
d |t tdddd |ddd |ddd |ddd d S )Nc                s   t j| |tjd} |  |   | t	|  |j
d  |jd  |jd t j| |dd} |  |   | t	|  |j
d  |jd  |jd  t j| |ddt	| d S )N)r   z	hmac-sha1   r   sha1)r   )r   r   r   r1   r   r   r   r   r   r   r   r    r!   )r%   r&   r   r'   )r(   r   r   shatestP   s    z5TestVectorsTestCase.test_sha_vectors.<locals>.shatests   s   Hi ThereZ(b617318655057264e28bc0b6fb378c8ef146be00s   Jefes   what do ya want for nothing?Z(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79s   s2   Z(125d7342b9ac11cd91a39af48aa17b4f63f175d3r+   r,   s2   Z(4c9007f4026250c6bc8414f9bf50c86c2d7235das   s   Test With TruncationZ(4c1a03424b55e07fe7f27be1d58bb9324a9a5a04sP   s6   Test Using Larger Than Block-Size Key - Hash Key FirstZ(aa4ae5e15272d00e95705637ce8a3b55ed402112sI   Test Using Larger Than Block-Size Key and Larger Than One Block-Size DataZ(e8e99d0f45237d786d6bbaa7965c7808bbff1a91)r-   r.   )r(   r2   r   )r(   r   test_sha_vectorsO   s,    z$TestVectorsTestCase.test_sha_vectorsc                s   fdd}|ddt jdt jdt jdt jdid	 |d
dt jdt jdt jdt jdid	 |ddt jdt jdt jdt jdid	 |tdd tddD dt jdt jdt jdt jdid	 |dd t jd!t jd"t jd#t jd$id	 |dd%t jd&t jd't jd(t jd)id	 d S )*Nc          	      sR  d }t j| |d}|  |  |j| |j |j  t j| |d}|  |  |j| |j |j  t j| |dt	
|  t j| |dt	
|  tjdi J t j| |dt	
|  t j| |dt	
|  W d Q R X d S )Nzhmac-)r   )r   zhmac._openssl_md_meths)r   r   r   r   lowerr   r    r!   r   r   r   r"   r#   r$   )r%   r&   
hexdigestsZ	hmac_namer'   )r!   r    	hash_namehashfuncr(   r   r   hmactest   s0    z9TestVectorsTestCase._rfc4231_test_cases.<locals>.hmactests   s   Hi ThereZ8896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22Z@b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7Z`afd03944d84895626b0825f4ab46907f15f9dadbe4101ec682aa034c7cebc59cfaea9ea9076ede7f4af152e8b2fa9cb6Z87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854)r%   r&   r5   s   Jefes   what do ya want for nothing?Z8a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44Z@5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843Z`af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649Z164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737s   s2   Z87fb3cb3588c6c1f6ffa9694d7d6ad2649365b0c1f65d69d1ec8333eaZ@773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565feZ`88062608d3e6ad8a0aa2ace014c8a86f0aa635d947ac9febe83ef4e55966144b2a5ab39dc13814b94e3ab6e101a34f27Zfa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fbc             s   s   | ]
}|V  qd S )Nr   ).0xr   r   r   	<genexpr>   s    z:TestVectorsTestCase._rfc4231_test_cases.<locals>.<genexpr>r+   r,   s2   Z86c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5aZ@82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665bZ`3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e6801dd23c4a7d679ccf8a386c674cffbZb0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dds   s6   Test Using Larger Than Block-Size Key - Hash Key FirstZ895e9a0db962095adaebe9b2d6f0dbce2d499f112f2d2b7273fa6870eZ@60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54Z`4ece084485813e9088d2c63a041bc5b44f9ef1012a2b588f3cd11f05033ac4c60c2ef6ab4030fe8296248df163f44952Z80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598s   This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.Z83a854166ac5d9f023f54d517d0b39dbd946770db9c2b95c9f6f565d1Z@9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2Z`6617178e941f020d351e2f254e8fd32c602420feb0b8fb9adccebb82461e99c5a678cc31e799176d3860e6110c46523eZe37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58)r   sha224sha256sha384sha512r-   r.   )r(   r7   r6   r    r!   r8   r   )r!   r    r6   r7   r(   r   _rfc4231_test_cases   sJ    "z'TestVectorsTestCase._rfc4231_test_casesc             C   s   |  tjddd d S )Nr<      r   )r@   r   r<   )r(   r   r   r   test_sha224_rfc4231  s    z'TestVectorsTestCase.test_sha224_rfc4231c             C   s   |  tjddd d S )Nr=       r   )r@   r   r=   )r(   r   r   r   test_sha256_rfc4231  s    z'TestVectorsTestCase.test_sha256_rfc4231c             C   s   |  tjddd d S )Nr>   0      )r@   r   r>   )r(   r   r   r   test_sha384_rfc4231  s    z'TestVectorsTestCase.test_sha384_rfc4231c             C   s   |  tjddd d S )Nr?   r   rF   )r@   r   r?   )r(   r   r   r   test_sha512_rfc4231  s    z'TestVectorsTestCase.test_sha512_rfc4231c          
   C   s   G dd dt }t x tdt | t  tjdd|d | d W d Q R X d|_	| t  tjdd|d | d	 W d Q R X W d Q R X d S )
Nc               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	zJTestVectorsTestCase.test_legacy_block_size_warnings.<locals>.MockCrazyHashz#Ain't no block_size attribute here.c             W   s   t j| | _| jj| _d S )N)r   r1   _xr    )r(   r   r   r   r   __init__  s    zSTestVectorsTestCase.test_legacy_block_size_warnings.<locals>.MockCrazyHash.__init__c             S   s   | j | d S )N)rI   update)r(   vr   r   r   rK   !  s    zQTestVectorsTestCase.test_legacy_block_size_warnings.<locals>.MockCrazyHash.updatec             S   s
   | j  S )N)rI   r   )r(   r   r   r   r   #  s    zQTestVectorsTestCase.test_legacy_block_size_warnings.<locals>.MockCrazyHash.digestN)__name__
__module____qualname____doc__rJ   rK   r   r   r   r   r   MockCrazyHash  s   rQ   error   a   b)r   z)Expected warning about missing block_sizer+   z'Expected warning about small block_size)
objectr   r   simplefilterRuntimeWarningassertRaisesr   r   failr!   )r(   rQ   r   r   r   test_legacy_block_size_warnings  s    

z3TestVectorsTestCase.test_legacy_block_size_warningsc          	   C   sF   |  t2 d}d}d}t||}| |  | W d Q R X d S )Ns   s   Hi Therer*   )ZassertWarnsr   r   r   r   r   r   )r(   r%   r&   r   r'   r   r   r   test_with_digestmod_warning1  s    z/TestVectorsTestCase.test_with_digestmod_warningN)rM   rN   rO   r/   r3   r@   rB   rD   rG   rH   rZ   r[   r   r   r   r   r      s   93 r   c               @   sT   e Zd Zedd Zedd Zedd Zedd Zd	d
 Zdd Z	dd Z
dS )ConstructorTestCasec             C   s6   d}yt d}W n tk
r0   | d Y nX d S )Nr   s   keyz+Standard constructor call raised exception.)r   r   	ExceptionrY   )r(   Zfailedr'   r   r   r   test_normal<  s
    zConstructorTestCase.test_normalc          	   C   s$   |  t td}W d Q R X d S )Nr%   )rX   	TypeErrorr   r   )r(   r'   r   r   r   test_with_str_keyE  s    z%ConstructorTestCase.test_with_str_keyc          	   C   s$   |  t td}W d Q R X d S )Nr%   )rX   r_   r   new)r(   r'   r   r   r   test_dot_new_with_str_keyL  s    z-ConstructorTestCase.test_dot_new_with_str_keyc             C   sD   yt dd}W n tk
r.   | d Y nX | | d d S )Ns   keys
   hash this!z5Constructor call with text argument raised exception. 34325b639da4cfd95735b381e28cb864)r   r   r]   rY   r   r   )r(   r'   r   r   r   test_withtextS  s
    z!ConstructorTestCase.test_withtextc             C   sP   yt jtdtddd}W n tk
r:   | d Y nX | | d d S )Ns   keys
   hash this!r   )r   z;Constructor call with bytearray arguments raised exception.rc   )r   r   	bytearrayr]   rY   r   r   )r(   r'   r   r   r   test_with_bytearray\  s    z'ConstructorTestCase.test_with_bytearrayc             C   sL   yt jdtddd}W n tk
r6   | d Y nX | | d d S )Ns   keys
   hash this!r   )r   z6Constructor call with memoryview msg raised exception.rc   )r   r   
memoryviewr]   rY   r   r   )r(   r'   r   r   r   test_with_memoryview_msgd  s
    z,ConstructorTestCase.test_with_memoryview_msgc             C   s8   yt ddtj}W n tk
r2   | d Y nX d S )Ns   key    z4Constructor call with hashlib.sha1 raised exception.)r   r   r   r1   r]   rY   )r(   r'   r   r   r   test_withmodulek  s    z#ConstructorTestCase.test_withmoduleN)rM   rN   rO   r   r^   r`   rb   rd   rf   rh   rj   r   r   r   r   r\   :  s   		r\   c               @   s    e Zd Zedd Zdd ZdS )SanityTestCasec             C   s   t d}| |jtj d S )Ns   key)r   r   r   digest_consr   r   )r(   r'   r   r   r   test_default_is_md5t  s    
z"SanityTestCase.test_default_is_md5c             C   sX   y4t jddd}|d | }| }| }W n tk
rR   | d Y nX d S )Ns   my secret keyr   )r   s   compute the hash of this text!z3Exception raised during normal usage of HMAC class.)r   r   rK   r   r   copyr]   rY   )r(   r'   digh2r   r   r   test_exercise_all_methods{  s    
z(SanityTestCase.test_exercise_all_methodsN)rM   rN   rO   r   rm   rq   r   r   r   r   rk   r  s   rk   c               @   s$   e Zd Zdd Zdd Zdd ZdS )CopyTestCasec             C   sb   t jddd}| }| |j|jkd | t|jt|jd | t|jt|jd d S )Ns   keyr   )r   z digest constructors don't match.zTypes of inner don't match.zTypes of outer don't match.)	r   r   rn   
assertTruerl   r   typeinnerouter)r(   h1rp   r   r   r   test_attributes  s    zCopyTestCase.test_attributesc             C   sj   t jddd}| }| t|t|kd | t|jt|jkd | t|jt|jkd d S )Ns   keyr   )r   z"No real copy of the HMAC instance.z&No real copy of the attribute 'inner'.z&No real copy of the attribute 'outer'.)r   r   rn   rs   idru   rv   )r(   rw   rp   r   r   r   test_realcopy  s    zCopyTestCase.test_realcopyc             C   sP   t jddd}|d | }| | | d | | | d d S )Ns   keyr   )r   s   some random textz-Digest of copy doesn't match original digest.z3Hexdigest of copy doesn't match original hexdigest.)r   r   rK   rn   r   r   r   )r(   rw   rp   r   r   r   test_equality  s    
zCopyTestCase.test_equalityN)rM   rN   rO   rx   rz   r{   r   r   r   r   rr     s   rr   c               @   s   e Zd Zdd ZdS )CompareDigestTestCasec             C   s  d\}}|  ttj|| d\}}|  ttj|| d\}}|  ttj|| d\}}|  ttj|| d\}}|  ttj|| d\}}| t|| d\}}| t|| d\}}| t|| d	\}}| t|| d
\}}| t|| d\}}| t|| tdtd }}| t|| tdtd }}| t|| tdtd }}| t|| tdd }}| t|| | t|| tdd }}| t|| | t|| tdd }}| t|| | t|| d\}}| t|| d\}}| t|| d\}}| t|| d\}}|  ttj|| d\}}|  ttj|| d\}}|  ttj|| d\}}|  ttj|| d\}}|  ttj|| G dd dt}|d|d }}| t|| |dd }}| t|| |d|d }}| t|| G dd dt}|d|d }}| t|| |dd }}| t|| |d|d }}| t|| d S )N)d      )r}   s   foobar)s   foobarr~   )foobars   foobar)s   foobarr   )s   foobars   foo)s   ޭs   ޭ)s   foobars   foobaz)s   ޭs   )s   foobars   foobar)s   ޭs   ޭs   foobars   foos   foobaz)r   r   )Zfoor   )r   foobaz)s   foobarr+   )u   fooäu   fooäc               @   s   e Zd Zdd ZdS )z8CompareDigestTestCase.test_compare_digest.<locals>.mystrc             S   s   dS )NFr   )r(   otherr   r   r   __eq__  s    z?CompareDigestTestCase.test_compare_digest.<locals>.mystr.__eq__N)rM   rN   rO   r   r   r   r   r   mystr  s   r   r   r   c               @   s   e Zd Zdd ZdS )z:CompareDigestTestCase.test_compare_digest.<locals>.mybytesc             S   s   dS )NFr   )r(   r   r   r   r   r   
  s    zACompareDigestTestCase.test_compare_digest.<locals>.mybytes.__eq__N)rM   rN   rO   r   r   r   r   r   mybytes	  s   r   )	rX   r_   r   Zcompare_digestZassertFalsers   re   strr-   )r(   abr   r   r   r   r   test_compare_digest  s    z)CompareDigestTestCase.test_compare_digestN)rM   rN   rO   r   r   r   r   r   r|     s   r|   __main__)r   r   r   r   r"   Zunittest.mockr   r   ZTestCaser   r\   rk   rr   r|   rM   mainr   r   r   r   <module>   s    
  (8"l