
    9iw                        S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S	 r " S
 S\ R                   5      r " S S\ R                   5      r " S S\ R                   5      rS r " S S\ R                   5      r " S S\ R                   5      r " S S\ R                   5      r0 4S jr\S:X  a  S r\ R6                  " SS9  gg)    N)	unhexlify)list_test_casesload_test_vectors_wycheproof)tobytes)ChaCha20_Poly1305)SHAKE128)strxorc                 Z    [         R                  " [        U 5      S9R                  U5      $ )N)data)r	   newr   read)taglengths     m/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/Crypto/SelfTest/Cipher/test_ChaCha20_Poly1305.pyget_tag_randomr   +   s     <<WS\*//77    c                       \ rS rSr\" SS5      r\" SS5      r\" SS5      rS rS	 r	S
 r
S rS rS rS rS rS rS rS rS rS rS rS rS rSrg)ChaCha20Poly1305Tests/   key_256    nonce_96   data_128   c                 &   [         R                  " U R                  U R                  S9n[	        SS5      nUR                  U5      n[         R                  " U R                  U R                  S9nUR                  U5      nU R                  X$5        g )Nkeynonce	plaintexti@  )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                 B   [         R                  " U R                  SS9nU R                  [	        UR
                  5      S5        [         R                  " U R                  SS9nU R                  [	        UR
                  5      S5        [         R                  " U R                  S9nUR
                  n[         R                  " U R                  S9nUR
                  nU R                  [	        U5      S5        U R                  X#5        [         R                  " U R                  U R                  S9nUR                  U R                  5      n[         R                  " U R                  U R                  S9nU R                  XAR                  U R                  5      5        g )Ns   HHHHHHHHr      s   HHHHHHHHHHHHr   r   )
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                 `    U R                  [        [        R                  U R                  SS9  g )Ntest12345678r   assertRaises	TypeErrorr   r   r   r%   s    r   test_nonce_must_be_bytes.ChaCha20Poly1305Tests.test_nonce_must_be_bytesY   s*    )+//"ll / 	 	1r   c                     U R                  [        [        R                  U R                  SS9  U R                  [        [        R                  U R                  SS9  g )Ns   0000000r   r   )r8   
ValueErrorr   r   r   r:   s    r   test_nonce_length'ChaCha20Poly1305Tests.test_nonce_length_   sT    *+//"ll ( 	 	* 	*+//"ll # 	 	%r   c                     [         R                  " U R                  U R                  S9nU R	                  [        US5      5        g )Nr   
block_size)r   r   r   r   assertFalsehasattrr%   r&   s     r   test_block_size%ChaCha20Poly1305Tests.test_block_sizej   s4    "&&4<<-1]]<67r   c                    [         R                  " U R                  U R                  S9nU R	                  UR
                  U R                  5        [         R                  " U R                  S9R
                  n[         R                  " U R                  S9R
                  nU R	                  [        U5      S5        U R                  X#5        g )Nr   r.   r   )r   r   r   r   r$   r    r/   r0   )r%   r&   r1   r2   s       r   test_nonce_attribute*ChaCha20Poly1305Tests.test_nonce_attributep   s    "&&4<<-1]]<t}}5 #&&4<<8>>"&&4<<8>>Vb)F+r   c                 `    U R                  [        [        R                  U R                  SS9  g )N	   )r   paramr7   r:   s    r   test_unknown_parameters-ChaCha20Poly1305Tests.test_unknown_parameters{   s*    )+//"ll ! 	 	#r   c                     S HO  n[         R                  " U R                  U R                  S9n[	        X!5      " S5      nU R                  US5        MQ     g )Nr"   r#   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   [         R                  " U R                  U R                  S9nUR	                  S5        U R                  [        UR                  S5        [         R                  " U R                  U R                  S9nUR                  S5        U R                  [        UR                  S5        g )Nr   r   )r   r   r   r   r"   r8   r9   r#   rE   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                 ,   [         R                  " U R                  U R                  S9nU R	                  [
        UR                  S5        [         R                  " U R                  U R                  S9nU R	                  [
        UR                  S5        g )Nr   ztest1234567890-*)r   r   r   r   r8   r9   r"   r#   rE   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                     [         R                  " U R                  U R                  S9nUR	                  U R
                  5      u  p#U R                  [        U5      S5        g )Nr   r   )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                 D   SSK Jn  [        R                  " U R                  U R
                  S9nUR                  U R                  5      u  p4U" US5      n[        R                  " U R                  U R
                  S9nU R                  [        UR                  UU5        g )Nr   )strxor_cr      )Crypto.Util.strxorrd   r   r   r   r   r^   r   r8   r>   decrypt_and_verify)r%   rd   r&   r(   r`   invalid_macs         r   test_invalid_mac&ChaCha20Poly1305Tests.test_invalid_mac   s~    /"&&4<<-1]]<++DMM:sD)"&&4<<-1]]<*f&?&?%	'r   c                 <   [         R                  " U R                  U R                  S9nUR	                  5       nU R                  UR                  5       [        U5      5        [         R                  " U R                  U R                  S9nUR                  U5        g Nr   )	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                 R   [        SS5      n[        SS5      n[        R                  " U R                  U R                  S9nUR                  U5        UR                  U5      u  pES nS H  n[        R                  " U R                  U R                  S9nU" X5       H  nUR                  U5        M     Sn	U" XG5       H  nXR                  U5      -  n	M     U R                  X)5        UR                  U5        M     S H  n[        R                  " U R                  U R                  S9nU" X5       H  nUR                  U5        M     Sn
U" X'5       H  nXR                  U5      -  n
M     U R                  XJ5        U R                  UR                  5       U5        M     g )Nzauthenticated data   r!   r   c                 b    [        S[        U 5      U5       Vs/ s H	  o X"U-    PM     sn$ s  snf )Nr   )ranger/   )r   chunk_lengthis      r   break_up;ChaCha20Poly1305Tests.test_message_chunks.<locals>.break_up   s?    49!SY 5" # 5"q\>* 5" # # #s   ,)
re            
      r   (   P      r   )r   r   r   r   r   updater^   r#   r$   verifyr"   rn   )r%   	auth_datar!   r&   
ciphertextref_macry   rw   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                    [        U R                  5      n[        U R                  5      n[        U R                  5      n[        U R                  5      n[        R
                  " U R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      nUR                  5       n[        R
                  " U R                  U R                  S9nSUS S& SUS S& UR                  U5        SUS S& UR                  U5      n	SUS S& UR                  5       n
U R                  Xi5        U R                  Xz5        U R                  UR                  UR                  5        [        U R                  5      n[        U R                  5      n[        U R                  5      n[        U5      n[        U5      nA[        R
                  " U R                  U R                  S9nSUS S& SUS S& UR                  U5        SUS S& UR                  U5      nSUS S& UR                  U5        U R                  XR                  5        g Nr   s   r|   s   )	bytearrayr   r   r   r   r   r   r"   rn   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!'	"1//'*%>>#%'6 4<<(T]]+dmm,	"3#''DLL.2mm=$r
&!y!'	"1//%(#bq	v--0r   c                 \   [        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[
        R                  " U R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      nUR                  5       n[
        R                  " U R                  U R                  S9nSUS S& SUS S& UR                  U5        SUS S& UR                  U5      n	SUS S& UR                  5       n
U R                  Xi5        U R                  Xz5        U R                  UR                  UR                  5        [        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U5      5      n[        [        U5      5      nA[
        R                  " U R                  U R                  S9nSUS S& SUS S& UR                  U5        SUS S& UR                  U5      nSUS S& UR                  U5        U R                  XR                  5        g r   )
memoryviewr   r   r   r   r   r   r   r"   rn   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!'	"1//'*%>>#%'6 Idll34i67y78	9R=)IcN+#''DLL.2mm=$r
&!y!'	"1//%(#bq	v--0r    N)__name__
__module____qualname____firstlineno__r   r   r   r   r*   r3   r;   r?   rF   rI   rN   rU   rX   r[   ra   ri   rq   r   r   r   __static_attributes__r   r   r   r   r   /   sy    Y+Gj"-Hj"-H	"<21	%8	,#*	:J''"*7X.1`.1r   r   c                        \ rS rSrS rS rSrg)XChaCha20Poly1305TestsiF  c                     [         R                  " SSS9nU R                  [        UR                  5      S5        U R                  UR                  S5        g )Ns    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYs   HHHHHHHHHHHHHHHHHHHHHHHHr      )r   r   r$   r/   r    rE   s     r   r3   !XChaCha20Poly1305Tests.test_nonceH  sD    "&&9-68V\\*B/y1r   c                 0   Sn[        UR                  SS5      R                  SS5      5      n[        S5      n[        S5      n[        S5      nSn[        UR                  SS5      R                  SS5      5      n[        S	5      n[        R                  " X4S
9nUR	                  U5        UR                  U5      u  pU R                  XX5        U R                  Xi5        [        R                  " X4S
9nUR	                  U5        UR                  XV5        g )Ns(  
                4c616469657320616e642047656e746c656d656e206f662074686520636c6173
                73206f66202739393a204966204920636f756c64206f6666657220796f75206f
                6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73
                637265656e20776f756c642062652069742e   
r       s   50515253c0c1c2c3c4c5c6c7s@   808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fs0   404142434445464748494a4b4c4d4e4f5051525354555657s(  
                bd6d179d3e83d43b9576579493c0e939572a1700252bfaccbed2902c21396cbb
                731c7f1b0b4aa6440bf3a82f4eda7e39ae64c6708c54c216cb96b72e1213b452
                2f8c9ba40db5d945b11b69b982c1bb9e3f3fac2bc369488f76b2383565d3fff9
                21f9664c97637da9768812f615c68b13b52es    c0875924c1c7987947deafd8780acf49r   )r   replacer   r   r   r^   r$   rg   )
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   r3   r   r   r   r   r   r   r   F  s    2!+r   r   c                       \ rS rSr\" SS5      r\" SS5      r\" SS5      rS rS	 r	S
 r
S rS rS rS rS rS rS rS rSrg)ChaCha20Poly1305FSMTestsis  r   r   r   r   r   r   c                 B   [         R                  " U R                  U R                  S9nUR	                  U R
                  5      nUR                  5       n[         R                  " U R                  U R                  S9nUR                  U5        UR                  U5        g rl   )	r   r   r   r   r"   r   rn   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                 V   [         R                  " U R                  U R                  S9nUR	                  U R
                  5        UR                  5       n[         R                  " U R                  U R                  S9nUR	                  U R
                  5        UR                  U5        g rl   )r   r   r   r   r   r   rn   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                    [         R                  " U R                  U R                  S9nUR	                  U R
                  5        UR                  U R
                  5      nUR                  5       n[         R                  " U R                  U R                  S9nUR	                  U R
                  5        UR                  U5        UR                  U5        g rl   )
r   r   r   r   r   r   r"   rn   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                 v    [         R                  " U R                  U R                  S9nUR	                  5         g rl   )r   r   r   r   rn   rE   s     r   test_valid_init_digest/ChaCha20Poly1305FSMTests.test_valid_init_digest  s(    "&&4<<-1]]<r   c                     [         R                  " U R                  U R                  S9nUR	                  5       n[         R                  " U R                  U R                  S9nUR                  U5        g rl   )r   r   r   r   rn   r   r   s      r   test_valid_init_verify/ChaCha20Poly1305FSMTests.test_valid_init_verify  sS    "&&4<<-1]]<mmo"&&4<<-1]]<cr   c                 ~   S H  nS SU R                   U R                   S-   4 H  n[        R                  " U R                  U R                  S9nUb  UR                  U5        [        X15      nU" U R                   5        U" U R                   5        U" U R                   5        U" U R                   5        M     M     g )NrQ   s   333   3r   )r   r   r   r   r   r   rR   )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                    [         R                  " U R                  U R                  S9nUR	                  U R
                  5        UR                  5       n[        S5       H"  nU R                  X!R                  5       5        M$     [         R                  " U R                  U R                  S9nUR	                  U R
                  5        [        S5       H  nUR                  U5        M     g )Nr         )
r   r   r   r   r   r   rn   rv   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                    [         R                  " U R                  U R                  S9nUR	                  U R
                  5        UR                  U R
                  5      u  p#[         R                  " U R                  U R                  S9nUR	                  U R
                  5        UR                  X#5      nU R                  U R
                  U5        g rl   )	r   r   r   r   r   r   r^   rg   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           	      L   S H  u  pS H  n[         R                  " U R                  U R                  S9nU(       a  UR	                  U R
                  5        [        XA5      " U R
                  5        U R                  [        [        XB5      U R
                  5        M     M     g )N)rQ   )r#   r"   )TFr   )	r   r   r   r   r   r   rR   r8   r9   )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                    S H  n[         R                  " U R                  U R                  S9nUR	                  U R
                  5        UR                  5         U R                  [        [        X!5      U R
                  5        [         R                  " U R                  U R                  S9nUR                  U R
                  5        M     g )N)r"   r   r   )r   r   r   r   r"   r   rn   r8   r9   rR   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                 ^   [         R                  " U R                  U R                  S9nUR	                  U R
                  5      nUR                  5       nS GHR  n[         R                  " U R                  U R                  S9nUR                  U5        UR                  U5        U R                  [        [        X5      U R
                  5        [         R                  " U R                  U R                  S9nUR                  U5        UR                  U5        U R                  [        [        X5      U R
                  5        [         R                  " U R                  U R                  S9nUR                  X#5        U R                  [        [        X5      U R
                  5        GMU     g )Nr   )r#   r   )r   r   r   r   r"   r   rn   r#   r   r8   r9   rR   rg   )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   r   r   r   s  s]    Y+Gj"-Hj"-H &% ,15-r   r   c                 X    [        U R                  SS5      R                  SS5      5      $ )N  :)r   r   )r   s    r   compactr     s%    QYYsB'//R899r   c                       \ rS rSrSrSS/r\ V VVVs/ s H>  o Vs/ s H.  n[        UR                  SS5      R                  SS5      5      PM0     snPM@     snnnn rS r	S	r
g
s  snf s  snnnn f )TestVectorsRFCi  z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                 t   U R                    H  u  pp4pV[        R                  " XVS9nUR                  U5        UR	                  U5      u  pU R                  X85        U R                  XI5        [        R                  " XVS9nUR                  U5        UR                  X45      n
U R                  X*5        M     g rl   )test_vectorsr   r   r   r^   r$   rg   )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)r   r   r   r   __doc__test_vectors_hexr   r   r   r   r   ).0tvr   r   s   0000r   r   r     sm    !	
,'	
/?B \ll[kUWRPRYqyyb199#rBCRP[klL& Qls   	A*
5A%A*
%A*
r   c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)TestVectorsWycheproofir  c                 \    [         R                  R                  U 5        Xl        SU l        g )NNone)unittestTestCase__init___wycheproof_warnings_id)r%   wycheproof_warningss     r   r   TestVectorsWycheproof.__init__t  s#    ""4($7!r   c                 4    S nS n[        SUSSU0SU0S9nU$ )Nc                     U S   S-  $ )NtagSizer-   r   )groups    r   
filter_tag4TestVectorsWycheproof.load_tests.<locals>.filter_tag{  s    #q((r   c                     U S   $ )N	algorithmr   )roots    r   filter_algo5TestVectorsWycheproof.load_tests.<locals>.filter_algo~  s    $$r   )Cipher
wycheproofzWycheproof ChaCha20-Poly1305algotag_size)root_tag	group_tagr   )r%   filenamer	  r  rT   s        r   
load_tests TestVectorsWycheproof.load_testsy  s9    	)	% ..F/7/M9?8M:Dj9Q	S
 r   c                     / U l         U R                   R                  U R                  S5      5        U R                   R                  U R                  S5      5        g )Nzchacha20_poly1305_test.jsonzxchacha20_poly1305_test.json)r   extendr  r:   s    r   setUpTestVectorsWycheproof.setUp  s=    t'DEFt'EFGr   c                     U R                   $ N)r  r:   s    r   shortDescription&TestVectorsWycheproof.shortDescription  s    xxr   c                     UR                   (       aE  U R                  (       a3  SS KnUR                  SU R                  < SUR
                  < S35        g g g )Nr   zWycheproof warning: z ())warningr  warningswarnr  comment)r%   r   r$  s      r   r%  TestVectorsWycheproof.warn  s4    ::$33MM488RZZPQ 4:r   c                 B   SUR                   < SUR                  < 3U l         [        R                  " UR
                  UR                  S9nUR                  UR                  5        UR                  UR                  5      u  pEUR                  (       aH  U R                  XAR                   5        U R                  XQR"                  5        U R%                  U5        g g ! [         a4  n[        UR                  5      S;  a  S[        U5      ;   d   e S nAg S nAff = f)NzWycheproof Encrypt  Test #r   r-   r   Nonce must be)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88R'S&&)IIbM   	ruu:W,CF1JJJ	s   )C   
D**DDc                 h   SUR                   < SUR                  < 3U l         [        R                  " UR
                  UR                  S9nUR                  UR                  5         UR                  UR                  UR                  5      nUR                  (       d   eU R!                  XAR"                  5        U R%                  U5        g ! [         a4  n[        UR                  5      S;  a  S[        U5      ;   d   e S nAg S nAff = f! [         a    UR                  (       a   e g f = f)NzWycheproof Decrypt r)  r   r*  r+  )r  r,  r  r   r   r   r   r>   r/   r-  r   r   rg   r(   r   r/  r$   r.  r%  )r%   r   r&   r0  r'   s        r   test_decrypt"TestVectorsWycheproof.test_decrypt  s    79wwF	&**rvvRUUCF
 	bff	**255"&&9B 88O8R(IIbM  	ruu:W,CF1JJJ	  	 xx<x	 s)   )C *&D 
D*D		DD10D1c                    S[        UR                  5      -   U l        [        UR                  5      S:X  d  [        UR
                  5      S:  a  g [        R                  " UR                  UR                  S9nUR                  UR                  5        [        UR
                  S[        UR
                  5      S-
  -  S-   5      nU R                  [        UR                  X1R                  5        g )Nz3Wycheproof Corrupt Decrypt ChaCha20-Poly1305 Test #r   re   r          )r-  r,  r  r/   r   r(   r   r   r   r   r   r
   r8   r>   rg   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                     U R                    H6  nU R                  U5        U R                  U5        U R                  U5        M8     g r  )r   r   r3  r9  )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   r3  r9  r   r   r   r   r   r   r   r  s2    
H
R
 &U*r   r   c                       \ rS rSrS rSrg)
TestOutputi  c                 2   SnSn[         R                  " XS9nSnUR                  U5      n[        S5      n[         R                  " XS9nUR                  XFS9nU R	                  XV5        U R	                  US 5        [         R                  " XS9nUR                  XVS9nU R	                  XF5        U R	                  US 5        [        [        S5      5      n[         R                  " XS9nUR                  XFS9  U R	                  XV5        [         R                  " XS9nUR                  XVS9  U R	                  XF5        [         R                  " XS9nU R                  [        UR                  USS9  [         R                  " XS9nU R                  [        UR
                  USS9  [        S5      n[         R                  " XS9nU R                  [        UR                  XHS9  [         R                  " XS9nU R                  [        UR
                  XXS9  g )	Ns    44444444444444444444444444444444s   555555555555r   s   5555555555555555r   )outputs   0000000000000000r}   )
r   r   r"   r   r$   r#   r   r8   r9   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   r   r>  r>    s    *Qr   r>  c                     U R                  S5      n/ nU[        [        5      -  nU[        [        5      -  nU[        [        5      -  nU[        5       /-  nU[        U5      /-  nU[        5       /-  nU$ )Nr  )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                  @    [         R                  " [        5       5        g 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	   rf   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   