
    9iM                        S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	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 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\R8                  " SS9  gg)    N)	unhexlify)list_test_cases)load_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128)strxorc                 Z    [         R                  " [        U 5      S9R                  U5      $ )N)data)r	   newr   read)taglengths     _/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/Crypto/SelfTest/Cipher/test_SIV.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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Srg)SivTests1   key_256    key_3840   key_512@   	nonce_128   r      c                    U R                   U R                  U R                  4 H  n[        R                  " U[        R
                  U R                  S9n[        SS5      nUR                  U5      u  pE[        R                  " U[        R
                  U R                  S9nUR                  XE5      nU R                  X65        M     g )Nnonce	plaintexti@  )r   r   r   r   r   MODE_SIVnonce_96r   encrypt_and_digestdecrypt_and_verifyassertEqual)selfkeycipherptctmacpt2s          r   test_loopback_128SivTests.test_loopback_1289   s    <<t||;CWWS#,,dmmDFX6B//3GBWWS#,,dmmDF++B4CR% <r   c                    [         R                  " U R                  [         R                  5        [         R                  " U R                  [         R                  U R                  5      nUR                  U R                  5      u  p#[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5      u  pEU R                  X#-   XE-   5        g Nr!   )r   r   r   r$   r%   r&   r   r(   )r)   r+   ct1tag1ct2tag2s         r   
test_nonceSivTests.test_nonceC   s    cll+s||T]]C--dii8	s||4==I--dii8	SZ0r   c                 ~    U R                  [        [        R                  U R                  [        R
                  SS9  g )Ntest12345678r!   )assertRaises	TypeErrorr   r   r   r$   r)   s    r   test_nonce_must_be_bytes!SivTests.test_nonce_must_be_bytesN   s,    )SWWdllCLL / 	 	1r   c                 :   U R                  [        [        R                  U R                  [        R
                  SS9  [        SS5       HN  n[        R                  " U R                  [        R
                  [        S5      U-  S9nUR                  S5        MP     g )Nr   r!      r      )	r<   
ValueErrorr   r   r   r$   ranger   r&   )r)   xr+   s      r   test_nonce_lengthSivTests.test_nonce_lengthR   sn    *cggt||S\\ # 	 	% q#AWWT\\3<<tAw{KF%%g. r   c                     [         R                  " U R                  [         R                  U R                  S9nU R                  UR                  [         R                  5        g r3   )r   r   r   r$   r%   r(   
block_sizer)   r+   s     r   test_block_size_128SivTests.test_block_size_128[   s:    s||4==I**CNN;r   c                 P   [         R                  " U R                  [         R                  U R                  S9nU R                  UR                  U R                  5        U R                  [        [         R                  " U R                  [         R                  5      S5      5        g )Nr!   r"   )	r   r   r   r$   r%   r(   r"   assertFalsehasattrrK   s     r   test_nonce_attributeSivTests.test_nonce_attribute_   sb    s||4==It}}5 	s||!DgNOr   c           	         U R                  [        [        R                  U R                  [        R
                  U R                  S5        U R                  [        [        R                  U R                  [        R
                  U R                  SS9  [        R                  " U R                  [        R
                  U R                  SS9  g )N   )r"   unknownF)r"   	use_aesni)r<   r=   r   r   r   r$   r%   r>   s    r   test_unknown_parameters SivTests.test_unknown_parametersf   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        U R                  [        UR                  U R                  5        [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        U R                  [        UR                  U R                  U R                  5        g r3   )r   r   r   r$   r%   r&   r   r<   r=   decryptr'   rK   s     r   test_encrypt_excludes_decrypt&SivTests.test_encrypt_excludes_decryptq   s    s||4==I!!$)),)V^^TYY?s||4==I!!$)),)V%>%>))TYY	0r   c                 j   [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  S5        [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  SS5        g )Nr!   ztest1234567890-*s   xxxx)	r   r   r   r$   r%   r<   r=   encryptr'   rK   s     r   test_data_must_be_bytes SivTests.test_data_must_be_bytes{   sr    s||4==I)V^^5HIs||4==I)V%>%>-w	8r   c                     [         R                  " U R                  [         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%   r&   r   r(   len)r)   r+   _r.   s       r   test_mac_lenSivTests.test_mac_len   sJ    s||4==I**4995S2&r   c                    SSK Jn  [        R                  " U R                  [        R
                  U R                  S9nUR                  U R                  5      u  p4U" US5      n[        R                  " U R                  [        R
                  U R                  S9nU R                  [        UR                  UU5        g )Nr   )strxor_cr!   rB   )Crypto.Util.strxorrh   r   r   r   r$   r%   r&   r   r<   rD   r'   )r)   rh   r+   r-   r.   invalid_macs         r   test_invalid_macSivTests.test_invalid_mac   s    /s||4==I++DII6sD)s||4==I*f&?&?%	'r   c                 x   [         R                  " U R                  [         R                  U R                  S9nUR                  5       nU R                  UR                  5       [        U5      5        [         R                  " U R                  [         R                  U R                  S9nUR                  U5        g r3   )
r   r   r   r$   r%   	hexdigestr(   digestr   	hexverify)r)   r+   mac_hexs      r   test_hex_macSivTests.test_hex_mac   su    s||4==I""$)G*<=s||4==I!r   c                 V   [        U R                  5      n[        U R                  5      n[        U R                  5      n[        U R                  5      n[        R
                  " U R                  [        R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      u  pg[        R
                  " U[        R                  US9nSUS S& SUS S& UR                  U5        SUS S& UR                  U5      u  pU 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[        R
                  " U[        R                  US9nSUS S& SUS S& UR                  U5        SUS S& UR                  X5      nU R                  U R                  U5        g Nr!   s      )	bytearrayr   r%   r   r   r   r$   updater&   r(   r"   r'   r)   r*   r"   r   headercipher1r-   r   cipher2ct_testtag_testct_batag_bacipher3pt_tests                  r   test_bytearraySivTests.test_bytearray   s    %$--(#499%''$,,,, $/ 	tyy!,,TYY7''#,, %' "BQ#bq	v$r
#66t<%'6 %$--(499%"3''#,, %' "BQ#bq	v$r
,,U;G,r   c                    [        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[
        R                  " U R                  [
        R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      u  pg[
        R                  " U[
        R                  US9nSUS S& SUS S& UR                  U5        SUS S& UR                  U5      u  pU 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[
        R                  " U[
        R                  US9nSUS S& SUS S& UR                  U5        SUS S& UR                  X5      nU R                  U R                  U5        g ru   )
memoryviewrw   r   r%   r   r   r   r$   rx   r&   r(   r"   r'   ry   s                  r   test_memoryviewSivTests.test_memoryview   s    4<<019T]]34)DII./Idii01''$,,,, $/ 	tyy!,,TYY7''#,, %' "BQ#bq	v$r
"55d;%'6 4<<019T]]34Idii019R=)IcN+''#,, %' "BQ#bq	v$r
,,U;G,r   c                    Sn[         R                  " U R                  [         R                  U R                  S9nUR                  U5      u  p4[        S5      n[         R                  " U R                  [         R                  U R                  S9nUR                  XS9u  pgU R                  X55        U R                  US 5        U R                  XG5        [         R                  " U R                  [         R                  U R                  S9nUR                  X4US9nU R                  X5        U R                  US 5        g Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r!   r   output)	r   r   r   r$   r%   r&   rw   r(   r'   )r)   r,   r+   r-   r   r   restag_outs           r   test_output_paramSivTests.test_output_param   s    s||4==I++B/3s||4==I000C$d#&s||4==I'''?$d#r   c                 (   Sn[         R                  " U R                  [         R                  U R                  S9nUR                  U5      u  p4[        [        S5      5      n[         R                  " U R                  [         R                  U R                  S9nUR                  XS9  U R                  X55        [         R                  " U R                  [         R                  U R                  S9nUR                  X4US9  U R                  X5        g r   )
r   r   r   r$   r%   r&   r   rw   r(   r'   )r)   r,   r+   r-   r   r   s         r   test_output_param_memoryview%SivTests.test_output_param_memoryview  s    s||4==I++B/IcN+s||4==I!!"!4$s||4==I!!"&!9$r   c                    SnSU-  n[         R                  " U R                  [         R                  U R                  S9nUR                  U5      u  pE[         R                  " U R                  [         R                  U R                  S9nU R                  [        UR
                  USU-  S9  [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  XESU-  S9  [        US-
  5      n[         R                  " U R                  [         R                  U R                  S9nU R                  [        UR
                  X&S9  [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  XEUS9  g )Nr      5r!      0r   rB   )r   r   r   r$   r%   r&   r<   r=   r'   rw   rD   )r)   LEN_PTr,   r+   r-   r   shorter_outputs          r   test_output_param_negSivTests.test_output_param_neg  sE   F]s||4==I++B/s||4==I)V%>%>4RX=Ys||4==I)V%>%>PTW]P]^"6A:.s||4==I*f&?&?[s||4==I*f&?&?Q_`r    N)__name__
__module____qualname____firstlineno__r   r   r   r   r%   r   r0   r8   r?   rG   rL   rQ   rW   r[   r_   re   rk   rr   r   r   r   r   r   __static_attributes__r   r   r   r   r   1   s    Y+GY+GY+Gk2.H&#&D&	11/<P	!08'
	'"+-Z+-Z$$%a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g)SivFSMTestsi*  r   r   r%   r   r   r   c                     [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  S5        g Nr!   s   xxx)r   r   r   r$   r%   r<   r=   r^   rK   s     r   test_invalid_init_encrypt%SivFSMTests.test_invalid_init_encrypt0  9    s||#}}.)V^^V<r   c                     [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  S5        g r   )r   r   r   r$   r%   r<   r=   rZ   rK   s     r   test_invalid_init_decrypt%SivFSMTests.test_invalid_init_decrypt6  r   r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  5       n[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U5        g r3   )	r   r   r   r$   r%   rx   r   ro   verifyr)   r+   r.   s      r   $test_valid_init_update_digest_verify0SivFSMTests.test_valid_init_update_digest_verify<  s     s||#}}.dii mmo s||#}}.dii cr   c                     [         R                  " U R                  [         R                  U R                  S9nUR                  5         g r3   )r   r   r   r$   r%   ro   rK   s     r   test_valid_init_digest"SivFSMTests.test_valid_init_digestJ  s)    s||4==Ir   c                 &   [         R                  " U R                  [         R                  U R                  S9nUR                  5       n[         R                  " U R                  [         R                  U R                  S9nUR                  U5        g r3   )r   r   r   r$   r%   ro   r   r   s      r   test_valid_init_verify"SivFSMTests.test_valid_init_verifyO  sU    s||4==Immos||4==Icr   c                    [         R                  " U R                  [         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                  [         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%   rx   r   ro   rE   r(   r   )r)   r+   	first_macrF   s       r   $test_valid_multiple_digest_or_verify0SivFSMTests.test_valid_multiple_digest_or_verifyW  s    s||4==Idii MMO	qAY8  s||4==Idii qAMM)$ r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      u  p#[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  X#5      nU R                  U R                  U5        g r3   )
r   r   r   r$   r%   rx   r   r&   r'   r(   )r)   r+   r-   r.   r,   s        r   0test_valid_encrypt_and_digest_decrypt_and_verify<SivFSMTests.test_valid_encrypt_and_digest_decrypt_and_verifye  s    s||4==Idii ++DII6 s||4==Idii &&r/B'r   c                     [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5      u  p#U R                  [        UR
                  S5        g )Nr!   r   )	r   r   r   r$   r%   r&   r   r<   r=   r)   r+   r-   r   s       r   (test_invalid_multiple_encrypt_and_digest4SivFSMTests.test_invalid_multiple_encrypt_and_digestq  sN    s||4==I++DII6)V%>%>Dr   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5      u  p#[         R                  " U R                  [         R                  U R                  S9nUR                  X#5        U R                  [        UR                  X#5        g r3   )
r   r   r   r$   r%   r&   r   r'   r<   r=   r   s       r   (test_invalid_multiple_decrypt_and_verify4SivFSMTests.test_invalid_multiple_decrypt_and_verifyv  sz    s||4==I++DII6s||4==I!!"*)V%>%>Hr   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   *  sU    Y+Gj"-H&#&D==
%
(E
Ir   r   c                     U S   R                  S5       Vs/ s H  n[        U5      PM     sn/nX SS  Vs/ s H  n[        U5      PM     sn-  nU S   (       a  [        U S   5      nOS nX#/-  nU$ s  snf s  snf )Nr   -rB   r   )splitr   )tvrF   new_tvr"   s       r   	transformr     s~    %'U[[%56%5y|%567F
1g.g	!g..F	!u"Q% 
iFM 7.s
   A3A8c                   t    \ rS rSrSrSS/r\ V VVs/ s H  n[        U5      PM     snnn rS rSr	gs  snnn f )TestVectorsi  z6Class exercising the SIV test vectors found in RFC5297)0101112131415161718191a1b1c1d1e1f2021222324252627112233445566778899aabbccddee40c02b9690c4dc04daef7f6afe5c 85632d07c6e8f37f950acd320a2ecc93@fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfeffN)ze00112233445566778899aabbccddeeffdeaddadadeaddadaffeeddccbbaa99887766554433221100-102030405060708090a0^7468697320697320736f6d6520706c61696e7465787420746f20656e6372797074207573696e67205349562d414553^cb900f2fddbe404326601965c889bf17dba77ceb094fa663b7a3f748ba8af829ea64ad544a272e9c485b62a3fd5c0d 7bdb6e3b432667eb06f4d14bff2fbd0f@7f7e7d7c7b7a79787776757473727170404142434445464748494a4b4c4d4e4f 09f911029d74e35bd84156c5635688c0c                    U R                    H  u  pp4pV[        R                  " U[        R                  US9nU H  nUR	                  U5        M     UR                  U5      u  pU R                  X95        U R                  XJ5        [        R                  " U[        R                  US9nU H  nUR	                  U5        M     UR                  X45      nU R                  X+5        M     g r3   )test_vectorsr   r   r$   rx   r&   r(   r'   )r)   
assoc_datar,   r-   r.   r*   r"   r+   rF   r6   mac2r/   s               r   runTestTestVectors.runTest  s    373D3D/JBS WWS#,,e<Fa   11"5ICR%S' WWS#,,e<Fa   ++B4CR% 4Er   r   N)
r   r   r   r   __doc__test_vectors_hexr   r   r   r   ).0r   r   s   000r   r   r     s>    @
, .>?-=rYr]-=?L& @s   3r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestVectorsWycheproofi  c                 P    [         R                  R                  U 5        SU l        g NNoneunittestTestCase__init___idr>   s    r   r   TestVectorsWycheproof.__init__      ""4(r   c                 (    [        SSS5      U l        g )NCipher
wycheproofzaes_siv_cmac_test.jsonzWycheproof AES SIVr   r   r>   s    r   setUpTestVectorsWycheproof.setUp  s    ./G/G/CEr   c                     U R                   $ Nr   r>   s    r   shortDescription&TestVectorsWycheproof.shortDescription      xxr   c                 l   S[        UR                  5      -   U l        [        R                  " UR
                  [        R                  5      nUR                  UR                  5        UR                  UR                  5      u  p4UR                  (       a  U R                  XC-   UR                  5        g g )Nz!Wycheproof Encrypt AES-SIV Test #)stridr   r   r   r*   r$   rx   aadr&   msgvalidr(   r-   r)   r   r+   r-   r   s        r   test_encrypt"TestVectorsWycheproof.test_encrypt  sv    6RUUC.bff++BFF388SXruu- r   c                    S[        UR                  5      -   U l        [        R                  " UR
                  [        R                  5      nUR                  UR                  5         UR                  UR                  SS  UR                  S S 5      nUR                  (       d   eU R                  X1R                  5        g ! [         a    UR                  (       a   e g f = f)Nz!Wycheproof Decrypt AES_SIV Test #rb   )r   r   r   r   r   r*   r$   rx   r   r'   r-   r   r(   r   rD   r)   r   r+   r,   s       r   test_decrypt"TestVectorsWycheproof.test_decrypt  s    6RUUC.bff	)**255:ruuSbzBB 88O8R(	  	 xx<x	 s   ),C C$#C$c                 n    U R                    H%  nU R                  U5        U R                  U5        M'     g r   r   r  r  r)   r   s     r   r   TestVectorsWycheproof.runTest  ,    ''Bb!b! r   r   r   Nr   r   r   r   r   r   r   r  r  r   r   r   r   r   r   r     s!    E
.)"r   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestVectorsWycheproof2i  c                 P    [         R                  R                  U 5        SU l        g r   r   r>   s    r   r   TestVectorsWycheproof2.__init__  r   r   c                 (    [        SSS5      U l        g )Nr   zaead_aes_siv_cmac_test.jsonzWycheproof AEAD SIVr   r>   s    r   r   TestVectorsWycheproof2.setUp  s    ./G/L/DFr   c                     U R                   $ r   r   r>   s    r   r   'TestVectorsWycheproof2.shortDescription  r   r   c                    S[        UR                  5      -   U l        [        R                  " UR
                  [        R                  UR                  S9nUR                  UR                  5        UR                  UR                  5      u  p4UR                  (       a7  U R                  X1R                  5        U R                  XAR                  5        g g )Nz&Wycheproof Encrypt AEAD-AES-SIV Test #r!   )r   r   r   r   r   r*   r$   ivrx   r   r&   r   r   r(   r-   r   r   s        r   r  #TestVectorsWycheproof2.test_encrypt  s    ;c"%%jHRUU;bff++BFF388R'S&&) r   c                    S[        UR                  5      -   U l        [        R                  " UR
                  [        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                  X1R                  5        g ! [          a    UR                  (       a   e g f = f)Nz&Wycheproof Decrypt AEAD-AES-SIV Test #r!   )r   r   r   r   r   r*   r$   r  rx   r   r'   r-   r   r   r(   r   rD   r  s       r   r  #TestVectorsWycheproof2.test_decrypt  s    ;c"%%jHRUU;bff	)**255"&&9B 88O8R(	  	 xx<x	 s   2&C C'&C'c                 n    U R                    H%  nU R                  U5        U R                  U5        M'     g r   r  r	  s     r   r   TestVectorsWycheproof2.runTest  r  r   r  Nr  r   r   r   r  r    s!    F
*)"r   r  c                     U R                  S5      n/ nU[        [        5      -  nU[        [        5      -  nU[	        5       /-  nU[        5       /-  nU[        5       /-  nU$ )Nwycheproof_warnings)getr   r   r   r   r   r  )configr  testss      r   	get_testsr"    sk     **%:;E	_X&&E	_[))E	{}E	$&((E	%'))ELr   __main__c                  >    [         R                  " [        5       5      $ r   )r   	TestSuiter"  r   r   r   <lambda>r&  '  s    H&&y{3r   suite)defaultTest)jsonr   binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.Util.py3compatr   r   Crypto.Cipherr   Crypto.Hashr	   ri   r
   r   r   r   r   r   r   r   r  r"  r   r'  mainr   r   r   <module>r1     s   >    5 ? /    %8vax   varRI(## RIj6&(## 6&r("H-- ("V)"X.. )"X  	 z3EMMg& r   