U
    ÈZjêN  ã                   @   sl  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	„ ZG d
d„ de jƒZG dd„ deƒZG dd„ de jƒZG dd„ deƒZdZdZeD ] Zefdd„Zeede eƒ q´eD ] Zefdd„Zeede eƒ qÚ[[dZeD ]"Zefdd„Zeede eƒ �qG dd„ de jƒZi fdd„Zedk�rhd d!„ Ze j d"d#� dS )$é    N)Ú	unhexlify)Úload_test_vectors)Úlist_test_cases)ÚtobytesÚ	is_string)ÚAESÚDES3ÚDES)ÚSHAKE128c                 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_CBC.pyÚget_tag_random)   s    r   c                   @   sæ   e Zd ZeddƒZeddƒZeddƒZeddƒZe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!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3S )4ÚBlockChainingTestsÚkey_128é   Úkey_192é   Úiv_128Úiv_64é   Údata_128c                 C   sV   t  | j| j| j¡}tddƒ}| |¡}t  | j| j| j¡}| |¡}|  ||¡ d S )NÚ	plaintexté@  )	r   r   r   Úaes_moder   r   ÚencryptÚdecryptÚassertEqual©ÚselfÚcipherÚptÚctZpt2r   r   r   Útest_loopback_1284   s    


z$BlockChainingTests.test_loopback_128c                 C   sV   t  | j| j| j¡}tddƒ}| |¡}t  | j| j| j¡}| |¡}|  ||¡ d S )Nr   i   )	r   r   r   Ú	des3_moder   r   r   r    r!   r"   r   r   r   Útest_loopback_64=   s    


z#BlockChainingTests.test_loopback_64c                 C   sÀ   t  | j| j¡}|j}t  | j| j¡}|j}|  ||¡ |  t|ƒd¡ t  | j| j| j¡}| 	| j
¡}t j| j| j| jd�}|  || 	| j
¡¡ t j| j| j| jd�}|  || 	| j
¡¡ d S )Nr   ©Úiv)ÚIV)r   r   r   r   r+   ZassertNotEqualr!   Úlenr   r   r   )r#   r$   Ziv1Ziv2r&   r   r   r   Útest_ivF   s    zBlockChainingTests.test_ivc                 C   s   | j ttj| j| jdd� d S )Nútest1234567890-*r*   )ÚassertRaisesÚ	TypeErrorr   r   r   r   ©r#   r   r   r   Útest_iv_must_be_bytesY   s    ÿz(BlockChainingTests.test_iv_must_be_bytesc                 C   s$   | j ttj| j| j| j| jd� d S )N)r+   r,   ©r0   r1   r   r   r   r   r   r2   r   r   r   Útest_only_one_iv]   s     ÿz#BlockChainingTests.test_only_one_ivc              	   C   s\   |   ttj| j| jd¡ |   ttj| j| j| jd d… ¡ |   ttj| j| j| jd ¡ d S )Nó    é   ó   0)r0   Ú
ValueErrorr   r   r   r   r   r2   r   r   r   Útest_iv_with_matching_lengthb   s    ÿÿÿz/BlockChainingTests.test_iv_with_matching_lengthc                 C   s(   t  | j| j| j¡}|  |jt j¡ d S ©N)r   r   r   r   r   r!   Ú
block_size©r#   r$   r   r   r   Útest_block_size_128j   s    z&BlockChainingTests.test_block_size_128c                 C   s(   t  | j| j| j¡}|  |jt j¡ d S r;   )r   r   r   r(   r   r!   r<   r=   r   r   r   Útest_block_size_64n   s    z%BlockChainingTests.test_block_size_64c                 C   st   t  | j| j| j¡}tddƒD ]}|  t|jd| ¡ qt  | j| j| j¡}tddƒD ]}|  t|j	d| ¡ qVd S )Né   r   ó   5)
r   r   r   r   r   Úranger0   r9   r   r    ©r#   r$   Zwrong_lengthr   r   r   Útest_unaligned_data_128r   s    z*BlockChainingTests.test_unaligned_data_128c                 C   st   t  | j| j| j¡}tddƒD ]}|  t|jd| ¡ qt  | j| j| j¡}tddƒD ]}|  t|j	d| ¡ qVd S )Nr@   r   rA   )
r   r   r   r(   r   rB   r0   r9   r   r    rC   r   r   r   Útest_unaligned_data_64{   s    z)BlockChainingTests.test_unaligned_data_64c                 C   sZ   t ddƒ}dD ]F}t | j| j| j¡}t||ƒ|ƒ |  |j| j¡ |  |j	| j¡ qd S )Nr   r   ©r   r    )
r   r   r   r   r   r   Úgetattrr!   r+   r,   )r#   r   Úfuncr$   r   r   r   Útest_IV_iv_attributes„   s    
z(BlockChainingTests.test_IV_iv_attributesc                 C   sV   |   ttj| j| j| jd¡ | j ttj| j| j| jdd� tj| j| j| jdd� d S )Né   )r+   ÚunknownF)r+   Z	use_aesnir4   r2   r   r   r   Útest_unknown_parametersŒ   s     ÿ ÿz*BlockChainingTests.test_unknown_parametersc                 C   s<   dD ]2}t  | j| j| j¡}t||ƒdƒ}|  |d¡ qd S )NrF   r6   )r   r   r   r   r   rG   r!   )r#   rH   r$   Úresultr   r   r   Útest_null_encryption_decryption”   s    z2BlockChainingTests.test_null_encryption_decryptionc                 C   s`   t  | j| j| j¡}| d¡ |  t|jd¡ t  | j| j| j¡}| d¡ |  t|jd¡ d S )Nr6   )	r   r   r   r   r   r   r0   r1   r    r=   r   r   r   Útest_either_encrypt_or_decryptš   s    

z1BlockChainingTests.test_either_encrypt_or_decryptc                 C   sL   t  | j| j| j¡}|  t|jd¡ t  | j| j| j¡}|  t|jd¡ d S )Nr/   )	r   r   r   r   r   r0   r1   r   r    r=   r   r   r   Útest_data_must_be_bytes£   s    z*BlockChainingTests.test_data_must_be_bytesc                 C   s   d}t |ƒ}t | jƒ}t | jƒ}t | j| j| j¡}| |¡}t || j|¡}d|d d…< d|d d…< | |¡}|  ||¡ |  |j|j¡ t | jƒ}t | jƒ}t | j| j| j¡}	|	 	|¡}
t || j|¡}d|d d…< d|d d…< | 	|¡}|  |
|¡ d S ©Ns€   11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111s   ÿÿÿé   )
Ú	bytearrayr   r   r   r   r   r   r!   r+   r    )r#   r   Zdata_baZkey_baZiv_baÚcipher1Úref1Úcipher2Úref2Úcipher3Úref3Úcipher4Úref4r   r   r   Útest_bytearrayª   s*    







z!BlockChainingTests.test_bytearrayc                 C   s  d}t t|ƒƒ}t t| jƒƒ}t t| jƒƒ}t | j| j| j¡}| |¡}t || j|¡}d|d d…< d|d d…< | |¡}|  ||¡ |  |j	|j	¡ t t| jƒƒ}t t| jƒƒ}t | j| j| j¡}	|	 
|¡}
t || j|¡}d|d d…< d|d d…< | 
|¡}|  |
|¡ d S rQ   )Ú
memoryviewrS   r   r   r   r   r   r   r!   r+   r    )r#   r   Zdata_mvZkey_mvZiv_mvrT   rU   rV   rW   rX   rY   rZ   r[   r   r   r   Útest_memoryviewË   s*    



z"BlockChainingTests.test_memoryviewc                 C   s¢   d}t jd| j| jd�}| |¡}tdƒ}t jd| j| jd�}|j||d�}|  ||¡ |  |d ¡ t jd| j| jd�}|j||d�}|  ||¡ |  |d ¡ d S ©Nó€   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ó   4444444444444444r*   é€   ©Úoutput©r   r   r   r   r   rS   r!   r    )r#   r%   r$   r&   rd   Úresr   r   r   Útest_output_paramì   s    
z$BlockChainingTests.test_output_paramc                 C   sª   d}t jd| j| jd�}| |¡}t|ƒ}t jd| j| jd�}|j||d�}|  ||¡ |  |d ¡ t|ƒ}t jd| j| jd�}|j||d�}|  ||¡ |  |d ¡ d S )Nr`   ra   r*   rc   re   )r#   r%   r$   r&   Zpt_barf   Zct_bar   r   r   Útest_output_param_same_bufferþ   s    
z0BlockChainingTests.test_output_param_same_bufferc                 C   sŽ   d}t jd| j| jd�}| |¡}ttdƒƒ}t jd| j| jd�}|j||d� |  ||¡ t jd| j| jd�}|j||d� |  ||¡ d S r_   )	r   r   r   r   r   r]   rS   r!   r    )r#   r%   r$   r&   rd   r   r   r   Útest_output_param_memoryview  s    
z/BlockChainingTests.test_output_param_memoryviewc                 C   sâ   d}d| }t jd| j| jd�}| |¡}t jd| j| jd�}| jt|j|d| d� t jd| j| jd�}| jt|j|d| d� t|d ƒ}t jd| j| jd�}| jt	|j||d� t jd| j| jd�}| jt	|j||d� d S )Nrb   rA   ra   r*   r8   rc   r@   )
r   r   r   r   r   r0   r1   r    rS   r9   )r#   ZLEN_PTr%   r$   r&   Zshorter_outputr   r   r   Útest_output_param_neg   s    
z(BlockChainingTests.test_output_param_negN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r'   r)   r.   r3   r5   r:   r>   r?   rD   rE   rI   rL   rN   rO   rP   r\   r^   rg   rh   ri   rj   r   r   r   r   r   ,   s4   




					!!r   c                   @   s   e Zd ZejZejZdS )ÚCbcTestsN)rk   rl   rm   r   ÚMODE_CBCr   r   r(   r   r   r   r   rn   4  s   rn   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚNistBlockChainingVectorsc                 C   s¦   t d|dddd„ iƒ}|d kr"d S d }|D ]v}t|ƒr<|}q*|j| _t |j| j|j¡}|dkrx|  	| 
|j¡|j¡ q*|dkr˜|  	| |j¡|j¡ q*ds*t‚q*d S )	N©ÚCipherr   zAES CBC KATÚcountc                 S   s   t | ƒS r;   ©Úint©Úxr   r   r   Ú<lambda>@  r6   z;NistBlockChainingVectors._do_kat_aes_test.<locals>.<lambda>ú	[ENCRYPT]ú	[DECRYPT]F)r   r   ÚdescÚdescriptionr   r   Úkeyr   r+   r!   r   r   Ú
ciphertextr    ÚAssertionError)r#   Ú	file_nameÚtest_vectorsÚ	directionÚtvr$   r   r   r   Ú_do_kat_aes_test;  s&    
ýz)NistBlockChainingVectors._do_kat_aes_testc           	      C   s  t d|dddd„ iƒ}|d kr"d S d }|D ]Ò}t|ƒr<|}q*|j| _t |j| j|j¡}|dkr¦|jg}t	dƒD ] }| 
| |j¡¡ |d |_qp|  |d	 |j¡ q*|d
krô|jg}t	dƒD ] }| 
| |j¡¡ |d |_q¾|  |d	 |j¡ q*ds*t‚q*d S )Nrq   zAES CBC Montecarlors   c                 S   s   t | ƒS r;   rt   rv   r   r   r   rx   \  r6   z;NistBlockChainingVectors._do_mct_aes_test.<locals>.<lambda>ry   iè  éþÿÿÿéÿÿÿÿrz   F)r   r   r{   r|   r   r   r}   r   r+   rB   Úappendr   r   r!   r~   r    r   )	r#   r€   r�   r‚   rƒ   r$   Zctsrs   Zptsr   r   r   Ú_do_mct_aes_testW  s6    
ýz)NistBlockChainingVectors._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ƒrdt |j| j|j	¡}n>|j
|jkr„|j
|j |j }n|j
|j }t || j|j	¡}|dkrÂ|  | |j¡|j¡ q*|dkrâ|  | |j¡|j¡ q*d	s*t‚q*d S )
N)rr   ZTDESzTDES CBC KATrs   c                 S   s   t | ƒS r;   rt   rv   r   r   r   rx     r6   z8NistBlockChainingVectors._do_tdes_test.<locals>.<lambda>Úkeysry   rz   F)r   r   r{   r|   Úhasattrr	   r   r‰   Údes_moder+   Úkey1Zkey3Úkey2r   r(   r!   r   r   r~   r    r   )r#   r€   r�   r‚   rƒ   r$   r}   r   r   r   Ú_do_tdes_testz  s0    
ý
z&NistBlockChainingVectors._do_tdes_testN)rk   rl   rm   r„   rˆ   rŽ   r   r   r   r   rp   9  s   #rp   c                   @   s   e Zd ZejZejZejZ	dS )ÚNistCbcVectorsN)
rk   rl   rm   r   ro   r   r	   r‹   r   r(   r   r   r   r   r�   �  s   r�   )zCBCGFSbox128.rspzCBCGFSbox192.rspzCBCGFSbox256.rspzCBCKeySbox128.rspzCBCKeySbox192.rspzCBCKeySbox256.rspzCBCVarKey128.rspzCBCVarKey192.rspzCBCVarKey256.rspzCBCVarTxt128.rspzCBCVarTxt192.rspzCBCVarTxt256.rspzCBCMMT128.rspzCBCMMT192.rspzCBCMMT256.rsp)zCBCMCT128.rspzCBCMCT192.rspzCBCMCT256.rspc                 C   s   |   |¡ d S r;   )r„   ©r#   r€   r   r   r   Únew_func¾  s    r‘   Z	test_AES_c                 C   s   |   |¡ d S r;   )rˆ   r�   r   r   r   r‘   Ã  s    )zTCBCMMT2.rspzTCBCMMT3.rspzTCBCinvperm.rspzTCBCpermop.rspzTCBCsubtab.rspzTCBCvarkey.rspzTCBCvartext.rspc                 C   s   |   |¡ d S r;   )rŽ   r�   r   r   r   r‘   Ó  s    Z
test_TDES_c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚSP800TestVectorszPClass exercising the CBC test vectors found in Section F.2
    of NIST SP 800-3Ac                 C   sx   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |tj|¡}|  | |¡|¡ t |tj|¡}|  | |¡|¡ d S )NZ 2b7e151628aed2a6abf7158809cf4f3cÚ 000102030405060708090a0b0c0d0e0fÚ€6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710Z€7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7©r   r   r   ro   r!   r   r    ©r#   r}   r+   r   r~   r$   r   r   r   Útest_aes_128Þ  s    zSP800TestVectors.test_aes_128c                 C   sx   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |tj|¡}|  | |¡|¡ t |tj|¡}|  | |¡|¡ d S )NZ08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br“   r”   Z€4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cdr•   r–   r   r   r   Útest_aes_192ô  s    zSP800TestVectors.test_aes_192c                 C   sx   d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |tj|¡}|  | |¡|¡ t |tj|¡}|  | |¡|¡ d S )NZ@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r“   r”   Z€f58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1br•   r–   r   r   r   Útest_aes_256
  s    zSP800TestVectors.test_aes_256N)rk   rl   rm   Ú__doc__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 )NZ
slow_tests)r   rn   Úgetr�   r’   )ÚconfigZtestsr   r   r   Ú	get_tests!  s    
r�   Ú__main__c                   C   s   t  tƒ ¡S r;   )ÚunittestZ	TestSuiter�   r   r   r   r   rx   +  r6   rx   Ú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
   r   ZTestCaser   rn   rp   r�   Znist_aes_kat_mmt_filesZnist_aes_mct_filesr€   r‘   ÚsetattrZnist_tdes_filesr’   r�   rk   r    Úmainr   r   r   r   Ú<module>   s>     
d
G	
