U
    ÈZjˆ  ã                	   @   s  d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
 ddlmZmZmZ G dd„ dejƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ dejƒZdddefdddefdddefdddefgZeD �]\ZZZZedeedd„ dd„ dd„ d œƒpög ZeeƒD ]Ì\ZZeed!dƒdk�r$ed"ƒZn$eejƒZej e ejƒd# k�sHt!‚eed$dƒdk�rbe"d%ƒ‚eed&dƒdk�r~ed"ƒZ#n$eej$ƒZ#ej%e ej$ƒd# k�s¢t!‚eej&e#efd'd(„Z'e(ed)eef e'ƒ �q qÄi fd*d+„Z)e*d,k�rddlZd-d„ Z+ej,d.d/� dS )0z7Self-test suite for Crypto.Hash.cSHAKE128 and cSHAKE256é    N)Úload_test_vectors)Úlist_test_cases)Ú	cSHAKE128Ú	cSHAKE256ÚSHAKE128ÚSHAKE256)ÚbÚbchrÚtobytesc                   @   sL   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d„ Z
dS )Ú
cSHAKETestc                 C   s@   ddl m} |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ d S )Nr   )Ú_left_encodes    é   s   é   s    )ÚCrypto.Hash.cSHAKE128r   ÚassertEqual)Úselfr   © r   úc/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/SelfTest/Hash/test_cSHAKE.pyÚtest_left_encode(   s    zcSHAKETest.test_left_encodec                 C   s    ddl m} |  |ddƒd¡ |  |ddƒd¡ |  |ddƒd	¡ |  |d
dƒd¡ |  |ddƒd¡ |  |ddƒd¡ |  |ddƒd¡ |  |ddƒd¡ d S )Nr   )Ú_bytepadó    é   s     ó   As   A s   AAs   AAs   AAAs   AAA   s   AAAAs   AAAA  s   AAAAAs   AAAAA s   AAAAAAs   AAAAAAs   AAAAAAAs   AAAAAAA   )r   r   r   )r   r   r   r   r   Útest_bytepad.   s    zcSHAKETest.test_bytepadc                 C   sJ  | j  ¡ }| j jtdƒd�}| j  ¡  tdƒ¡}|  | d¡| d¡¡ | d¡ |  | d¡| d¡¡ | j  ¡ }| d¡}| j jtdƒd�}| j jtdƒd�}|  || d¡¡ |  || d¡¡ | j jtdƒd�}| j jtdƒtdƒd�}| j jtdƒd� tdƒ¡}|  | d¡| d¡¡ | d¡ |  | d¡| d¡¡ d S )NZ90)Údataé
   Ú )ÚcustomZfoo)r   r   )ÚcshakeÚnewr   ÚupdateZassertNotEqualÚreadr   )r   Úxof1Úxof2Zxof3Úrefr   r   r   Útest_new_positive9   s$    




zcSHAKETest.test_new_positivec                 C   sz   t dƒd t dƒd g}| j ¡ }| |d ¡ |d ¡ | d¡}| j ¡ }| |d |d  ¡ |  | d¡|¡ d S )Nr   éÈ   é   i,  r   r   )r	   r   r   r    r!   r   )r   ÚpiecesÚhÚdigestr   r   r   Útest_updateS   s    


zcSHAKETest.test_updatec                 C   s   | j  ¡ }|  t|jd¡ d S )NÚstring)r   r   ÚassertRaisesÚ	TypeErrorr    )r   r)   r   r   r   Útest_update_negative\   s    
zcSHAKETest.test_update_negativec                 C   s@   | j  ¡ }| d¡}|  t|ttdƒƒƒ¡ |  t|ƒd¡ d S )NéZ   r*   )	r   r   r!   Z
assertTrueÚ
isinstanceÚtyper   r   Úlen)r   r)   r*   r   r   r   Útest_digest`   s    

zcSHAKETest.test_digestc                 C   s:   | j  ¡ }| tdƒ¡ | d¡ |  t|jtdƒ¡ d S )NZrrrrr0   Zttt)r   r   r    r   r!   r-   r.   )r   Úmacr   r   r   Útest_update_after_readh   s    

z!cSHAKETest.test_update_after_readc                 C   sB   t dƒD ]4}| j d¡}| j d¡}|  | |¡| |¡¡ qd S )Né@   s   TEST)Úranger   r   Úshaker   r!   )r   Z
digest_lenr"   r#   r   r   r   Ú
test_shaken   s    zcSHAKETest.test_shakeN)Ú__name__Ú
__module__Ú__qualname__r   r   r%   r+   r/   r4   r6   r:   r   r   r   r   r   &   s   	r   c                   @   s   e Zd ZeZeZdS )ÚcSHAKE128TestN)r;   r<   r=   r   r   r   r9   r   r   r   r   r>   v   s   r>   c                   @   s   e Zd ZeZeZdS )ÚcSHAKE256TestN)r;   r<   r=   r   r   r   r9   r   r   r   r   r?   {   s   r?   c                   @   s   e Zd ZdS )ÚcSHAKEVectorsN)r;   r<   r=   r   r   r   r   r@   €   s   r@   zShortMsgSamples_cSHAKE128.txtzShort Message Samples cSHAKE128Z
128_cshakezShortMsgSamples_cSHAKE256.txtzShort Message Samples cSHAKE256Z
256_cshakezCustomMsgSamples_cSHAKE128.txtz Custom Message Samples cSHAKE128Zcustom_128_cshakezCustomMsgSamples_cSHAKE256.txtz Custom Message Samples cSHAKE256Zcustom_256_cshake)ZHashZSHA3c                 C   s   t | ƒS ©N©Úint©Úxr   r   r   Ú<lambda>�   r   rF   c                 C   s   t | ƒS rA   rB   rD   r   r   r   rF   Ž   r   c                 C   s   t | ƒS rA   rB   rD   r   r   r   rF   �   r   )r3   ÚnlenÚslenr3   r   é   rG   zUnsupported cSHAKE test vectorrH   c                 C   s,   |j ||d�}| t|ƒ¡}|  ||¡ d S )N)r   r   )r   r!   r3   r   )r   r   Úresultr   Ú
test_classZhobjr*   r   r   r   Únew_testŸ   s    rL   z
test_%s_%dc                 C   s,   g }|t tƒ7 }|t tƒ7 }|t tƒ7 }|S rA   )r   r>   r?   r@   )ÚconfigZtestsr   r   r   Ú	get_tests§   s
    rN   Ú__main__c                   C   s   t  tƒ ¡S rA   )ÚunittestZ	TestSuiterN   r   r   r   r   rF   ±   r   Úsuite)ZdefaultTest)-Ú__doc__rP   ZCrypto.SelfTest.loaderr   ZCrypto.SelfTest.st_commonr   ZCrypto.Hashr   r   r   r   ZCrypto.Util.py3compatr   r	   r
   ZTestCaser   r>   r?   r@   Zvector_filesÚfileÚdescrÚtagrK   Ztest_vectorsÚ	enumerateÚidxÚtvÚgetattrr   Úmsgr3   ÚAssertionErrorÚ
ValueErrorr   ÚsrH   ÚmdrL   ÚsetattrrN   r;   rQ   Úmainr   r   r   r   Ú<module>   sR   P



ýþÿý




