o
    5Îhˆ  ã                	   @   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 œƒpzg ZeeƒD ]`\ZZeed!dƒdkred"ƒZneejƒZej e ejƒd# ks¡J ‚eed$dƒdkr­e!d%ƒ‚eed&dƒdkrºed"ƒZ"neej#ƒZ"ej$e ej#ƒd# ksËJ ‚eej%e"efd'd(„Z&e'ed)eef e&ƒ qqbi fd*d+„Z(e)d,krûddlZd-d„ Z*ej+d.d/ dS 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   út/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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 )NÚ90)Údataé
   Ú )ÚcustomÚfoo)r   r   )ÚcshakeÚnewr   ÚupdateÚassertNotEqualÚreadr   )r   Úxof1Úxof2Ú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$   Ú
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 )NÚrrrrr4   Úttt)r    r!   r"   r   r$   r1   r2   )r   Úmacr   r   r   Útest_update_after_readh   s   

z!cSHAKETest.test_update_after_readc                 C   sB   t dƒD ]}| j d¡}| j d¡}|  | |¡| |¡¡ qd S )Né@   s   TEST)Úranger    r!   Úshaker   r$   )r   Ú
digest_lenr%   r&   r   r   r   Ú
test_shaken   s
   ýzcSHAKETest.test_shakeN)Ú__name__Ú
__module__Ú__qualname__r   r   r)   r/   r3   r9   r=   rB   r   r   r   r   r   &   s    	r   c                   @   ó   e Zd ZeZeZdS )ÚcSHAKE128TestN)rC   rD   rE   r   r    r   r@   r   r   r   r   rG   v   ó    rG   c                   @   rF   )ÚcSHAKE256TestN)rC   rD   rE   r   r    r   r@   r   r   r   r   rI   {   rH   rI   c                   @   s   e Zd ZdS )ÚcSHAKEVectorsN)rC   rD   rE   r   r   r   r   rJ   €   s    rJ   zShortMsgSamples_cSHAKE128.txtzShort Message Samples cSHAKE128Ú
128_cshakezShortMsgSamples_cSHAKE256.txtzShort Message Samples cSHAKE256Ú
256_cshakezCustomMsgSamples_cSHAKE128.txtz Custom Message Samples cSHAKE128Úcustom_128_cshakezCustomMsgSamples_cSHAKE256.txtz Custom Message Samples cSHAKE256Úcustom_256_cshake)ÚHashÚSHA3c                 C   ó   t | ƒS ©N©Úint©Úxr   r   r   Ú<lambda>   ó    rW   c                 C   rQ   rR   rS   rU   r   r   r   rW   Ž   rX   c                 C   rQ   rR   rS   rU   r   r   r   rW      rX   )r8   ÚnlenÚslenr8   r   é   rY   zUnsupported cSHAKE test vectorrZ   c                 C   s,   |j ||d}| t|ƒ¡}|  ||¡ d S )N)r   r   )r!   r$   r8   r   )r   r   Úresultr   Ú
test_classÚhobjr.   r   r   r   Únew_testŸ   s   r_   z
test_%s_%dc                 C   s,   g }|t tƒ7 }|t tƒ7 }|t tƒ7 }|S rR   )r   rG   rI   rJ   )ÚconfigÚtestsr   r   r   Ú	get_tests§   s
   rb   Ú__main__c                   C   s   t  tƒ ¡S rR   )ÚunittestÚ	TestSuiterb   r   r   r   r   rW   ±   s    Úsuite)ÚdefaultTest),Ú__doc__rd   ÚCrypto.SelfTest.loaderr   ÚCrypto.SelfTest.st_commonr   ÚCrypto.Hashr   r   r   r   ÚCrypto.Util.py3compatr   r	   r
   ÚTestCaser   rG   rI   rJ   Úvector_filesÚfileÚdescrÚtagr]   Útest_vectorsÚ	enumerateÚidxÚtvÚgetattrr   Úmsgr8   Ú
ValueErrorr   ÚsrZ   Úmdr_   Úsetattrrb   rC   rf   Úmainr   r   r   r   Ú<module>   sX   P



ýþÿý



íý