o
    5h>                     @   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 ]ZdD ]ZedeZeefddZeede e qSqOeD ]ZdD ]ZedeZeefddZeede e qrqn[[dZeD ]ZdD ]ZedeZeefddZqeede e qG dd de jZi fddZ e!dkrd d! Z"e j#d"d# dS 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   s/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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                       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   7777777d      segment_sizec                       g | ]}  |qS r   encrypt.0xcipherr   r   
<listcomp>:       z4CfbTests.test_unaligned_data_128.<locals>.<listcomp>       c                    r   r   r   r   r!   r   r   r#   ?   r$   )r   r   key_128MODE_CFBiv_128assertEqualjoinr   self
plaintextsciphertextsr   r!   r   test_unaligned_data_1286   s   
"z CfbTests.test_unaligned_data_128c                    r   )
Nr   r   r   r   c                    r   r   r   r   r!   r   r   r#   F   r$   z3CfbTests.test_unaligned_data_64.<locals>.<listcomp>r%   @   c                    r   r   r   r   r!   r   r   r#   K   r$   )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      	      r5   )ranger   r   r'   r(   r)   assertRaises
ValueErrorr-   bitsr"   r   r   r   test_segment_size_128Q      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   r6   r7   ?   r@   )	r9   r   r   r2   r(   r3   r:   r;   r   r<   r   r   r   test_segment_size_64[   r?   zCfbTests.test_segment_size_64N)__name__
__module____qualname__r   r(   aes_moder   	des3_moder0   r4   r>   rB   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 u rd S d }|D ]:}t|r |}q|j| _tj|jtj|j|d}|dkr@| 	|
|j|j q|dkrP| 	||j|j qJ d S )	NCipherr   zAES CFB%d KATcountc                 S      t | S Nintr    r   r   r   <lambda>m       z1NistCfbVectors._do_kat_aes_test.<locals>.<lambda>r   	[ENCRYPT]	[DECRYPT])r   r   descdescriptionr   r   keyr(   ivr*   r   	plaintext
ciphertextdecrypt)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 u rd S  dv sJ d }|D ]mtr&}qj| _tjjtjj d} fdd	}|d
krcg }t	dD ]}|j
||}	|||	 qG| |d j q|dkrg }
t	dD ]}|j|
|}|
|| qm| |
d j
 qJ d S )NrI   zAES CFB%d MontecarlorK   c                 S   rL   rM   rN   rP   r   r   r   rQ      rR   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r| S |dkr&j |d | S ||d  S )Nr&      r            )rX   )
input_text
output_seqjr   r_   r   r   	get_input   s   z2NistCfbVectors._do_mct_aes_test.<locals>.get_inputrS   i  rT   )r   r   rU   rV   r   r   rW   r(   rX   r9   rY   appendr   r*   rZ   r[   )r-   r\   r   r]   r^   r"   rj   ctsrh   rY   ptsrZ   r   ri   r   _do_mct_aes_test   s@   
zNistCfbVectors._do_mct_aes_testc                 C   s   t d|d| ddd i}|d u rd S d }|D ]a}t|r |}q|j| _t|dr6tj|jtj|j	|d}n!|j
|jkrF|j
|j |j }n|j
|j }tj|tj|j	|d}|dkrg| ||j|j q|d	krw| ||j|j qJ d S )
N)rJ   TDESzTDES CFB%d KATrK   c                 S   rL   rM   rN   rP   r   r   r   rQ      rR   z.NistCfbVectors._do_tdes_test.<locals>.<lambda>keysr   rS   rT   )r   r   rU   rV   hasattrr	   r   rq   r(   rX   key1key3key2r   r*   r   rY   rZ   r[   )r-   r\   r   r]   r^   r_   r"   rW   r   r   r   _do_tdes_test   s:   

zNistCfbVectors._do_tdes_testN)rC   rD   rE   r`   ro   rv   r   r   r   r   rH   f   s    3rH   )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)8128?c                 C      |  |t| d S rM   )r`   rO   r-   r\   r=   r   r   r   new_func      r|   	test_AES_c                 C   rz   rM   )ro   rO   r{   r   r   r   r|      r}   )zTCFB?MMT2.rspzTCFB?MMT3.rspzTCFB?invperm.rspzTCFB?permop.rspzTCFB?subtab.rspzTCFB?varkey.rspzTCFB?vartext.rsp)rw   64c                 C   rz   rM   )rv   rO   r{   r   r   r   r|     r}   
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      d}d}d}d}t |}t |}t |}t |}tj|tj|dd}| ||| tj|tj|dd}| ||| d S )N$6bc1bee22e409f96e93d7e117393172aae2d$3b79424c9c0dd436bace9e0ed4586a4f32b9 2b7e151628aed2a6abf7158809cf4f3c 000102030405060708090a0b0c0d0e0fr   r   r   r   r   r(   r*   r   r[   r-   rY   rZ   rW   rX   r"   r   r   r   test_aes_128_cfb8     z"SP800TestVectors.test_aes_128_cfb8c                 C   r   )Nr   $cda2521ef0a905ca44cd057cbf0d47a0678a08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   r   r   r   r   r   r   r   test_aes_192_cfb8,  r   z"SP800TestVectors.test_aes_192_cfb8c                 C   r   )Nr   $dc1f1a8520a64db55fcc8ac554844e889700@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r   r   r   r   r   r   r   r   test_aes_256_cfb8<  r   z"SP800TestVectors.test_aes_256_cfb8c                 C   r   )Nڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710ڀ3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6r   r   r&   r   r   r   r   r   r   test_aes_128_cfb128L     z$SP800TestVectors.test_aes_128_cfb128c                 C   r   )Nr   ڀcdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b09ffr   r   r&   r   r   r   r   r   r   test_aes_192_cfb128b  r   z$SP800TestVectors.test_aes_192_cfb128c                 C   r   )Nr   ڀdc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d55b1e471r   r   r&   r   r   r   r   r   r   test_aes_256_cfb128x  s   z$SP800TestVectors.test_aes_256_cfb128N)
rC   rD   rE   __doc__r   r   r   r   r   r   r   r   r   r   r     s    r   c                 C   s6   g }|t t7 }| dr|t t7 }|t t7 }|S )N
slow_tests)r   r   getrH   r   )configtestsr   r   r   	get_tests  s   
r   __main__c                   C   s   t t S rM   )unittest	TestSuiter   r   r   r   r   rQ     s    rQ   suite)defaultTest)$r   binasciir   Crypto.SelfTest.loaderr   Crypto.SelfTest.st_commonr   Crypto.Util.py3compatr   r   Crypto.Cipherr   r   r	   Crypto.Hashr
   Crypto.SelfTest.Cipher.test_CBCr   r   r   TestCaserH   nist_aes_kat_mmt_filesnist_aes_mct_filesfile_gen_namer=   replacer\   r|   setattrnist_tdes_filesr   r   rC   r   mainr   r   r   r   <module>   sL   7v
x	