a
    !f04                     @   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 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 #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   _/var/www/html/python-backend/venv/lib/python3.9/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>      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__r3   r9   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h1r8   r   r   r   runTest(  s"    

zByteArrayTests.runTestNr:   r;   r<   rC   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 rF   )rG   rA   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   rH   rI   Zget_mvZkey_mvZdata_mvrB   r8   r   r   r   rC   E  s*    

zMemoryViewTests.runTestNrD   r   r   r   r   rE   C  s   rE   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   rO   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/   rU   r   r   r   setUpp  s    zTestVectorsWycheproof.setUpc                 C   s   | j S rF   )rQ   )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))warningrP   warningswarnrQ   comment)r/   rW   r[   r   r   r   r\   }  s    zTestVectorsWycheproof.warnc              
   C   s   dt |j | _z tj|j|jt|jd	 }W nP t
y } z8t|jdvrhdt |v rhW Y d }~d S |W Y d }~n
d }~0 0 |jr| ||j | | d S )NzWycheproof MAC creation Test #r   Zmac_lenr          
key length)stridrQ   r   r   r   r   r   rV   r*   
ValueErrorr,   validr.   r   r\   )r/   rW   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 nP t	y| } z8t
|jdvrddt |v rdW Y d }~d S |W Y d }~n
d }~0 0 z||j W n t	y   |jrJ Y n0 |jsJ | | d S )Nz"Wycheproof MAC verification Test #r^   r_   rb   )rc   rd   rQ   r   r   r   r   r   rV   re   r,   verifyr   rf   r\   )r/   rW   r1   rg   r   r   r   test_verify_mac  s    
z%TestVectorsWycheproof.test_verify_macc                 C   s$   | j D ]}| | | | qd S rF   )rW   rh   rj   )r/   rW   r   r   r   rC     s    

zTestVectorsWycheproof.runTestN)
r:   r;   r<   rO   rX   rY   r\   rh   rj   rC   r   r   r   r   rK   i  s   
rK   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_testsrR   r4   r)   r   )typescommonrk   get	test_datalistdictappendr   r=   r	   r   rE   rK   )configrl   rk   rR   Zparams_test_datarowttestsr   r   r   	get_tests  s    
rw   __main__c                   C   s   t t S rF   )rM   Z	TestSuiterw   r   r   r   r   <lambda>  r(   ry   suite)ZdefaultTest)__doc__jsonrM   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
   ro   r   rN   r   r=   rE   rK   rw   r:   rz   mainr   r   r   r   <module>"   s  	

		
  G(&>
