o
    5h04                     @   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 dS )Pz$Self-test suite for Crypto.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 #2P6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411 dfa66747de9ae63030ca32611497c827zRFC 4493 #3ڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710 51f0bebf7e3b9d92fc49741779363cfezRFC 4493 #408e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b 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 1208aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5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   r/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/Crypto/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   Crypto.Util.py3compatr   Crypto.Hashr   Crypto.Cipherr   r   r   Crypto.Util.strxorr   Crypto.SelfTest.st_commonr	   Crypto.SelfTest.loaderr
   r   r3   ry   r4   ra   rl   rv   r   r]   r   mainr1   r1   r1   r2   <module>   s"  !	

		
  G(&>