o
    Þý°jVS  ã                   @   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   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/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 )Néx   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ó   7777777éd   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œ   Ú€1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050Ú08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   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)ÚH000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223ÚHc1cf48a89f2ffdd9cf4652e9efdb72d74540a42bde6d7836d59a5ceaaef3105325b2072fÚ 7691be035e5020a8ac6e618529f9a0dcÚ00e0017b27777f3f4a1786f0)r±   Ú 4b55384fe259c9c84e7935a003cbe928Ú016af5b145fc9f579c175f93e3bfb0eed863d06ccfdb78515Ú0000004836733c147d6d93cb)rµ   Ú@453243fc609b23327edfaafa7131cd9f8490701c5ad4a79cfc1fe0ff42f4fb00Ú07c5cb2401b3dc33c19e7340819e0f69c678c3db8e6f6a91aÚ0096b03b020c6eadc2cb500d)r¹   ÚH96893fc55e5c722f540b7dd1ddf7e758d288bc95c69165884536c811662f2188abee0935Ú002bf391ee8ecb159b959617b0965279bf59b60a786d3e0feÚ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   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Util.py3compatr   r   ÚCryptodome.Cipherr   r   ÚCryptodome.Hashr	   r
   ÚCryptodome.Utilr   r   ÚTestCaser   rš   r°   rÕ   r—   rÚ   Úmainr   r   r   r   Ú<module>   s$     "I:þ