o
    ‰¡e¢  ã                	   @   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gZeD ]~\ZZZZedeedd„ dd„ dd„ dœƒppg 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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&ƒ quqXi fd$d%„Z(e)d&krñddlZd'd„ Z*ej+d(d) dS dS )*z;Self-test suite for Cryptodome.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    )ÚCryptodome.Hash.cSHAKE128r   ÚassertEqual)Úselfr   © r   úF/usr/lib/python3/dist-packages/Cryptodome/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$   Ú
failUnlessÚ
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_cshake)ÚHashÚSHA3c                 C   ó   t | ƒS ©N©Úint©Úxr   r   r   Ú<lambda>Š   ó    rU   c                 C   rO   rP   rQ   rS   r   r   r   rU   ‹   rV   c                 C   rO   rP   rQ   rS   r   r   r   rU   Œ   rV   )r8   ÚnlenÚslenr8   r   é   rW   zUnsupported cSHAKE test vectorrX   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 rP   )r   rG   rI   rJ   )ÚconfigÚtestsr   r   r   Ú	get_tests¤   s
   r`   Ú__main__c                   C   s   t  tƒ ¡S rP   )ÚunittestÚ	TestSuiter`   r   r   r   r   rU   ®   s    Úsuite)ÚdefaultTest),Ú__doc__rb   ÚCryptodome.SelfTest.loaderr   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Hashr   r   r   r   ÚCryptodome.Util.py3compatr   r	   r
   ÚTestCaser   rG   rI   rJ   Úvector_filesÚfileÚdescrÚtagr[   Útest_vectorsÚ	enumerateÚidxÚtvÚgetattrr   Úmsgr8   Ú
ValueErrorr   ÚsrX   Úmdr]   Úsetattrr`   rC   rd   Úmainr   r   r   r   Ú<module>   sT   P

ÿþÿý



íý