
    ,hw                        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 j6                  d       yy)    N)	unhexlify)list_test_casesload_test_vectors_wycheproof)tobytes)ChaCha20_Poly1305)SHAKE128)strxorc                 ^    t        j                  t        |             j                  |      S )N)data)r	   newr   read)taglengths     o/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Cipher/test_ChaCha20_Poly1305.pyget_tag_randomr   +   s     <<WS\*//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y)ChaCha20Poly1305Testskey_256    nonce_96   data_128   c                 0   t        j                  | j                  | j                        }t	        dd      }|j                  |      }t        j                  | j                  | j                        }|j                  |      }| j                  ||       y )Nkeynonce	plaintexti@  )r   r   r   r   r   encryptdecryptassertEqual)selfcipherptctpt2s        r   test_loopbackz#ChaCha20Poly1305Tests.test_loopback5   st    "&&4<<-1]]<K2^^B"&&4<<-1]]<nnR S!r   c                 ^   t        j                  | j                  d      }| j                  t	        |j
                        d       t        j                  | j                  d      }| j                  t	        |j
                        d       t        j                  | j                        }|j
                  }t        j                  | j                        }|j
                  }| j                  t	        |      d       | j                  ||       t        j                  | j                  | j                        }|j                  | j                        }t        j                  | j                  | j                        }| j                  ||j                  | j                               y )Ns   HHHHHHHHr      s   HHHHHHHHHHHHr   r   )
r   r   r   r#   lenr   assertNotEqualr   r!   r   )r$   r%   nonce1nonce2r'   s        r   
test_noncez ChaCha20Poly1305Tests.test_nonce@   s/   "&&4<<-57V\\*A."&&4<<-68V\\*B/ #&&4<<8"&&4<<8Vb)FF+"&&4<<-1]]<^^DMM*"&&4<<-1]]<V^^DMM:;r   c                 f    | j                  t        t        j                  | j                  d       y )Ntest12345678r   assertRaises	TypeErrorr   r   r   r$   s    r   test_nonce_must_be_bytesz.ChaCha20Poly1305Tests.test_nonce_must_be_bytesY   s*    )+//"ll / 	 	1r   c                     | j                  t        t        j                  | j                  d       | j                  t        t        j                  | j                  d       y )Ns   0000000r   r   )r5   
ValueErrorr   r   r   r7   s    r   test_nonce_lengthz'ChaCha20Poly1305Tests.test_nonce_length_   sT    *+//"ll ( 	 	* 	*+//"ll # 	 	%r   c                     t        j                  | j                  | j                        }| j	                  t        |d             y )Nr   
block_size)r   r   r   r   assertFalsehasattrr$   r%   s     r   test_block_sizez%ChaCha20Poly1305Tests.test_block_sizej   s4    "&&4<<-1]]<67r   c                    t        j                  | j                  | j                        }| j	                  |j
                  | j                         t        j                  | j                        j
                  }t        j                  | j                        j
                  }| j	                  t        |      d       | j                  ||       y )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 #&&4<<8>>"&&4<<8>>Vb)FF+r   c                 f    | j                  t        t        j                  | j                  d       y )N	   )r   paramr4   r7   s    r   test_unknown_parametersz-ChaCha20Poly1305Tests.test_unknown_parameters{   s*    )+//"ll ! 	 	#r   c                     dD ]Q  }t        j                  | j                  | j                        } t	        ||      d      }| j                  |d       S y )Nr!   r"   r   r   )r   r   r   r   getattrr#   )r$   funcr%   results       r   test_null_encryption_decryptionz5ChaCha20Poly1305Tests.test_null_encryption_decryption   sR    ( 	*D&**t||15@F*WVT*3/FVS)		*r   c                 x   t        j                  | j                  | j                        }|j	                  d       | j                  t        |j                  d       t        j                  | j                  | j                        }|j                  d       | j                  t        |j                  d       y )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"&&4<<-1]]<s)V^^S9r   c                 4   t        j                  | j                  | j                        }| j	                  t
        |j                  d       t        j                  | j                  | j                        }| j	                  t
        |j                  d       y )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   sj    "&&4<<-1]]<)V^^5HI"&&4<<-1]]<)V^^5HIr   c                     t        j                  | j                  | j                        }|j	                  | j
                        \  }}| j                  t        |      d       y )Nr   r   )r   r   r   r   encrypt_and_digestr   r#   r-   )r$   r%   _macs       r   test_mac_lenz"ChaCha20Poly1305Tests.test_mac_len   sK    "&&4<<-1]]<**4==93S2&r   c                 N   ddl m} t        j                  | j                  | j
                        }|j                  | j                        \  }} ||d      }t        j                  | j                  | j
                        }| j                  t        |j                  ||       y )Nr   )strxor_cr      )Crypto.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    /"&&4<<-1]]<++DMM:CsD)"&&4<<-1]]<*f&?&?%	'r   c                 D   t        j                  | j                  | j                        }|j	                         }| j                  |j                         t        |             t        j                  | j                  | j                        }|j                  |       y Nr   )	r   r   r   r   	hexdigestr#   digestr   	hexverify)r$   r%   mac_hexs      r   test_hex_macz"ChaCha20Poly1305Tests.test_hex_mac   ss    "&&4<<-1]]<""$)G*<="&&4<<-1]]<!r   c                 X   t        dd      }t        dd      }t        j                  | j                  | j                        }|j                  |       |j                  |      \  }}d }dD ]  }t        j                  | j                  | j                        } |||      D ]  }|j                  |        d}	 |||      D ]  }|	|j                  |      z  }	 | j                  ||	       |j                  |        dD ]  }t        j                  | j                  | j                        } |||      D ]  }|j                  |        d}
 |||      D ]  }|
|j                  |      z  }
 | j                  ||
       | j                  |j                         |        y )Nzauthenticated data   r    r   c                 `    t        dt        |       |      D cg c]
  }| |||z     c}S c c}w )Nr   )ranger-   )r   chunk_lengthis      r   break_upz;ChaCha20Poly1305Tests.test_message_chunks.<locals>.break_up   s9    49!SY 5" #qD1\>* # # #s   +)
rY            
      r   (   P      r   )r   r   r   r   r   updaterS   r"   r#   verifyr!   ra   )r$   	auth_datar    r%   
ciphertextref_macrk   ri   chunkr(   ct2s              r   test_message_chunksz)ChaCha20Poly1305Tests.test_message_chunks   s    ##7=	";4	"&&4<<-1]]<i $77	B
G	#
 @ 	#L&**t||15@F ")\: %e$%C!*l; -v~~e,,-Y,MM'"	# @ 	7L&**t||15@F ")\: %e$%C!)\: -v~~e,,-Z-V]]_g6	7r   c                    t        | j                        }t        | j                        }t        | j                        }t        | j                        }t	        j
                  | j                  | j                        }|j                  | j                         |j                  | j                        }|j                         }t	        j
                  | j                  | j                        }d|d d d|d d |j                  |       d|d d |j                  |      }	d|d d |j                         }
| j                  ||	       | j                  ||
       | j                  |j                  |j                         t        | j                        }t        | j                        }t        | j                        }t        |      }t        |      }~t	        j
                  | j                  | j                        }d|d d d|d d |j                  |       d|d d |j                  |      }d|d d |j                  |       | j                  || j                         y Nr   s   rm   s   )	bytearrayr   r   r   r   r   rt   r!   ra   r#   r   r"   ru   )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   s    4<<(T]]+dmm,	DMM*#''DLL.2mm=t}}%__T]]+nn#''DLL.2mm=$r
&!y!'	"1//'*%>>#W%h'6 4<<(T]]+dmm,	"3#''DLL.2mm=$r
&!y!'	"1//%(#bq	v$--0r   c                 n   t        t        | j                              }t        t        | j                              }t        t        | j                              }t        t        | j                              }t        j                  | j                  | j                        }|j                  | j                         |j                  | j                        }|j                         }t        j                  | j                  | j                        }d|d d d|d d |j                  |       d|d d |j                  |      }	d|d d |j                         }
| j                  ||	       | j                  ||
       | j                  |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 |j                  |       d|d d |j                  |      }d|d d |j                  |       | j                  || j                         y r}   )
memoryviewr~   r   r   r   r   r   rt   r!   ra   r#   r   r"   ru   )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    Idll34i67y78	Yt}}56#''DLL.2mm=t}}%__T]]+nn#''DLL.2mm=$r
&!y!'	"1//'*%>>#W%h'6 Idll34i67y78	9R=)IcN+#''DLL.2mm=$r
&!y!'	"1//%(#bq	v$--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    r   r   r   r   /   sy    Y+Gj"-Hj"-H	"<21	%8	,#*	:J''"*7X.1`.1r   r   c                       e Zd Zd Zd Zy)XChaCha20Poly1305Testsc                     t        j                  dd      }| j                  t        |j                        d       | j                  |j                  d       y )Ns    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYs   HHHHHHHHHHHHHHHHHHHHHHHHr      )r   r   r#   r-   r   r@   s     r   r1   z!XChaCha20Poly1305Tests.test_nonceH  sD    "&&9-68V\\*B/y1r   c                 D   d}t        |j                  dd      j                  dd            }t        d      }t        d      }t        d      }d}t        |j                  dd      j                  dd            }t        d	      }t        j                  ||
      }|j	                  |       |j                  |      \  }}	| j                  ||       | j                  ||	       t        j                  ||
      }|j	                  |       |j                  ||       y )Ns(  
                4c616469657320616e642047656e746c656d656e206f662074686520636c6173
                73206f66202739393a204966204920636f756c64206f6666657220796f75206f
                6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73
                637265656e20776f756c642062652069742e   
r       s   50515253c0c1c2c3c4c5c6c7s@   808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fs0   404142434445464748494a4b4c4d4e4f5051525354555657s(  
                bd6d179d3e83d43b9576579493c0e939572a1700252bfaccbed2902c21396cbb
                731c7f1b0b4aa6440bf3a82f4eda7e39ae64c6708c54c216cb96b72e1213b452
                2f8c9ba40db5d945b11b69b982c1bb9e3f3fac2bc369488f76b2383565d3fff9
                21f9664c97637da9768812f615c68b13b52es    c0875924c1c7987947deafd8780acf49r   )r   replacer   r   rt   rS   r#   r[   )
r$   r&   aadr   ivr'   r   r%   r   r   s
             r   test_encryptz#XChaCha20Poly1305Tests.test_encryptO  s   8
 rzz%-55dC@A34[\JK8
 rzz%-55dC@A;<"&&3b9c"55b9W%h'"&&3b9c!!"c*r   N)r   r   r   r1   r   r   r   r   r   r   F  s    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y)ChaCha20Poly1305FSMTestsr   r   r   r   r   r   c                 J   t        j                  | j                  | j                        }|j	                  | j
                        }|j                         }t        j                  | j                  | j                        }|j                  |       |j                  |       y r_   )	r   r   r   r   r!   r   ra   r"   ru   r$   r%   r'   rU   s       r   -test_valid_init_encrypt_decrypt_digest_verifyzFChaCha20Poly1305FSMTests.test_valid_init_encrypt_decrypt_digest_verifyy  su     #&&4<<-1]]<^^DMM*mmo #&&4<<-1]]<rcr   c                 ^   t        j                  | j                  | j                        }|j	                  | j
                         |j                         }t        j                  | j                  | j                        }|j	                  | j
                         |j                  |       y r_   )r   r   r   r   rt   r   ra   ru   r$   r%   rU   s      r   $test_valid_init_update_digest_verifyz=ChaCha20Poly1305FSMTests.test_valid_init_update_digest_verify  sw     #&&4<<-1]]<dmm$mmo #&&4<<-1]]<dmm$cr   c                    t        j                  | j                  | j                        }|j	                  | j
                         |j                  | j
                        }|j                         }t        j                  | j                  | j                        }|j	                  | j
                         |j                  |       |j                  |       y r_   )
r   r   r   r   rt   r   r!   ra   r"   ru   r   s       r   test_valid_full_pathz-ChaCha20Poly1305FSMTests.test_valid_full_path  s     #&&4<<-1]]<dmm$^^DMM*mmo #&&4<<-1]]<dmm$rcr   c                 z    t        j                  | j                  | j                        }|j	                          y r_   )r   r   r   r   ra   r@   s     r   test_valid_init_digestz/ChaCha20Poly1305FSMTests.test_valid_init_digest  s(    "&&4<<-1]]<r   c                     t        j                  | j                  | j                        }|j	                         }t        j                  | j                  | j                        }|j                  |       y r_   )r   r   r   r   ra   ru   r   s      r   test_valid_init_verifyz/ChaCha20Poly1305FSMTests.test_valid_init_verify  sS    "&&4<<-1]]<mmo"&&4<<-1]]<cr   c                 z   dD ]  }d d| j                   | j                   dz   fD ]  }t        j                  | j                  | j                        }||j                  |       t        ||      } || j                           || j                           || j                           || j                            y )NrI   s   333   3r   )r   r   r   r   r   rt   rJ   )r$   method_namerv   r%   methods        r   &test_valid_multiple_encrypt_or_decryptz?ChaCha20Poly1305FSMTests.test_valid_multiple_encrypt_or_decrypt  s    / 	&K"FDMM"mmd24 
&	*..4<<59]]D(MM), 5t}}%t}}%t}}%t}}%
&	&r   c                    t        j                  | j                  | j                        }|j	                  | j
                         |j                         }t        d      D ]"  }| j                  ||j                                $ t        j                  | j                  | j                        }|j	                  | j
                         t        d      D ]  }|j                  |        y )Nr         )
r   r   r   r   rt   r   ra   rh   r#   ru   )r$   r%   	first_macxs       r   $test_valid_multiple_digest_or_verifyz=ChaCha20Poly1305FSMTests.test_valid_multiple_digest_or_verify  s    "&&4<<-1]]<dmm$MMO	q 	9AY8	9 #&&4<<-1]]<dmm$q 	%AMM)$	%r   c                    t        j                  | j                  | j                        }|j	                  | j
                         |j                  | j
                        \  }}t        j                  | j                  | j                        }|j	                  | j
                         |j                  ||      }| j                  | j
                  |       y r_   )	r   r   r   r   rt   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]]<dmm$++DMM:C #&&4<<-1]]<dmm$&&r3/+r   c           	      D   dD ]  \  }}dD ]  }t        j                  | j                  | j                        }|r|j	                  | j
                          t        ||      | j
                         | j                  t        t        ||      | j
                           y )N)rI   )r"   r!   )TFr   )	r   r   r   r   rt   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&L,&3 1"*..4<<59]]D%MM$--0--dmm<!!)WV\-J"&--11		1r   c                    dD ]  }t        j                  | j                  | j                        }|j	                  | j
                         |j                          | j                  t        t        ||      | j
                         t        j                  | j                  | j                        }|j                  | j
                          y )N)r!   rt   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    . 
	5K&**t||15@FNN4==)MMOi)E"mm- '**t||15@F%%dmm4
	5r   c                 r   t        j                  | j                  | j                        }|j	                  | j
                        }|j                         }dD ][  }t        j                  | j                  | j                        }|j                  |       |j                  |       | j                  t        t        ||      | j
                         t        j                  | j                  | j                        }|j                  |       |j                  |       | j                  t        t        ||      | j
                         t        j                  | j                  | j                        }|j                  ||       | j                  t        t        ||      | j
                         ^ y )Nr   )r"   rt   )r   r   r   r   r!   r   ra   r"   ru   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  sI   "&&4<<-1]]<^^DMM*mmo. 	-K&**t||15@FNN2MM#i)E"mm- '**t||15@FNN2MM#i)E"mm- '**t||15@F%%b#.i)E"mm-%	-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   s  s]    Y+Gj"-Hj"-H &% ,15-r   r   c                 X    t        | j                  dd      j                  dd            S )N  :)r   r   )r   s    r   compactr     s%    QYYsB'//R899r   c                       e Zd ZdZddgZeD  cg c];  }|D cg c]-  }t        |j                  dd      j                  dd            / c}= c}}}} Zd Zyc c}w c c}}}} w )	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 08r   r   r   c                    | j                   D ]  \  }}}}}}t        j                  ||      }|j                  |       |j	                  |      \  }}	| j                  ||       | j                  ||	       t        j                  ||      }|j                  |       |j                  ||      }
| j                  ||
        y r_   )test_vectorsr   r   rt   rS   r#   r[   )r$   
assoc_datar&   r'   rU   r   r   r%   rz   mac2r(   s              r   runTestzTestVectorsRFC.runTestb  s    373D3D 	&/JBS%&**s%@FMM*%11"5ICR%S$' '**s%@FMM*%++B4CR%	&r   N)	r   r   r   __doc__test_vectors_hexr   r   r   r   ).0tvr   r   s   0000r   r   r     sf    !	
,'	
/?B \lllUWRPYqyyb199#rBCPlL& Qls   	A!
2AA!
A!
r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestVectorsWycheproofc                 ^    t         j                  j                  |        || _        d| _        y )NNone)unittestTestCase__init___wycheproof_warnings_id)r$   wycheproof_warningss     r   r   zTestVectorsWycheproof.__init__t  s%    ""4($7!r   c                 :    d }d }t        d|dd|id|i      }|S )Nc                     | d   dz  S )NtagSizer+   r   )groups    r   
filter_tagz4TestVectorsWycheproof.load_tests.<locals>.filter_tag{  s    #q((r   c                     | d   S )N	algorithmr   )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  s9    	)	% ..F/7/M9?8M:Dj9Q	S
 r   c                     g | _         | j                   j                  | j                  d             | j                   j                  | j                  d             y )Nzchacha20_poly1305_test.jsonzxchacha20_poly1305_test.json)r   extendr   r7   s    r   setUpzTestVectorsWycheproof.setUp  s=    t'DEFt'EFGr   c                     | j                   S N)r   r7   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescription  s    xxr   c                     |j                   r>| j                  r1dd l}|j                  d| j                  d|j
                  d       y y y )Nr   zWycheproof warning: z ())warningr   warningswarnr   comment)r$   r   r   s      r   r   zTestVectorsWycheproof.warn  s4    ::$33MM488RZZPQ 4:r   c                 4   d|j                   d|j                  | _        	 t        j                  |j
                  |j                        }|j                  |j                         |j                  |j                        \  }}|j                  rJ| j                  ||j                          | j                  ||j"                         | j%                  |       y y # t        $ r0}t        |j                        dvrdt        |      v sJ Y d }~y d }~ww xY w)NzWycheproof Encrypt  Test #r   r+   r   Nonce must be)r   idr   r   r   r   r   r:   r-   strrt   r   rS   msgvalidr#   r'   r   r   )r$   r   r%   er'   r   s         r   r   z"TestVectorsWycheproof.test_encrypt  s    79wwF	&**rvvRUUCF
 	bff++BFF3C88R'S"&&)IIbM   	ruu:W,CF1JJ	s   +C 	D'&DDc                 J   d|j                   d|j                  | _        	 t        j                  |j
                  |j                        }|j                  |j                         	 |j                  |j                  |j                        }|j                  sJ | j!                  ||j"                         | j%                  |       y # t        $ r0}t        |j                        dvrdt        |      v sJ Y d }~y d }~ww xY w# t        $ r |j                  rJ Y y w xY w)NzWycheproof Decrypt r   r   r  r  )r   r  r   r   r   r   r   r:   r-   r  rt   r   r[   r'   r   r  r#   r  r   )r$   r   r%   r  r&   s        r   test_decryptz"TestVectorsWycheproof.test_decrypt  s    79wwF	&**rvvRUUCF
 	bff	**255"&&9B 88OR(IIbM  	ruu:W,CF1JJ	  	 xxx	 s)   +C *&D 	D&D  DD"!D"c                    dt        |j                        z   | _        t        |j                        dk(  st        |j
                        dk  ry t        j                  |j                  |j                        }|j                  |j                         t        |j
                  dt        |j
                        dz
  z  dz         }| j                  t        |j                  ||j                         y )Nz3Wycheproof Corrupt Decrypt ChaCha20-Poly1305 Test #r   rY   r          )r  r  r   r-   r   r'   r   r   r   rt   r   r
   r5   r:   r[   r   )r$   r   r%   
ct_corrupts       r   test_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypt  s    H3ruu:Uruu:?c"%%j1n"&&266?bffBEE7c"%%j1n#=#GH
*f&?&?RVVTr   c                     | j                   D ]5  }| j                  |       | j                  |       | j                  |       7 y 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   r   r   r   r   r   r  s2    
H
R
 &U*r   r   c                       e Zd Zd Zy)
TestOutputc                    d}d}t        j                  ||      }d}|j                  |      }t        d      }t        j                  ||      }|j                  ||      }| j	                  ||       | j	                  |d        t        j                  ||      }|j                  ||      }| j	                  ||       | j	                  |d        t        t        d            }t        j                  ||      }|j                  ||       | j	                  ||       t        j                  ||      }|j                  ||       | j	                  ||       t        j                  ||      }| j                  t        |j                  |d       t        j                  ||      }| j                  t        |j
                  |d       t        d      }t        j                  ||      }| j                  t        |j                  ||       t        j                  ||      }| j                  t        |j
                  ||       y )	Ns    44444444444444444444444444444444s   555555555555r   s   5555555555555555r   )outputs   0000000000000000rn   )
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  s    "&&3e<^^B2"&&3e<nnRn/V$d#"&&3e<nnRn/V$d#IbM*"&&3e<r&)V$"&&3e<r&)V$"&&3e<)V^^RH"&&3e<)V^^RH"1"&&3e<*fnnbP"&&3e<*fnnbPr   N)r   r   r   r   r   r   r   r  r    s    *Qr   r  c                     | j                  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3E	_344E	_566E	nE	#$7899E	jl^ELr   __main__c                  >    t        j                  t                      y r   )r   	TestSuiter  r   r   r   suiter    s    9;'r   r  )defaultTest)r   binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.Util.py3compatr   Crypto.Cipherr   Crypto.Hashr	   rZ   r
   r   r   r   r   r   r   r   r   r  r  r   r  mainr   r   r   <module>r'     s   >   5 ? ) +   %8T1H-- T1n*+X.. *+Za-x00 a-H:T&X&& T&nT*H-- T*n,Q"" ,Q^  
 z(HMMg& r   