o
    e"                     @   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pHg Zeedddddd ipVg 7 ZeeD ]#\ZZejdkrjedZneejZeejfddZeede e q\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 ]#\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pg Zeedd$d%dd&d ipg 7 ZeeD ]#\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p$g 7 ZeeD ]%\ZZejdkr9edZneejZeejfd/dZeed0e e q*i fd1d2Ze d3krkddlZd4d Z!ej"d5d6 dS 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 ]}t j|d}| |j| | }| |j| q#d S )N)           digest_bits   )       0   @   digest_bytes)r   newassertEqualdigest_size)selfr   hobjhobj2r    r   F/usr/lib/python3/dist-packages/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   digest1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   
failUnless
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   r7   r8   r9   )r   macr#   r;   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 )Nrrrrtttr      r   r"   T)r   r"   update_after_digest)r   r   r   r#   r*   r+   r$   assertEquals)r   msgr.   dig1dig2r   r   r   test_update_after_digestx   s   z#KeccakTest.test_update_after_digestN)__name__
__module____qualname__r    r'   r/   r4   r6   r:   r=   rF   r   r   r   r   r
   *   s    		r
   c                   @   s   e Zd ZdS )KeccakVectorsN)rG   rH   rI   r   r   r   r   rJ      s    rJ   )Hashr   zShortMsgKAT_224.txtzShort Messages KAT 224lenc                 C      t | S Nintxr   r   r   <lambda>       rS   zLongMsgKAT_224.txtzLong Messages KAT 224c                 C   rM   rN   rO   rQ   r   r   r   rS      rT    c                 C   "   t jd|d}| | | d S )Nr   r@   r   r   r   r#   r   r"   resultr   r   r   r   new_test      rZ   ztest_224_%dzShortMsgKAT_256.txtzShort Messages KAT 256c                 C   rM   rN   rO   rQ   r   r   r   rS      rT   zLongMsgKAT_256.txtzLong Messages KAT 256c                 C   rM   rN   rO   rQ   r   r   r   rS      rT   c                 C   rV   )Nr   r@   rW   rX   r   r   r   rZ      r[   ztest_256_%dzShortMsgKAT_384.txtzShort Messages KAT 384c                 C   rM   rN   rO   rQ   r   r   r   rS      rT   zLongMsgKAT_384.txtzLong Messages KAT 384c                 C   rM   rN   rO   rQ   r   r   r   rS      rT   c                 C   rV   )Nr   r@   rW   rX   r   r   r   rZ      r[   ztest_384_%dzShortMsgKAT_512.txtzShort Messages KAT 512c                 C   rM   rN   rO   rQ   r   r   r   rS      rT   zLongMsgKAT_512.txtzLong Messages KAT 512c                 C   rM   rN   rO   rQ   r   r   r   rS      rT   c                 C   rV   )Nr   r@   rW   rX   r   r   r   rZ      r[   ztest_512_%dc                 C   s    g }|t t7 }|t t7 }|S rN   )r   r
   rJ   )configtestsr   r   r   	get_tests   s   r^   __main__c                   C   s   t t S rN   )unittest	TestSuiter^   r   r   r   r   rS      s    suite)defaultTest)#__doc__r`   binasciir   r   Cryptodome.SelfTest.loaderr   Cryptodome.SelfTest.st_commonr   Cryptodome.Hashr   Cryptodome.Util.py3compatr   r   r	   TestCaser
   rJ   test_vectors_224	enumerateidxtvrL   r"   rC   mdrZ   setattrtest_vectors_256test_vectors_384test_vectors_512r^   rG   rb   mainr   r   r   r   <module>   s   `



















