o
    Þý°jP4  ã                   @   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 dS )Pz(Self-test suite for Cryptodome.Hash.CMACé    N)Ú	unhexlify)Útobytes)ÚCMAC)ÚAESÚDES3)ÚSHAKE128)Ústrxor)Úlist_test_cases)Úload_test_vectors_wycheproofÚ 2b7e151628aed2a6abf7158809cf4f3cÚ Ú bb1d6929e95937287fa37d129b756746zRFC 4493 #1Ú 6bc1bee22e409f96e93d7e117393172aÚ 070a16b46b4d4144f79bdd9dd04a287czRFC 4493 #2ÚP6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411Ú dfa66747de9ae63030ca32611497c827zRFC 4493 #3Ú€6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710Ú 51f0bebf7e3b9d92fc49741779363cfezRFC 4493 #4Ú08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7bÚ d17ddf46adaacde531cac483de7a9367zNIST SP 800 38B D.2 Example 5Ú 9e99a7bf31e710900662f65e617c5184zNIST SP 800 38B D.2 Example 6Ú 8a1de5be2eb31aad089a82e6ee908b0ezNIST SP 800 38B D.2 Example 7Ú a1d5df0eed790f794d77589659f39a11zNIST SP 800 38B D.2 Example 8Ú@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4Ú 028962f61b7bf89efc6b551f4667d983zNIST SP 800 38B D.3 Example 9Ú 28a7023f452e8f82bd4bf28d8c37c35czNIST SP 800 38B D.3 Example 10Ú aaf3d8f1de5640c232f5b169b9c911e6zNIST SP 800 38B D.3 Example 11Ú e1992190549f6ed5696a2c056c315410zNIST SP 800 38B D.3 Example 12Ú08aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5Úb7a688e122ffaf95zNIST SP 800 38B D.4 Example 13Ú6bc1bee22e409f96Ú8e8f293136283797zNIST SP 800 38B D.4 Example 14Ú(6bc1bee22e409f96e93d7e117393172aae2d8a57Ú743ddbe0ce2dc2edzNIST SP 800 38B D.4 Example 15Ú@6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51Ú33e6b1092400eae5zNIST SP 800 38B D.4 Example 16Ú 4cf15134a2850dd58a3d10ba80570d38Úbd2ebf9a3ba00361zNIST SP 800 38B D.7 Example 17Ú4ff2ab813c53ce83zNIST SP 800 38B D.7 Example 18Ú62dd1b471902bd4ezNIST SP 800 38B D.7 Example 19Ú31b1e431dabc4eb8zNIST SP 800 38B D.7 Example 20c                 C   s   t jt| ƒd� |¡S )N©Údata)r   Únewr   Úread)ÚtagÚlength© r1   ú•/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/Hash/test_CMAC.pyÚget_tag_randomú   s   r3   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 ]+‰ ‡ ‡fdd„td	tˆƒˆ ƒD ƒ}tj|td
�}|D ]}| |¡ q1|  || ¡ ¡ qdS )z5Verify that internal caching is implemented correctlyÚdata_to_macé€   Úkeyé   )ÚmsgÚ	ciphermod)
é   é   é   é   é
   é   r8   é(   éP   r6   c                    s   g | ]
}ˆ||ˆ  … ‘qS r1   r1   )Ú.0Úi©Úchunk_lengthr5   r1   r2   Ú
<listcomp>  s    z2TestCMAC.test_internal_caching.<locals>.<listcomp>r   ©r:   N)	r3   r   r-   r   ÚdigestÚrangeÚlenÚupdateÚassertEqual)Úselfr7   Úref_macÚchunksÚmacÚchunkr1   rE   r2   Ú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é   rH   T)r:   Úupdate_after_digest)r   r-   r   rI   ÚassertRaisesÚ	TypeErrorrL   rM   )rN   r9   r7   ÚhÚdig1Údig2Úh2r1   r1   r2   Útest_update_after_digest  s   z!TestCMAC.test_update_after_digestN)Ú__name__Ú
__module__Ú__qualname__rS   r\   r1   r1   r1   r2   r4   þ   s    r4   c                   @   ó   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ó    rH   ó   ÿr;   )Ú	bytearrayr   r-   r   rM   rI   rL   )rN   r7   r,   Úkey_baÚdata_baÚh1r[   r1   r1   r2   ÚrunTest(  s"   

zByteArrayTests.runTestN©r]   r^   r_   ri   r1   r1   r1   r2   ra   &  ó    ra   c                   @   r`   )ÚMemoryViewTestsc           
      C   sê   d}d}dd„ }dd„ }||fD ]b}||ƒ}||ƒ}t j||td�}t j||td�}	|js9d|d d	…< d|d d	…< |  | ¡ |	 ¡ ¡ ||ƒ}t j|td�}t j|td�}	| |¡ |	 |¡ |jshd|d d	…< |  | ¡ |	 ¡ ¡ qd S )
Nrb   rc   c                 S   s   t | ƒS ©N)Ú
memoryviewr+   r1   r1   r2   Ú	get_mv_roJ  s   z*MemoryViewTests.runTest.<locals>.get_mv_roc                 S   s   t t| ƒƒS rm   )rn   re   r+   r1   r1   r2   Ú	get_mv_rwM  ó   z*MemoryViewTests.runTest.<locals>.get_mv_rwrH   rd   r;   )r   r-   r   ÚreadonlyrM   rI   rL   )
rN   r7   r,   ro   rp   Úget_mvÚkey_mvÚdata_mvrh   r[   r1   r1   r2   ri   E  s,   

êzMemoryViewTests.runTestNrj   r1   r1   r1   r2   rl   C  rk   rl   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)rN   Úwycheproof_warningsr1   r1   r2   rz   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 )NÚtagSizeé   r1   )Úgroupr1   r1   r2   Ú
filter_tagr  rq   z/TestVectorsWycheproof.setUp.<locals>.filter_tag)ÚHashÚ
wycheproofzaes_cmac_test.jsonzWycheproof CMACÚtag_size)Ú	group_tag)r
   Útv)rN   r�   r1   r1   r2   ÚsetUpp  s   ýzTestVectorsWycheproof.setUpc                 C   s   | j S rm   )r|   )rN   r1   r1   r2   ÚshortDescriptionz  s   z&TestVectorsWycheproof.shortDescriptionc                 C   s6   |j r| jrdd l}| d| j|jf ¡ d S d S d S )Nr   zWycheproof warning: %s (%s))Úwarningr{   ÚwarningsÚwarnr|   Úcomment)rN   r†   rŠ   r1   r1   r2   r‹   }  s   þzTestVectorsWycheproof.warnc              
   C   sœ   dt |jƒ | _ztj|j|jt|jd� 	¡ }W n" t
y: } zt|jƒdvr4dt |ƒv r4W Y d }~d S |‚d }~ww |jrL|  ||j¡ |  |¡ d S d S )NzWycheproof MAC creation Test #©r:   Úmac_len©r8   é   é    ú
key length)ÚstrÚidr|   r   r-   r7   r9   r   r„   rI   Ú
ValueErrorrK   ÚvalidrM   r/   r‹   )rN   r†   r/   Úer1   r1   r2   Útest_create_mac‚  s    €ýþz%TestVectorsWycheproof.test_create_macc              
   C   sº   dt |jƒ | _ztj|j|jt|jd�}W n" t	y8 } zt
|jƒdvr2dt |ƒv r2W Y d }~d S |‚d }~ww z| |j¡ W n t	yP   |jrMJ ‚Y d S w |jsVJ ‚|  |¡ d S )Nz"Wycheproof MAC verification Test #r�   r�   r’   )r“   r”   r|   r   r-   r7   r9   r   r„   r•   rK   Úverifyr/   r–   r‹   )rN   r†   rQ   r—   r1   r1   r2   Útest_verify_mac�  s    €ýÿ
z%TestVectorsWycheproof.test_verify_macc                 C   s$   | j D ]}|  |¡ |  |¡ qd S rm   )r†   r˜   rš   )rN   r†   r1   r1   r2   ri      s   

þzTestVectorsWycheproof.runTestN)
r]   r^   r_   rz   r‡   rˆ   r‹   r˜   rš   ri   r1   r1   r1   r2   rv   i  s    
rv   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_testsr}   rT   rH   r   )ÚtypesÚcommonr›   ÚgetÚ	test_dataÚlistÚdictÚappendr   ra   r	   r4   rl   rv   )Úconfigrœ   r›   r}   Úparams_test_dataÚrowÚtÚtestsr1   r1   r2   Ú	get_tests§  s   
r¨   Ú__main__c                   C   s   t  tƒ ¡S rm   )rx   Ú	TestSuiter¨   r1   r1   r1   r2   Ú<lambda>¿  s    r«   Úsuite)ÚdefaultTest)Ú__doc__Újsonrx   Úbinasciir   ÚCryptodome.Util.py3compatr   ÚCryptodome.Hashr   ÚCryptodome.Cipherr   r   r   ÚCryptodome.Util.strxorr   ÚCryptodome.SelfTest.st_commonr	   ÚCryptodome.SelfTest.loaderr
   rŸ   r3   ry   r4   ra   rl   rv   r¨   r]   r¬   Úmainr1   r1   r1   r2   Ú<module>   s"  !üüú	ùûûù
øûûù
øú	ú	ø÷ûûù
ø �Ç G(&>ý