o
    Þý°jq–  ã                   @   sì   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 d dlmZ d dl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G dd„ de jƒZi fdd„Zedkrtdd„ Ze jdd� dS dS )é    N©Ú	unhexlify)Úlist_test_cases)Úload_test_vectors_wycheproof)ÚtobytesÚbchr)ÚAES)ÚSHAKE128)Ústrxor)ÚCCMMessageTooLongErrorc                 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_CCM.pyÚget_tag_random-   s   r   c                   @   sê   e Z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-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7S )8ÚCcmTestsÚkey_128é   Ú	nonce_128é   r   é€   c                 C   sZ   t j| jt j| jd�}tddƒ}| |¡}t j| jt j| jd�}| |¡}|  ||¡ d S )N©ÚnonceÚ	plaintexti@  )	r   r   r   ÚMODE_CCMÚnonce_96r   ÚencryptÚdecryptÚassertEqual)ÚselfÚcipherÚptÚctÚpt2r   r   r   Útest_loopback_1287   s   


zCcmTests.test_loopback_128c                 C   s–   t  | jt j¡}|j}t  | jt j¡}|j}|  t|ƒd¡ |  ||¡ t  | jt j| j¡}| 	| j
¡}t j| jt j| jd�}|  || 	| j
¡¡ d S )Né   r   )r   r   r   r   r   r!   ÚlenÚassertNotEqualr   r   r   )r"   r#   Únonce1Únonce2r%   r   r   r   Ú
test_nonce@   s   zCcmTests.test_noncec                 C   s   | j ttj| jtjdd� d S )NÚtest12345678r   )ÚassertRaisesÚ	TypeErrorr   r   r   r   ©r"   r   r   r   Útest_nonce_must_be_bytesO   s   
ÿz!CcmTests.test_nonce_must_be_bytesc                 C   sŽ   | j ttj| jtjdd� | j ttj| jtjtdƒd d� | j ttj| jtjtdƒd d� tddƒD ]}tj| jtjtdƒ| d� q4d S )Nó    r   é   é   é   é   )r/   Ú
ValueErrorr   r   r   r   r   Úrange)r"   Úxr   r   r   Útest_nonce_lengthS   s   ÿ
ÿ
ÿÿzCcmTests.test_nonce_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]   s   zCcmTests.test_block_sizec                 C   sj   t j| jt j| jd�}|  |j| j¡ t  | jt j¡j}t  | jt j¡j}|  t|ƒd¡ |  ||¡ d S )Nr   r(   )	r   r   r   r   r   r!   r   r)   r*   )r"   r#   r+   r,   r   r   r   Útest_nonce_attributea   s   zCcmTests.test_nonce_attributec                 C   sV   |   ttj| jtj| jd¡ | j ttj| jtj| jdd� tj| jtj| jdd� d S )Nr7   )r   ÚunknownF)r   Ú	use_aesni)r/   r0   r   r   r   r   r   r1   r   r   r   Útest_unknown_parametersk   s   ÿÿ
ÿz CcmTests.test_unknown_parametersc                 C   s>   dD ]}t j| jt j| jd�}t||ƒdƒ}|  |d¡ qd S )N©r   r    r   r3   )r   r   r   r   r   Úgetattrr!   )r"   Úfuncr#   Úresultr   r   r   Útest_null_encryption_decryptionv   s
   ýz(CcmTests.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   r3   )	r   r   r   r   r   r   r/   r0   r    r>   r   r   r   Útest_either_encrypt_or_decrypt|   s   

z'CcmTests.test_either_encrypt_or_decryptc                 C   sP   t j| jt j| jd�}|  t|jd¡ t j| jt j| jd�}|  t|jd¡ d S )Nr   ztest1234567890-*)	r   r   r   r   r   r/   r0   r   r    r>   r   r   r   Útest_data_must_be_bytes…   s   z CcmTests.test_data_must_be_bytesc              	   C   s´   t dddƒD ]}| jttj| jtj| j|d� qt dddƒD ]}tj| jtj| j|d�}| | j	¡\}}|  
t|ƒ|¡ qtj| jtj| jd�}| | j	¡\}}|  
t|ƒd¡ d S )	Né   é   é   )r   Úmac_lené   é   r   r   )r9   r/   r8   r   r   r   r   r   Úencrypt_and_digestr   r!   r)   )r"   rN   r#   Ú_Úmacr   r   r   Útest_mac_lenŒ   s   ÿÿzCcmTests.test_mac_lenc                 C   sh   ddl m} tj| jtj| jd�}| | j¡\}}||dƒ}tj| jtj| jd�}|  	t
|j||¡ d S )Nr   )Ústrxor_cr   r4   )ÚCryptodome.Util.strxorrU   r   r   r   r   r   rQ   r   r/   r8   Údecrypt_and_verify)r"   rU   r#   r%   rS   Úinvalid_macr   r   r   Útest_invalid_macž   s   
ÿzCcmTests.test_invalid_macc                 C   sV   t j| jt j| jd�}| ¡ }|  | ¡ t|ƒ¡ t j| jt j| jd�}| 	|¡ d S r<   )
r   r   r   r   r   Ú	hexdigestr!   Údigestr   Ú	hexverify)r"   r#   Úmac_hexr   r   r   Útest_hex_mac©   s
   zCcmTests.test_hex_macc                 C   sV   t j| jt j| jdd�}|  t|jd¡ t j| jt j| jdd�}|  t|j| j¡ d S )Nr   ©r   Ú	assoc_lenó   1é   )	r   r   r   r   r   r/   r8   Úupdater   r>   r   r   r   Ú$test_longer_assoc_data_than_declared±   s   ÿÿz-CcmTests.test_longer_assoc_data_than_declaredc                 C   s  t | jƒ}tj| jtj| j|d d�}| | j¡ |  t	|j
| j¡ tj| jtj| j|d d�}| | j¡ |  t	|j¡ tj| jtj| j|d d�}| | j¡ |  t	|j| j¡ tj| jtj| jd�}| | j¡ | ¡ }tj| jtj| j|d d�}| | j¡ |  t	|j|¡ d S )Nr4   r_   r   )r)   r   r   r   r   r   r   rc   r/   r8   r   r[   r    Úverify)r"   ÚDATA_LENr#   rS   r   r   r   Ú%test_shorter_assoc_data_than_expected¼   s0   
ÿÿÿÿz.CcmTests.test_shorter_assoc_data_than_expectedc                 C   sr   t | jƒ}tj| jtj| j|d d�}| | j¡ |  t	|j
¡ tj| jtj| j|d d�}|  t	|j| j¡ d S )Nr4   ©r   Úmsg_len)r)   r   r   r   r   r   r   r   r/   r8   r[   )r"   rf   r#   r   r   r   Ú/test_shorter_and_longer_plaintext_than_declaredÛ   s   
ÿÿz8CcmTests.test_shorter_and_longer_plaintext_than_declaredc                 C   s–   t | jƒ}tj| jtj| jd�}| | j¡\}}tj| jtj| j|d d�}| |¡ |  	t
|j|¡ tj| jtj| j|d d�}|  	t
|j|¡ d S )Nr   r4   rh   )r)   r   r   r   r   r   r   rQ   r    r/   r8   re   )r"   rf   r#   r%   rS   r   r   r   Ú%test_shorter_ciphertext_than_declaredç   s   
ÿ
ÿz.CcmTests.test_shorter_ciphertext_than_declaredc                 C   s@  t ddƒ}t ddƒ}tj| jtj| jd�}| |¡ | |¡\}}dd„ }dD ]8}tj| jtj| jddd�}|||ƒD ]}| |¡ q;d	}	|||ƒD ]	}|	| |¡7 }	qJ|  	||	¡ | 
|¡ q'dD ];}tj| jtj| jddd�}|||ƒD ]}| |¡ qvd	}
|||ƒD ]	}|
| |¡7 }
q…|  	||
¡ |  	| ¡ |¡ qbd S )
Nzauthenticated dataé   r   r   c                    s    ‡ ‡fdd„t dtˆƒˆ ƒD ƒS )Nc                    s   g | ]
}ˆ||ˆ  … ‘qS r   r   )Ú.0Úi©Úchunk_lengthr   r   r   Ú
<listcomp>  s    zBCcmTests.test_message_chunks.<locals>.break_up.<locals>.<listcomp>r   )r9   r)   )r   rp   r   ro   r   Úbreak_up  s   ÿz.CcmTests.test_message_chunks.<locals>.break_up)
r4   rM   rK   r7   é
   é   r   é(   éP   r   ©r   ri   r`   r3   )r   r   r   r   r   r   rc   rQ   r    r!   re   r   r[   )r"   Ú	auth_datar   r#   Ú
ciphertextÚref_macrr   rp   Úchunkr&   Úct2r   r   r   Útest_message_chunksö   s:   


ÿÿõzCcmTests.test_message_chunksc                 C   sj  t | jƒ}t | jƒ}t | jƒ}t | jƒ}tj| jtj| jd�}| | j¡ | | j¡}| 	¡ }tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | |¡}	d|d d…< | 	¡ }
|  
||	¡ |  
||
¡ |  
|j|j¡ t | jƒ}t | jƒ}t | jƒ}~tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | t |	ƒt |
ƒ¡}|  
| j|¡ d S ©Nr   s   ÿÿÿrK   )Ú	bytearrayr   r   r   r   r   r   rc   r   r[   r!   r   rW   )r"   Úkey_baÚnonce_baÚ	header_baÚdata_baÚcipher1r%   r   Úcipher2Úct_testÚtag_testÚcipher4Úpt_testr   r   r   Útest_bytearray!  sN   



þþ




þ
zCcmTests.test_bytearrayc                 C   s†  t t| jƒƒ}t t| jƒƒ}t t| jƒƒ}t t| jƒƒ}tj| jtj| jd�}| | j¡ | 	| j¡}| 
¡ }tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | 	|¡}	d|d d…< | 
¡ }
|  ||	¡ |  ||
¡ |  |j|j¡ t t| jƒƒ}t t| jƒƒ}t t| jƒƒ}~tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | t |	ƒt |
ƒ¡}|  | j|¡ d S r~   )Ú
memoryviewr   r   r   r   r   r   r   rc   r   r[   r!   r   rW   )r"   Úkey_mvÚnonce_mvÚ	header_mvÚdata_mvr„   r%   r   r…   r†   r‡   rˆ   r‰   r   r   r   Útest_memoryviewP  sN   þþ

þ
zCcmTests.test_memoryviewc                 C   s:  d}t j| jt j| jd�}| |¡}| ¡ }tdƒ}t j| jt j| jd�}|j||d�}|  ||¡ |  |d ¡ t j| jt j| jd�}|j	||d�}|  ||¡ |  |d ¡ t j| jt j| jd�}|j
||d�\}}|  ||¡ |  |d ¡ |  ||¡ t j| jt j| jd�}|j|||d�}|  ||¡ |  |d ¡ d S ©Ns€   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r   r   ©Úoutput)r   r   r   r   r   r   r[   r   r!   r    rQ   rW   )r"   r$   r#   r%   r   r“   ÚresÚtag_outr   r   r   Útest_output_param  s,   
zCcmTests.test_output_paramc                 C   s”   d}t j| jt j| jd�}| |¡}ttdƒƒ}t j| jt j| jd�}|j||d� |  ||¡ t j| jt j| jd�}|j	||d� |  ||¡ d S r‘   )
r   r   r   r   r   r   r‹   r   r!   r    )r"   r$   r#   r%   r“   r   r   r   Útest_output_param_memoryviewœ  s   
z%CcmTests.test_output_param_memoryviewc                 C   sØ   d}t j| jt j| jd�}| |¡}t j| jt j| jd�}| jt|j|dd� t j| jt j| jd�}| jt|j|dd� t	dƒ}t j| jt j| jd�}| jt
|j||d� t j| jt j| jd�}| jt
|j||d� d S )Ns   5555555555555555r   s   0000000000000000r’   rb   )r   r   r   r   r   r   r/   r0   r    r   r8   )r"   r$   r#   r%   Úshorter_outputr   r   r   Útest_output_param_neg«  s   
zCcmTests.test_output_param_negc              	   C   s    d}| j ttj| jtj|ddd� d}| j ttj| jtj|ddd� d}tj| jtj|d�}|   t|jdd ¡ d}tj| jtj|d�}|   t|jdd ¡ d S )	Ns   NNNNNNNNNNNNNé   i   ©r   r`   ri   s   NNNNNNNl            r   ó   C)r/   r   r   r   r   r   r   r    )r"   r   r#   r   r   r   Útest_message_too_long½  s<   úúþþzCcmTests.test_message_too_longN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r'   r-   r2   r;   r?   r@   rC   rH   rI   rJ   rT   rY   r^   rd   rg   rj   rk   r}   rŠ   r�   r–   r—   r™   r�   r   r   r   r   r   1   s8    


	

	+//r   c                   @   sŠ   e Z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S )ÚCcmFSMTestsr   r   r   r   r   c              	   C   s~   dD ]:}d t | jƒfD ]0}tj| jtj| j||d�}| | j¡}| ¡ }tj| jtj| j||d�}| 	|¡ | 
|¡ qqd S ©N)Nr   r›   )r)   r   r   r   r   r   r   r   r[   r    re   ©r"   r`   ri   r#   r%   rS   r   r   r   Ú-test_valid_init_encrypt_decrypt_digest_verifyä  s$   ýý
ñÿz9CcmFSMTests.test_valid_init_encrypt_decrypt_digest_verifyc              	   C   s€   d t | jƒfD ]6}dD ]1}tj| jtj| j||d�}| | j¡ | ¡ }tj| jtj| j||d�}| | j¡ | 	|¡ qqd S r¢   )
r)   r   r   r   r   r   r   rc   r[   re   )r"   r`   ri   r#   rS   r   r   r   Ú$test_valid_init_update_digest_verifyø  s$   ýýñÿz0CcmFSMTests.test_valid_init_update_digest_verifyc              	   C   s    d t | jƒfD ]F}d t | jƒfD ]<}tj| jtj| j||d�}| | j¡ | | j¡}| 	¡ }tj| jtj| j||d�}| | j¡ | 
|¡ | |¡ qqd S )Nr›   )r)   r   r   r   r   r   r   rc   r   r[   r    re   r£   r   r   r   Útest_valid_full_path  s(   ýý
ïÿz CcmFSMTests.test_valid_full_pathc                 C   s"   t j| jt j| jd�}| ¡  d S r<   )r   r   r   r   r   r[   r>   r   r   r   Útest_valid_init_digest"  s   z"CcmFSMTests.test_valid_init_digestc                 C   sB   t j| jt j| jd�}| ¡ }t j| jt j| jd�}| |¡ d S r<   )r   r   r   r   r   r[   re   )r"   r#   rS   r   r   r   Útest_valid_init_verify'  s   z"CcmFSMTests.test_valid_init_verifyc              	   C   sœ   dD ]I}d d| j | j d fD ]<}|d u rd }nt|ƒ}tj| jtj| jd|d�}|d ur1| |¡ t||ƒ}|| j ƒ || j ƒ || j ƒ || j ƒ qqd S )NrD   s   333ó   3é@   rw   )	r   r)   r   r   r   r   r   rc   rE   )r"   Úmethod_namerx   r`   r#   Úmethodr   r   r   Ú&test_valid_multiple_encrypt_or_decrypt/  s*   ÿý




ðÿz2CcmFSMTests.test_valid_multiple_encrypt_or_decryptc                 C   s†   t j| jt j| jd�}| | j¡ | ¡ }tdƒD ]
}|  	|| ¡ ¡ qt j| jt j| jd�}| | j¡ tdƒD ]}| 
|¡ q9d S )Nr   rO   é   )r   r   r   r   r   rc   r   r[   r9   r!   re   )r"   r#   Ú	first_macr:   r   r   r   Ú$test_valid_multiple_digest_or_verifyD  s   ÿz0CcmFSMTests.test_valid_multiple_digest_or_verifyc                 C   sr   t j| jt j| jd�}| | j¡ | | j¡\}}t j| jt j| jd�}| | j¡ | ||¡}|  	| j|¡ d S r<   )
r   r   r   r   r   rc   r   rQ   rW   r!   )r"   r#   r%   rS   r$   r   r   r   Ú0test_valid_encrypt_and_digest_decrypt_and_verifyR  s   z<CcmFSMTests.test_valid_encrypt_and_digest_decrypt_and_verifyc                 C   sb   dD ],}dD ]'}t j| jt j| jd�}|r| | j¡ t||ƒ}|| jƒ |  t	|| j¡ qqd S )NrD   ©TFr   ©
r   r   r   r   r   rc   r   rE   r/   r0   )r"   r«   Úassoc_data_presentr#   r¬   r   r   r   Ú5test_invalid_multiple_encrypt_decrypt_without_msg_len^  s   ÿ

ùÿzACcmFSMTests.test_invalid_multiple_encrypt_decrypt_without_msg_lenc                 C   sj   dD ]0\}}dD ])}t j| jt j| jdd�}|r| | j¡ t||ƒ| jƒ |  t	t||ƒ| j¡ qqd S )N)rD   )r    r   r²   é    rh   r³   )r"   Úmethod1_nameÚmethod2_namer´   r#   r   r   r   Ú#test_invalid_mixing_encrypt_decryptj  s   þÿùþz/CcmFSMTests.test_invalid_mixing_encrypt_decryptc                 C   sp   dD ]3}t j| jt j| jd�}| | j¡ | ¡  |  t	t
||ƒ| j¡ t j| jt j| jd�}| | j¡ qd S )N)r   rc   r   )r   r   r   r   r   r   r   r[   r/   r0   rE   rQ   )r"   r«   r#   r   r   r   Ú+test_invalid_encrypt_or_update_after_digestx  s   ÿøz7CcmFSMTests.test_invalid_encrypt_or_update_after_digestc                 C   s°   t j| jt j| jd�}| | j¡}| ¡ }dD ]>}t j| jt j| jd�}| |¡ | 	|¡ |  
tt||ƒ| j¡ t j| jt j| jd�}| ||¡ |  
tt||ƒ| j¡ qd S )Nr   )r    rc   )r   r   r   r   r   r   r   r[   r    re   r/   r0   rE   rW   )r"   r#   r%   rS   r«   r   r   r   Ú+test_invalid_decrypt_or_update_after_verifyƒ  s    

ÿÿ÷z7CcmFSMTests.test_invalid_decrypt_or_update_after_verifyN)rž   rŸ   r    r   r   r   r   r¤   r¥   r¦   r§   r¨   r­   r°   r±   rµ   r¹   rº   r»   r   r   r   r   r¡   Þ  s     


r¡   c                   @   sˆ   e Zd ZdZdddd dd„ edd	ƒD ƒ¡d
 dddddfddddddddddddddddd d!d"d#d$d%d&d'gZd(d„ eD ƒZd)d*„ Zd+S ),ÚTestVectorsz`Class exercising the CCM test vectors found in Appendix C
    of NIST SP 800-38C and in RFC 3610)Ú0001020304050607Ú20212223Ú7162015bÚ4dac255dÚ 404142434445464748494a4b4c4d4e4fÚ10111213141516)Ú 000102030405060708090a0b0c0d0e0fÚ 202122232425262728292a2b2c2d2e2fÚ d2a1f0e051ea5f62081a7792073d593dÚ1fc64fbfaccdrÁ   Ú1011121314151617)Ú(000102030405060708090a0b0c0d0e0f10111213Ú0202122232425262728292a2b2c2d2e2f3031323334353637Ú0e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5Ú484392fbc1b09951rÁ   Ú101112131415161718191a1bÚ c                 C   s,   g | ]}t d dƒD ]
}d|d |  ‘q	qS )r   r   z%02X)r9   )rm   r:   Úyr   r   r   rq   ´  s   , zTestVectors.<listcomp>r   r   é   Ú@202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3fÚ@69915dad1e84c6376a68c2967e4dab615ae0fd1faec44cc484828529463ccf72Úb4ac6bec93e8598e7f0dadbcea5brÁ   Ú101112131415161718191a1b1c)r½   Ú.08090a0b0c0d0e0f101112131415161718191a1b1c1d1eÚ.588c979a61c663d2f066d0c2c0f989806d5f6b61dac384Ú17e8d12cfdf926e0Ú c0c1c2c3c4c5c6c7c8c9cacbcccdcecfÚ00000003020100a0a1a2a3a4a5)r½   Ú008090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fÚ072c91a36e135f8cf291ca894085c87e3cc15c439c9e43a3bÚa091d56e10400916r×   Ú00000004030201a0a1a2a3a4a5)r½   Ú208090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20Ú251b1e5f44a197d1da46b0f8e2d282ae871e838bb64da859657Ú4adaa76fbd9fb0c5r×   Ú00000005040302A0A1A2A3A4A5)Ú000102030405060708090a0bÚ&0c0d0e0f101112131415161718191a1b1c1d1eÚ&a28c6865939a9a79faaa5c4c2a9d4a91cdac8cÚ96c861b9c9e61ef1r×   Ú00000006050403a0a1a2a3a4a5)rá   Ú(0c0d0e0f101112131415161718191a1b1c1d1e1fÚ(dcf1fb7b5d9e23fb9d4e131253658ad86ebdca3eÚ51e83f077d9c2d93r×   Ú00000007060504a0a1a2a3a4a5)rá   Ú*0c0d0e0f101112131415161718191a1b1c1d1e1f20Ú*6fc1b011f006568b5171a42d953d469b2570a4bd87Ú405a0443ac91cb94r×   Ú00000008070605a0a1a2a3a4a5)r½   rÔ   Ú.0135d1b2c95f41d5d1d4fec185d166b8094e999dfed96cÚ048c56602c97acbb7490r×   Ú00000009080706a0a1a2a3a4a5)r½   rÙ   Ú07b75399ac0831dd2f0bbd75879a2fd8f6cae6b6cd9b7db24Úc17b4433f434963f34b4r×   Ú0000000a090807a0a1a2a3a4a5)r½   rÝ   Ú282531a60cc24945a4b8279181ab5c84df21ce7f9b73f42e197Úea9c07e56b5eb17e5f4er×   Ú0000000b0a0908a0a1a2a3a4a5)rá   râ   Ú&07342594157785152b074098330abb141b947bÚ566aa9406b4d999988ddr×   Ú0000000c0b0a09a0a1a2a3a4a5)rá   ræ   Ú(676bb20380b0e301e8ab79590a396da78b834934Úf53aa2e9107a8b6c022cr×   Ú0000000d0c0b0aa0a1a2a3a4a5)rá   rê   Ú*c0ffa0d6f05bdb67f24d43a4338d2aa4bed7b20e43Úcd1aa31662e7ad65d6dbr×   Ú0000000e0d0c0ba0a1a2a3a4a5)Ú0be1a88bace018b1Ú.08e8cf97d820ea258460e96ad9cf5289054d895ceac47cÚ.4cb97f86a2a4689a877947ab8091ef5386a6ffbdd080f8Úe78cf7cb0cddd7b3Ú d7828d13b2b0bdc325a76236df93cc6bÚ00412b4ea9cdbe3c9696766cfa)Ú63018f76dc8a1bcbÚ09020ea6f91bdd85afa0039ba4baff9bfb79c7028949cd0ecÚ04ccb1e7ca981befaa0726c55d378061298c85c92814abc33Úc52ee81d7d77c08ar  Ú0033568ef7b2633c9696766cfa)Úaa6cfa36cae86b40Ú2b916e0eacc1c00d7dcec68ec0b3bbb1a02de8a2d1aa346132eÚ2b1d23a2220ddc0ac900d9aa03c61fcf4a559a4417767089708Úa776796edb723506r  Ú00103fe41336713c9696766cfa)Úd0d0735c531e1becf049c244Ú&12daac5630efa5396f770ce1a66b21f7b2101cÚ&14d253c3967b70609b7cbb7c49916028324526Ú9a6f49975bcadeafr  Ú00764c63b8058e3c9696766cfa)Ú77b60f011c03e1525899bcaeÚ(e88b6a46c78d63e52eb8c546efb5de6f75e9cc0dÚ(5545ff1a085ee2efbf52b2e04bee1e2336c73e3fÚ762c0c7744fe7e3cr  Ú00f8b678094e3b3c9696766cfa)Úcd9044d2b71fdb8120ea60c0Ú*6435acbafb11a82e2f071d7ca4a5ebd93a803ba87fÚ*009769ecabdf48625594c59251e6035722675e04c8Ú47099e5ae0704551r  Ú00d560912d3f703c9696766cfa)Úd85bc7e69f944fb8Ú.8a19b950bcf71a018e5e6701c91787659809d67dbedd18Ú.bc218daa947427b6db386a99ac1aef23ade0b52939cb6aÚ637cf9bec2408897c6bar  Ú0042fff8f1951c3c9696766cfa)Ú74a0ebc9069f5b37Ú01761433c37c5a35fc1f39f406302eb907c6163be38c98437Ú05810e6fd25874022e80361a478e3e9cf484ab04f447efff6Úf0a477cc2fc9bf548944r  Ú00920f40e56cdc3c9696766cfa)Ú44a3aa3aae6475caÚ2a434a8e58500c6e41530538862d686ea9e81301b5ae4226bfaÚ2f2beed7bc5098e83feb5b31608f8e29c38819a89c8e776f154Ú4d4151a4ed3a8b87b9cer  Ú0027ca0c7120bc3c9696766cfa)Úec46bb63b02520c33c49fd70Ú&b96b49e21d621741632875db7f6c9243d2d7c2Ú&31d750a09da3ed7fddd49a2032aabf17ec8ebfÚ7d22c8088c666be5c197r  Ú005b8ccbcd9af83c9696766cfa)Ú47a65ac78b3d594227e85e71Ú(e2fcfbb880442c731bf95167c8ffd7895e337076Ú(e882f1dbd38ce3eda7c23f04dd65071eb41342acÚdf7e00dccec7ae52987dr  Ú003ebe94044b9a3c9696766cfa)Ú6e37a6ef546d955d34ab6059Ú*abf21c0b02feb88f856df4a37381bce3cc128517d4Ú*f32905b88a641b04b9c9ffb58cc390900f3da12ab1Ú6dce9e82efa16da62059r  Ú008d493b30ae8b3c9696766cfac                 C   s   g | ]	}d d„ |D ƒ‘qS )c                 S   s   g | ]}t |ƒ‘qS r   r   )rm   r:   r   r   r   rq   N  s    z!TestVectors.<listcomp>.<listcomp>r   )rm   Útvr   r   r   rq   N  s    c                 C   sž   | j D ]I\}}}}}}tj|tj|t|ƒd�}| |¡ | |¡\}}	|  ||¡ |  ||	¡ tj|tj|t|ƒd�}| |¡ | ||¡}
|  ||
¡ qd S )N)rN   )	Útest_vectorsr   r   r   r)   rc   rQ   r!   rW   )r"   Ú
assoc_datar$   r%   rS   Úkeyr   r#   r|   Úmac2r&   r   r   r   ÚrunTestP  s   

ôzTestVectors.runTestN)	rž   rŸ   r    Ú__doc__Újoinr9   Útest_vectors_hexr>  rB  r   r   r   r   r¼   •  sR    û �Ù /r¼   c                   @   sL   e Z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S )ÚTestVectorsWycheproofc                 K   s"   t j | ¡ || _|| _d| _d S )NÚNone)ÚunittestÚTestCaseÚ__init__Ú_wycheproof_warningsÚ_extra_paramsÚ_id)r"   Úwycheproof_warningsÚextra_paramsr   r   r   rJ  b  s   
zTestVectorsWycheproof.__init__c                 C   s"   dd„ }t dddd|id�| _d S )Nc                 S   s   | d d S )NÚtagSizeé   r   )Úgroupr   r   r   Ú
filter_tagj  s   z/TestVectorsWycheproof.setUp.<locals>.filter_tag)ÚCipherÚ
wycheproofzaes_ccm_test.jsonzWycheproof AES CCMÚtag_size)Ú	group_tag)r   r=  )r"   rS  r   r   r   ÚsetUph  s   ýzTestVectorsWycheproof.setUpc                 C   s   | j S ©N)rM  r1   r   r   r   ÚshortDescriptionr  s   z&TestVectorsWycheproof.shortDescriptionc                 C   s6   |j r| jrdd l}| d| j|jf ¡ d S d S d S )Nr   zWycheproof warning: %s (%s))ÚwarningrK  ÚwarningsÚwarnrM  Úcomment)r"   r=  r\  r   r   r   r]  u  s   þzTestVectorsWycheproof.warnc              
   C   s  dt |jƒ | _ztj|jtj|jfd|ji| j	¤Ž}W nF t
yb } z:t|jƒtdddƒvrAdt |ƒv rA|jr:J ‚W Y d }~d S |jtdddƒvr\d	t |ƒv r\|jrUJ ‚W Y d }~d S |‚d }~ww | |j¡ | |j¡\}}|jr‰|  ||j¡ |  ||j¡ |  |¡ d S d S )
NzWycheproof Encrypt CCM Test #rN   r7   r6   rM   úLength of parameter 'nonce'rO   rP   úParameter 'mac_len')ÚstrÚidrM  r   r   r@  r   ÚivrV  rL  r8   r)   r9   Úvalidrc   ÚaadrQ   Úmsgr!   r%   r   r]  )r"   r=  r#   Úer%   r   r   r   r   Útest_encryptz  s,   
ÿ"

€ù	ýz"TestVectorsWycheproof.test_encryptc              
   C   s,  dt |jƒ | _ztj|jtj|jfd|ji| j	¤Ž}W nF t
yb } z:t|jƒtdddƒvrAdt |ƒv rA|jr:J ‚W Y d }~d S |jtdddƒvr\d	t |ƒv r\|jrUJ ‚W Y d }~d S |‚d }~ww | |j¡ z
| |j|j¡}W n t
y‚   |jrJ ‚Y d S w |jsˆJ ‚|  ||j¡ |  |¡ d S )
NzWycheproof Decrypt CCM Test #rN   r7   r6   rM   r_  rO   rP   r`  )ra  rb  rM  r   r   r@  r   rc  rV  rL  r8   r)   r9   rd  rc   re  rW   r%   r   r!   rf  r]  )r"   r=  r#   rg  r$   r   r   r   Útest_decrypt�  s0   
ÿ"

€ù	ÿ
z"TestVectorsWycheproof.test_decryptc                 C   sž   dt |jƒ | _t|jƒtdddƒvst|jƒdkrd S tj|j	tj
|jfd|ji| j¤Ž}| |j¡ t|jdt|jƒd  d	 ƒ}|  t|j||j¡ d S )
Nz%Wycheproof Corrupt Decrypt CCM Test #r7   r6   rM   r   rN   ó    r4   ó   )ra  rb  rM  r)   rc  r9   r%   r   r   r@  r   rV  rL  rc   re  r
   r/   r8   rW   r   )r"   r=  r#   Ú
ct_corruptr   r   r   Útest_corrupt_decrypt©  s   $ÿz*TestVectorsWycheproof.test_corrupt_decryptc                 C   s.   | j D ]}|  |¡ |  |¡ |  |¡ qd S rY  )r=  rh  ri  rm  )r"   r=  r   r   r   rB  ³  s
   


ýzTestVectorsWycheproof.runTestN)rž   rŸ   r    rJ  rX  rZ  r]  rh  ri  rm  rB  r   r   r   r   rF  `  s    

rF  c                 C   sD   |   d¡}g }|ttƒ7 }|ttƒ7 }|tƒ g7 }|t|ƒg7 }|S )NrN  )Úgetr   r   r¡   r¼   rF  )ÚconfigrN  Útestsr   r   r   Ú	get_tests»  s   
rq  Ú__main__c                   C   s   t  tƒ ¡ d S rY  )rH  Ú	TestSuiterq  r   r   r   r   ÚsuiteÈ  s   rt  )ÚdefaultTest)rH  Úbinasciir   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.SelfTest.loaderr   ÚCryptodome.Util.py3compatr   r   ÚCryptodome.Cipherr   ÚCryptodome.Hashr	   rV   r
   ÚCryptodome.Cipher._mode_ccmr   r   rI  r   r¡   r¼   rF  rq  rž   rt  Úmainr   r   r   r   Ú<module>   s0      0 8 L[ý