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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sJ eed$ddkre!d%eed&ddkred"Z"neej#Z"ej$e ej#d# ksJ 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rd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   PD:\Projects\ConvertPro\env\Lib\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 )NZ   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 )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 ]}| 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/   r5   r7   r;   r   r   r   r   r   &   s    	r   c                   @      e Zd ZeZeZdS )cSHAKE128TestN)r<   r=   r>   r   r   r   r:   r   r   r   r   r@   v       r@   c                   @   r?   )cSHAKE256TestN)r<   r=   r>   r   r   r   r:   r   r   r   r   rB   {   rA   rB   c                   @   s   e Zd ZdS )cSHAKEVectorsN)r<   r=   r>   r   r   r   r   rC      s    rC   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      t | S Nintxr   r   r   <lambda>       rJ   c                 C   rD   rE   rF   rH   r   r   r   rJ      rK   c                 C   rD   rE   rF   rH   r   r   r   rJ      rK   )r4   nlenslenr4   r      rL   zUnsupported cSHAKE test vectorrM   c                 C   s,   |j ||d}|t|}| || d S )N)r   r   )r   r!   r4   r   )r   r   resultr   
test_classZhobjr*   r   r   r   new_test   s   rQ   z
test_%s_%dc                 C   s,   g }|t t7 }|t t7 }|t t7 }|S rE   )r   r@   rB   rC   )configtestsr   r   r   	get_tests   s
   rT   __main__c                   C   s   t t S rE   )unittestZ	TestSuiterT   r   r   r   r   rJ      s    suite)ZdefaultTest),__doc__rV   ZCrypto.SelfTest.loaderr   ZCrypto.SelfTest.st_commonr   ZCrypto.Hashr   r   r   r   ZCrypto.Util.py3compatr   r	   r
   ZTestCaser   r@   rB   rC   Zvector_filesfiledescrtagrP   Ztest_vectors	enumerateidxtvgetattrr   msgr4   
ValueErrorr   srM   mdrQ   setattrrT   r<   rW   mainr   r   r   r   <module>   sX   P







