U
    gP4                     @   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rddlZdLdM ZejdNdO dS )Pz(Self-test suite for Cryptodome.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 #3Z6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710Z 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   F/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/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)   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   r8   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h1r7   r   r   r   runTest(  s"    

zByteArrayTests.runTestNr9   r:   r;   rB   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sd|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 rE   )rF   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   rG   rH   Zget_mvZkey_mvZdata_mvrA   r7   r   r   r   rB   E  s*    

zMemoryViewTests.runTestNrC   r   r   r   r   rD   C  s   rD   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   rN   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.   rT   r   r   r   setUpp  s    zTestVectorsWycheproof.setUpc                 C   s   | j S rE   )rP   )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))warningrO   warningswarnrP   comment)r.   rV   rZ   r   r   r   r[   }  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idrP   r   r   r   r   r   rU   r)   
ValueErrorr+   validr-   r   r[   )r.   rV   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rtY nX |jst| | d S )Nz"Wycheproof MAC verification Test #r]   r^   ra   )rb   rc   rP   r   r   r   r   r   rU   rd   r+   verifyr   re   AssertionErrorr[   )r.   rV   r0   rf   r   r   r   test_verify_mac  s    

z%TestVectorsWycheproof.test_verify_macc                 C   s$   | j D ]}| | | | qd S rE   )rV   rg   rj   )r.   rV   r   r   r   rB     s    

zTestVectorsWycheproof.runTestN)
r9   r:   r;   rN   rW   rX   r[   rg   rj   rB   r   r   r   r   rJ   i  s   
rJ   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_testsrQ   r3   r(   r   )typescommonrk   get	test_datalistdictappendr   r<   r	   r   rD   rJ   )configrl   rk   rQ   Zparams_test_datarowttestsr   r   r   	get_tests  s    
rw   __main__c                   C   s   t t S rE   )rL   Z	TestSuiterw   r   r   r   r   <lambda>      ry   suite)ZdefaultTest)__doc__jsonrL   binasciir   ZCryptodome.Util.py3compatr   ZCryptodome.Hashr   ZCryptodome.Cipherr   r   r   ZCryptodome.Util.strxorr   ZCryptodome.SelfTest.st_commonr	   ZCryptodome.SelfTest.loaderr
   ro   r   rM   r   r<   rD   rJ   rw   r9   r{   mainr   r   r   r   <module>"   s  	

		
  G(&>
