
    ¿igԑ                     F   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	 Z G d
 de j                  Z G d de j                  Z G d de j                  Z G d de j                  Zi fdZedk    rd Z e j        d           dS dS )    N	unhexlify)list_test_cases)load_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128)strxorc                 l    t          j        t          |                                         |          S )N)data)r
   newr   read)taglengths     _/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Cipher/test_CCM.pyget_tag_randomr   +   s)    <WS\\***//777    c                       e Zd Z edd          Z edd          Z edd          Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )CcmTestskey_128   	nonce_128   r      c                 R   t          j        | j        t           j        | j                  }t          dd          }|                    |          }t          j        | j        t           j        | j                  }|                    |          }|                     ||           d S )Nnonce	plaintexti@  )	r	   r   r   MODE_CCMnonce_96r   encryptdecryptassertEqual)selfcipherptctpt2s        r   test_loopback_128zCcmTests.test_loopback_1285   s    s|4=IIIK22^^Bs|4=IIInnR  S!!!!!r   c                 ^   t          j        | j        t           j                  }|j        }t          j        | j        t           j                  }|j        }|                     t          |          d           |                     ||           t          j        | j        t           j        | j                  }|	                    | j
                  }t          j        | j        t           j        | j                  }|                     ||	                    | j
                             d S )N   r   )r	   r   r   r    r   r$   lenassertNotEqualr!   r"   r   )r%   r&   nonce1nonce2r(   s        r   
test_noncezCcmTests.test_nonce>   s    s|44s|44Vb)))FF+++s|T]CC^^DI&&s|4=IIIV^^DI6677777r   c                 v    |                      t          t          j        | j        t          j        d           d S )Ntest12345678r   )assertRaises	TypeErrorr	   r   r   r    r%   s    r   test_nonce_must_be_bytesz!CcmTests.test_nonce_must_be_bytesM   s:    )SWdlCL / 	 	1 	1 	1 	1 	1r   c           	      (   |                      t          t          j        | j        t          j        d           |                      t          t          j        | j        t          j        t          d          dz             |                      t          t          j        | j        t          j        t          d          dz             t          dd          D ]8}t          j        | j        t          j        t          d          |z             9d S )Nr   r               )r4   
ValueErrorr	   r   r   r    r   range)r%   xs     r   test_nonce_lengthzCcmTests.test_nonce_lengthQ   s    *cgt|S\ # 	 	% 	% 	%*cgt|S\ $Q! 	 	- 	- 	-*cgt|S\ $Q" 	 	. 	. 	.q&!! 	C 	CAGDL#,d1ggkBBBBB	C 	Cr   c                     t          j        | j        t           j        | j                  }|                     |j        t           j                   d S Nr   )r	   r   r   r    r!   r$   
block_sizer%   r&   s     r   test_block_sizezCcmTests.test_block_size[   s?    s|4=III*CN;;;;;r   c                    t          j        | j        t           j        | j                  }|                     |j        | j                   t          j        | j        t           j                  j        }t          j        | j        t           j                  j        }|                     t          |          d           |                     ||           d S )Nr   r,   )	r	   r   r   r    r!   r$   r   r-   r.   )r%   r&   r/   r0   s       r   test_nonce_attributezCcmTests.test_nonce_attribute_   s    s|4=IIIt}555 s|44:s|44:Vb)))FF+++++r   c                 T   |                      t          t          j        | j        t          j        | j        d           |                      t          t          j        | j        t          j        | j        d           t          j        | j        t          j        | j        d           d S )Nr<   )r   unknownF)r   	use_aesni)r4   r5   r	   r   r   r    r!   r6   s    r   test_unknown_parametersz CcmTests.test_unknown_parametersi   s    )SWdlCL-	, 	, 	,)SWdlCL $q 	 	: 	: 	:
 	cl$-	! 	! 	! 	! 	! 	!r   c                     dD ]\}t          j        | j        t           j        | j                  } t          ||          d          }|                     |d           ]d S )Nr"   r#   r   r   )r	   r   r   r    r!   getattrr$   )r%   funcr&   results       r   test_null_encryption_decryptionz(CcmTests.test_null_encryption_decryptiont   si    ( 	* 	*DWT\3<t}MMMF*WVT**3//FVS))))	* 	*r   c                    t          j        | j        t           j        | j                  }|                    d           |                     t          |j        d           t          j        | j        t           j        | j                  }|                    d           |                     t          |j        d           d S )Nr   r   )	r	   r   r   r    r!   r"   r4   r5   r#   rD   s     r   test_either_encrypt_or_decryptz'CcmTests.test_either_encrypt_or_decryptz   s    s|4=IIIs)V^S999s|4=IIIs)V^S99999r   c                 6   t          j        | j        t           j        | j                  }|                     t          |j        d           t          j        | j        t           j        | j                  }|                     t          |j        d           d S )Nr   ztest1234567890-*)	r	   r   r   r    r!   r4   r5   r"   r#   rD   s     r   test_data_must_be_bytesz CcmTests.test_data_must_be_bytes   sv    s|4=III)V^5HIIIs|4=III)V^5HIIIIIr   c           	         t          ddd          D ]@}|                     t          t          j        | j        t          j        | j        |           At          ddd          D ]n}t          j        | j        t          j        | j        |          }|                    | j	                  \  }}| 
                    t          |          |           ot          j        | j        t          j        | j                  }|                    | j	                  \  }}| 
                    t          |          d           d S )	N         )r   mac_len      r   r   )r>   r4   r=   r	   r   r   r    r!   encrypt_and_digestr   r$   r-   )r%   rZ   r&   _macs        r   test_mac_lenzCcmTests.test_mac_len   s-   Q** 	D 	DGj#'4<$(M7  D D D D Q** 	0 	0GWT\3<t}%,. . .F..ty99FAsSXXw//// s|4=III**49553S2&&&&&r   c                 T   ddl m} t          j        | j        t          j        | j                  }|                    | j                  \  }} ||d          }t          j        | j        t          j        | j                  }| 	                    t          |j        ||           d S )Nr   )strxor_cr   r9   )Cryptodome.Util.strxorrb   r	   r   r   r    r!   r]   r   r4   r=   decrypt_and_verify)r%   rb   r&   r(   r_   invalid_macs         r   test_invalid_maczCcmTests.test_invalid_mac   s    333333s|4=III++DI66ChsD))s|4=III*f&?%	' 	' 	' 	' 	'r   c                 n   t          j        | j        t           j        | j                  }|                                }|                     |                                t          |                     t          j        | j        t           j        | j                  }|	                    |           d S rB   )
r	   r   r   r    r!   	hexdigestr$   digestr   	hexverify)r%   r&   mac_hexs      r   test_hex_maczCcmTests.test_hex_mac   s    s|4=III""$$)G*<*<===s|4=III!!!!!r   c                 D   t          j        | j        t           j        | j        d          }|                     t          |j        d           t          j        | j        t           j        | j        d          }|                     t          |j        | j                   d S )Nr   r   	assoc_len   1   )	r	   r   r   r    r!   r4   r=   updater   rD   s     r   $test_longer_assoc_data_than_declaredz-CcmTests.test_longer_assoc_data_than_declared   s    s|4=#$& & &*fmT::: s|4=#%' ' '*fmTY?????r   c                 B   t          | j                  }t          j        | j        t          j        | j        |dz             }|                    | j                   |                     t          |j
        | j                   t          j        | j        t          j        | j        |dz             }|                    | j                   |                     t          |j                   t          j        | j        t          j        | j        |dz             }|                    | j                   |                     t          |j        | j                   t          j        | j        t          j        | j                  }|                    | j                   |                                }t          j        | j        t          j        | j        |dz             }|                    | j                   |                     t          |j        |           d S )Nr9   rn   r   )r-   r   r	   r   r   r    r!   rr   r4   r=   r"   ri   r#   verify)r%   DATA_LENr&   r_   s       r   %test_shorter_assoc_data_than_expectedz.CcmTests.test_shorter_assoc_data_than_expected   s   ty>> s|4=#+a<1 1 1di   *fndi@@@ s|4=#+a<1 1 1di   *fm444 s|4=#+a<1 1 1di   *fndi@@@ s|4=IIIdi   mmoos|4=#+a<1 1 1di   *fmS99999r   c                    t          | j                  }t          j        | j        t          j        | j        |dz             }|                    | j                   |                     t          |j
                   t          j        | j        t          j        | j        |dz
            }|                     t          |j        | j                   d S )Nr9   r   msg_len)r-   r   r	   r   r   r    r!   r"   r4   r=   ri   )r%   rv   r&   s      r   /test_shorter_and_longer_plaintext_than_declaredz8CcmTests.test_shorter_and_longer_plaintext_than_declared   s    ty>>s|4=!)A/ / /ty!!!*fm444s|4=!)A/ / /*fndi@@@@@r   c                 (   t          | j                  }t          j        | j        t          j        | j                  }|                    | j                  \  }}t          j        | j        t          j        | j        |dz             }|                    |           | 	                    t          |j        |           t          j        | j        t          j        | j        |dz
            }| 	                    t          |j        |           d S )Nr   r9   ry   )r-   r   r	   r   r   r    r!   r]   r#   r4   r=   ru   )r%   rv   r&   r(   r_   s        r   %test_shorter_ciphertext_than_declaredz.CcmTests.test_shorter_ciphertext_than_declared   s    ty>>s|4=III++DI66Cs|4=!)A/ / /r*fmS999s|4=!)A/ / /*fnb99999r   c                    t          dd          }t          dd          }t          j        | j        t          j        | j                  }|                    |           |                    |          \  }}d }dD ]}t          j        | j        t          j        | j        dd          } |||          D ]}|                    |           d}	 |||          D ]}|	|                    |          z  }	| 	                    ||	           |
                    |           dD ]}t          j        | j        t          j        | j        dd          } |||          D ]}|                    |           d}
 |||          D ]}|
|                    |          z  }
| 	                    ||
           | 	                    |                                |           d S )	Nzauthenticated data   r   r   c                 \      fdt          dt                               D             S )Nc                 *    g | ]}||z            S  r   ).0ichunk_lengthr   s     r   
<listcomp>zBCcmTests.test_message_chunks.<locals>.break_up.<locals>.<listcomp>   s3     # # #qD1\>)* # # #r   r   )r>   r-   )r   r   s   ``r   break_upz.CcmTests.test_message_chunks.<locals>.break_up   sJ    # # # # #E!SYY 5" 5" # # # #r   )
r9   rY   rW   r<   
      r   (   P   r   r   rz   ro   r   )r   r	   r   r   r    r!   rr   r]   r#   r$   ru   r"   ri   )r%   	auth_datar   r&   
ciphertextref_macr   r   chunkr)   ct2s              r   test_message_chunkszCcmTests.test_message_chunks   s*    ##7==	";44	s|4=IIIi   $77	BB
G	# 	# 	#
 @ 	# 	#LWT\3<t}%(C9 9 9F ")\:: % %e$$$$C!*l;; - -v~~e,,,Y,,,MM'"""" @ 	7 	7LWT\3<t}%(C9 9 9F ")\:: % %e$$$$C!)\:: - -v~~e,,,Z---V]]__g6666	7 	7r   c                    t          | j                  }t          | j                  }t          | j                  }t          | j                  }t	          j        | j        t          j        | j                  }|                    | j                   |                    | j                  }|	                                }t	          j        |t          j        |          }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<   |                    t          |	          t          |
                    }| 
                    | j        |           d S Nr   s   rW   )	bytearrayr   r!   r   r	   r   r    rr   r"   ri   r$   r   rd   )r%   key_banonce_ba	header_badata_bacipher1r(   r   cipher2ct_testtag_testcipher4pt_tests                r   test_bytearrayzCcmTests.test_bytearray  s:    4<((T]++di((	DI&&'$,, $/ / / 	ty!!!__TY''nn'&, (* * * %rr
&!y!!!'	"1"//'**%>>##W%%%h'''666 4<((T]++di((	'&, (* * * %rr
&!y!!!'	"1",,Yw-?-?8ATATUUG,,,,,r   c                 v   t          t          | j                            }t          t          | j                            }t          t          | j                            }t          t          | j                            }t          j        | j        t
          j        | j                  }|                    | j                   |	                    | j                  }|
                                }t          j        |t
          j        |          }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<   |                    t          |	          t          |
                    }|                     | j        |           d S r   )
memoryviewr   r   r!   r   r	   r   r    rr   r"   ri   r$   r   rd   )r%   key_mvnonce_mv	header_mvdata_mvr   r(   r   r   r   r   r   r   s                r   test_memoryviewzCcmTests.test_memoryviewN  sr    Idl3344i6677y3344	Yty1122'$,, $/ / / 	ty!!!__TY''nn'&, (* * * %rr
&!y!!!'	"1"//'**%>>##W%%%h'''666 Idl3344i6677y3344	'&, (* * * %rr
&!y!!!'	"1",,Z-@-@*XBVBVWWG,,,,,r   c                 t   d}t          j        | j        t           j        | j                  }|                    |          }|                                }t          d          }t          j        | j        t           j        | j                  }|                    ||          }|                     ||           |                     |d            t          j        | j        t           j        | j                  }|	                    ||          }|                     ||           |                     |d            t          j        | j        t           j        | j                  }|
                    ||          \  }}|                     ||           |                     |d            |                     ||           t          j        | j        t           j        | j                  }|                    |||          }|                     ||           |                     |d            d S Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r   r   output)r	   r   r   r    r!   r"   ri   r   r$   r#   r]   rd   )r%   r'   r&   r(   r   r   restag_outs           r   test_output_paramzCcmTests.test_output_param}  s   s|4=III^^Bmmoo3s|4=IIInnRn//V$$$d###s|4=IIInnRn//V$$$d###s|4=III00F0CCWV$$$d###g&&&s|4=III''C'??V$$$d#####r   c                 "   d}t          j        | j        t           j        | j                  }|                    |          }t          t          d                    }t          j        | j        t           j        | j                  }|                    ||           |                     ||           t          j        | j        t           j        | j                  }|	                    ||           |                     ||           d S r   )
r	   r   r   r    r!   r"   r   r   r$   r#   )r%   r'   r&   r(   r   s        r   test_output_param_memoryviewz%CcmTests.test_output_param_memoryview  s    s|4=III^^BIcNN++s|4=IIIr&)))V$$$s|4=IIIr&)))V$$$$$r   c                    d}t          j        | j        t           j        | j                  }|                    |          }t          j        | j        t           j        | j                  }|                     t          |j        |d           t          j        | j        t           j        | j                  }|                     t          |j        |d           t          d          }t          j        | j        t           j        | j                  }|                     t          |j        ||           t          j        | j        t           j        | j                  }|                     t          |j        ||           d S )Ns   5555555555555555r   s   0000000000000000r   rq   )r	   r   r   r    r!   r"   r4   r5   r#   r   r=   )r%   r'   r&   r(   shorter_outputs        r   test_output_param_negzCcmTests.test_output_param_neg  s1   s|4=III^^Bs|4=III)V^RHHHs|4=III)V^RHHH"2s|4=III*fnbPPPs|4=III*fnbPPPPPr   N)__name__
__module____qualname__r   r   r!   r   r*   r1   r7   r@   rE   rG   rK   rQ   rS   rU   r`   rf   rl   rs   rw   r{   r}   r   r   r   r   r   r   r   r   r   r   r   /   s       nY++G~k2..H>&#&&D" " "8 8 81 1 1C C C< < <, , ,	! 	! 	!* * *: : :J J J' ' '$	' 	' 	'" " "	@ 	@ 	@: : :>
A 
A 
A: : :)7 )7 )7V-- -- --^-- -- --^$ $ $:% % %Q Q Q Q Qr   r   c                       e Zd Z edd          Z edd          Z edd          Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd ZdS )CcmFSMTestsr   r   r   r   r   c           	         dD ]}d t          | j                  fD ]}t          j        | j        t          j        | j        ||          }|                    | j                  }|                                }t          j        | j        t          j        | j        ||          }|	                    |           |
                    |           d S N)Nr   r   ro   rz   )r-   r   r	   r   r   r    r!   r"   ri   r#   ru   r%   ro   rz   r&   r(   r_   s         r   -test_valid_init_encrypt_decrypt_digest_verifyz9CcmFSMTests.test_valid_init_encrypt_decrypt_digest_verify  s    " 	# 	#I #di..1 # #s|'+}+4)02 2 2 ^^DI..mmoo s|'+}+4)02 2 2 r"""c""""#	# 	#r   c           	         d t          | j                  fD ]}dD ]}t          j        | j        t          j        | j        ||          }|                    | j                   |                                }t          j        | j        t          j        | j        ||          }|                    | j                   |	                    |           d S r   )
r-   r   r	   r   r   r    r!   rr   ri   ru   )r%   ro   rz   r&   r_   s        r   $test_valid_init_update_digest_verifyz0CcmFSMTests.test_valid_init_update_digest_verify  s    DI/ 	# 	#I$ # #s|'+}+4)02 2 2 di(((mmoo s|'+}+4)02 2 2 di(((c""""#	# 	#r   c           	      :   d t          | j                  fD ]}d t          | j                  fD ]}t          j        | j        t          j        | j        ||          }|                    | j                   |                    | j                  }|	                                }t          j        | j        t          j        | j        ||          }|                    | j                   |
                    |           |                    |           d S )Nr   )r-   r   r	   r   r   r    r!   rr   r"   ri   r#   ru   r   s         r   test_valid_full_pathz CcmFSMTests.test_valid_full_path  s   DI/ 	# 	#I #di..1 # #s|'+}+4)02 2 2 di(((^^DI..mmoo s|'+}+4)02 2 2 di(((r"""c""""##	# 	#r   c                     t          j        | j        t           j        | j                  }|                                 d S rB   )r	   r   r   r    r!   ri   rD   s     r   test_valid_init_digestz"CcmFSMTests.test_valid_init_digest   s/    s|4=IIIr   c                    t          j        | j        t           j        | j                  }|                                }t          j        | j        t           j        | j                  }|                    |           d S rB   )r	   r   r   r    r!   ri   ru   )r%   r&   r_   s      r   test_valid_init_verifyz"CcmFSMTests.test_valid_init_verify  s_    s|4=IIImmoos|4=IIIcr   c           	         dD ]}d d| j         | j         dz   fD ]}|d }nt          |          }t          j        | j        t          j        | j        d|          }||                    |           t          ||          } || j                     || j                     || j                     || j                    d S )NrM   s   333   3@   r   )	r   r-   r	   r   r   r    r!   rr   rN   )r%   method_namer   ro   r&   methods         r   &test_valid_multiple_encrypt_or_decryptz2CcmFSMTests.test_valid_multiple_encrypt_or_decrypt  s    / 	" 	"K"FDI"i$.0 " "	$ $II #IIs|'+})++46 6 6 (MM),,, 55ty!!!ty!!!ty!!!ty!!!!!"	" 	"r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                                }t          d          D ]*}| 	                    ||                                           +t          j        | j        t           j        | j                  }|                    | j                   t          d          D ]}|
                    |           d S )Nr   r[      )r	   r   r   r    r!   rr   r   ri   r>   r$   ru   )r%   r&   	first_macr?   s       r   $test_valid_multiple_digest_or_verifyz0CcmFSMTests.test_valid_multiple_digest_or_verify"  s    s|4=IIIdi   MMOO	q 	9 	9AY8888 s|4=IIIdi   q 	% 	%AMM)$$$$	% 	%r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                    | j                  \  }}t          j        | j        t           j        | j                  }|                    | j                   |                    ||          }| 	                    | j        |           d S rB   )
r	   r   r   r    r!   rr   r   r]   rd   r$   )r%   r&   r(   r_   r'   s        r   0test_valid_encrypt_and_digest_decrypt_and_verifyz<CcmFSMTests.test_valid_encrypt_and_digest_decrypt_and_verify0  s    s|4=IIIdi   ++DI66C s|4=IIIdi   &&r3//B'''''r   c                 *   dD ]}dD ]}t          j        | j        t           j        | j                  }|r|                    | j                   t          ||          } || j                   |                     t          || j                   d S )NrM   TFr   
r	   r   r   r    r!   rr   r   rN   r4   r5   )r%   r   assoc_data_presentr&   r   s        r   5test_invalid_multiple_encrypt_decrypt_without_msg_lenzACcmFSMTests.test_invalid_multiple_encrypt_decrypt_without_msg_len<  s    / 	@ 	@K&3 @ @"s|'+}6 6 6% -MM$),,, 55ty!!!!!)VTY????@	@ 	@r   c           	      J   dD ]\  }}dD ]}t          j        | j        t           j        | j        d          }|r|                    | j                    t          ||          | j                   |                     t          t          ||          | j                   d S )N)rM   )r#   r"   r       ry   r   )r%   method1_namemethod2_namer   r&   s        r   #test_invalid_mixing_encrypt_decryptz/CcmFSMTests.test_invalid_mixing_encrypt_decryptH  s    +C 
	- 
	-&L,&3 - -"s|'+})+- - - & -MM$),,,---di888!!)WV\-J-J"&)- - - --
	- 
	-r   c                    dD ]}t          j        | j        t           j        | j                  }|                    | j                   |                                 |                     t          t          ||          | j                   t          j        | j        t           j        | j                  }|                    | j                   d S )N)r"   rr   r   )r	   r   r   r    r!   r"   r   ri   r4   r5   rN   r]   )r%   r   r&   s      r   +test_invalid_encrypt_or_update_after_digestz7CcmFSMTests.test_invalid_encrypt_or_update_after_digestV  s    . 	1 	1KWT\3<t}MMMFNN49%%%MMOOOi)E)E"i) ) ) WT\3<t}MMMF%%di0000	1 	1r   c                    t          j        | j        t           j        | j                  }|                    | j                  }|                                }dD ]}t          j        | j        t           j        | j                  }|                    |           |	                    |           | 
                    t          t          ||          | j                   t          j        | j        t           j        | j                  }|                    ||           | 
                    t          t          ||          | j                   d S )Nr   )r#   rr   )r	   r   r   r    r!   r"   r   ri   r#   ru   r4   r5   rN   rd   )r%   r&   r(   r_   r   s        r   +test_invalid_decrypt_or_update_after_verifyz7CcmFSMTests.test_invalid_decrypt_or_update_after_verifya  s&   s|4=III^^DI&&mmoo. 
	) 
	)KWT\3<t}MMMFNN2MM#i)E)E"i) ) ) WT\3<t}MMMF%%b#...i)E)E"i) ) ) )
	) 
	)r   N)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        nY++G~k2..H>&"%%D# # #(# # #(# # #,  
  " " "*% % %
( 
( 
(
@ 
@ 
@- - -	1 	1 	1) ) ) ) )r   r   c                       e Zd ZdZdddd                    d  edd          D                       d	z  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' eD             Z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)(000102030405060708090a0b0c0d0e0f101112130202122232425262728292a2b2c2d2e2f30313233343536370e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5484392fbc1b09951r   101112131415161718191a1b c                 J    g | ] }t          d d          D ]}d|dz  |z   z  !S )r   r   z%02X)r>   )r   r?   ys      r   r   zTestVectors.<listcomp>  s:    PPP!E!BKKPPqFad1f%PPPPr   r   r      @202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f@69915dad1e84c6376a68c2967e4dab615ae0fd1faec44cc484828529463ccf72b4ac6bec93e8598e7f0dadbcea5br   101112131415161718191a1b1c)r   .08090a0b0c0d0e0f101112131415161718191a1b1c1d1e.588c979a61c663d2f066d0c2c0f989806d5f6b61dac38417e8d12cfdf926e0 c0c1c2c3c4c5c6c7c8c9cacbcccdcecf00000003020100a0a1a2a3a4a5)r   008090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f072c91a36e135f8cf291ca894085c87e3cc15c439c9e43a3ba091d56e10400916r   00000004030201a0a1a2a3a4a5)r   208090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20251b1e5f44a197d1da46b0f8e2d282ae871e838bb64da859657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)63018f76dc8a1bcb09020ea6f91bdd85afa0039ba4baff9bfb79c7028949cd0ec04ccb1e7ca981befaa0726c55d378061298c85c92814abc33c52ee81d7d77c08ar*  0033568ef7b2633c9696766cfa)aa6cfa36cae86b402b916e0eacc1c00d7dcec68ec0b3bbb1a02de8a2d1aa346132e2b1d23a2220ddc0ac900d9aa03c61fcf4a559a4417767089708a776796edb723506r*  00103fe41336713c9696766cfa)d0d0735c531e1becf049c244&12daac5630efa5396f770ce1a66b21f7b2101c&14d253c3967b70609b7cbb7c499160283245269a6f49975bcadeafr*  00764c63b8058e3c9696766cfa)77b60f011c03e1525899bcae(e88b6a46c78d63e52eb8c546efb5de6f75e9cc0d(5545ff1a085ee2efbf52b2e04bee1e2336c73e3f762c0c7744fe7e3cr*  00f8b678094e3b3c9696766cfa)cd9044d2b71fdb8120ea60c0*6435acbafb11a82e2f071d7ca4a5ebd93a803ba87f*009769ecabdf48625594c59251e6035722675e04c847099e5ae0704551r*  00d560912d3f703c9696766cfa)d85bc7e69f944fb8.8a19b950bcf71a018e5e6701c91787659809d67dbedd18.bc218daa947427b6db386a99ac1aef23ade0b52939cb6a637cf9bec2408897c6bar*  0042fff8f1951c3c9696766cfa)74a0ebc9069f5b3701761433c37c5a35fc1f39f406302eb907c6163be38c9843705810e6fd25874022e80361a478e3e9cf484ab04f447efff6f0a477cc2fc9bf548944r*  00920f40e56cdc3c9696766cfa)44a3aa3aae6475ca2a434a8e58500c6e41530538862d686ea9e81301b5ae4226bfa2f2beed7bc5098e83feb5b31608f8e29c38819a89c8e776f1544d4151a4ed3a8b87b9cer*  0027ca0c7120bc3c9696766cfa)ec46bb63b02520c33c49fd70&b96b49e21d621741632875db7f6c9243d2d7c2&31d750a09da3ed7fddd49a2032aabf17ec8ebf7d22c8088c666be5c197r*  005b8ccbcd9af83c9696766cfa)47a65ac78b3d594227e85e71(e2fcfbb880442c731bf95167c8ffd7895e337076(e882f1dbd38ce3eda7c23f04dd65071eb41342acdf7e00dccec7ae52987dr*  003ebe94044b9a3c9696766cfa)6e37a6ef546d955d34ab6059*abf21c0b02feb88f856df4a37381bce3cc128517d4*f32905b88a641b04b9c9ffb58cc390900f3da12ab16dce9e82efa16da62059r*  008d493b30ae8b3c9696766cfac                 &    g | ]}d  |D             S )c                 ,    g | ]}t          |          S r   r   )r   r?   s     r   r   z!TestVectors.<listcomp>.<listcomp>,  s    ...aYq\\...r   r   )r   tvs     r   r   zTestVectors.<listcomp>,  s'    JJJ2..2...JJJr   c           	         | j         D ]\  }}}}}}t          j        |t          j        |t	          |                    }|                    |           |                    |          \  }}	|                     ||           |                     ||	           t          j        |t          j        |t	          |                    }|                    |           |                    ||          }
|                     ||
           d S )N)rZ   )	test_vectorsr	   r   r    r-   rr   r]   r$   rd   )r%   
assoc_datar'   r(   r_   keyr   r&   r   mac2r)   s              r   runTestzTestVectors.runTest.  s   373D 	& 	&/JBS%WS#,s3xxHHHFMM*%%%11"55ICR%%%S$''' WS#,s3xxHHHFMM*%%%++B44CR%%%%	& 	&r   N)	r   r   r   __doc__joinr>   test_vectors_hexrg  rk  r   r   r   r   r   s  s       * *			& 77PPuuQr{{PPPQQSV
V
L
L
(
,
&	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(Ml\ KJ9IJJJL& & & & &r   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestVectorsWycheproofc                 n    t           j                            |            || _        || _        d| _        d S )NNone)unittestTestCase__init___wycheproof_warnings_extra_params_id)r%   wycheproof_warningsextra_paramss      r   ru  zTestVectorsWycheproof.__init__@  s4    ""4((($7!)r   c                 @    d }t          dddd|i          | _        d S )Nc                     | d         dz  S )NtagSize   r   )groups    r   
filter_tagz/TestVectorsWycheproof.setUp.<locals>.filter_tagH  s    #q((r   )Cipher
wycheproofzaes_ccm_test.jsonzWycheproof AES CCMtag_size)	group_tag)r   re  )r%   r  s     r   setUpzTestVectorsWycheproof.setUpF  sA    	) 	) 	) //G/B/C:Dj9QS S Sr   c                     | j         S N)rx  r6   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescriptionP  s	    xr   c                 ~    |j         r3| j        r.dd l}|                    d| j        d|j        d           d S d S d S )Nr   zWycheproof warning: z ())warningrv  warningswarnrx  comment)r%   re  r  s      r   r  zTestVectorsWycheproof.warnS  sd    : 	R$3 	ROOOMMM4888RZZZPQQQQQ	R 	R 	R 	Rr   c                    dt          |j                  z   | _        	 t          j        |j        t          j        |j        fd|j        i| j	        }n# t          $ r}t          |j                  t          ddd          vr dt          |          v r|j        rJ Y d }~d S |j        t          ddd          vr d	t          |          v r|j        rJ Y d }~d S |d }~ww xY w|                    |j                   |                    |j                  \  }}|j        rM|                     ||j                   |                     ||j                   |                     |           d S d S )
NzWycheproof Encrypt CCM Test #rZ   r<   r;   rY   Length of parameter 'nonce'r[   r\   Parameter 'mac_len')stridrx  r	   r   ri  r    ivr  rw  r=   r-   r>   validrr   aadr]   msgr$   r(   r   r  )r%   re  r&   er(   r   s         r   test_encryptz"TestVectorsWycheproof.test_encryptX  s   2SZZ?
	WRVS\25 6 6"+ 6"&"46 6FF 	 	 	25zzq&!!4!4449VZ]^_Z`Z`9`9`8###{%61"5"555:OSVWXSYSY:Y:Y8###G	 	bf++BF33C8 	R'''S"&)))IIbMMMMM	 	s#   4A 
C!?C"2CCC!c                    dt          |j                  z   | _        	 t          j        |j        t          j        |j        fd|j        i| j	        }n# t          $ r}t          |j                  t          ddd          vr dt          |          v r|j        rJ Y d }~d S |j        t          ddd          vr d	t          |          v r|j        rJ Y d }~d S |d }~ww xY w|                    |j                   	 |                    |j        |j                  }|j        sJ |                     ||j                   |                     |           d S # t          $ r |j        rJ Y d S w xY w)
NzWycheproof Decrypt CCM Test #rZ   r<   r;   rY   r  r[   r\   r  )r  r  rx  r	   r   ri  r    r  r  rw  r=   r-   r>   r  rr   r  rd   r(   r   r$   r  r  )r%   re  r&   r  r'   s        r   test_decryptz"TestVectorsWycheproof.test_decryptn  s   2SZZ?
	WRVS\25 6 6"+ 6"&"46 6FF 	 	 	25zzq&!!4!4449VZ]^_Z`Z`9`9`8###{%61"5"555:OSVWXSYSY:Y:Y8###G	 	bf	**25"&99B 8OOOR(((IIbMMMMM  	  	  	 x	 s5   4A 
C!?C"2CCC!? E E10E1c                    dt          |j                  z   | _        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z
  z  d	z             }|                     t"          |j        ||j                   d S )
Nz%Wycheproof Corrupt Decrypt CCM Test #r<   r;   rY   r   rZ       r9      )r  r  rx  r-   r  r>   r(   r	   r   ri  r    r  rw  rr   r  r   r4   r=   rd   r   )r%   re  r&   
ct_corrupts       r   test_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypt  s    :SZZGru::U1fa0000CJJ!OOFru 2 2bk 2"02 2bfBE7c"%jj1n#=#GHH
*f&?RVTTTTTr   c                     | j         D ]A}|                     |           |                     |           |                     |           Bd S r  )re  r  r  r  )r%   re  s     r   rk  zTestVectorsWycheproof.runTest  s\    ' 	* 	*Bb!!!b!!!%%b))))	* 	*r   N)r   r   r   ru  r  r  r  r  r  r  rk  r   r   r   rp  rp  >  s          S S S  R R R
  ,  2U U U* * * * *r   rp  c                     |                      d          }g }|t          t                    z  }|t          t                    z  }|t	                      gz  }|t          |          gz  }|S )Nry  )getr   r   r   r   rp  )configry  testss      r   	get_testsr    sj     **%:;;E	_X&&&E	_[)))E	kmm_E	#$78899ELr   __main__c                  F    t          j        t                                 d S r  )rs  	TestSuiter  r   r   r   suiter    s    9;;'''''r   r  )defaultTest)rs  binasciir   Cryptodome.SelfTest.st_commonr   Cryptodome.SelfTest.loaderr   Cryptodome.Util.py3compatr   r   Cryptodome.Cipherr	   Cryptodome.Hashr
   rc   r   r   rt  r   r   r   rp  r  r   r  mainr   r   r   <module>r     s  >        9 9 9 9 9 9 C C C C C C 3 3 3 3 3 3 3 3 ! ! ! ! ! ! $ $ $ $ $ $ ) ) ) ) ) )8 8 8JQ JQ JQ JQ JQx  JQ JQ JQZt) t) t) t) t)(# t) t) t)nH& H& H& H& H&(# H& H& H&VX* X* X* X* X*H- X* X* X*v  	 	 	 	 z( ( (HMg&&&&&& r   