o
    Þý°jÕ>  ã                   @   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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 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   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/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ó   7777777éd   é   ©Ú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r‰g }
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ƒ   Ú$cda2521ef0a905ca44cd057cbf0d47a0678aÚ08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br†   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   ÚCryptodome.SelfTest.loaderr   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Util.py3compatr   r   ÚCryptodome.Cipherr   r   r	   ÚCryptodome.Hashr
   Ú#Cryptodome.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	þ