U
    g                  	   @   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 pg 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st!eej&e#efd'd(Z'e(ed)eef e' q qi fd*d+Z)e*d,krddlZd-d Z+ej,d.d/ dS )0z;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   H/tmp/pip-unpacked-wheel-_q8s9isk/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 )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 ]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/   r5   r7   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   r:   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   r:   r   r   r   r   r@   {   s   r@   c                   @   s   e Zd ZdS )cSHAKEVectorsN)r<   r=   r>   r   r   r   r   rA      s   rA   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   rG   c                 C   s   t | S rB   rC   rE   r   r   r   rG      r   c                 C   s   t | S rB   rC   rE   r   r   r   rG      r   )r4   nlenslenr4   r      rH   zUnsupported cSHAKE test vectorrI   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    rM   z
test_%s_%dc                 C   s,   g }|t t7 }|t t7 }|t t7 }|S rB   )r   r?   r@   rA   )configtestsr   r   r   	get_tests   s
    rP   __main__c                   C   s   t t S rB   )unittestZ	TestSuiterP   r   r   r   r   rG      r   suite)ZdefaultTest)-__doc__rR   ZCryptodome.SelfTest.loaderr   ZCryptodome.SelfTest.st_commonr   ZCryptodome.Hashr   r   r   r   ZCryptodome.Util.py3compatr   r	   r
   ZTestCaser   r?   r@   rA   Zvector_filesfiledescrtagrL   Ztest_vectors	enumerateidxtvgetattrr   msgr4   AssertionError
ValueErrorr   srI   ZmdrM   setattrrP   r<   rS   mainr   r   r   r   <module>   sR   P








