U
    ÈZj04  ã                   @   sò  d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ dddde
fdddde
fdddde
fdddde
fdddde
fdddde
fdddde
fdddd e
fd!dd"d#e
fd!dd$d%e
fd!dd&d'e
fd!dd(d)e
fd*dd+d,efd*d-d.d/efd*d0d1d2efd*d3d4d5efd6dd7d8efd6d-d9d:efd6d0d;d<efd6d3d=d>efgad?d@„ ZG dAdB„ dBejƒZG dCdD„ dDejƒZG dEdF„ dFejƒZG dGdH„ dHejƒZi fdIdJ„ZedKk�rîddlZdLdM„ ZejdNdO� dS )Pz$Self-test suite for Crypto.Hash.CMACé    N)Ú	unhexlify)Útobytes)ÚCMAC)ÚAESÚDES3)ÚSHAKE128)Ústrxor)Úlist_test_cases)Úload_test_vectors_wycheproofZ 2b7e151628aed2a6abf7158809cf4f3cÚ Z bb1d6929e95937287fa37d129b756746zRFC 4493 #1Z 6bc1bee22e409f96e93d7e117393172aZ 070a16b46b4d4144f79bdd9dd04a287czRFC 4493 #2ZP6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411Z dfa66747de9ae63030ca32611497c827zRFC 4493 #3Z€6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710Z 51f0bebf7e3b9d92fc49741779363cfezRFC 4493 #4Z08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7bZ d17ddf46adaacde531cac483de7a9367zNIST SP 800 38B D.2 Example 5Z 9e99a7bf31e710900662f65e617c5184zNIST SP 800 38B D.2 Example 6Z 8a1de5be2eb31aad089a82e6ee908b0ezNIST SP 800 38B D.2 Example 7Z a1d5df0eed790f794d77589659f39a11zNIST SP 800 38B D.2 Example 8Z@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4Z 028962f61b7bf89efc6b551f4667d983zNIST SP 800 38B D.3 Example 9Z 28a7023f452e8f82bd4bf28d8c37c35czNIST SP 800 38B D.3 Example 10Z aaf3d8f1de5640c232f5b169b9c911e6zNIST SP 800 38B D.3 Example 11Z e1992190549f6ed5696a2c056c315410zNIST SP 800 38B D.3 Example 12Z08aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5Zb7a688e122ffaf95zNIST SP 800 38B D.4 Example 13Z6bc1bee22e409f96Z8e8f293136283797zNIST SP 800 38B D.4 Example 14Z(6bc1bee22e409f96e93d7e117393172aae2d8a57Z743ddbe0ce2dc2edzNIST SP 800 38B D.4 Example 15Z@6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51Z33e6b1092400eae5zNIST SP 800 38B D.4 Example 16Z 4cf15134a2850dd58a3d10ba80570d38Zbd2ebf9a3ba00361zNIST SP 800 38B D.7 Example 17Z4ff2ab813c53ce83zNIST SP 800 38B D.7 Example 18Z62dd1b471902bd4ezNIST SP 800 38B D.7 Example 19Z31b1e431dabc4eb8zNIST SP 800 38B D.7 Example 20c                 C   s   t jt| ƒd� |¡S )N©Údata)r   Únewr   Úread)ÚtagÚlength© r   úa/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/SelfTest/Hash/test_CMAC.pyÚget_tag_randomú   s    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCMACc                    sˆ   t ddƒ‰t ddƒ}tj|ˆtd� ¡ }dD ]V‰ ‡ ‡fdd„td	tˆƒˆ ƒD ƒ}tj|td
�}|D ]}| |¡ qb|  || ¡ ¡ q,dS )z5Verify that internal caching is implemented correctlyÚdata_to_macé€   Úkeyé   )ÚmsgÚ	ciphermod)
é   é   é   é   é
   é   r   é(   éP   r   c                    s   g | ]}ˆ||ˆ  … ‘qS r   r   )Ú.0Úi©Zchunk_lengthr   r   r   Ú
<listcomp>  s     z2TestCMAC.test_internal_caching.<locals>.<listcomp>r   ©r   N)	r   r   r   r   ÚdigestÚrangeÚlenÚupdateÚassertEqual)Úselfr   Zref_macÚchunksÚmacÚchunkr   r&   r   Útest_internal_caching   s    

ÿzTestCMAC.test_internal_cachingc                 C   s¤   d}d}t j||d d… td�}| ¡ }|  t|j|dd … ¡ t j||td� ¡ }t j||d d… tdd�}|  | ¡ |¡ | |dd … ¡ |  | ¡ |¡ d S )Ns   rrrrttts   4444444444444444é   r(   T)r   Zupdate_after_digest)r   r   r   r)   ZassertRaisesÚ	TypeErrorr,   r-   )r.   r   r   ÚhZdig1Zdig2Úh2r   r   r   Útest_update_after_digest  s    z!TestCMAC.test_update_after_digestN)Ú__name__Ú
__module__Ú__qualname__r2   r7   r   r   r   r   r   þ   s   r   c                   @   s   e Zd Zdd„ ZdS )ÚByteArrayTestsc                 C   sÈ   d}d}t |ƒ}t |ƒ}tj||td�}tj||td�}d|d d…< d|d d…< |  | ¡ | ¡ ¡ t |ƒ}t |ƒ}tj|td�}tj|td�}| |¡ | |¡ d|d d…< |  | ¡ | ¡ ¡ d S )Nó   0000000000000000ó    r(   ó   ÿr   )Ú	bytearrayr   r   r   r-   r)   r,   )r.   r   r   Zkey_baZdata_baÚh1r6   r   r   r   ÚrunTest(  s"    

zByteArrayTests.runTestN©r8   r9   r:   rA   r   r   r   r   r;   &  s   r;   c                   @   s   e Zd Zdd„ ZdS )ÚMemoryViewTestsc           
      C   sê   d}d}dd„ }dd„ }||fD ]Ä}||ƒ}||ƒ}t j||td�}t j||td�}	|jsrd|d d	…< d|d d	…< |  | ¡ |	 ¡ ¡ ||ƒ}t j|td�}t j|td�}	| |¡ |	 |¡ |jsÐd|d d	…< |  | ¡ |	 ¡ ¡ q d S )
Nr<   r=   c                 S   s   t | ƒS ©N)Ú
memoryviewr   r   r   r   Ú	get_mv_roJ  s    z*MemoryViewTests.runTest.<locals>.get_mv_roc                 S   s   t t| ƒƒS rD   )rE   r?   r   r   r   r   Ú	get_mv_rwM  s    z*MemoryViewTests.runTest.<locals>.get_mv_rwr(   r>   r   )r   r   r   Úreadonlyr-   r)   r,   )
r.   r   r   rF   rG   Zget_mvZkey_mvZdata_mvr@   r6   r   r   r   rA   E  s*    

zMemoryViewTests.runTestNrB   r   r   r   r   rC   C  s   rC   c                   @   sD   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S )ÚTestVectorsWycheproofc                 C   s   t j | ¡ || _d| _d S )NÚNone)ÚunittestÚTestCaseÚ__init__Ú_wycheproof_warningsÚ_id)r.   Úwycheproof_warningsr   r   r   rM   k  s    zTestVectorsWycheproof.__init__c                 C   s"   dd„ }t dddd|id�| _d S )Nc                 S   s   | d d S )NZtagSizeé   r   )Úgroupr   r   r   Ú
filter_tagr  s    z/TestVectorsWycheproof.setUp.<locals>.filter_tag)ZHashZ
wycheproofzaes_cmac_test.jsonzWycheproof CMACÚtag_size)Z	group_tag)r
   Útv)r.   rS   r   r   r   ÚsetUpp  s    ýzTestVectorsWycheproof.setUpc                 C   s   | j S rD   )rO   )r.   r   r   r   ÚshortDescriptionz  s    z&TestVectorsWycheproof.shortDescriptionc                 C   s.   |j r*| jr*dd l}| d| j|jf ¡ d S )Nr   zWycheproof warning: %s (%s))ÚwarningrN   ÚwarningsÚwarnrO   Úcomment)r.   rU   rY   r   r   r   rZ   }  s    zTestVectorsWycheproof.warnc              
   C   sž   dt |jƒ | _z tj|j|jt|jd� 	¡ }W nJ t
k
rz } z,t|jƒdkrfdt |ƒkrfW Y ¢d S |‚W 5 d }~X Y nX |jrš|  ||j¡ |  |¡ d S )NzWycheproof MAC creation Test #©r   Zmac_len©r   é   é    ú
key length)ÚstrÚidrO   r   r   r   r   r   rT   r)   Ú
ValueErrorr+   Úvalidr-   r   rZ   )r.   rU   r   Úer   r   r   Útest_create_mac‚  s     
z%TestVectorsWycheproof.test_create_macc              
   C   sÀ   dt |jƒ | _ztj|j|jt|jd�}W nJ t	k
rv } z,t
|jƒdkrbdt |ƒkrbW Y ¢d S |‚W 5 d }~X Y nX z| |j¡ W n t	k
r¦   |jr¢t‚Y nX |js²t‚|  |¡ d S )Nz"Wycheproof MAC verification Test #r\   r]   r`   )ra   rb   rO   r   r   r   r   r   rT   rc   r+   Úverifyr   rd   ÚAssertionErrorrZ   )r.   rU   r0   re   r   r   r   Útest_verify_mac�  s    

z%TestVectorsWycheproof.test_verify_macc                 C   s$   | j D ]}|  |¡ |  |¡ qd S rD   )rU   rf   ri   )r.   rU   r   r   r   rA      s    

zTestVectorsWycheproof.runTestN)
r8   r9   r:   rM   rV   rW   rZ   rf   ri   rA   r   r   r   r   rI   i  s   
rI   c                 C   s”   dd l }ddlm} |  d¡}g }tD ](}t|ƒ}t|d d�|d< | |¡ q&|td|ƒ}| t	ƒ ¡ | t
tƒ¡ | tƒ ¡ |t|ƒg7 }|S )Nr   r   )Úmake_mac_testsrP   r3   r(   r   )ÚtypesÚcommonrj   ÚgetÚ	test_dataÚlistÚdictÚappendr   r;   r	   r   rC   rI   )Úconfigrk   rj   rP   Zparams_test_dataÚrowÚtZtestsr   r   r   Ú	get_tests§  s    
ru   Ú__main__c                   C   s   t  tƒ ¡S rD   )rK   Z	TestSuiteru   r   r   r   r   Ú<lambda>¿  ó    rw   Úsuite)ZdefaultTest)Ú__doc__ÚjsonrK   Úbinasciir   ZCrypto.Util.py3compatr   ZCrypto.Hashr   ZCrypto.Cipherr   r   r   ZCrypto.Util.strxorr   ZCrypto.SelfTest.st_commonr	   ZCrypto.SelfTest.loaderr
   rn   r   rL   r   r;   rC   rI   ru   r8   ry   Úmainr   r   r   r   Ú<module>"   s  üüú	ùûûù
øûûù
øú	ú	ø÷ûûù
ø€ È G(&>
