
    9i                        S SK Jr  S SKrS SKJr  S SKJr  S SKJrJ	r	  S SK
JrJr  S SKJr  S SKJr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 S\R*                  5      r " S S\R*                  5      r " S S\R*                  5      r\" SSSSS 05      =(       d    / r\\" SSSSS 05      =(       d    / -  r\" \5       H6  u  rr\ " \\!5      (       a  M  \4S jr"\#" \S \-  \"5        \#" \S \-  \"5        M8      " S! S"\R*                  5      r$ " S# S$\R*                  5      r%0 4S% jr&\'S&:X  a  S' r(\RR                  " S(S)9  gg)*    )print_functionN)	unhexlify)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128SHA256)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_GCM.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S rS rSrg)GcmTests2   key_128   	nonce_128   r      c                 b   [         R                  " U R                  [         R                  U R                  S9n[        SS5      nUR                  U5      n[         R                  " U R                  [         R                  U R                  S9nUR                  U5      nU R                  X$5        g )Nnonce	plaintexti@  )	r
   r   r   MODE_GCMnonce_96r   encryptdecryptassertEqual)selfcipherptctpt2s        r   test_loopback_128GcmTests.test_loopback_1288   st    s||4==IK2^^Bs||4==InnR !r   c                    [         R                  " U R                  [         R                  5        [         R                  " U R                  [         R                  U R                  5      nUR                  U R                  5      n[         R                  " U R                  [         R                  U R                  S9nU R                  X!R                  U R                  5      5        g Nr    )r
   r   r   r#   r$   r%   r   r'   )r(   r)   r+   s      r   
test_nonceGcmTests.test_nonceA   s    cll+s||T]]C^^DII&s||4==I^^DII67r   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!GcmTests.test_nonce_must_be_bytesK   s,    )SWWdllCLL / 	 	1r   c                 L   U R                  [        [        R                  U R                  [        R
                  SS9  [        SS5       HW  n[        R                  " U R                  [        R
                  [        S5      U-  S9nUR                  [        S5      5        MY     g )Nr   r       r   )	r5   
ValueErrorr
   r   r   r#   ranger	   r%   )r(   xr)   s      r   test_nonce_lengthGcmTests.test_nonce_lengthO   sp    *cggt||S\\ # 	 	% q#AWWT\\3<<tAw{KFNN47# r   c                     [         R                  " U R                  [         R                  U R                  S9nU R                  UR                  [         R                  5        g r0   )r
   r   r   r#   r$   r'   
block_sizer(   r)   s     r   test_block_size_128GcmTests.test_block_size_128X   s:    s||4==I**CNN;r   c                    [         R                  " U R                  [         R                  U R                  S9nU R                  UR                  U R                  5        [         R                  " U R                  [         R                  5      R                  n[         R                  " U R                  [         R                  5      R                  nU R                  [        U5      S5        U R                  X#5        g )Nr    r   )	r
   r   r   r#   r$   r'   r!   lenassertNotEqual)r(   r)   nonce1nonce2s       r   test_nonce_attributeGcmTests.test_nonce_attribute\   s    s||4==It}}5 s||4::s||4::Vb)F+r   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)r5   r6   r
   r   r   r#   r$   r7   s    r   test_unknown_parameters GcmTests.test_unknown_parametersf   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                     S H^  n[         R                  " U R                  [         R                  U R                  S9n[        X!5      " S5      nU R                  US5        M`     g )Nr%   r&   r    r   )r
   r   r   r#   r$   getattrr'   )r(   funcr)   results       r   test_null_encryption_decryption(GcmTests.test_null_encryption_decryptionq   sI    (DWWT\\3<<t}}MFV*3/FVS) )r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  S5        U R                  [        UR                  S5        [         R                  " U R                  [         R                  U R                  S9nUR                  S5        U R                  [        UR
                  S5        g )Nr    r   )	r
   r   r   r#   r$   r%   r5   r6   r&   rC   s     r   test_either_encrypt_or_decrypt'GcmTests.test_either_encrypt_or_decryptw   s    s||4==Is)V^^S9s||4==Is)V^^S9r   c                 h   [         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5        g )Nr    ztest1234567890-*)	r
   r   r   r#   r$   r5   r6   r%   r&   rC   s     r   test_data_must_be_bytes GcmTests.test_data_must_be_bytes   sl    s||4==I)V^^5HIs||4==I)V^^5HIr   c           	         U R                  [        [        R                  U R                  [        R
                  U R                  SS9  U R                  [        [        R                  U R                  [        R
                  U R                  SS9  [        SS5       Ht  n[        R                  " U R                  [        R
                  U R                  US9nUR                  U R                  5      u  p4U R                  [        U5      U5        Mv     [        R                  " U R                  [        R
                  U R                  S9nUR                  U R                  5      u  p4U R                  [        U5      S5        g )N   )r!   mac_len      r    r   )r5   r<   r
   r   r   r#   r$   r=   encrypt_and_digestr   r'   rG   )r(   rb   r)   _macs        r   test_mac_lenGcmTests.test_mac_len   s   *cggt||S\\ $q 	 	:*cggt||S\\ $t 	 	= Q'GWWT\\3<<t}}%,.F..tyy9FASXw/	 ( 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    r;   )Crypto.Util.strxorrk   r
   r   r   r#   r$   re   r   r5   r<   decrypt_and_verify)r(   rk   r)   r+   rg   invalid_macs         r   test_invalid_macGcmTests.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 r0   )
r
   r   r   r#   r$   	hexdigestr'   digestr   	hexverify)r(   r)   mac_hexs      r   test_hex_macGcmTests.test_hex_mac   su    s||4==I""$)G*<=s||4==I!r   c                    [        SS5      n[        SS5      n[        R                  " U R                  [        R                  U R
                  S9nUR                  U5        UR                  U5      u  pES nS H  n[        R                  " U R                  [        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                  [        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   )r=   rG   )r   chunk_lengthis      r   break_up.GcmTests.test_message_chunks.<locals>.break_up   s?    49!SY 5" # 5"q\>* 5" # # #s   ,)
r;      ra   rN   
      r   (   P   r   r   )r   r
   r   r   r#   r$   updatere   r&   r'   verifyr%   rs   )r(   	auth_datar"   r)   
ciphertextref_macr}   r{   chunkr,   ct2s              r   test_message_chunksGcmTests.test_message_chunks   su    ##7=	";4	s||4==Ii $77	B
	#
 @LWWT\\3<<t}}MF!):e$ ;C!*;~~e,, <Y,MM'" @ @LWWT\\3<<t}}MF!):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                  [        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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A[        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
5      5      nU R                  U R                  U5        g Nr    s   ra   )	bytearrayr   r$   r   r
   r   r#   r   r%   rs   r'   r!   rm   )r(   key_banonce_ba	header_badata_bacipher1r+   r   cipher2ct_testtag_testcipher4pt_tests                r   test_bytearrayGcmTests.test_bytearray   s    4<<(T]]+dii(	DII&''$,,,, $/ 	tyy!__TYY'nn''&,, (* %r
&!y!'	"1//'*%>>#%'6 4<<(T]]+dii(	''&,, (* %r
&!y!'	"1,,Yw-?8AT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      nUR                  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                  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A[
        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
5      5      nU R                  U R                  U5        g r   )
memoryviewr   r   r$   r   r
   r   r#   r   r%   rs   r'   r!   rm   )r(   key_mvnonce_mv	header_mvdata_mvr   r+   r   r   r   r   r   r   s                r   test_memoryviewGcmTests.test_memoryview  s    Idll34i67y34	Ytyy12''$,,,, $/ 	tyy!__TYY'nn''&,, (* %r
&!y!'	"1//'*%>>#%'6 Idll34i67y34	''&,, (* %r
&!y!'	"1,,Z-@*XBVWG,r   c                 H   Sn[         R                  " U R                  [         R                  U R                  S9nUR                  U5      nUR                  5       n[        S5      n[         R                  " U R                  [         R                  U R                  S9nUR                  XS9nU R                  X55        U R                  US 5        [         R                  " U R                  [         R                  U R                  S9nUR                  X5S9nU R                  X5        U R                  US 5        [         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%   rs   r   r'   r&   re   rm   )r(   r*   r)   r+   r   r   restag_outs           r   test_output_paramGcmTests.test_output_param4  s   s||4==I^^Bmmo3s||4==InnRn/$d#s||4==InnRn/$d#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      n[        [        S5      5      n[         R                  " U R                  [         R                  U R                  S9nUR                  XS9  U R                  X45        [         R                  " U R                  [         R                  U R                  S9nUR                  X4S9  U R                  X5        g r   )
r
   r   r   r#   r$   r%   r   r   r'   r&   )r(   r*   r)   r+   r   s        r   test_output_param_memoryview%GcmTests.test_output_param_memoryviewQ  s    s||4==I^^BIcN+s||4==Ir)$s||4==Ir)$r   c                    SnSU-  n[         R                  " U R                  [         R                  U R                  S9nUR                  U5      n[         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                  US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                  XES9  g )Nr      5r       0r   r;   )r
   r   r   r#   r$   r%   r5   r6   r&   r   r<   )r(   LEN_PTr*   r)   r+   shorter_outputs         r   test_output_param_negGcmTests.test_output_param_neg`  s2   F]s||4==I^^Bs||4==I)V^^RvNs||4==I)V^^RvN"6A:.s||4==I*fnnbPs||4==I*fnnbPr    N)__name__
__module____qualname____firstlineno__r   r   r$   r   r-   r1   r8   r?   rD   rK   rQ   rX   r[   r^   rh   ro   rv   r   r   r   r   r   r   __static_attributes__r   r   r   r   r   2   s    Y+Gk2.H&#&D"81$<,	!*:J'&	'"'7R--^--^$:%Q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)GcmFSMTestsit  r   r   r   r   r   r   c                 ~   [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5      nUR                  5       n[         R                  " U R                  [         R                  U R                  S9nUR                  U5        UR                  U5        g r0   )
r
   r   r   r#   r$   r%   r   rs   r&   r   r(   r)   r+   rg   s       r   -test_valid_init_encrypt_decrypt_digest_verify9GcmFSMTests.test_valid_init_encrypt_decrypt_digest_verifyz  s}     s||#}}.^^DII&mmo s||#}}.rc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 r0   )	r
   r   r   r#   r$   r   r   rs   r   r(   r)   rg   s      r   $test_valid_init_update_digest_verify0GcmFSMTests.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                  U R                  5        UR                  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5        UR                  U5        g r0   )r
   r   r   r#   r$   r   r   r%   rs   r&   r   r   s       r   test_valid_full_path GcmFSMTests.test_valid_full_path  s     s||#}}.dii ^^DII&mmo s||#}}.dii rcr   c                     [         R                  " U R                  [         R                  U R                  S9nUR                  5         g r0   )r
   r   r   r#   r$   rs   rC   s     r   test_valid_init_digest"GcmFSMTests.test_valid_init_digest  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 r0   )r
   r   r   r#   r$   rs   r   r   s      r   test_valid_init_verify"GcmFSMTests.test_valid_init_verify  sU    s||4==Immos||4==Icr   c                    S H  nS SU R                   U R                   S-   4 H  nUc  S nO[        U5      n[        R                  " U R                  [        R
                  U R                  S9nUb  UR                  U5        [        XA5      nU" U R                   5        U" U R                   5        U" U R                   5        U" U R                   5        M     M     g )NrT   s   333   3r    )	r   rG   r
   r   r   r#   r$   r   rU   )r(   method_namer   	assoc_lenr)   methods         r   &test_valid_multiple_encrypt_or_decrypt2GcmFSMTests.test_valid_multiple_encrypt_or_decrypt  s    /K"FDII"ii$.0	$ $I #IIs||'+}}6(MM), 5tyy!tyy!tyy!tyy!0 0r   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       rd   )r
   r   r   r#   r$   r   r   rs   r=   r'   r   )r(   r)   	first_macr>   s       r   $test_valid_multiple_digest_or_verify0GcmFSMTests.test_valid_multiple_digest_or_verify  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 r0   )
r
   r   r   r#   r$   r   r   re   rm   r'   )r(   r)   r+   rg   r*   s        r   0test_valid_encrypt_and_digest_decrypt_and_verify<GcmFSMTests.test_valid_encrypt_and_digest_decrypt_and_verify  s    s||4==Idii ++DII6 s||4==Idii &&r/B'r   c           	      j   S H  u  pS H  n[         R                  " U R                  [         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)rT   )r&   r%   )TFr    )
r
   r   r   r#   r$   r   r   rU   r5   r6   )r(   method1_namemethod2_nameassoc_data_presentr)   s        r   #test_invalid_mixing_encrypt_decrypt/GcmFSMTests.test_invalid_mixing_encrypt_decrypt  s    +C&L&3"s||'+}}6%MM$)),-dii8!!)WV-J"&))- '4+Cr   c                    S H  n[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  5         U R                  [        [        X!5      U R                  5        [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        M     g )N)r%   r   r    )r
   r   r   r#   r$   r%   r   rs   r5   r6   rU   re   )r(   r   r)   s      r   +test_invalid_encrypt_or_update_after_digest7GcmFSMTests.test_invalid_encrypt_or_update_after_digest  s    .KWWT\\3<<t}}MFNN499%MMOi)E"ii) WWT\\3<<t}}MF%%dii0 /r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5      nUR                  5       nS H  n[         R                  " U R                  [         R                  U R                  S9nUR                  U5        UR                  U5        U R                  [        [        X5      U R                  5        [         R                  " U R                  [         R                  U R                  S9nUR                  X#5        U R                  [        [        X5      U R                  5        M     g )Nr    )r&   r   )r
   r   r   r#   r$   r%   r   rs   r&   r   r5   r6   rU   rm   )r(   r)   r+   rg   r   s        r   +test_invalid_decrypt_or_update_after_verify7GcmFSMTests.test_invalid_decrypt_or_update_after_verify  s    s||4==I^^DII&mmo.KWWT\\3<<t}}MFNN2MM#i)E"ii) WWT\\3<<t}}MF%%b.i)E"ii) /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   t  s]    Y+Gk2.H&#&D 
"$%
(-	1)r   r   c                       \ rS rSrSr/ SQr\ V VVVs/ s H  o Vs/ s H  n[        U5      PM     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 )TestVectorsi	  zClass exercising the GCM test vectors found in
http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf)) r   r    58e2fccefa7e3061367f1d57a4e7455a 00000000000000000000000000000000000000000000000000000000)r   r    0388dace60b6a392f328c2b971b2fe78 ab6e47d42cec13bdf53a67b21257bddfr   r   )r   ڀd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255ڀ42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985 4d5c2af327cd64a62cf35abd2ba6fab4 feffe9928665731c6d6a8f9467308308cafebabefacedbaddecaf888)(feedfacedeadbeeffeedfacedeadbeefabaddad2xd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39x42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091 5bc94fbc3221a5db94fae95ae7121a47r   r   )r   r   x61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598 3612d2e79e3b0785561be14aaca2fccbr   cafebabefacedbad)r   r   x8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5 619cc5aefffe0bfa462af43c1699d050r   x9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b)r   r   r    cd33b28ac773f74ba00ed1f3125724350000000000000000000000000000000000000000000000000r   )r   r    98e7247c07f0fe411c267e4384b0f600 2ff58d80033927ab8ef4d4587514f0fbr  r   )r   r   ڀ3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256 9924a7c8587336bfb118024db8674a140feffe9928665731c6d6a8f9467308308feffe9928665731cr   )r   r   x3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710 2519498e80f1478f37ba55bd6d27618cr  r   )r   r   x0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7 65dcc57fcf623a24094fcca40d3533f8r  r   )r   r   xd27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b dcf566ff291c25bbb8568fc3d376a6d9r  r   )r   r   r    530f8afbc74536b9a963b4f1c4cb738b@0000000000000000000000000000000000000000000000000000000000000000r   )r   r    cea7403d4d606b6e074ec5d3baf39d18 d0d1c8a799996bf0265b98b5d48ab919r  r   )r   r   ڀ522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad b094dac5d93471bdec1a502270e3cc6c@feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308r   )r   r   x522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662 76fc6ece0f4e1768cddf8853bb2d551br  r   )r   r   xc3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f 3a337dbf46a792c45e454913fe2ea8f2r  r   )r   r   x5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f a44a8266ee1c8eb0c8b5d4cf5ae9f19ar  r   c           	         U R                    H  u  pp4pV[        R                  " U[        R                  U[	        U5      S9nUR                  U5        UR                  U5      u  pU R                  X85        U R                  XI5        [        R                  " U[        R                  U[	        U5      S9nUR                  U5        UR                  X45      n
U R                  X*5        M     g )N)rb   )	test_vectorsr
   r   r#   rG   r   re   r'   rm   )r(   
assoc_datar*   r+   rg   keyr!   r)   r   mac2r,   s              r   runTestTestVectors.runTest  s    373D3D/JBS WWS#,,s3xHFMM*%11"5ICR%S' WWS#,,s3xHFMM*%++B4CR% 4Er   r   N)
r   r   r   r   __doc__test_vectors_hexr   r  r   r   ).0tvr>   r   s   0000r   r   r   	  sK    fn` :JJ9I22.2aYq\2.9IJL& /Js   	A

AA

A

r   c                   $    \ rS rSrSrS rS rSrg)TestVectorsGueronKrasnovi  zClass exercising the GCM test vectors found in
'The fragility of AES-GCM authentication algorithm', Gueron, Krasnov
https://eprint.iacr.org/2013/157.pdfc                    [        S5      n[        S5      n[        S5      n[        S5      n[        R                  " U[        R                  U5      R	                  U5      nU R                  XER                  5       5        g )N 3da6c536d6295579c0959a7043efb5032b926197d34e091ef722db94ڠ00000000000000000000000000000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f 69dd586555ce3fcc89663801a71d957b)r   r
   r   r#   r   r'   rs   )r(   r  ivaadrs   r)   s         r   test_1TestVectorsGueronKrasnov.test_1  si    :;23 ; <
 =>cllB/66s;1r   c                 \   [        S5      n[        S5      n[        S5      n[        S5      n[        S5      n[        S5      n[        R                  " U[        R                  U5      R	                  U5      nUR                  U5      u  pU R                  XX5        U R                  Xi5        g )N 843ffcf5d2b72694d19ed01d01249412dbcca32ebf9b804617c3aa9e@00000000000000000000000000000000101112131415161718191a1b1c1d1e1fڠ000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4fڠ6268c6fa2a80b2d137467f092f657ac04d89be2beaa623d61b5a868c8f03ff95d3dcee23ad2f1ab3a6c80eaf4b140eb05de3457f0fbc111a6b43d0763aa422a3013cf1dc37fe417d1fbfc449b75d4cc5 3b629ccfbc1119b7319e1dce2cd6fd6d)r   r
   r   r#   r   re   r'   )
r(   r  r-  r.  r*   r+   rs   r)   r   digest2s
             r   test_2TestVectorsGueronKrasnov.test_2  s    :;23 ; < ; <
  ; <
 =>cllB/66s;004!)r   r   N)r   r   r   r   r"  r/  r9  r   r   r   r   r'  r'    s    /2*r   r'  c                       \ rS rSrS rSrg)NISTTestVectorsGCMi  c                 P    SU l         [        R                  R                  X5        g )NT	use_clmulunittestTestCase__init__r(   as     r   rB  NISTTestVectorsGCM.__init__  s    ""4+r   r?  Nr   r   r   r   rB  r   r   r   r   r<  r<        ,r   r<  c                       \ rS rSrS rSrg)NISTTestVectorsGCM_no_clmuli  c                 P    SU l         [        R                  R                  X5        g )NFr>  rC  s     r   rB  $NISTTestVectorsGCM_no_clmul.__init__
  s    ""4+r   rF  NrG  r   r   r   rJ  rJ    rH  r   rJ  )Cipherr
   zgcmDecrypt128.rspzGCM decryptcountc                     [        U 5      $ Nintr>   s    r   <lambda>rT        CFr   zgcmEncryptExtIV128.rspzGCM encryptc                     [        U 5      $ rP  rQ  rS  s    r   rT  rT    rU  r   c                    UR                   U l        [        R                  " UR                  [        R
                  UR                  [        UR                  5      U R                  S9nUR                  UR                  5        SUR                  ;   a7  U R                  [        UR                  UR                   UR                  5        g UR                  UR                   UR                  5      nU R#                  X1R$                  5        g )N)r!   rb   r?  FAIL)descdescriptionr
   r   r  r#   r-  rG   r   r?  r   r.  othersr5   r<   rm   r+   r'   r*   )r(   r%  r)   r*   s       r   single_testr\  !  s    77RUU%([DNNLbffRYYj&*C*C"$%%1 **255"&&9BR'r   ztest_%dc                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestVectorsWycheproofi2  c                 h    [         R                  R                  U 5        Xl        X l        SU l        g )NNone)r@  rA  rB  _wycheproof_warnings_extra_params_id)r(   wycheproof_warningsextra_paramss      r   rB  TestVectorsWycheproof.__init__4  s)    ""4($7!)r   c                 0    S n[        SSSSU0S9U l        g )Nc                     U S   S-  $ )NtagSize   r   )groups    r   
filter_tag/TestVectorsWycheproof.setUp.<locals>.filter_tag<  s    #q((r   )rM  
wycheproofzaes_gcm_test.jsonzWycheproof GCMtag_size)	group_tag)r   r%  )r(   rl  s     r   setUpTestVectorsWycheproof.setUp:  s'    	) //G/B/?:Dj9QSr   c                     U R                   $ rP  )rc  r7   s    r   shortDescription&TestVectorsWycheproof.shortDescriptionD  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 ())warningra  warningswarnrc  comment)r(   r%  ry  s      r   rz  TestVectorsWycheproof.warnG  s4    ::$33MM488RZZPQ 4:r   c                    S[        UR                  5      -   U l         [        R                  " UR
                  [        R                  UR                  4SUR                  0U R                  D6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:X  a  S[        U5      ;   a   S nAg UeS nAff = f)NzWycheproof Encrypt GCM Test #rb   r   Nonce cannot be empty)stridrc  r
   r   r  r#   r-  ro  rb  r<   rG   r   r.  re   msgvalidr'   r+   r   rz  )r(   r%  r)   er+   r   s         r   test_encrypt"TestVectorsWycheproof.test_encryptL  s    2SZ?	WWRVVS\\255 ."++ .,,.F 	bff++BFF388R'S&&)IIbM   	255zQ#:c!f#DG	s   AD 
E (D;9D;;E c                    S[        UR                  5      -   U l         [        R                  " UR
                  [        R                  UR                  4SUR                  0U R                  D6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:X  a  S[        U5      ;   a   S nAg UeS nAff = f! [         a    UR"                  (       a   e g f = f)NzWycheproof Decrypt GCM Test #rb   r   r~  )r  r  rc  r
   r   r  r#   r-  ro  rb  r<   rG   r   r.  rm   r+   r   r  r'   r  rz  )r(   r%  r)   r  r*   s        r   test_decrypt"TestVectorsWycheproof.test_decrypt^  s   2SZ?	WWRVVS\\255 ."++ .,,.F 	bff	**255"&&9B 88O8R(IIbM  	255zQ#:c!f#DG	  	 xx<x	 s0   AC2 &D3 2
D0<(D+)D++D03EEc                 6   S[        UR                  5      -   U l        [        UR                  5      S:X  d  [        UR
                  5      S:  a  g [        R                  " UR                  [        R                  UR                  4SUR                  0U R                  D6nUR                  UR                  5        [        UR
                  S[        UR
                  5      S-
  -  S-   5      nU R                  [         UR"                  X1R$                  5        g )Nz%Wycheproof Corrupt Decrypt GCM Test #r   r;   rb          )r  r  rc  rG   r-  r+   r
   r   r  r#   ro  rb  r   r.  r   r5   r<   rm   r   )r(   r%  r)   
ct_corrupts       r   test_corrupt_decrypt*TestVectorsWycheproof.test_corrupt_decrypts  s    :SZGruu:?c"%%j1nruu *bkk *((*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 rP  )r%  r  r  r  )r(   r%  s     r   r   TestVectorsWycheproof.runTest}  s:    ''Bb!b!%%b) r   )rb  rc  ra  r%  N)r   r   r   r   rB  rq  rt  rz  r  r  r  r   r   r   r   r   r^  r^  2  s-    SR
$*U*r   r^  c                        \ rS rSrS rS rSrg)TestVariableLengthi  c                 N    [         R                  R                  U 5        Xl        g rP  )r@  rA  rB  rb  )r(   re  s     r   rB  TestVariableLength.__init__  s    ""4()r   c                    Sn[         R                  " 5       n[        S5       H  nSR                  U5      R	                  S5      n[        U5      U-  n[        R                  " U[        R                  4SU0U R                  D6nUR                  U5      u  pxUR                  U5        UR                  U5        M     U R                  UR                  5       S5        g )Ns   0000000000000000   z{0:04d}zutf-8r!   @7b7eb1ffbe67a2e53a912067c0ec8e62ebc7ce4d83490ea7426941349811bdf4)r   r   r=   formatencoder	   r
   r#   rb  re   r   r'   rr   )	r(   r  hr   r!   r   r)   r+   r   s	            r   r   TestVariableLength.runTest  s    JJLCjF$$V,33G<E<&(DWWS#,,ReRt?Q?QRF//5GBHHRLHHSM ! 	(jkr   )rb  N)r   r   r   r   rB  r   r   r   r   r   r  r    s    *lr   r  c                    SSK Jn  U R                  S5      n/ nU[        [        5      -  nU[        [
        5      -  nU[        5       /-  nU[        U5      /-  nU[        [        5      -  nU[        5       /-  nU R                  S5      (       a  U[        [        5      -  nUR                  5       (       aE  U[        USS9/-  nU[        SS9/-  nU R                  S5      (       a  U[        [        5      -  nU$ [        S5        U$ )Nr   )_cpu_featuresrd  
slow_testsFrF  z%Skipping test of PCLMULDQD in AES GCM)Crypto.Utilr  getr   r   r   r   r^  r'  r  r<  
have_clmulrJ  print)configr  rd  testss       r   	get_testsr    s   ) **%:;E	_X&&E	_[))E	km_E	#$7899E	_566E	 "##Ezz,!344!!'(;uMNN$u566::l##_%@AAE L 	56Lr   __main__c                  @    [         R                  " [        5       5        g rP  )r@  	TestSuiter  r   r   r   suiter    s    9;'r   r  )defaultTest)*
__future__r   r@  binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   r   Crypto.Util.py3compatr   r	   Crypto.Cipherr
   Crypto.Hashr   r   rl   r   r   rA  r   r   r   r'  r<  rJ  test_vectors_nist	enumerateidxr%  
isinstancer  r\  setattrr^  r  r  r   r  mainr   r   r   <module>r     s  > &   5 R /  ( %8Qx   QD
R)(## R)jK&(## K&\'*x00 '*T,** ,,("3"3 , &)+% "23	5 ; 9;	  &)0% "23	5 ; 9;	;  *+GC "c ( 	C='S+F) ,.P*H-- P*fl** l*  4 z(MMg& r   