+
    '(jw                        ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt R	 t ! R
 R] P                   4      t ! R R] P                   4      t ! R R] P                   4      tR t ! R R] P                   4      t ! R R] P                   4      t ! R R] P                   4      t/ 3R lt]R8X  d   R t] P6                  ! RR7       R# R# )    N)	unhexlify)list_test_casesload_test_vectors_wycheproof)tobytes)ChaCha20_Poly1305)SHAKE128)strxorc                 `    \         P                  ! \        V 4      R 7      P                  V4      # ))data)r	   newr   read)taglengths   &&b/home/ubuntu/cf-venv/lib/python3.14/site-packages/Crypto/SelfTest/Cipher/test_ChaCha20_Poly1305.pyget_tag_randomr   +   s     <<WS\*//77    c                      a  ] tR t^/t o ]! R^ 4      t]! R^4      t]! R^4      tR tR t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tRtV tR# )ChaCha20Poly1305Testskey_256nonce_96data_128c                4   \         P                  ! V P                  V P                  R 7      p\	        RR4      pVP                  V4      p\         P                  ! V P                  V P                  R 7      pVP                  V4      pV P                  W$4       R# )keynonce	plaintextNi@  )r   r   r   r   r   encryptdecryptassertEqual)selfcipherptctpt2s   &    r   test_loopback#ChaCha20Poly1305Tests.test_loopback5   sr    "&&4<<-1]]<K2^^B"&&4<<-1]]<nnR !r   c                h   \         P                  ! V P                  RR7      pV P                  \	        VP
                  4      ^4       \         P                  ! V P                  RR7      pV P                  \	        VP
                  4      ^4       \         P                  ! V P                  R7      pVP
                  p\         P                  ! V P                  R7      pVP
                  pV P                  \	        V4      ^4       V P                  W#4       \         P                  ! V P                  V P                  R7      pVP                  V P                  4      p\         P                  ! V P                  V P                  R7      pV P                  WAP                  V P                  4      4       R# )   Hr   r   Ns   HHHHHHHHs   HHHHHHHHHHHH)
r   r   r   r    lenr   assertNotEqualr   r   r   )r!   r"   nonce1nonce2r$   s   &    r   
test_nonce ChaCha20Poly1305Tests.test_nonce@   s+   "&&4<<-57V\\*A."&&4<<-68V\\*B/ #&&4<<8"&&4<<8Vb)F+"&&4<<-1]]<^^DMM*"&&4<<-1]]<^^DMM:;r   c                h    V P                  \        \        P                  V P                  R R7       R# )test12345678r   NassertRaises	TypeErrorr   r   r   r!   s   &r   test_nonce_must_be_bytes.ChaCha20Poly1305Tests.test_nonce_must_be_bytesY   s*    )+//"ll / 	 	1r   c                    V P                  \        \        P                  V P                  RR7       V P                  \        \        P                  V P                  RR7       R# )   0r   r   Ns   0000000)r4   
ValueErrorr   r   r   r6   s   &r   test_nonce_length'ChaCha20Poly1305Tests.test_nonce_length_   sT    *+//"ll ( 	 	* 	*+//"ll # 	 	%r   c                    \         P                  ! V P                  V P                  R 7      pV P	                  \        VR4      4       R# )r   
block_sizeN)r   r   r   r   assertFalsehasattrr!   r"   s   & r   test_block_size%ChaCha20Poly1305Tests.test_block_sizej   s4    "&&4<<-1]]<67r   c                   \         P                  ! V P                  V P                  R 7      pV P	                  VP
                  V P                  4       \         P                  ! V P                  R7      P
                  p\         P                  ! V P                  R7      P
                  pV P	                  \        V4      ^4       V P                  W#4       R# )r   r*   N)r   r   r   r   r    r   r+   r,   )r!   r"   r-   r.   s   &   r   test_nonce_attribute*ChaCha20Poly1305Tests.test_nonce_attributep   s    "&&4<<-1]]<t}}5 #&&4<<8>>"&&4<<8>>Vb)F+r   c                h    V P                  \        \        P                  V P                  ^	R7       R# )	   )r   paramNr3   r6   s   &r   test_unknown_parameters-ChaCha20Poly1305Tests.test_unknown_parameters{   s*    )+//"ll ! 	 	#r   c                    R FR  p\         P                  ! V P                  V P                  R7      p\	        W!4      ! R4      pV P                  VR4       KT  	  R# )r   r   r   Nr   r   )r   r   r   r   getattrr    )r!   funcr"   results   &   r   test_null_encryption_decryption5ChaCha20Poly1305Tests.test_null_encryption_decryption   sI    (D&**t||15@FV*3/FVS)	 )r   c                ~   \         P                  ! V P                  V P                  R 7      pVP	                  R4       V P                  \        VP                  R4       \         P                  ! V P                  V P                  R 7      pVP                  R4       V P                  \        VP                  R4       R# )r   r   N)r   r   r   r   r   r4   r5   r   rB   s   & r   test_either_encrypt_or_decrypt4ChaCha20Poly1305Tests.test_either_encrypt_or_decrypt   s    "&&4<<-1]]<s)V^^S9"&&4<<-1]]<s)V^^S9r   c                :   \         P                  ! V P                  V P                  R 7      pV P	                  \
        VP                  R4       \         P                  ! V P                  V P                  R 7      pV P	                  \
        VP                  R4       R# )r   ztest1234567890-*N)r   r   r   r   r4   r5   r   r   rB   s   & r   test_data_must_be_bytes-ChaCha20Poly1305Tests.test_data_must_be_bytes   sj    "&&4<<-1]]<)V^^5HI"&&4<<-1]]<)V^^5HIr   c                    \         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4      w  r#V P                  \        V4      ^4       R# r   N)r   r   r   r   encrypt_and_digestr   r    r+   )r!   r"   _macs   &   r   test_mac_len"ChaCha20Poly1305Tests.test_mac_len   sI    "&&4<<-1]]<**4==9S2&r   c                R   ^ RI Hp \        P                  ! V P                  V P
                  R7      pVP                  V P                  4      w  r4V! V^4      p\        P                  ! V P                  V P
                  R7      pV P                  \        VP                  VV4       R# )r   )strxor_cr   N)Crypto.Util.strxorrb   r   r   r   r   r\   r   r4   r;   decrypt_and_verify)r!   rb   r"   r$   r^   invalid_macs   &     r   test_invalid_mac&ChaCha20Poly1305Tests.test_invalid_mac   s~    /"&&4<<-1]]<++DMM:sD)"&&4<<-1]]<*f&?&?%	'r   c                J   \         P                  ! V P                  V P                  R 7      pVP	                  4       pV P                  VP                  4       \        V4      4       \         P                  ! V P                  V P                  R 7      pVP                  V4       R# r[   )	r   r   r   r   	hexdigestr    digestr   	hexverify)r!   r"   mac_hexs   &  r   test_hex_mac"ChaCha20Poly1305Tests.test_hex_mac   ss    "&&4<<-1]]<""$)G*<="&&4<<-1]]<!r   c                v   \        R ^4      p\        R^4      p\        P                  ! V P                  V P                  R7      pVP                  V4       VP                  V4      w  rER pR F  p\        P                  ! V P                  V P                  R7      pV! W4       F  pVP                  V4       K  	  Rp	V! WG4       F  pWP                  V4      ,          p	K  	  V P                  W)4       VP                  V4       K  	  R F  p\        P                  ! V P                  V P                  R7      pV! W4       F  pVP                  V4       K  	  Rp
V! W'4       F  pWP                  V4      ,          p
K  	  V P                  WJ4       V P                  VP                  4       V4       K  	  R# )zauthenticated datar   r   c                 h    \        ^ \        V 4      V4       Uu. uF  q W"V,            NK  	  up# u upi )r   )ranger+   )r   chunk_lengthis   && r   break_up;ChaCha20Poly1305Tests.test_message_chunks.<locals>.break_up   s?    49!SY 5" # 5"q\>* 5" # # #s   /r   N)
            
         (   P      )r   r   r   r   r   updater\   r   r    verifyr   rj   )r!   	auth_datar   r"   
ciphertextref_macrt   rr   chunkr%   ct2s   &          r   test_message_chunks)ChaCha20Poly1305Tests.test_message_chunks   sx    ##7=	";4	"&&4<<-1]]<i $77	B
	#
 @L&**t||15@F "):e$ ;C!*;~~e,, <Y,MM'" @ @L&**t||15@F "):e$ ;C!):~~e,, ;Z-V]]_g6 @r   c                   \        V P                  4      p\        V P                  4      p\        V P                  4      p\        V P                  4      p\        P
                  ! V P                  V P                  R 7      pVP                  V P                  4       VP                  V P                  4      pVP                  4       p\        P
                  ! V P                  V P                  R 7      pRVR&   RVR&   VP                  V4       RVR&   VP                  V4      p	RVR&   VP                  4       p
V P                  Wi4       V P                  Wz4       V P                  VP                  VP                  4       \        V P                  4      p\        V P                  4      p\        V P                  4      p\        V4      p\        V4      p?\        P
                  ! V P                  V P                  R 7      pRVR&   RVR&   VP                  V4       RVR&   VP                  V4      pRVR&   VP                  V4       V P                  WP                  4       R# r   s   :Nrx   Ns   N)	bytearrayr   r   r   r   r   r   r   rj   r    r   r   r   )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_bytearray$ChaCha20Poly1305Tests.test_bytearray   s    4<<(T]]+dmm,	DMM*#''DLL.2mm=t}}%__T]]+nn#''DLL.2mm=$r
&y!'	"//'*%>>#%'6 4<<(T]]+dmm,	"3#''DLL.2mm=$r
&y!'	"//%(#b	v--0r   c                p   \        \        V P                  4      4      p\        \        V P                  4      4      p\        \        V P                  4      4      p\        \        V P                  4      4      p\
        P                  ! V P                  V P                  R 7      pVP                  V P                  4       VP                  V P                  4      pVP                  4       p\
        P                  ! V P                  V P                  R 7      pRVR&   RVR&   VP                  V4       RVR&   VP                  V4      p	RVR&   VP                  4       p
V P                  Wi4       V P                  Wz4       V P                  VP                  VP                  4       \        \        V P                  4      4      p\        \        V P                  4      4      p\        \        V P                  4      4      p\        \        V4      4      p\        \        V4      4      p?\
        P                  ! V P                  V P                  R 7      pRVR&   RVR&   VP                  V4       RVR&   VP                  V4      pRVR&   VP                  V4       V P                  WP                  4       R# r   )
memoryviewr   r   r   r   r   r   r   r   rj   r    r   r   r   )r!   key_mvnonce_mv	header_mvdata_mvr   r$   r   r   r   r   ct_mvtag_mvr   r   s   &              r   test_memoryview%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!'	"//'*%>>#%'6 Idll34i67y78	9R=)IcN+#''DLL.2mm=$r
&y!'	"//%(#b	v--0r    N)__name__
__module____qualname____firstlineno__r   r   r   r   r&   r/   r7   r<   rC   rF   rK   rR   rU   rX   r_   rf   rm   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r   r   /   s     Y+Gj"-Hj"-H	"<21	%8	,#*	:J''"*7X.1`.1 .1r   r   c                   ,   a  ] tR tRt o R tR tRtV tR# )XChaCha20Poly1305TestsiF  c                    \         P                  ! RRR7      pV P                  \        VP                  4      ^4       V P                  VP                  R4       R# )   Yr   Ns    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYs   HHHHHHHHHHHHHHHHHHHHHHHH)r   r   r    r+   r   rB   s   & r   r/   !XChaCha20Poly1305Tests.test_nonceH  sD    "&&9-68V\\*B/y1r   c                >   R p\        VP                  RR4      P                  RR4      4      p\        R4      p\        R4      p\        R4      pRp\        VP                  RR4      P                  RR4      4      p\        R4      p\        P                  ! W4R	7      pVP	                  V4       VP                  V4      w  rV P                  WX4       V P                  Wi4       \        P                  ! W4R	7      pVP	                  V4       VP                  WV4       R
# )s(  
                4c616469657320616e642047656e746c656d656e206f662074686520636c6173
                73206f66202739393a204966204920636f756c64206f6666657220796f75206f
                6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73
                637265656e20776f756c642062652069742e   
r       s   50515253c0c1c2c3c4c5c6c7s@   808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fs0   404142434445464748494a4b4c4d4e4f5051525354555657s(  
                bd6d179d3e83d43b9576579493c0e939572a1700252bfaccbed2902c21396cbb
                731c7f1b0b4aa6440bf3a82f4eda7e39ae64c6708c54c216cb96b72e1213b452
                2f8c9ba40db5d945b11b69b982c1bb9e3f3fac2bc369488f76b2383565d3fff9
                21f9664c97637da9768812f615c68b13b52es    c0875924c1c7987947deafd8780acf49r   N)r   replacer   r   r   r\   r    rd   )
r!   r#   aadr   ivr$   r   r"   r   r   s
   &         r   test_encrypt#XChaCha20Poly1305Tests.test_encryptO  s    8
 rzz%-55dC@A34[\JK8
 rzz%-55dC@A;<"&&39c"55b9%'"&&39c!!"*r   r   N)r   r   r   r   r/   r   r   r   r   s   @r   r   r   F  s     2!+ !+r   r   c                      a  ] tR tRt o ]! R^ 4      t]! R^4      t]! R^4      tR tR t	R t
R tR	 tR
 tR tR tR tR tR tRtV tR# )ChaCha20Poly1305FSMTestsis  r   r   r   c                P   \         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4      pVP                  4       p\         P                  ! V P                  V P                  R 7      pVP                  V4       VP                  V4       R# r[   )	r   r   r   r   r   r   rj   r   r   r!   r"   r$   r^   s   &   r   -test_valid_init_encrypt_decrypt_digest_verifyFChaCha20Poly1305FSMTests.test_valid_init_encrypt_decrypt_digest_verifyy  su     #&&4<<-1]]<^^DMM*mmo #&&4<<-1]]<rcr   c                d   \         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4       VP                  4       p\         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4       VP                  V4       R# r[   )r   r   r   r   r   r   rj   r   r!   r"   r^   s   &  r   $test_valid_init_update_digest_verify=ChaCha20Poly1305FSMTests.test_valid_init_update_digest_verify  sw     #&&4<<-1]]<dmm$mmo #&&4<<-1]]<dmm$cr   c                   \         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4       VP                  V P
                  4      pVP                  4       p\         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4       VP                  V4       VP                  V4       R# r[   )
r   r   r   r   r   r   r   rj   r   r   r   s   &   r   test_valid_full_path-ChaCha20Poly1305FSMTests.test_valid_full_path  s     #&&4<<-1]]<dmm$^^DMM*mmo #&&4<<-1]]<dmm$rcr   c                ~    \         P                  ! V P                  V P                  R 7      pVP	                  4        R# r[   )r   r   r   r   rj   rB   s   & r   test_valid_init_digest/ChaCha20Poly1305FSMTests.test_valid_init_digest  s(    "&&4<<-1]]<r   c                    \         P                  ! V P                  V P                  R 7      pVP	                  4       p\         P                  ! V P                  V P                  R 7      pVP                  V4       R# r[   )r   r   r   r   rj   r   r   s   &  r   test_valid_init_verify/ChaCha20Poly1305FSMTests.test_valid_init_verify  sS    "&&4<<-1]]<mmo"&&4<<-1]]<cr   c                   R F  pRRV P                   V P                   R,           3 F  p\        P                  ! V P                  V P                  R7      pVe   VP                  V4       \        W14      pV! V P                   4       V! V P                   4       V! V P                   4       V! V P                   4       K  	  K  	  R# )r   Ns   333   3r   rN   )r   r   r   r   r   r   rO   )r!   method_namer   r"   methods   &    r   &test_valid_multiple_encrypt_or_decrypt?ChaCha20Poly1305FSMTests.test_valid_multiple_encrypt_or_decrypt  s    /K"FDMM"mmd24	*..4<<59]]D(MM), 5t}}%t}}%t}}%t}}%4 0r   c                   \         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4       VP                  4       p\        ^4       F"  pV P                  W!P                  4       4       K$  	  \         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4       \        ^4       F  pVP                  V4       K  	  R# r[   )
r   r   r   r   r   r   rj   rq   r    r   )r!   r"   	first_macxs   &   r   $test_valid_multiple_digest_or_verify=ChaCha20Poly1305FSMTests.test_valid_multiple_digest_or_verify  s    "&&4<<-1]]<dmm$MMO	qAY8  #&&4<<-1]]<dmm$qAMM)$ r   c                   \         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4       VP                  V P
                  4      w  r#\         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4       VP                  W#4      pV P                  V P
                  V4       R# r[   )	r   r   r   r   r   r   r\   rd   r    )r!   r"   r$   r^   r#   s   &    r   0test_valid_encrypt_and_digest_decrypt_and_verifyIChaCha20Poly1305FSMTests.test_valid_encrypt_and_digest_decrypt_and_verify  s    "&&4<<-1]]<dmm$++DMM: #&&4<<-1]]<dmm$&&r/+r   c           	     V   R F  w  rR F  p\         P                  ! V P                  V P                  R7      pV'       d   VP	                  V P
                  4       \        WA4      ! V P
                  4       V P                  \        \        WB4      V P
                  4       K  	  K  	  R# )r   r   N)rN   )r   r   )TF)	r   r   r   r   r   r   rO   r4   r5   )r!   method1_namemethod2_nameassoc_data_presentr"   s   &    r   #test_invalid_mixing_encrypt_decrypt<ChaCha20Poly1305FSMTests.test_invalid_mixing_encrypt_decrypt  s~    +C&L&3"*..4<<59]]D%MM$--0-dmm<!!)WV-J"&--1 '4+Cr   c                   R F  p\         P                  ! V P                  V P                  R7      pVP	                  V P
                  4       VP                  4        V P                  \        \        W!4      V P
                  4       \         P                  ! V P                  V P                  R7      pVP                  V P
                  4       K  	  R# )r   r   N)r   r   )r   r   r   r   r   r   rj   r4   r5   rO   r\   )r!   r   r"   s   &  r   +test_invalid_encrypt_or_update_after_digestDChaCha20Poly1305FSMTests.test_invalid_encrypt_or_update_after_digest  s    .K&**t||15@FNN4==)MMOi)E"mm- '**t||15@F%%dmm4 /r   c                x   \         P                  ! V P                  V P                  R 7      pVP	                  V P
                  4      pVP                  4       pR EF[  p\         P                  ! V P                  V P                  R 7      pVP                  V4       VP                  V4       V P                  \        \        W4      V P
                  4       \         P                  ! V P                  V P                  R 7      pVP                  V4       VP                  V4       V P                  \        \        W4      V P
                  4       \         P                  ! V P                  V P                  R 7      pVP                  W#4       V P                  \        \        W4      V P
                  4       EK^  	  R# )r   N)r   r   )r   r   r   r   r   r   rj   r   r   r4   r5   rO   rd   )r!   r"   r$   r^   r   s   &    r   +test_invalid_decrypt_or_update_after_verifyDChaCha20Poly1305FSMTests.test_invalid_decrypt_or_update_after_verify  s<   "&&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   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r   r   r   s  se     Y+Gj"-Hj"-H &% ,15- -r   r   c                 X    \        V P                  R R4      P                  RR4      4      # )  :)r   r   )r   s   &r   compactr     s%    QYYsB'//R899r   c                      a ] tR tRt oRtR	R
.t] U Uu. uF=  q  Uu. uF.  p\        VP                  RR4      P                  RR4      4      NK0  	  upNK?  	  upp tR t	Rt
VtR# u upi u upp i )TestVectorsRFCi  zTest cases from RFC7539r   r   r   c                   V P                    F  w  rr4rV\        P                  ! WVR 7      pVP                  V4       VP	                  V4      w  rV P                  W84       V P                  WI4       \        P                  ! WVR 7      pVP                  V4       VP                  W44      p
V P                  W*4       K  	  R# r[   )test_vectorsr   r   r   r\   r    rd   )r!   
assoc_datar#   r$   r^   r   r   r"   r   mac2r%   s   &          r   runTestTestVectorsRFC.runTestb  s    373D3D/JBS&**s@FMM*%11"5ICR%S' '**s@FMM*%++B4CR% 4Er   r   N)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 08)r   r   r   r   __doc__test_vectors_hexr   r   r   r   r   r   )tvr   r   s   00@r   r   r     su     !	
,'	
/?B \ll[kUWRPRYqyyb199#rBCRP[klL& & Qls   A*4A%A*%A*r   c                   V   a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tRtV tR# )TestVectorsWycheproofir  c                ^    \         P                  P                  V 4       Wn        R V n        R# )NoneN)unittestTestCase__init___wycheproof_warnings_id)r!   wycheproof_warningss   &&r   r   TestVectorsWycheproof.__init__t  s#    ""4($7!r   c                :    R  pR p\        RVRRV/RV/R7      pV# )c                 "    V R ,          ^,          # )tagSizer   )groups   &r   
filter_tag4TestVectorsWycheproof.load_tests.<locals>.filter_tag{  s    #q((r   c                     V R ,          # )	algorithmr   )roots   &r   filter_algo5TestVectorsWycheproof.load_tests.<locals>.filter_algo~  s    $$r   zWycheproof ChaCha20-Poly1305algotag_size)root_tag	group_tag)Cipher
wycheproofr   )r!   filenamer  r  rQ   s   &&   r   
load_tests TestVectorsWycheproof.load_testsy  s9    	)	% ..F/7/M9?8M:Dj9Q	S
 r   c                    . V n         V P                   P                  V P                  R 4      4       V P                   P                  V P                  R4      4       R# )zchacha20_poly1305_test.jsonzxchacha20_poly1305_test.jsonN)r   extendr  r6   s   &r   setUpTestVectorsWycheproof.setUp  s=    t'DEFt'EFGr   c                    V P                   # N)r   r6   s   &r   shortDescription&TestVectorsWycheproof.shortDescription  s    xxr   c                    VP                   '       dI   V P                  '       d5   ^ RIpVP                  RV P                  : RVP
                  : R24       R# R# R# )r   NzWycheproof warning: z ())warningr   warningswarnr   comment)r!   r   r!  s   && r   r"  TestVectorsWycheproof.warn  s9    :::$333MM488RZZPQ 4:r   c                V   R VP                   : RVP                  : 2V n         \        P                  ! VP
                  VP                  R7      pTP                  TP                  4       TP                  TP                  4      w  rETP                  '       dJ   T P                  YAP                   4       T P                  YQP"                  4       T P%                  T4       R# R#   \         d8   p\        TP                  4      R9  d   R\        T4      9   g   Q h Rp?R# Rp?ii ; i)zWycheproof Encrypt  Test #r   Nonce must beN      )r  idr   r   r   r   r   r;   r+   strr   r   r\   msgvalidr    r$   r   r"  )r!   r   r"   er$   r   s   &&    r   r   "TestVectorsWycheproof.test_encrypt  s    79wwF	&**rvvRUUCF
 	bff++BFF3888R'S&&)IIbM   	ruu:W,CF1JJJ	s   ,C& &D(1,D##D(c                   R VP                   : RVP                  : 2V n         \        P                  ! VP
                  VP                  R7      pTP                  TP                  4        TP                  TP                  TP                  4      pTP                  '       g   Q hT P!                  YAP"                  4       T P%                  T4       R#   \         d8   p\        TP                  4      R9  d   R\        T4      9   g   Q h Rp?R# Rp?ii ; i  \         d    TP                  '       d   Q h R# i ; i)zWycheproof Decrypt r&  r   r'  Nr(  )r  r+  r   r   r   r   r   r;   r+   r,  r   r   rd   r$   r   r.  r    r-  r"  )r!   r   r"   r/  r#   s   &&   r   test_decrypt"TestVectorsWycheproof.test_decrypt  s    79wwF	&**rvvRUUCF
 	bff	**255"&&9B 888O8R(IIbM  	ruu:W,CF1JJJ	  	 xxx<x	 s/   ,C -&D D ,DDD=7D=<D=c                   R \        VP                  4      ,           V n        \        VP                  4      ^ 8X  g   \        VP
                  4      ^8  d   R# \        P                  ! VP                  VP                  R7      pVP                  VP                  4       \        VP
                  R\        VP
                  4      ^,
          ,          R,           4      pV P                  \        VP                  W1P                  4       R# )z3Wycheproof Corrupt Decrypt ChaCha20-Poly1305 Test #Nr          )r,  r+  r   r+   r   r$   r   r   r   r   r   r
   r4   r;   rd   r   )r!   r   r"   
ct_corrupts   &&  r   test_corrupt_decrypt*TestVectorsWycheproof.test_corrupt_decrypt  s    H3ruu:Uruu:?c"%%j1n"&&266?bffBEE7c"%%j1n#=#GH
*f&?&?VVTr   c                    V P                    F6  pV P                  V4       V P                  V4       V P                  V4       K8  	  R # r  )r   r   r2  r8  )r!   r   s   & r   r   TestVectorsWycheproof.runTest  s:    ''Bb!b!%%b) r   )r   r   r   N)r   r   r   r   r   r  r  r  r"  r   r2  r8  r   r   r   r   s   @r   r   r   r  s:     
H
R
 &U* *r   r   c                   &   a  ] tR tRt o R tRtV tR# )
TestOutputi  c                   RpRp\         P                  ! WR7      pRpVP                  V4      p\        ^4      p\         P                  ! WR7      pVP                  WFR7      pV P	                  WV4       V P	                  VR4       \         P                  ! WR7      pVP                  WVR7      pV P	                  WF4       V P	                  VR4       \        \        ^4      4      p\         P                  ! WR7      pVP                  WFR7       V P	                  WV4       \         P                  ! WR7      pVP                  WVR7       V P	                  WF4       \         P                  ! WR7      pV P                  \        VP                  VRR7       \         P                  ! WR7      pV P                  \        VP
                  VRR7       \        ^4      p\         P                  ! WR7      pV P                  \        VP                  WHR7       \         P                  ! WR7      pV P                  \        VP
                  WXR7       R# )   4r   )outputNs    44444444444444444444444444444444s   555555555555s   5555555555555555s   0000000000000000)
r   r   r   r   r    r   r   r4   r5   r;   )	r!   r   r   r"   r#   r$   r@  resshorter_outputs	   &        r   r   TestOutput.runTest  s    "&&3<^^B2"&&3<nnRn/$d#"&&3<nnRn/$d#IbM*"&&3<r)$"&&3<r)$"&&3<)V^^RH"&&3<)V^^RH"1"&&3<*fnnbP"&&3<*fnnbPr   r   N)r   r   r   r   r   r   r   r   s   @r   r=  r=    s     *Q *Qr   r=  c                    V P                  R 4      p. pV\        \        4      ,          pV\        \        4      ,          pV\        \        4      ,          pV\        4       .,          pV\        V4      .,          pV\        4       .,          pV# )r   )getr   r   r   r   r   r   r=  )configr   testss   &  r   	get_testsrH    s~     **%:;E	_233E	_344E	_566E	nE	#$7899E	jl^ELr   __main__c                  B    \         P                  ! \        4       4       R # r  )r   	TestSuiterH  r   r   r   suiterL    s    9;'r   rL  )defaultTest)r   binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.Util.py3compatr   Crypto.Cipherr   Crypto.Hashr	   rc   r
   r   r   r   r   r   r   r   r   r=  rH  r   rL  mainr   r   r   <module>rU     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(MMg& r   