U
    ÈZj½>  ã                   @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZ d	d
„ ZG dd„ deƒZG dd„ de jƒZdZdZeD ]8ZdD ].Ze de¡Zeefdd„Zeede eƒ q¦qžeD ]8ZdD ].Ze de¡Zeefdd„Zeede eƒ qäqÜ[[dZeD ]<ZdD ] Ze de¡Zeefdd„Z�q*eede eƒ �q"G dd„ de jƒZi fdd„Z e!dk�rœd d!„ Z"e j#d"d#� dS )$é    N)Ú	unhexlify)Úload_test_vectors)Úlist_test_cases)ÚtobytesÚ	is_string)ÚAESÚDES3ÚDES)ÚSHAKE128)ÚBlockChainingTestsc                 C   s   t jt| ƒd� |¡S )N)Údata)r
   Únewr   Úread)ÚtagÚlength© r   úb/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/SelfTest/Cipher/test_CFB.pyÚget_tag_random+   s    r   c                   @   s8   e Zd ZejZejZdd„ Zdd„ Z	dd„ Z
dd„ Zd	S )
ÚCfbTestsc                    sÎ   dgd }t j| jt j| jdd�‰ ‡ fdd„|D ƒ}t j| jt j| jdd�‰ |  d |¡ˆ  d |¡¡¡ t j| jt j| jdd�‰ ‡ fd	d„|D ƒ}t j| jt j| jdd�‰ |  d |¡ˆ  d |¡¡¡ d S )
Nó   7777777éd   é   ©Úsegment_sizec                    s   g | ]}ˆ   |¡‘qS r   ©Úencrypt©Ú.0Úx©Úcipherr   r   Ú
<listcomp>:   s     z4CfbTests.test_unaligned_data_128.<locals>.<listcomp>ó    é€   c                    s   g | ]}ˆ   |¡‘qS r   r   r   r   r   r   r!   ?   s     )r   r   Úkey_128ÚMODE_CFBÚiv_128ÚassertEqualÚjoinr   ©ÚselfZ
plaintextsZciphertextsr   r   r   Útest_unaligned_data_1286   s    
z CfbTests.test_unaligned_data_128c                    sÎ   dgd }t j| jt j| jdd�‰ ‡ fdd„|D ƒ}t j| jt j| jdd�‰ |  d |¡ˆ  d |¡¡¡ t j| jt j| jdd�‰ ‡ fd	d„|D ƒ}t j| jt j| jdd�‰ |  d |¡ˆ  d |¡¡¡ d S )
Nr   r   r   r   c                    s   g | ]}ˆ   |¡‘qS r   r   r   r   r   r   r!   F   s     z3CfbTests.test_unaligned_data_64.<locals>.<listcomp>r"   é@   c                    s   g | ]}ˆ   |¡‘qS r   r   r   r   r   r   r!   K   s     )r   r   Úkey_192r%   Úiv_64r'   r(   r   r)   r   r   r   Útest_unaligned_data_64C   s    
zCfbTests.test_unaligned_data_64c              	   C   sV   t dddƒD ]}tj| jtj| j|d�}qdD ]"}| jttj| jtj| j|d� q.d S )Nr   é�   r   )r   é   é	   é   r0   )Úranger   r   r$   r%   r&   ÚassertRaisesÚ
ValueError©r*   Úbitsr    r   r   r   Útest_segment_size_128Q   s    ÿþzCfbTests.test_segment_size_128c              	   C   sV   t dddƒD ]}tj| jtj| j|d�}qdD ]"}| jttj| jtj| j|d� q.d S )Nr   éA   r   )r   r1   r2   é?   r:   )	r4   r   r   r-   r%   r.   r5   r6   r   r7   r   r   r   Útest_segment_size_64[   s    ÿþzCfbTests.test_segment_size_64N)Ú__name__Ú
__module__Ú__qualname__r   r%   Zaes_moder   Z	des3_moder+   r/   r9   r<   r   r   r   r   r   /   s   
r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚNistCfbVectorsc                 C   s®   t d|d| ddd„ iƒ}|d kr&d S d }|D ]z}t|ƒr@|}q.|j| _tj|jtj|j|d�}|dkr€|  	| 
|j¡|j¡ q.|dkr |  	| |j¡|j¡ q.d	s.t‚q.d S )
N©ÚCipherr   zAES CFB%d KATÚcountc                 S   s   t | ƒS ©N©Úint©r   r   r   r   Ú<lambda>m   r"   z1NistCfbVectors._do_kat_aes_test.<locals>.<lambda>r   ú	[ENCRYPT]ú	[DECRYPT]F)r   r   ÚdescÚdescriptionr   r   Úkeyr%   Úivr'   r   Ú	plaintextÚ
ciphertextÚdecryptÚAssertionError)r*   Ú	file_namer   Útest_vectorsÚ	directionÚtvr    r   r   r   Ú_do_kat_aes_testh   s*    
ýÿzNistCfbVectors._do_kat_aes_testc                    s"  t d|dˆ  ddd„ iƒ}|d kr&d S ˆ dks2t‚d }|D ]â‰tˆƒrLˆ}q:ˆj| _tjˆjtjˆj	ˆ d�}‡ ‡fdd	„}|d
krÆg }t
dƒD ]"}|ˆj||ƒ}	| | |	¡¡ qŽ|  |d ˆj¡ q:|dk�rg }
t
dƒD ]"}|ˆj|
|ƒ}|
 | |¡¡ qÜ|  |
d ˆj¡ q:ds:t‚q:d S )NrA   zAES CFB%d MontecarlorC   c                 S   s   t | ƒS rD   rE   rG   r   r   r   rH   ‰   r"   z1NistCfbVectors._do_mct_aes_test.<locals>.<lambda>)r   r#   r   c                    sX   ˆ dkr&|dkr|d S | ˆj g| S |dkr2| S |dkrLˆj |d |… S ||d  S )Nr#   é   éþÿÿÿr   é   é   é   )rN   )Z
input_textZ
output_seqÚj©r   rV   r   r   Ú	get_input›   s    z2NistCfbVectors._do_mct_aes_test.<locals>.get_inputrI   iè  éÿÿÿÿrJ   F)r   rR   r   rK   rL   r   r   rM   r%   rN   r4   rO   Úappendr   r'   rP   rQ   )r*   rS   r   rT   rU   r    r_   Zctsr]   rO   ZptsrP   r   r^   r   Ú_do_mct_aes_test„   s>    
ýÿ
zNistCfbVectors._do_mct_aes_testc                 C   sü   t d|d| ddd„ iƒ}|d kr&d S d }|D ]È}t|ƒr@|}q.|j| _t|dƒrltj|jtj|j	|d�}nB|j
|jkrŒ|j
|j |j }n|j
|j }tj|tj|j	|d�}|dkrÎ|  | |j¡|j¡ q.|d	krî|  | |j¡|j¡ q.d
s.t‚q.d S )N)rB   ZTDESzTDES CFB%d KATrC   c                 S   s   t | ƒS rD   rE   rG   r   r   r   rH   ¼   r"   z.NistCfbVectors._do_tdes_test.<locals>.<lambda>Úkeysr   rI   rJ   F)r   r   rK   rL   Úhasattrr	   r   rc   r%   rN   Úkey1Zkey3Úkey2r   r'   r   rO   rP   rQ   rR   )r*   rS   r   rT   rU   rV   r    rM   r   r   r   Ú_do_tdes_test·   s8    
ý
ÿÿzNistCfbVectors._do_tdes_testN)r=   r>   r?   rW   rb   rg   r   r   r   r   r@   f   s   3r@   )zCFB?GFSbox128.rspzCFB?GFSbox192.rspzCFB?GFSbox256.rspzCFB?KeySbox128.rspzCFB?KeySbox192.rspzCFB?KeySbox256.rspzCFB?VarKey128.rspzCFB?VarKey192.rspzCFB?VarKey256.rspzCFB?VarTxt128.rspzCFB?VarTxt192.rspzCFB?VarTxt256.rspzCFB?MMT128.rspzCFB?MMT192.rspzCFB?MMT256.rsp)zCFB?MCT128.rspzCFB?MCT192.rspzCFB?MCT256.rsp)Ú8Z128ú?c                 C   s   |   |t|ƒ¡ d S rD   )rW   rF   ©r*   rS   r8   r   r   r   Únew_funcø   s    rk   Z	test_AES_c                 C   s   |   |t|ƒ¡ d S rD   )rb   rF   rj   r   r   r   rk   ÿ   s    )zTCFB?MMT2.rspzTCFB?MMT3.rspzTCFB?invperm.rspzTCFB?permop.rspzTCFB?subtab.rspzTCFB?varkey.rspzTCFB?vartext.rsp)rh   Z64c                 C   s   |   |t|ƒ¡ d S rD   )rg   rF   rj   r   r   r   rk     s    Z
test_TDES_c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚSP800TestVectorszPClass exercising the CFB test vectors found in Section F.3
    of NIST SP 800-3Ac                 C   s€   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}tj|tj|dd�}|  | |¡|¡ tj|tj|dd�}|  | |¡|¡ d S )NÚ$6bc1bee22e409f96e93d7e117393172aae2dZ$3b79424c9c0dd436bace9e0ed4586a4f32b9Ú 2b7e151628aed2a6abf7158809cf4f3cÚ 000102030405060708090a0b0c0d0e0fr   r   ©r   r   r   r%   r'   r   rQ   ©r*   rO   rP   rM   rN   r    r   r   r   Útest_aes_128_cfb8  s    z"SP800TestVectors.test_aes_128_cfb8c                 C   s€   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}tj|tj|dd�}|  | |¡|¡ tj|tj|dd�}|  | |¡|¡ d S )Nrm   Z$cda2521ef0a905ca44cd057cbf0d47a0678aÚ08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7bro   r   r   rp   rq   r   r   r   Útest_aes_192_cfb8,  s    z"SP800TestVectors.test_aes_192_cfb8c                 C   s€   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}tj|tj|dd�}|  | |¡|¡ tj|tj|dd�}|  | |¡|¡ d S )Nrm   Z$dc1f1a8520a64db55fcc8ac554844e889700Ú@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4ro   r   r   rp   rq   r   r   r   Útest_aes_256_cfb8<  s    z"SP800TestVectors.test_aes_256_cfb8c                 C   s€   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}tj|tj|dd�}|  | |¡|¡ tj|tj|dd�}|  | |¡|¡ d S )NÚ€6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710Z€3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6rn   ro   r#   r   rp   rq   r   r   r   Útest_aes_128_cfb128L  s    z$SP800TestVectors.test_aes_128_cfb128c                 C   s€   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}tj|tj|dd�}|  | |¡|¡ tj|tj|dd�}|  | |¡|¡ d S )Nrw   Z€cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b09ffrs   ro   r#   r   rp   rq   r   r   r   Útest_aes_192_cfb128b  s    z$SP800TestVectors.test_aes_192_cfb128c                 C   s€   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}tj|tj|dd�}|  | |¡|¡ tj|tj|dd�}|  | |¡|¡ d S )Nrw   Z€dc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d55b1e471ru   ro   r#   r   rp   rq   r   r   r   Útest_aes_256_cfb128x  s    z$SP800TestVectors.test_aes_256_cfb128N)
r=   r>   r?   Ú__doc__rr   rt   rv   rx   ry   rz   r   r   r   r   rl     s   rl   c                 C   s6   g }|t tƒ7 }|  d¡r&|t tƒ7 }|t tƒ7 }|S )NZ
slow_tests)r   r   Úgetr@   rl   )ÚconfigZtestsr   r   r   Ú	get_tests�  s    
r~   Ú__main__c                   C   s   t  tƒ ¡S rD   )ÚunittestZ	TestSuiter~   r   r   r   r   rH   š  r"   rH   Úsuite)ZdefaultTest)$r€   Úbinasciir   ZCrypto.SelfTest.loaderr   ZCrypto.SelfTest.st_commonr   ZCrypto.Util.py3compatr   r   ZCrypto.Cipherr   r   r	   ZCrypto.Hashr
   ZCrypto.SelfTest.Cipher.test_CBCr   r   r   ZTestCaser@   Znist_aes_kat_mmt_filesZnist_aes_mct_filesZfile_gen_namer8   ÚreplacerS   rk   ÚsetattrZnist_tdes_filesrl   r~   r=   r�   Úmainr   r   r   r   Ú<module>   sD   7v
x	
