
    ¿igx                        d dl Z d dlmZ d dlmZ d dlmZ d dl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d 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)ChaCha20_Poly1305)SHAKE128)strxorc                 l    t          j        t          |                                         |          S )N)data)r	   newr   read)taglengths     m/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Cipher/test_ChaCha20_Poly1305.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S )ChaCha20Poly1305Testskey_256    nonce_96   data_128   c                 &   t          j        | j        | j                  }t	          dd          }|                    |          }t          j        | j        | j                  }|                    |          }|                     ||           d S )Nkeynonce	plaintexti@  )r   r   r   r   r   encryptdecryptassertEqual)selfcipherptctpt2s        r   test_loopbackz#ChaCha20Poly1305Tests.test_loopback5   s    "&4<-1]< < <K22^^B"&4<-1]< < <nnR  S!!!!!r   c                    t          j        | j        d          }|                     t	          |j                  d           t          j        | j        d          }|                     t	          |j                  d           t          j        | j                  }|j        }t          j        | j                  }|j        }|                     t	          |          d           |                     ||           t          j        | j        | j                  }|                    | j	                  }t          j        | j        | j                  }|                     ||                    | j	                             d S )Ns   HHHHHHHHr      s   HHHHHHHHHHHHr   r   )
r   r   r   r#   lenr   assertNotEqualr   r!   r   )r$   r%   nonce1nonce2r'   s        r   
test_noncez ChaCha20Poly1305Tests.test_nonce@   sg   "&4<-57 7 7V\**A..."&4<-68 8 8V\**B/// #&4<888"&4<888Vb)))FF+++"&4<-1]< < <^^DM**"&4<-1]< < <V^^DM::;;;;;r   c                 `    |                      t          t          j        | j        d           d S )Ntest12345678r   assertRaises	TypeErrorr   r   r   r$   s    r   test_nonce_must_be_bytesz.ChaCha20Poly1305Tests.test_nonce_must_be_bytesY   s9    )+/"l / 	 	1 	1 	1 	1 	1r   c                     |                      t          t          j        | j        d           |                      t          t          j        | j        d           d S )Ns   0000000r   r   )r5   
ValueErrorr   r   r   r7   s    r   test_nonce_lengthz'ChaCha20Poly1305Tests.test_nonce_length_   sh    *+/"l ( 	 	* 	* 	* 	*+/"l # 	 	% 	% 	% 	% 	%r   c                     t          j        | j        | j                  }|                     t          |d                     d S )Nr   
block_size)r   r   r   r   assertFalsehasattrr$   r%   s     r   test_block_sizez%ChaCha20Poly1305Tests.test_block_sizej   sF    "&4<-1]< < <6677777r   c                 t   t          j        | j        | j                  }|                     |j        | j                   t          j        | j                  j        }t          j        | 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*ChaCha20Poly1305Tests.test_nonce_attributep   s    "&4<-1]< < <t}555 #&4<888>"&4<888>Vb)))FF+++++r   c                 `    |                      t          t          j        | j        d           d S )N	   )r   paramr4   r7   s    r   test_unknown_parametersz-ChaCha20Poly1305Tests.test_unknown_parameters{   s9    )+/"l ! 	 	# 	# 	# 	# 	#r   c                     dD ]Q}t          j        | j        | j                  } t	          ||          d          }|                     |d           Rd S )Nr!   r"   r   r   )r   r   r   r   getattrr#   )r$   funcr%   results       r   test_null_encryption_decryptionz5ChaCha20Poly1305Tests.test_null_encryption_decryption   sp    ( 	* 	*D&*t|15@ @ @F*WVT**3//FVS))))		* 	*r   c                 ^   t          j        | j        | j                  }|                    d           |                     t          |j        d           t          j        | j        | j                  }|                    d           |                     t          |j        d           d S )Nr   r   )r   r   r   r   r!   r5   r6   r"   r@   s     r   test_either_encrypt_or_decryptz4ChaCha20Poly1305Tests.test_either_encrypt_or_decrypt   s    "&4<-1]< < <s)V^S999"&4<-1]< < <s)V^S99999r   c                 
   t          j        | j        | j                  }|                     t
          |j        d           t          j        | j        | j                  }|                     t
          |j        d           d S )Nr   ztest1234567890-*)r   r   r   r   r5   r6   r!   r"   r@   s     r   test_data_must_be_bytesz-ChaCha20Poly1305Tests.test_data_must_be_bytes   s~    "&4<-1]< < <)V^5HIII"&4<-1]< < <)V^5HIIIIIr   c                     t          j        | j        | j                  }|                    | j                  \  }}|                     t          |          d           d S )Nr   r   )r   r   r   r   encrypt_and_digestr   r#   r-   )r$   r%   _macs       r   test_mac_lenz"ChaCha20Poly1305Tests.test_mac_len   s]    "&4<-1]< < <**4=993S2&&&&&r   c                 (   ddl m} t          j        | j        | j                  }|                    | j                  \  }} ||d          }t          j        | j        | j                  }|                     t          |j
        ||           d S )Nr   )strxor_cr      )Cryptodome.Util.strxorrX   r   r   r   r   rS   r   r5   r:   decrypt_and_verify)r$   rX   r%   r'   rU   invalid_macs         r   test_invalid_macz&ChaCha20Poly1305Tests.test_invalid_mac   s    333333"&4<-1]< < <++DM::ChsD))"&4<-1]< < <*f&?%	' 	' 	' 	' 	'r   c                 B   t          j        | j        | j                  }|                                }|                     |                                t          |                     t          j        | j        | j                  }|                    |           d S Nr   )	r   r   r   r   	hexdigestr#   digestr   	hexverify)r$   r%   mac_hexs      r   test_hex_macz"ChaCha20Poly1305Tests.test_hex_mac   s    "&4<-1]< < <""$$)G*<*<==="&4<-1]< < <!!!!!r   c                    t          dd          }t          dd          }t          j        | j        | j                  }|                    |           |                    |          \  }}d }dD ]}t          j        | j        | j                  } |||          D ]}|                    |           d}	 |||          D ]}|	|                    |          z  }	|                     ||	           |	                    |           dD ]}t          j        | j        | j                  } |||          D ]}|                    |           d}
 |||          D ]}|
|
                    |          z  }
|                     ||
           |                     |                                |           d S )Nzauthenticated data   r    r   c                 \      fdt          dt                               D             S )Nc                 *    g | ]}||z            S  ri   ).0ichunk_lengthr   s     r   
<listcomp>zOChaCha20Poly1305Tests.test_message_chunks.<locals>.break_up.<locals>.<listcomp>   s3     # # #qD1\>)* # # #r   r   )ranger-   )r   rl   s   ``r   break_upz;ChaCha20Poly1305Tests.test_message_chunks.<locals>.break_up   sJ    # # # # #E!SYY 5" 5" # # # #r   )
rY            
      r   (   P      r   )r   r   r   r   r   updaterS   r"   r#   verifyr!   ra   )r$   	auth_datar    r%   
ciphertextref_macro   rl   chunkr(   ct2s              r   test_message_chunksz)ChaCha20Poly1305Tests.test_message_chunks   s&    ##7==	";44	"&4<-1]< < <i   $77	BB
G	# 	# 	#
 @ 	# 	#L&*t|15@ @ @F ")\:: % %e$$$$C!*l;; - -v~~e,,,Y,,,MM'"""" @ 	7 	7L&*t|15@ @ @F ")\:: % %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        | j                  }|                    | j                   |                    | j                  }|                                }t	          j        | j        | j                  }d|d d<   d|d d<   |                    |           d|d d<   |                    |          }	d|d d<   |                                }
| 	                    ||	           | 	                    ||
           | 	                    |j
        |j
                   t          | j                  }t          | j                  }t          | j                  }t          |          }t          |          }~t	          j        | j        | j                  }d|d d<   d|d d<   |                    |           d|d d<   |                    |          }d|d d<   |                    |           | 	                    || j                   d S Nr   s   rq   s   )	bytearrayr   r   r   r   r   rx   r!   ra   r#   r   r"   ry   )r$   key_banonce_ba	header_badata_bacipher1r'   r   cipher2ct_testtag_testct_batag_bacipher3pt_tests                  r   test_bytearrayz$ChaCha20Poly1305Tests.test_bytearray   sQ    4<((T]++dm,,	DM**#'DL.2m= = =t}%%%__T]++nn#'DL.2m= = =$rr
&!y!!!'	"1"//'**%>>##W%%%h'''666 4<((T]++dm,,	"3#'DL.2m= = =$rr
&!y!!!'	"1"//%((#bqb	v$-00000r   c                    t          t          | j                            }t          t          | j                            }t          t          | j                            }t          t          | j                            }t          j        | j        | j                  }|                    | j                   |                    | j                  }|	                                }t          j        | j        | 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          t          |                    }t          t          |                    }~t          j        | j        | j                  }d|d d<   d|d d<   |                    |           d|d d<   |                    |          }d|d d<   |                    |           | 
                    || j                   d S r   )
memoryviewr   r   r   r   r   r   rx   r!   ra   r#   r   r"   ry   )r$   key_mvnonce_mv	header_mvdata_mvr   r'   r   r   r   r   ct_mvtag_mvr   r   s                  r   test_memoryviewz%ChaCha20Poly1305Tests.test_memoryview  s    Idl3344i6677y7788	Yt}5566#'DL.2m= = =t}%%%__T]++nn#'DL.2m= = =$rr
&!y!!!'	"1"//'**%>>##W%%%h'''666 Idl3344i6677y7788	9R==))IcNN++#'DL.2m= = =$rr
&!y!!!'	"1"//%((#bqb	v$-00000r   N)__name__
__module____qualname__r   r   r   r   r)   r1   r8   r;   rA   rC   rG   rM   rO   rQ   rV   r]   rd   r   r   r   ri   r   r   r   r   /   s<       nY++G~j"--H~j"--H	" 	" 	"< < <21 1 1	% 	% 	%8 8 8	, 	, 	,# # #* * *	: 	: 	:J J J' ' '' ' '" " "*7 *7 *7X.1 .1 .1`.1 .1 .1 .1 .1r   r   c                       e Zd Zd Zd ZdS )XChaCha20Poly1305Testsc                     t          j        dd          }|                     t          |j                  d           |                     |j        d           d S )Ns    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYs   HHHHHHHHHHHHHHHHHHHHHHHHr      )r   r   r#   r-   r   r@   s     r   r1   z!XChaCha20Poly1305Tests.test_nonceH  s\    "&9-68 8 8V\**B///y11111r   c                    d}t          |                    dd                              dd                    }t          d          }t          d          }t          d          }d}t          |                    dd                              dd                    }t          d	          }t          j        ||
          }|                    |           |                    |          \  }}	|                     ||           |                     ||	           t          j        ||
          }|                    |           |                    ||           d S )Ns(  
                4c616469657320616e642047656e746c656d656e206f662074686520636c6173
                73206f66202739393a204966204920636f756c64206f6666657220796f75206f
                6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73
                637265656e20776f756c642062652069742e   
r       s   50515253c0c1c2c3c4c5c6c7s@   808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fs0   404142434445464748494a4b4c4d4e4f5051525354555657s(  
                bd6d179d3e83d43b9576579493c0e939572a1700252bfaccbed2902c21396cbb
                731c7f1b0b4aa6440bf3a82f4eda7e39ae64c6708c54c216cb96b72e1213b452
                2f8c9ba40db5d945b11b69b982c1bb9e3f3fac2bc369488f76b2383565d3fff9
                21f9664c97637da9768812f615c68b13b52es    c0875924c1c7987947deafd8780acf49r   )r   replacer   r   rx   rS   r#   r[   )
r$   r&   aadr   ivr'   r   r%   r   r   s
             r   test_encryptz#XChaCha20Poly1305Tests.test_encryptO  sP   8
 rzz%--55dC@@AA344[\\JKK8
 rzz%--55dC@@AA;<<"&3b999c"55b99W%%%h'''"&3b999c!!"c*****r   N)r   r   r   r1   r   ri   r   r   r   r   F  s2        2 2 2!+ !+ !+ !+ !+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S )ChaCha20Poly1305FSMTestsr   r   r   r   r   r   c                 6   t          j        | j        | j                  }|                    | j                  }|                                }t          j        | j        | j                  }|                    |           |                    |           d S r_   )	r   r   r   r   r!   r   ra   r"   ry   r$   r%   r'   rU   s       r   -test_valid_init_encrypt_decrypt_digest_verifyzFChaCha20Poly1305FSMTests.test_valid_init_encrypt_decrypt_digest_verifyy  s     #&4<-1]< < <^^DM**mmoo #&4<-1]< < <rcr   c                 @   t          j        | j        | j                  }|                    | j                   |                                }t          j        | j        | j                  }|                    | j                   |                    |           d S r_   )r   r   r   r   rx   r   ra   ry   r$   r%   rU   s      r   $test_valid_init_update_digest_verifyz=ChaCha20Poly1305FSMTests.test_valid_init_update_digest_verify  s     #&4<-1]< < <dm$$$mmoo #&4<-1]< < <dm$$$cr   c                    t          j        | j        | j                  }|                    | j                   |                    | j                  }|                                }t          j        | j        | j                  }|                    | j                   |                    |           |	                    |           d S r_   )
r   r   r   r   rx   r   r!   ra   r"   ry   r   s       r   test_valid_full_pathz-ChaCha20Poly1305FSMTests.test_valid_full_path  s     #&4<-1]< < <dm$$$^^DM**mmoo #&4<-1]< < <dm$$$rcr   c                 n    t          j        | j        | j                  }|                                 d S r_   )r   r   r   r   ra   r@   s     r   test_valid_init_digestz/ChaCha20Poly1305FSMTests.test_valid_init_digest  s3    "&4<-1]< < <r   c                     t          j        | j        | j                  }|                                }t          j        | j        | j                  }|                    |           d S r_   )r   r   r   r   ra   ry   r   s      r   test_valid_init_verifyz/ChaCha20Poly1305FSMTests.test_valid_init_verify  sg    "&4<-1]< < <mmoo"&4<-1]< < <cr   c                 J   dD ]}d d| j         | j         dz   fD ]}t          j        | j        | j                  }||                    |           t          ||          } || j                     || j                     || j                     || j                    d S )NrI   s   333   3r   )r   r   r   r   r   rx   rJ   )r$   method_namerz   r%   methods        r   &test_valid_multiple_encrypt_or_decryptz?ChaCha20Poly1305FSMTests.test_valid_multiple_encrypt_or_decrypt  s    / 	& 	&K"FDM"md24 
& 
&	*.4<59]D D D(MM),,, 55t}%%%t}%%%t}%%%t}%%%%
&	& 	&r   c                    t          j        | j        | j                  }|                    | j                   |                                }t          d          D ]*}|                     ||                                           +t          j        | j        | j                  }|                    | j                   t          d          D ]}|	                    |           d S )Nr         )
r   r   r   r   rx   r   ra   rn   r#   ry   )r$   r%   	first_macxs       r   $test_valid_multiple_digest_or_verifyz=ChaCha20Poly1305FSMTests.test_valid_multiple_digest_or_verify  s    "&4<-1]< < <dm$$$MMOO	q 	9 	9AY8888 #&4<-1]< < <dm$$$q 	% 	%AMM)$$$$	% 	%r   c                    t          j        | j        | j                  }|                    | j                   |                    | j                  \  }}t          j        | j        | j                  }|                    | j                   |                    ||          }|                     | j        |           d S r_   )	r   r   r   r   rx   r   rS   r[   r#   )r$   r%   r'   rU   r&   s        r   0test_valid_encrypt_and_digest_decrypt_and_verifyzIChaCha20Poly1305FSMTests.test_valid_encrypt_and_digest_decrypt_and_verify  s    "&4<-1]< < <dm$$$++DM::C #&4<-1]< < <dm$$$&&r3//+++++r   c           	      2   dD ]\  }}dD ]}t          j        | j        | j                  }|r|                    | j                    t          ||          | j                   |                     t          t          ||          | j                   d S )N)rI   )r"   r!   )TFr   )	r   r   r   r   rx   r   rJ   r5   r6   )r$   method1_namemethod2_nameassoc_data_presentr%   s        r   #test_invalid_mixing_encrypt_decryptz<ChaCha20Poly1305FSMTests.test_invalid_mixing_encrypt_decrypt  s    +C 		1 		1&L,&3 1 1"*.4<59]D D D% 1MM$-000---dm<<<!!)WV\-J-J"&-1 1 1 11		1 		1r   c                 ~   dD ]}t          j        | j        | j                  }|                    | j                   |                                 |                     t          t          ||          | j                   t          j        | j        | j                  }|
                    | j                   d S )N)r!   rx   r   )r   r   r   r   r!   r   ra   r5   r6   rJ   rS   )r$   r   r%   s      r   +test_invalid_encrypt_or_update_after_digestzDChaCha20Poly1305FSMTests.test_invalid_encrypt_or_update_after_digest  s    . 
	5 
	5K&*t|15@ @ @FNN4=)))MMOOOi)E)E"m- - - '*t|15@ @ @F%%dm4444
	5 
	5r   c                 ^   t          j        | j        | j                  }|                    | j                  }|                                }dD ]Z}t          j        | j        | j                  }|                    |           |                    |           | 	                    t          t          ||          | j                   t          j        | j        | j                  }|                    |           |                    |           | 	                    t          t          ||          | j                   t          j        | j        | j                  }|                    ||           | 	                    t          t          ||          | j                   \d S )Nr   )r"   rx   )r   r   r   r   r!   r   ra   r"   ry   r5   r6   rJ   r[   )r$   r%   r'   rU   r   s        r   +test_invalid_decrypt_or_update_after_verifyzDChaCha20Poly1305FSMTests.test_invalid_decrypt_or_update_after_verify  s   "&4<-1]< < <^^DM**mmoo. 	- 	-K&*t|15@ @ @FNN2MM#i)E)E"m- - - '*t|15@ @ @FNN2MM#i)E)E"m- - - '*t|15@ @ @F%%b#...i)E)E"m- - - -%	- 	-r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri   r   r   r   r   s  s        nY++G~j"--H~j"--H           & & &% % % , , ,1 1 15 5 5- - - - -r   r   c                 p    t          |                     dd                              dd                    S )N  :r   r   )r   s    r   compactr     s.    QYYsB''//R88999r   c                   8    e Zd ZdZddgZd eD             Zd ZdS )TestVectorsRFCzTest cases from RFC7539)z#50 51 52 53 c0 c1 c2 c3 c4 c5 c6 c7aN  4c 61 64 69 65 73 20 61 6e 64 20 47 65 6e 74 6c65 6d 65 6e 20 6f 66 20 74 68 65 20 63 6c 61 7373 20 6f 66 20 27 39 39 3a 20 49 66 20 49 20 636f 75 6c 64 20 6f 66 66 65 72 20 79 6f 75 20 6f6e 6c 79 20 6f 6e 65 20 74 69 70 20 66 6f 72 2074 68 65 20 66 75 74 75 72 65 2c 20 73 75 6e 7363 72 65 65 6e 20 77 6f 75 6c 64 20 62 65 20 6974 2eaN  d3 1a 8d 34 64 8e 60 db 7b 86 af bc 53 ef 7e c2a4 ad ed 51 29 6e 08 fe a9 e2 b5 a7 36 ee 62 d63d be a4 5e 8c a9 67 12 82 fa fb 69 da 92 72 8b1a 71 de 0a 9e 06 0b 29 05 d6 a5 b6 7e cd 3b 3692 dd bd 7f 2d 77 8b 8c 98 03 ae e3 28 09 1b 58fa b3 24 e4 fa d6 75 94 55 85 80 8b 48 31 d7 bc3f f4 de f0 8e 4b 7a 9d e5 76 d2 65 86 ce c6 4b61 16z/1a:e1:0b:59:4f:09:e2:6a:7e:90:2e:cb:d0:60:06:91z^80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9fz"07 00 00 0040 41 42 43 44 45 46 47)z#f3 33 88 86 00 00 00 00 00 00 4e 91a
  49 6e 74 65 72 6e 65 74 2d 44 72 61 66 74 73 2061 72 65 20 64 72 61 66 74 20 64 6f 63 75 6d 656e 74 73 20 76 61 6c 69 64 20 66 6f 72 20 61 206d 61 78 69 6d 75 6d 20 6f 66 20 73 69 78 20 6d6f 6e 74 68 73 20 61 6e 64 20 6d 61 79 20 62 6520 75 70 64 61 74 65 64 2c 20 72 65 70 6c 61 6365 64 2c 20 6f 72 20 6f 62 73 6f 6c 65 74 65 6420 62 79 20 6f 74 68 65 72 20 64 6f 63 75 6d 656e 74 73 20 61 74 20 61 6e 79 20 74 69 6d 65 2e20 49 74 20 69 73 20 69 6e 61 70 70 72 6f 70 7269 61 74 65 20 74 6f 20 75 73 65 20 49 6e 74 6572 6e 65 74 2d 44 72 61 66 74 73 20 61 73 20 7265 66 65 72 65 6e 63 65 20 6d 61 74 65 72 69 616c 20 6f 72 20 74 6f 20 63 69 74 65 20 74 68 656d 20 6f 74 68 65 72 20 74 68 61 6e 20 61 73 202f e2 80 9c 77 6f 72 6b 20 69 6e 20 70 72 6f 6772 65 73 73 2e 2f e2 80 9da
  64 a0 86 15 75 86 1a f4 60 f0 62 c7 9b e6 43 bd5e 80 5c fd 34 5c f3 89 f1 08 67 0a c7 6c 8c b24c 6c fc 18 75 5d 43 ee a0 9e e9 4e 38 2d 26 b0bd b7 b7 3c 32 1b 01 00 d4 f0 3b 7f 35 58 94 cf33 2f 83 0e 71 0b 97 ce 98 c8 a8 4a bd 0b 94 8114 ad 17 6e 00 8d 33 bd 60 f9 82 b1 ff 37 c8 5597 97 a0 6e f4 f0 ef 61 c1 86 32 4e 2b 35 06 3836 06 90 7b 6a 7c 02 b0 f9 f6 15 7b 53 c8 67 e4b9 16 6c 76 7b 80 4d 46 a5 9b 52 16 cd e7 a4 e990 40 c5 a4 04 33 22 5e e2 82 a1 b0 a0 6c 52 3eaf 45 34 d7 f8 3f a1 15 5b 00 47 71 8c bc 54 6a0d 07 2b 04 b3 56 4e ea 1b 42 22 73 f5 48 27 1a0b b2 31 60 53 fa 76 99 19 55 eb d6 31 59 43 4ece bb 4e 46 6d ae 5a 10 73 a6 72 76 27 09 7a 1049 e6 17 d9 1d 36 10 94 fa 68 f0 ff 77 98 71 3030 5b ea ba 2e da 04 df 99 7b 71 4d 6c 6f 2c 29a6 ad 5c b4 02 2b 02 70 9bz/ee ad 9d 67 89 0c bb 22 39 23 36 fe a1 85 1f 38z^1c 92 40 a5 eb 55 d3 8a f3 33 88 86 04 f6 b5 f047 39 17 c1 40 2b 80 09 9d ca 5c bc 20 70 75 c0z#00 00 00 00 01 02 03 04 05 06 07 08c                 &    g | ]}d  |D             S )c                 |    g | ]9}t          |                    d d                              dd                    :S )r   r   r   r   )rj   r   s     r   rm   z$TestVectorsRFC.<listcomp>.<listcomp>`  s>    PPPYqyyb1199#rBBCCPPPr   ri   )rj   tvs     r   rm   zTestVectorsRFC.<listcomp>`  s(    lllUWPPRPPPlllr   c                    | j         D ]\  }}}}}}t          j        ||          }|                    |           |                    |          \  }}	|                     ||           |                     ||	           t          j        ||          }|                    |           |                    ||          }
|                     ||
           d S r_   )test_vectorsr   r   rx   rS   r#   r[   )r$   
assoc_datar&   r'   rU   r   r   r%   r~   mac2r(   s              r   runTestzTestVectorsRFC.runTestb  s    373D 	& 	&/JBS%&*s%@@@FMM*%%%11"55ICR%%%S$''' '*s%@@@FMM*%%%++B44CR%%%%	& 	&r   N)r   r   r   __doc__test_vectors_hexr   r   ri   r   r   r   r     sS        !!	
,'	
/?B ml[klllL& & & & &r   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestVectorsWycheproofc                 `    t           j                            |            || _        d| _        d S )NNone)unittestTestCase__init___wycheproof_warnings_id)r$   wycheproof_warningss     r   r   zTestVectorsWycheproof.__init__t  s,    ""4((($7!r   c                 B    d }d }t          d|dd|id|i          }|S )Nc                     | d         dz  S )NtagSizer+   ri   )groups    r   
filter_tagz4TestVectorsWycheproof.load_tests.<locals>.filter_tag{  s    #q((r   c                     | d         S )N	algorithmri   )roots    r   filter_algoz5TestVectorsWycheproof.load_tests.<locals>.filter_algo~  s    $$r   )Cipher
wycheproofzWycheproof ChaCha20-Poly1305algotag_size)root_tag	group_tagr   )r$   filenamer   r   rL   s        r   
load_testsz TestVectorsWycheproof.load_testsy  sY    	) 	) 	)	% 	% 	% ..F/7/M9?8M:Dj9Q	S S S
 r   c                     g | _         | j                             |                     d                     | j                             |                     d                     d S )Nzchacha20_poly1305_test.jsonzxchacha20_poly1305_test.json)r   extendr   r7   s    r   setUpzTestVectorsWycheproof.setUp  sQ    t'DEEFFFt'EFFGGGGGr   c                     | j         S N)r   r7   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescription  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 ())warningr   warningswarnr   comment)r$   r   r  s      r   r  zTestVectorsWycheproof.warn  sd    : 	R$3 	ROOOMMM4888RZZZPQQQQQ	R 	R 	R 	Rr   c                    d|j         d|j        | _        	 t          j        |j        |j                  }nA# t          $ r4}t          |j                  dvrdt          |          v sJ Y d }~d S d }~ww xY w|
                    |j                   |                    |j                  \  }}|j        rM|                     ||j                   |                     ||j                   |                     |           d S d S )NzWycheproof Encrypt  Test #r   r+   r   Nonce must be)r   idr   r   r   r   r   r:   r-   strrx   r   rS   msgvalidr#   r'   r   r  )r$   r   r%   er'   r   s         r   r   z"TestVectorsWycheproof.test_encrypt  s    79wwwF	&*rvRUCCCFF 	 	 	ru::W,,CFF1J1J1J1JFFFFF	 	bf++BF33C8 	R'''S"&)))IIbMMMMM	 	s    : 
A8)A33A8c                    d|j         d|j        | _        	 t          j        |j        |j                  }nA# t          $ r4}t          |j                  dvrdt          |          v s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 r  r   r  r  )r   r  r   r   r   r   r   r:   r-   r	  rx   r   r[   r'   r   r  r#   r
  r  )r$   r   r%   r  r&   s        r   test_decryptz"TestVectorsWycheproof.test_decrypt  s/    79wwwF	&*rvRUCCCFF 	 	 	ru::W,,CFF1J1J1J1JFFFFF	 	bf	**25"&99B 8OOOR(((IIbMMMMM  	  	  	 x	 s'    : 
A8)A33A8 C1 1DDc                    dt          |j                  z   | _        t          |j                  dk    st          |j                  dk     rd S t          j        |j        |j                  }|	                    |j
                   t          |j        dt          |j                  dz
  z  dz             }|                     t          |j        ||j                   d S )Nz3Wycheproof Corrupt Decrypt ChaCha20-Poly1305 Test #r   rY   r          )r	  r  r   r-   r   r'   r   r   r   rx   r   r
   r5   r:   r[   r   )r$   r   r%   
ct_corrupts       r   test_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypt  s    H3ru::Uru::??c"%jj1nnF"&26???bfBE7c"%jj1n#=#GHH
*f&?RVTTTTTr   c                     | j         D ]A}|                     |           |                     |           |                     |           Bd S r   )r   r   r  r  )r$   r   s     r   r   zTestVectorsWycheproof.runTest  s\    ' 	* 	*Bb!!!b!!!%%b))))	* 	*r   N)r   r   r   r   r   r   r   r  r   r  r  r   ri   r   r   r   r   r  s          
  H H H
  R R R
     &U U U* * * * *r   r   c                       e Zd Zd ZdS )
TestOutputc                    d}d}t          j        ||          }d}|                    |          }t          d          }t          j        ||          }|                    ||          }|                     ||           |                     |d            t          j        ||          }|                    ||          }|                     ||           |                     |d            t          t          d                    }t          j        ||          }|                    ||           |                     ||           t          j        ||          }|                    ||           |                     ||           t          j        ||          }|                     t          |j        |d           t          j        ||          }|                     t          |j        |d           t          d          }t          j        ||          }|                     t          |j        ||           t          j        ||          }|                     t          |j        ||           d S )	Ns    44444444444444444444444444444444s   555555555555r   s   5555555555555555r   )outputs   0000000000000000rr   )
r   r   r!   r   r#   r"   r   r5   r6   r:   )	r$   r   r   r%   r&   r'   r  resshorter_outputs	            r   r   zTestOutput.runTest  sf    "&3e<<<^^B2"&3e<<<nnRn//V$$$d###"&3e<<<nnRn//V$$$d###IbMM**"&3e<<<r&)))V$$$"&3e<<<r&)))V$$$"&3e<<<)V^RHHH"&3e<<<)V^RHHH"1"&3e<<<*fnbPPP"&3e<<<*fnbPPPPPr   N)r   r   r   r   ri   r   r   r  r    s(        *Q *Q *Q *Q *Qr   r  c                 ,   |                      d          }g }|t          t                    z  }|t          t                    z  }|t          t                    z  }|t                      gz  }|t          |          gz  }|t                      gz  }|S )Nr   )getr   r   r   r   r   r   r  )configr   testss      r   	get_testsr    s     **%:;;E	_2333E	_3444E	_5666E	nE	#$78899E	jll^ELr   __main__c                  F    t          j        t                                 d S r   )r   	TestSuiter  ri   r   r   suiter#    s    9;;'''''r   r#  )defaultTest)r   binasciir   Cryptodome.SelfTest.st_commonr   Cryptodome.SelfTest.loaderr   Cryptodome.Util.py3compatr   Cryptodome.Cipherr   Cryptodome.Hashr	   rZ   r
   r   r   r   r   r   r   r   r   r  r  r   r#  mainri   r   r   <module>r,     s@  >        9 9 9 9 9 9 C C C C C C - - - - - - / / / / / / $ $ $ $ $ $ ) ) ) ) ) )8 8 8T1 T1 T1 T1 T1H- T1 T1 T1n*+ *+ *+ *+ *+X. *+ *+ *+Za- a- a- a- a-x0 a- a- a-H: : :T& T& T& T& T&X& T& T& T&nT* T* T* T* T*H- T* T* T*n,Q ,Q ,Q ,Q ,Q" ,Q ,Q ,Q^  
 
 
 
 z( ( (HMg&&&&&& r   