U
    g"                     @   s  d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ G dd	 d	ejZG d
d dejZedddddd ipg Zeedddddd ipg 7 ZeeD ]F\ZZejdkredZn
eejZeejfddZeede e qedddddd ipg Zeedddddd ip8g 7 ZeeD ]J\ZZejdkrbedZn
eejZeejfddZeed e e qDedd!d"dd#d ipg Zeedd$d%dd&d ipg 7 ZeeD ]J\ZZejdkredZn
eejZeejfd'dZeed(e e qedd)d*dd+d ip:g Zeedd,d-dd.d ipXg 7 ZeeD ]J\ZZejdkredZn
eejZeejfd/dZeed0e e qdi fd1d2Ze d3krddlZd4d Z!ej"d5d6 dS )7z*Self-test suite for Cryptodome.Hash.keccak    N)hexlify	unhexlify)load_test_vectors)list_test_cases)keccak)btobytesbchrc                   @   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 )
KeccakTestc                 C   s   dD ]<}t j|d}| |j|d  | }| |j|d  qdD ]4}t j|d}| |j| | }| |j| qFd S )N)           digest_bits   )       0   @   digest_bytes)r   newassertEqualdigest_size)selfr   hobjZhobj2r    r   H/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/SelfTest/Hash/test_keccak.pytest_new_positive,   s    zKeccakTest.test_new_positivec                 C   s@   t jtddd }t jddtd }| || d S )N   r   )datar   r   )r   r   r   digestupdater   )r   Zdigest1Zdigest2r   r   r   test_new_positive2<   s    zKeccakTest.test_new_positive2c                 C   s   |  ttj tjdd}| j ttjddd | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjd	d d S )
Nr   r   r   )r   r   r   r      A   i  )assertRaises	TypeErrorr   r   
ValueErrorr   hr   r   r   test_new_negativeB   s    
zKeccakTest.test_new_negativec                 C   sz   t dd t dd g}tjdd}||d |d  | }tjdd}||d |d   | | | d S )	N
         i,  r   r   r   r%   )r	   r   r   r#   r"   r   )r   piecesr+   r"   r   r   r   test_updateV   s    zKeccakTest.test_updatec                 C   s    t jdd}| t|jd d S )Nr   r   string)r   r   r'   r(   r#   r*   r   r   r   test_update_negative_   s    zKeccakTest.test_update_negativec                 C   s@   t jdd}| }| | | | t|ttd d S )Nr   r   r"   )r   r   r"   r   
assertTrue
isinstancetyper   )r   r+   r"   r   r   r   test_digestc   s    zKeccakTest.test_digestc                 C   sX   t jdd}| }| }| t|t| | | | | t|t	d d S )Nr   r   r"   )
r   r   r"   	hexdigestr   r   r   r4   r5   r6   )r   macr"   r8   r   r   r   test_hex_digestl   s    zKeccakTest.test_hex_digestc                 C   s   t d}tjd|d d d}| }| t|j|dd   tjd|d }tjd|d d dd}| | | ||dd   | | | d S )NZrrrrtttr      r   r!   T)r   r!   Zupdate_after_digest)r   r   r   r"   r'   r(   r#   r   )r   msgr+   Zdig1Zdig2r   r   r   test_update_after_digestx   s    z#KeccakTest.test_update_after_digestN)__name__
__module____qualname__r   r$   r,   r1   r3   r7   r:   r>   r   r   r   r   r
   *   s   		r
   c                   @   s   e Zd ZdS )KeccakVectorsN)r?   r@   rA   r   r   r   r   rB      s   rB   )ZHashr   zShortMsgKAT_224.txtzShort Messages KAT 224lenc                 C   s   t | S Nintxr   r   r   <lambda>       rI   zLongMsgKAT_224.txtzLong Messages KAT 224c                 C   s   t | S rD   rE   rG   r   r   r   rI      rJ    c                 C   s"   t jd|d}| | | d S )Nr   r<   r   r   r   r"   r   r!   resultr   r   r   r   new_test   s    rO   ztest_224_%dzShortMsgKAT_256.txtzShort Messages KAT 256c                 C   s   t | S rD   rE   rG   r   r   r   rI      rJ   zLongMsgKAT_256.txtzLong Messages KAT 256c                 C   s   t | S rD   rE   rG   r   r   r   rI      rJ   c                 C   s"   t jd|d}| | | d S )Nr   r<   rL   rM   r   r   r   rO      s    ztest_256_%dzShortMsgKAT_384.txtzShort Messages KAT 384c                 C   s   t | S rD   rE   rG   r   r   r   rI      rJ   zLongMsgKAT_384.txtzLong Messages KAT 384c                 C   s   t | S rD   rE   rG   r   r   r   rI      rJ   c                 C   s"   t jd|d}| | | d S )Nr   r<   rL   rM   r   r   r   rO      s    ztest_384_%dzShortMsgKAT_512.txtzShort Messages KAT 512c                 C   s   t | S rD   rE   rG   r   r   r   rI      rJ   zLongMsgKAT_512.txtzLong Messages KAT 512c                 C   s   t | S rD   rE   rG   r   r   r   rI      rJ   c                 C   s"   t jd|d}| | | d S )Nr   r<   rL   rM   r   r   r   rO      s    ztest_512_%dc                 C   s    g }|t t7 }|t t7 }|S rD   )r   r
   rB   )configtestsr   r   r   	get_tests   s    rR   __main__c                   C   s   t t S rD   )unittestZ	TestSuiterR   r   r   r   r   rI      rJ   suite)ZdefaultTest)#__doc__rT   binasciir   r   ZCryptodome.SelfTest.loaderr   ZCryptodome.SelfTest.st_commonr   ZCryptodome.Hashr   ZCryptodome.Util.py3compatr   r   r	   ZTestCaser
   rB   Ztest_vectors_224	enumerateidxtvrC   r!   r=   ZmdrO   setattrZtest_vectors_256Ztest_vectors_384Ztest_vectors_512rR   r?   rU   mainr   r   r   r   <module>   s   `

















