o
    5hBS                     @   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redd Ze jdd dS 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   s/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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   Z   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ctpt2r   r   r   test_loopback_1284      


zCtrTests.test_loopback_128c                 C   r!   )Nr"   r$   i   )	r   r   r   r%   ctr_64r   r'   r(   r)   r*   r   r   r   test_loopback_64=   r1   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%   r2   r)   r:   r   r   r   r&   r   r   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r:   r    r   r   initial_valuer"   r$      r       s,  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)r#   r:   )r   r   r   r%   r   r)   r:   r   r   r'   assertNotEquallenr5   r6   r&   )r+   cipher1r#   cipher2r-   nonce1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  r:   r@   r    r?   r"   r$   rA   r@   r   )r#   r@   )r   r   r   r%   r   r   r   r)   r'   r:   r5   r6   r&   )r+   rE   r#   rF   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         rK   rJ   r$   rA   s   55555555555555555rL   s	   555555555s   555555555555555s   5555555)
r   r   r   r%   r   r   r)   r'   r5   
ValueError)r+   rE   rF   r-   r   r   r   "test_initial_value_bytes_parameter   s*   

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 )Nx   r"      )r5   rO   r   r   r   r%   r   r7   r   r   r   test_iv_with_matching_length   s   
z%CtrTests.test_iv_with_matching_lengthc                 C   *   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      zCtrTests.test_block_size_128c                 C   rT   rU   )r   r   r   r%   r2   r)   rV   rW   r   r   r   test_block_size_64   rY   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   7777777d   r"   c                       g | ]}  |qS r   r'   .0xr,   r   r   
<listcomp>       z4CtrTests.test_unaligned_data_128.<locals>.<listcomp>rB   c                    r]   r   r^   r_   rb   r   r   rc      rd   )r   r   r   r%   r&   r)   joinr'   r+   
plaintextsciphertextsr   rb   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 )Nr[   r\   r"   c                    r]   r   r^   r_   rb   r   r   rc      rd   z3CtrTests.test_unaligned_data_64.<locals>.<listcomp>rB   c                    r]   r   r^   r_   rb   r   r   rc      rd   )	r   r   r   r   r%   r2   r)   re   r'   rf   r   rb   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#   	use_aesni)r5   r6   r   r   r   r%   r&   r7   r   r   r   test_unknown_parameters   s   z CtrTests.test_unknown_parametersc                 C   s>   dD ]}t j| jt j| jd}t||d}| |d qd S )N)r'   r(   r"   rB   )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"   rB   )	r   r   r   r%   r&   r'   r5   r6   r(   rW   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'   r5   OverflowErrorr(   )r+   r#   	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   1111111111111111rN   rK   )
r   r   r   r%   r   r'   	bytearrayr)   r:   r(   )r+   r   ivrE   ref1rF   ref2cipher3ref3cipher4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    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArB   r>      Bi@B @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'   r{   r)   r(   )r+   r-   r,   r.   r   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 r   )	r   r   r%   r   r'   
memoryviewr{   r)   r(   )r+   r-   r,   r.   r   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 )Nr      5r   r>      0r   rw   )
r   r   r%   r   r'   r5   r6   r(   r{   rO   )r+   LEN_PTr-   r,   r.   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   r2   r&   r0   r3   r8   r=   rI   rM   rP   rS   rX   rZ   ri   rj   rn   rr   rs   rz   r   r   r   r   r   r   r   r   r   r   +   s8    



			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      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ڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710ڀ874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009cee 2b7e151628aed2a6abf7158809cf4f3cr   f0f1f2f3f4f5f6f7f8f9fafbfcfd  nbitsr   r@   r"   r   r   r   r   r%   r)   r'   r(   r+   r$   
ciphertextkeyr#   r,   r   r   r   test_aes_128O     zSP800TestVectors.test_aes_128c                 C   r   )	Nr   ڀ1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b05008e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   r   r   r   r"   r   r   r   r   r   test_aes_192f  r   zSP800TestVectors.test_aes_192c                 C   r   )	Nr   ڀ601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6@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)	) 53696e676c6520626c6f636b206d7367 e4095d4fb7a7b3792d6175a3261311b8 ae6852f8121067cc4bf7a5765577f39e000000300000000000000000)@000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f@5104a106168a72d9790d41ee8edad388eb2e1efc46da57c8fce630df9141be28 7e24067817fae0d743d6ce1f32539163006cb6dbc0543b59da48d90b)H000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223Hc1cf48a89f2ffdd9cf4652e9efdb72d74540a42bde6d7836d59a5ceaaef3105325b2072f 7691be035e5020a8ac6e618529f9a0dc00e0017b27777f3f4a1786f0)r    4b55384fe259c9c84e7935a003cbe928016af5b145fc9f579c175f93e3bfb0eed863d06ccfdb785150000004836733c147d6d93cb)r   @453243fc609b23327edfaafa7131cd9f8490701c5ad4a79cfc1fe0ff42f4fb0007c5cb2401b3dc33c19e7340819e0f69c678c3db8e6f6a91a0096b03b020c6eadc2cb500d)r   H96893fc55e5c722f540b7dd1ddf7e758d288bc95c69165884536c811662f2188abee0935002bf391ee8ecb159b959617b0965279bf59b60a786d3e0fe0007bdfd5cbd60278dcc0912)r    145ad01dbf824ec7560863dc71e3e0c0@776beff2851db06f4c8a0542c8696f6c6a81af1eec96b4d37fc1d689e6c1c10400000060db5672c97aa8f0b2)r   @f05e231b3894612c49ee000b804eb2a9b8306b508f839d6a5530831d9344af1c@f6d66d6bd52d59bb0796365879eff886c66dd51a5b6a99744b50590c87a2388400faac24c1585ef15a43d875)r   Heb6c52821d0bbbf7ce7594462aca4faab407df866569fd07f48cc0b583d6071f1ec0e6b8@ff7a617ce69148e4f1726e2f43581de2aa62d9f805532edff1eed687fb54153d001cc5b751a51d70a1c11148c                 C   s   g | ]}t |qS r   )r   r_   r   r   r   rc     s    zRFC3686TestVectors.<listcomp>c                 C   sV   | j D ]%\}}}}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,   rq   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 r4   )r   r   r   r   )configtestsr   r   r   	get_tests  s
   r   __main__c                   C   s   t t S r4   )unittest	TestSuiter   r   r   r   r   <lambda>  s    r   suite)defaultTest)r   binasciir   r   Crypto.SelfTest.st_commonr   Crypto.Util.py3compatr   r   Crypto.Cipherr   r   Crypto.Hashr	   r
   Crypto.Utilr   r   TestCaser   r   r   r   r   r   mainr   r   r   r   <module>   s$     "I: