U
    ÈZjBS  ã                   @   sÊ   d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
mZ d dlmZmZ d dlmZ dd	„ ZG d
d„ de jƒZG dd„ de jƒZ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)ÚhexlifyÚ	unhexlify)Úlist_test_cases)ÚtobytesÚbchr)ÚAESÚDES3)ÚSHAKE128ÚSHA256)ÚCounterc                 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_CTR.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j	d	ed
�Z
ej	de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d0d1„ Zd2d3„ Zd4d5„ Z d6S )7ÚCtrTestsÚkey_128é   Úkey_192é   Únonce_32é   Únonce_64é   é    ©Úprefixé@   c                 C   sZ   t j| jt j| jd�}tddƒ}| |¡}t j| jt j| jd�}| |¡}|  ||¡ d S )N©ÚcounterÚ	plaintexti@  )	r   r   r   ÚMODE_CTRÚctr_128r   ÚencryptÚdecryptÚassertEqual©ÚselfÚcipherÚptÚctZpt2r   r   r   Útest_loopback_1284   s    


zCtrTests.test_loopback_128c                 C   sZ   t j| jt j| jd�}tddƒ}| |¡}t j| jt j| jd�}| |¡}|  ||¡ d S )Nr!   r#   i   )	r   r   r   r$   Úctr_64r   r&   r'   r(   r)   r   r   r   Útest_loopback_64=   s    


zCtrTests.test_loopback_64c                 C   s4   |   ttj| jtj¡ |   ttj| jtj| j¡ d S ©N)	ÚassertRaisesÚ	TypeErrorr   r   r   r   r$   r   r%   ©r*   r   r   r   Útest_invalid_counter_parameterF   s    z'CtrTests.test_invalid_counter_parameterc                 C   sˆ   t j| jt j| jd�}|  |j| j¡ tj| j	tj| j
d�}|  |j| j¡ tjd| j| jd�}tj| j	tj|d�}|  t|dƒ¡ d S )Nr!   r    )r   ÚsuffixÚnonce)r   r   r   r$   r/   r(   r7   r   r   r   r%   r   r   ZassertFalseÚhasattr)r*   r+   r"   r   r   r   Útest_nonce_attributeM   s    zCtrTests.test_nonce_attributec                 C   s  t j| jt j| jd�}|  |j| j¡ tjd| jdd�}t j| jt j|d�}|  |j|j¡ tddƒ}|  | 	|¡| 	|¡¡ t  | jt j¡j}t  | jt j¡j}|  
||¡ |  t|ƒd¡ t j| jt jd	d�}|  d	|j¡ | 	d
¡ | jtt j| jt j| j| jd� d S )N©r7   r    r   ©r   Úinitial_valuer!   r#   é   r   ó    s,  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)r"   r7   )r   r   r   r$   r   r(   r7   r   r   r&   ZassertNotEqualÚlenr2   r3   r%   )r*   Úcipher1r"   Úcipher2r,   Znonce1Znonce2r+   r   r   r   Útest_nonce_parameter[   s$    

 ÿzCtrTests.test_nonce_parameterc                 C   sÞ   t j| jt j| jdd�}tjd| jdd�}t j| jt j|d�}tddƒ}|  | |¡| |¡¡ t j| jt jdd�}tjd|j	dd�}t j| jt j|d�}tddƒ}|  | |¡| |¡¡ | j
tt j| jt j| jd	d
� d S )Néÿÿ  ©r7   r<   r    r;   r!   r#   r=   ©r<   r   )r"   r<   )r   r   r   r$   r   r   r   r(   r&   r7   r2   r3   r%   )r*   r@   r"   rA   r,   r   r   r   Útest_initial_value_parameterv   s&     ÿ
ÿ
 ÿz%CtrTests.test_initial_value_parameterc                 C   sÆ   t j| jt j| jdd�}t j| jt j| jdd�}tddƒ}|  | |¡| |¡¡ | jt	t j| jt jdd� | jt	t j| jt j| jdd� | jt	t j| jt jd	d� | jt	t j| jt j| jd
d� d S )Nó         ÿÿrD   rC   r#   r=   s   55555555555555555rE   s	   555555555s   555555555555555s   5555555)
r   r   r   r$   r   r   r(   r&   r2   Ú
ValueError)r*   r@   rA   r,   r   r   r   Ú"test_initial_value_bytes_parameter‹   s0    þ ÿ
ÿ ÿÿ ÿz+CtrTests.test_initial_value_bytes_parameterc                 C   sD   | j ttj| jtjt d¡d� | j ttj| jtjt d¡d� d S )Néx   r!   éˆ   )r2   rH   r   r   r   r$   r   r4   r   r   r   Útest_iv_with_matching_length¡   s    ÿÿz%CtrTests.test_iv_with_matching_lengthc                 C   s*   t j| jt j| jd�}|  |jt j¡ d S ©Nr!   )r   r   r   r$   r%   r(   Ú
block_size©r*   r+   r   r   r   Útest_block_size_128§   s    zCtrTests.test_block_size_128c                 C   s*   t j| jt j| jd�}|  |jt j¡ d S rM   )r   r   r   r$   r/   r(   rN   rO   r   r   r   Útest_block_size_64«   s    zCtrTests.test_block_size_64c                    sÆ   dgd }t j| jt j| jd�‰ ‡ fdd„|D ƒ}t j| jt j| jd�‰ |  d |¡ˆ  d |¡¡¡ t j| jt j| jd�‰ ‡ fdd„|D ƒ}t j| jt j| jd�‰ |  d |¡ˆ  d |¡¡¡ d S )Nó   7777777éd   r!   c                    s   g | ]}ˆ   |¡‘qS r   ©r&   ©Ú.0Úx©r+   r   r   Ú
<listcomp>³   s     z4CtrTests.test_unaligned_data_128.<locals>.<listcomp>r>   c                    s   g | ]}ˆ   |¡‘qS r   rT   rU   rX   r   r   rY   ¸   s     )r   r   r   r$   r%   r(   Újoinr&   ©r*   Z
plaintextsZciphertextsr   rX   r   Útest_unaligned_data_128¯   s    
z CtrTests.test_unaligned_data_128c                    sÆ   dgd }t j| jtj| jd�‰ ‡ fdd„|D ƒ}t j| jtj| jd�‰ |  d |¡ˆ  d |¡¡¡ t j| jtj| jd�‰ ‡ fdd„|D ƒ}t j| jtj| jd�‰ |  d |¡ˆ  d |¡¡¡ d S )NrR   rS   r!   c                    s   g | ]}ˆ   |¡‘qS r   rT   rU   rX   r   r   rY   ¿   s     z3CtrTests.test_unaligned_data_64.<locals>.<listcomp>r>   c                    s   g | ]}ˆ   |¡‘qS r   rT   rU   rX   r   r   rY   Ä   s     )	r   r   r   r   r$   r/   r(   rZ   r&   r[   r   rX   r   Útest_unaligned_data_64¼   s    
zCtrTests.test_unaligned_data_64c                 C   sX   | j ttj| jtjd| jd� | j ttj| jtj| jdd� tj| jtj| jdd� d S )Né   r!   )r"   ÚunknownF)r"   Z	use_aesni)r2   r3   r   r   r   r$   r%   r4   r   r   r   Útest_unknown_parametersÈ   s     ÿ ÿz CtrTests.test_unknown_parametersc                 C   s>   dD ]4}t j| jt j| jd�}t||ƒdƒ}|  |d¡ qd S )N)r&   r'   r!   r>   )r   r   r   r$   r%   Úgetattrr(   )r*   Úfuncr+   Úresultr   r   r   Útest_null_encryption_decryptionÐ   s    z(CtrTests.test_null_encryption_decryptionc                 C   sd   t j| jt j| jd�}| d¡ |  t|jd¡ t j| jt j| jd�}| d¡ |  t|jd¡ d S )Nr!   r>   )	r   r   r   r$   r%   r&   r2   r3   r'   rO   r   r   r   Útest_either_encrypt_or_decryptÖ   s    

z'CtrTests.test_either_encrypt_or_decryptc                 C   sÚ   t jdtdƒd d�}d}tj| jtj|d�}| d| ¡ |  t|jd¡ tj| jtj|d�}|  t|jd|d  ¡ tj| jtj|d�}| 	d| ¡ |  t|j	d¡ tj| jtj|d�}|  t|j	d|d  ¡ d S )	Nr   é	   é   r   i   r!   ó   9é   )
r   r   r   r   r   r$   r&   r2   ÚOverflowErrorr'   )r*   r"   Z	max_bytesr+   r   r   r   Útest_wrap_aroundß   s    zCtrTests.test_wrap_aroundc                 C   sÔ   d}d}t j| jt j| j|d�}| |¡}t j| jt jt| jƒt|ƒd�}| t|ƒ¡}|  ||¡ |  |j|j¡ t j| jt j| j|d�}| 	|¡}t j| jt jt| jƒt|ƒd�}	|	 	t|ƒ¡}
|  ||
¡ d S )Ns   1111111111111111rG   rD   )
r   r   r   r$   r   r&   Ú	bytearrayr(   r7   r'   )r*   r   Zivr@   Zref1rA   Zref2Zcipher3Zref3Zcipher4Zref4r   r   r   Útest_bytearrayò   s2    þ
þþ
þzCtrTests.test_bytearrayc                 C   s>   t jdt jdd�}| dd ¡}t |¡ ¡ }|  |d¡ d S )Ns    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr>   r:   ó   Bi@B Z@96204fc470476561a3a8f3b6fe6d24be85c87510b638142d1d0fb90989f8a6a6)r   r   r$   r&   r
   Ú	hexdigestr(   )r*   r+   r-   Údigestr   r   r   Útest_very_long_data  s    zCtrTests.test_very_long_datac                 C   s¢   d}t jdt j| jd�}| |¡}tdƒ}t jdt j| jd�}|j||d�}|  ||¡ |  |d ¡ t jdt j| jd�}|j||d�}|  ||¡ |  |d ¡ d S ©Ns€   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ó   4444444444444444r:   é€   ©Úoutput)r   r   r$   r   r&   rl   r(   r'   )r*   r,   r+   r-   rv   Úresr   r   r   Útest_output_param  s    
zCtrTests.test_output_paramc                 C   sŽ   d}t jdt j| jd�}| |¡}ttdƒƒ}t jdt j| jd�}|j||d� |  ||¡ t jdt j| jd�}|j||d� |  ||¡ d S rr   )	r   r   r$   r   r&   Ú
memoryviewrl   r(   r'   )r*   r,   r+   r-   rv   r   r   r   Útest_output_param_memoryview(  s    
z%CtrTests.test_output_param_memoryviewc                 C   sâ   d}d| }t jdt j| jd�}| |¡}t jdt j| jd�}| jt|j|d| d� t jdt j| jd�}| jt|j|d| d� t|d ƒ}t jdt j| jd�}| jt	|j||d� t jdt j| jd�}| jt	|j||d� d S )Nrt   ó   5rs   r:   ó   0ru   ri   )
r   r   r$   r   r&   r2   r3   r'   rl   rH   )r*   ZLEN_PTr,   r+   r-   Zshorter_outputr   r   r   Útest_output_param_neg7  s    
zCtrTests.test_output_param_negN)!Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r/   r%   r.   r0   r5   r9   rB   rF   rI   rL   rP   rQ   r\   r]   r`   rd   re   rk   rm   rq   rx   rz   r}   r   r   r   r   r   +   s6   



			r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚSP800TestVectorszQClass exercising the CTR test vectors found in Section F.5
    of NIST SP 800-38Ac                 C   s„   d}d}d}t jdtdƒdd�}t|ƒ}t|ƒ}t|ƒ}tj|tj|d�}|  | |¡|¡ tj|tj|d�}|  | |¡|¡ d S )	NÚ€6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710Z€874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009ceeZ 2b7e151628aed2a6abf7158809cf4f3cr   Úf0f1f2f3f4f5f6f7f8f9fafbfcfdéÿþ  ©Únbitsr   r<   r!   ©r   r   r   r   r$   r(   r&   r'   ©r*   r#   Z
ciphertextÚkeyr"   r+   r   r   r   Útest_aes_128O  s    þzSP800TestVectors.test_aes_128c                 C   s„   d}d}d}t jdtdƒdd�}t|ƒ}t|ƒ}t|ƒ}tj|tj|d�}|  | |¡|¡ tj|tj|d�}|  | |¡|¡ d S )	Nr‚   Z€1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050Z08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   rƒ   r„   r…   r!   r‡   rˆ   r   r   r   Útest_aes_192f  s    þzSP800TestVectors.test_aes_192c                 C   s„   d}d}d}t jdtdƒdd�}t|ƒ}t|ƒ}t|ƒ}tj|tj|d�}|  | |¡|¡ tj|tj|d�}|  | |¡|¡ d S )	Nr‚   Z€601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6Z@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r   rƒ   r„   r…   r!   r‡   rˆ   r   r   r   Útest_aes_256}  s    þzSP800TestVectors.test_aes_256N)r~   r   r€   Ú__doc__rŠ   r‹   rŒ   r   r   r   r   r�   K  s   r�   c                   @   s:   e Zd ZdZg ZeD ]Ze dd„ eD ƒ¡ qdd„ ZdS )ÚRFC3686TestVectors)	)Ú 53696e676c6520626c6f636b206d7367Z e4095d4fb7a7b3792d6175a3261311b8Z ae6852f8121067cc4bf7a5765577f39eZ000000300000000000000000)Ú@000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fZ@5104a106168a72d9790d41ee8edad388eb2e1efc46da57c8fce630df9141be28Z 7e24067817fae0d743d6ce1f32539163Z006cb6dbc0543b59da48d90b)ÚH000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223ZHc1cf48a89f2ffdd9cf4652e9efdb72d74540a42bde6d7836d59a5ceaaef3105325b2072fZ 7691be035e5020a8ac6e618529f9a0dcZ00e0017b27777f3f4a1786f0)r�   Z 4b55384fe259c9c84e7935a003cbe928Z016af5b145fc9f579c175f93e3bfb0eed863d06ccfdb78515Z0000004836733c147d6d93cb)r�   Z@453243fc609b23327edfaafa7131cd9f8490701c5ad4a79cfc1fe0ff42f4fb00Z07c5cb2401b3dc33c19e7340819e0f69c678c3db8e6f6a91aZ0096b03b020c6eadc2cb500d)r‘   ZH96893fc55e5c722f540b7dd1ddf7e758d288bc95c69165884536c811662f2188abee0935Z002bf391ee8ecb159b959617b0965279bf59b60a786d3e0feZ0007bdfd5cbd60278dcc0912)r�   Z 145ad01dbf824ec7560863dc71e3e0c0Z@776beff2851db06f4c8a0542c8696f6c6a81af1eec96b4d37fc1d689e6c1c104Z00000060db5672c97aa8f0b2)r�   Z@f05e231b3894612c49ee000b804eb2a9b8306b508f839d6a5530831d9344af1cZ@f6d66d6bd52d59bb0796365879eff886c66dd51a5b6a99744b50590c87a23884Z00faac24c1585ef15a43d875)r‘   ZHeb6c52821d0bbbf7ce7594462aca4faab407df866569fd07f48cc0b583d6071f1ec0e6b8Z@ff7a617ce69148e4f1726e2f43581de2aa62d9f805532edff1eed687fb54153dZ001cc5b751a51d70a1c11148c                 C   s   g | ]}t |ƒ‘qS r   )r   rU   r   r   r   rY   Ä  s     zRFC3686TestVectors.<listcomp>c                 C   sV   | j D ]J\}}}}tjd|d�}tj|tj|d�}| |¡}|  t|ƒt|ƒ¡ qd S )Nr   r   r!   )Úbindatar   r   r   r$   r&   r(   r   )r*   r,   r-   r‰   r   r"   r+   rc   r   r   r   ÚrunTestÆ  s
    
zRFC3686TestVectors.runTestN)r~   r   r€   r   r’   ÚtvÚappendr“   r   r   r   r   rŽ   ”  s
   'rŽ   c                 C   s,   g }|t tƒ7 }|t tƒ7 }|tƒ g7 }|S r1   )r   r   r�   rŽ   )ÚconfigZtestsr   r   r   Ú	get_testsÎ  s
    r—   Ú__main__c                   C   s   t  tƒ ¡S r1   )ÚunittestZ	TestSuiter—   r   r   r   r   Ú<lambda>×  r>   rš   Úsuite)ZdefaultTest)r™   Úbinasciir   r   ZCrypto.SelfTest.st_commonr   ZCrypto.Util.py3compatr   r   ZCrypto.Cipherr   r   ZCrypto.Hashr	   r
   ZCrypto.Utilr   r   ZTestCaser   r�   rŽ   r—   r~   r›   Úmainr   r   r   r   Ú<module>   s      "I: