o
    `qiBS                     @   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   f/home/app/PaddleOCR-VL/.venv_paddleocr/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ctZ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=   r0   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%   r1   r)   r9   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r9   r    r   r   initial_valuer"   r$      r       s,  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)r#   r9   )r   r   r   r%   r   r)   r9   r   r   r'   ZassertNotEquallenr4   r5   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  r9   r>   r    r=   r"   r$   r?   r>   r   )r#   r>   )r   r   r   r%   r   r   r   r)   r'   r9   r4   r5   r&   )r+   rB   r#   rC   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         rF   rE   r$   r?   s   55555555555555555rG   s	   555555555s   555555555555555s   5555555)
r   r   r   r%   r   r   r)   r'   r4   
ValueError)r+   rB   rC   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"      )r4   rJ   r   r   r   r%   r   r6   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   rO   rP   )r   r   r   r%   r1   r)   rQ   rR   r   r   r   test_block_size_64   rT   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>r@   c                    rX   r   rY   rZ   r]   r   r   r^      r_   )r   r   r   r%   r&   r)   joinr'   r+   Z
plaintextsZciphertextsr   r]   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 )NrV   rW   r"   c                    rX   r   rY   rZ   r]   r   r   r^      r_   z3CtrTests.test_unaligned_data_64.<locals>.<listcomp>r@   c                    rX   r   rY   rZ   r]   r   r   r^      r_   )	r   r   r   r   r%   r1   r)   r`   r'   ra   r   r]   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)r4   r5   r   r   r   r%   r&   r6   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"   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'   r4   r5   r(   rR   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'   r4   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   1111111111111111rI   rF   )
r   r   r   r%   r   r'   	bytearrayr)   r9   r(   )r+   r   ZivrB   Zref1rC   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'   rr   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 rx   )	r   r   r%   r   r'   
memoryviewrr   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 )Nrz      5ry   r<      0r{   ro   )
r   r   r%   r   r'   r4   r5   r(   rr   rJ   )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   r1   r&   r/   r2   r7   r;   rD   rH   rK   rN   rS   rU   rb   rc   rf   rj   rk   rq   rs   rw   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ڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710Z874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009ceeZ 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     zSP800TestVectors.test_aes_128c                 C   r   )	Nr   Z1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050Z08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   r   r   r   r"   r   r   r   r   r   test_aes_192f  r   zSP800TestVectors.test_aes_192c                 C   r   )	Nr   Z601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6Z@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   rZ   r   r   r   r^     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,   ri   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 r3   )r   r   r   r   )configtestsr   r   r   	get_tests  s
   r   __main__c                   C   s   t t S r3   )unittestZ	TestSuiter   r   r   r   r   <lambda>  s    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: