o
    Þý°jï'  ã                   @   sˆ   d dl Z d dlmZmZ d dlmZ d dlmZmZ G dd„ de j	ƒZ
G dd„ de j	ƒZi fd	d
„ZedkrBdd„ Ze jdd� dS dS )é    N)Ú	unhexlifyÚhexlify)Úlist_test_cases)ÚstrxorÚstrxor_cc                   @   ót   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d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚStrxorTestsc                 C   s@   t dƒ}t dƒ}t dƒ}|  t||ƒ|¡ |  t||ƒ|¡ d S ©Nó   ff339a83e5cd4cdf5649ó   383d4ba020573314395bó   c70ed123c59a7fcb6f12)r   ÚassertEqualr   )ÚselfÚterm1Úterm2Úresult© r   ú—/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/Util/test_strxor.pyÚtest1+   s
   zStrxorTests.test1c                 C   s   d}|   t||ƒ|¡ d S )Nó    )r   r   )r   Úesr   r   r   Útest22   s   zStrxorTests.test2c                 C   s*   t dƒ}dt|ƒ }|  t||ƒ|¡ d S )Nr
   ó    )r   Úlenr   r   )r   r   Ú	all_zerosr   r   r   Útest36   s   zStrxorTests.test3c                 C   s$   t dƒ}t dƒ}|  tt||¡ d S )Nr
   s   ff339a83e5cd4cdf564990)r   ÚassertRaisesÚ
ValueErrorr   ©r   r   r   r   r   r   Útest_wrong_length;   s   zStrxorTests.test_wrong_lengthc                 C   ó6   t dƒ}t|ƒ}t dƒ}t dƒ}|  t||ƒ|¡ d S r	   )r   Ú	bytearrayr   r   )r   r   Úterm1_bar   r   r   r   r   Útest_bytearray@   ó
   zStrxorTests.test_bytearrayc                 C   r    r	   )r   Ú
memoryviewr   r   )r   r   Úterm1_mvr   r   r   r   r   Útest_memoryviewH   r$   zStrxorTests.test_memoryviewc                 C   s~   t dƒ}t dƒ}|dd… }|dd… }t dƒ}tt|ƒƒ}t|||d�}|  |d¡ |  ||¡ |  ||¡ |  ||¡ dS ©z3Verify result can be stored in pre-allocated memoryr
   r   Nr   ©Úoutput)r   r!   r   r   r   ©r   r   r   Úoriginal_term1Úoriginal_term2Úexpected_xorr*   r   r   r   r   Útest_output_bytearrayP   s   z!StrxorTests.test_output_bytearrayc                 C   s‚   t dƒ}t dƒ}|dd… }|dd… }t dƒ}ttt|ƒƒƒ}t|||d�}|  |d¡ |  ||¡ |  ||¡ |  ||¡ dS r(   )r   r%   r!   r   r   r   r+   r   r   r   Útest_output_memoryviewa   s   z"StrxorTests.test_output_memoryviewc                 C   s^   t tdƒƒ}tdƒ}|dd… }tdƒ}t|||d�}|  |d¡ |  ||¡ |  ||¡ dS ©ú1Verify result can be stored in overlapping memoryr
   r   Nr   r)   )r!   r   r   r   ©r   r   r   r-   r.   r   r   r   r   Ú!test_output_overlapping_bytearrayr   s   z-StrxorTests.test_output_overlapping_bytearrayc                 C   sb   t ttdƒƒƒ}tdƒ}|dd… }tdƒ}t|||d�}|  |d¡ |  ||¡ |  ||¡ dS r1   )r%   r!   r   r   r   r3   r   r   r   Ú"test_output_overlapping_memoryview€   s   z.StrxorTests.test_output_overlapping_memoryviewc                 C   s(   t dƒ}t dƒ}| jtt|||d� dS ©ú2Verify result cannot be stored in read-only memoryr
   r   r)   N)r   r   Ú	TypeErrorr   r   r   r   r   Útest_output_ro_bytesŽ   s   z StrxorTests.test_output_ro_bytesc                 C   s,   t tdƒƒ}tdƒ}| jtt|||d� dS r6   )r%   r   r   r8   r   r   r   r   r   Útest_output_ro_memoryview–   ó   z%StrxorTests.test_output_ro_memoryviewc                 C   s8   t dƒ}t dƒ}tt|ƒd ƒ}| jtt|||d� dS )ú<Verify result cannot be stored in memory of incorrect lengthr
   r   é   r)   N)r   r!   r   r   r   r   )r   r   r   r*   r   r   r   Útest_output_incorrect_lengthž   s   z(StrxorTests.test_output_incorrect_lengthN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r#   r'   r/   r0   r4   r5   r9   r:   r>   r   r   r   r   r   )   s    r   c                   @   r   )ÚStrxor_cTestsc                 C   s&   t dƒ}t dƒ}|  t|dƒ|¡ d S ©Nr
   ó   be72dbc2a48c0d9e1708éA   ©r   r   r   )r   r   r   r   r   r   r   ª   s   zStrxor_cTests.test1c                 C   s   t dƒ}|  t|dƒ|¡ d S )Nr
   r   rF   ©r   r   r   r   r   r   ¯   s   zStrxor_cTests.test2c                 C   s   |   tddƒd¡ d S )Nr   éZ   )r   r   )r   r   r   r   r   ³   s   zStrxor_cTests.test3c                 C   s,   t dƒ}|  tt|d¡ |  tt|d¡ d S )Nr
   éÿÿÿÿé   )r   r   r   r   rG   r   r   r   Útest_wrong_range¶   s   zStrxor_cTests.test_wrong_rangec                 C   ó.   t dƒ}t|ƒ}t dƒ}|  t|dƒ|¡ d S rC   )r   r!   r   r   )r   r   r"   r   r   r   r   r#   »   ó   zStrxor_cTests.test_bytearrayc                 C   rL   rC   )r   r%   r   r   )r   r   r&   r   r   r   r   r'   Â   rM   zStrxor_cTests.test_memoryviewc                 C   s^   t dƒ}|d d … }t dƒ}tt|ƒƒ}t|d|d�}|  |d ¡ |  ||¡ |  ||¡ d S ©Nr
   rD   rE   r)   )r   r!   r   r   r   ©r   r   r,   Úexpected_resultr*   r   r   r   r   r/   É   s   z#Strxor_cTests.test_output_bytearrayc                 C   sb   t dƒ}|d d … }t dƒ}ttt|ƒƒƒ}t|d|d�}|  |d ¡ |  ||¡ |  ||¡ d S rN   )r   r%   r!   r   r   r   rO   r   r   r   r0   Õ   s   z$Strxor_cTests.test_output_memoryviewc                 C   s>   t tdƒƒ}tdƒ}t|d|d�}|  |d¡ |  ||¡ dS ©r2   r
   rD   rE   r)   N)r!   r   r   r   ©r   r   r.   r   r   r   r   r4   á   s
   z/Strxor_cTests.test_output_overlapping_bytearrayc                 C   sB   t ttdƒƒƒ}tdƒ}t|d|d�}|  |d¡ |  ||¡ dS rQ   )r%   r!   r   r   r   rR   r   r   r   r5   ì   s
   z0Strxor_cTests.test_output_overlapping_memoryviewc                 C   s    t dƒ}| jtt|d|d� dS )r7   r
   rE   r)   N)r   r   r8   r   rG   r   r   r   r9   ÷   s   z"Strxor_cTests.test_output_ro_bytesc                 C   s,   t tdƒƒ}tdƒ}| jtt|d|d� dS )r7   r
   r   rE   r)   N)r%   r   r   r8   r   r   r   r   r   r:   þ   r;   z'Strxor_cTests.test_output_ro_memoryviewc                 C   s0   t dƒ}tt|ƒd ƒ}| jtt|d|d� dS )r<   r
   r=   rE   r)   N)r   r!   r   r   r   r   )r   r   r*   r   r   r   r>     s   z*Strxor_cTests.test_output_incorrect_lengthN)r?   r@   rA   r   r   r   rK   r#   r'   r/   r0   r4   r5   r9   r:   r>   r   r   r   r   rB   ¨   s    rB   c                 C   s    g }|t tƒ7 }|t tƒ7 }|S ©N)r   r   rB   )ÚconfigÚtestsr   r   r   Ú	get_tests  s   rV   Ú__main__c                   C   s   t  tƒ ¡S rS   )ÚunittestÚ	TestSuiterV   r   r   r   r   Ú<lambda>  s    rZ   Úsuite)ÚdefaultTest)rX   Úbinasciir   r   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Util.strxorr   r   ÚTestCaser   rB   rV   r?   r[   Úmainr   r   r   r   Ú<module>   s   !gþ