U
    ci                     @   s   d dl Z d dlmZ d dlmZ d dlmZ G dd de jZG dd de jZ	G d	d
 d
e jZ
G dd de jZi fddZedkrdd Ze jdd dS )    N)list_test_cases)load_test_vectors_wycheproof)AESc                   @   s4   e Zd ZddddddgZdd Zd	d
 Zdd ZdS )KW_Tests)Z 000102030405060708090A0B0C0D0E0F 00112233445566778899AABBCCDDEEFFZ01FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5)0000102030405060708090A0B0C0D0E0F1011121314151617r   Z096778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D)@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1Fr   Z064E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7)r   000112233445566778899AABBCCDDEEFF0001020304050607Z@031D33264E15D33268F24EC260743EDCE1C6C7DDEE725A936BA814915C6762D2)r   r	   Z@A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1)r   Z@00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0FZP28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21c                 C   sl   | j D ]`}dd |D \}}}t|tj}||}| || t|tj}||}| || qd S )Nc                 S   s   g | ]}t |qS  bytesfromhex.0xr
   r
   F/tmp/pip-unpacked-wheel-juw9_yux/Cryptodome/SelfTest/Cipher/test_KW.py
<listcomp>#   s     z)KW_Tests.test_rfc3394.<locals>.<listcomp>)tvsr   newMODE_KWsealassertEqualunsealselftvZkekptctcipherZct2Zpt2r
   r
   r   test_rfc3394!   s    


zKW_Tests.test_rfc3394c              	   C   sR   t dt j}| t |d W 5 Q R X | t |d W 5 Q R X d S )N   ----------------    s   88888888888888888)r   r   r   assertRaises
ValueErrorr   )r   r   r
   r
   r   	test_neg1.   s
    zKW_Tests.test_neg1c              	   C   sv   t dt j}t|d}t dt j}|| t dt j}|d  dN  < | t || W 5 Q R X d S )Nr    s   7777777777777777r      )r   r   r   	bytearrayr   r   r"   r#   )r   r   r   r
   r
   r   	test_neg28   s    
zKW_Tests.test_neg2N)__name__
__module____qualname__r   r   r$   r'   r
   r
   r
   r   r   	   s   
r   c                   @   s   e Zd Zdd Zdd ZdS )KW_Wycheproofc                 C   s   t ddd| _d S )NZCipherZ
wycheproofzkw_test.jsonzWycheproof tests for KWr   vectorsr   r
   r
   r   setUpH   s    zKW_Wycheproof.setUpc              
   C   s   | j s| d | j D ]}| j|jd t|jtj}z||j	 W n* t
k
rt   |jrb Y W 5 Q R  qY nX t|jtj}z||j}W n* t
k
r   |jr Y W 5 Q R  qY nX | ||j	 W 5 Q R X qd S NzNo test vectors available)ZtestId)r.   skipTestsubTestidr   r   keyr   r   msgr#   validr   r   r   r   Zvectorr   r   r
   r
   r   test_wycheproofM   s&    

zKW_Wycheproof.test_wycheproofNr(   r)   r*   r0   r9   r
   r
   r
   r   r+   F   s   r+   c                   @   s   e Zd ZddgZdd ZdS )	KWP_Tests)05840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8Z(c37b7e6492584340bed12207808941155068f738Z@138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a)r<   Z466f7250617369Z afbeb0f07dfbf5419200f2ccb50bb24fc                 C   sl   | j D ]`}dd |D \}}}t|tj}||}| || t|tj}||}| || qd S )Nc                 S   s   g | ]}t |qS r
   r   r   r
   r
   r   r   u   s     z*KWP_Tests.test_rfc5649.<locals>.<listcomp>)r   r   r   MODE_KWPr   r   r   r   r
   r
   r   test_rfc5649s   s    


zKWP_Tests.test_rfc5649N)r(   r)   r*   r   r>   r
   r
   r
   r   r;   h   s   	r;   c                   @   s   e Zd Zdd Zdd ZdS )KWP_Wycheproofc                 C   s   t ddd| _d S )Nr,   zkwp_test.jsonzWycheproof tests for KWPr-   r/   r
   r
   r   r0      s    zKWP_Wycheproof.setUpc              
   C   s   | j s| d | j D ]}| j|jd t|jtj}z||j	 W n0 t
k
rz   |jrh|jsh Y W 5 Q R  qY nX t|jtj}z||j}W n0 t
k
r   |jr|js Y W 5 Q R  qY nX | ||j	 W 5 Q R X qd S r1   )r.   r2   r3   r4   r   r   r5   r=   r   r6   r#   r7   warningr   r   r   r8   r
   r
   r   r9      s&    

zKWP_Wycheproof.test_wycheproofNr:   r
   r
   r
   r   r?      s   r?   c                 C   s8   g }|t t7 }|t t7 }|t t7 }|t t7 }|S N)r   r   r;   r+   r?   )configtestsr
   r
   r   	get_tests   s    rD   __main__c                   C   s   t t S rA   )unittestZ	TestSuiterD   r
   r
   r
   r   suite   s    rG   )ZdefaultTest)rF   ZCryptodome.SelfTest.st_commonr   ZCryptodome.SelfTest.loaderr   ZCryptodome.Cipherr   ZTestCaser   r+   r;   r?   rD   r(   rG   mainr
   r
   r
   r   <module>   s   =""	