+
    '(j                        ^ RI Ht ^ RIt^ RIHt ^ RIHt ^ RIHtH	t	 ^ RI
HtHt ^ RIHt ^ RIHtHt ^ R	IHt R
 t ! R R]P*                  4      t ! R R]P*                  4      t ! R R]P*                  4      t ! R R]P*                  4      t ! R R]P*                  4      t ! R R]P*                  4      t]! R)RRRR /4      ;'       g    . t]]! R)RRRR /4      ;'       g    . ,          t]! ]4       F?  w  tt] ! ]]!4      '       d   K  ]3R lt"]#! ]R],          ]"4       ]#! ]R],          ]"4       KA  	   ! R  R!]P*                  4      t$ ! R" R#]P*                  4      t%/ 3R$ lt&]'R%8X  d   R& t(]PR                  ! R'R(7       R# R# )*    )print_functionN)	unhexlify)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128SHA256)strxorc                 `    \         P                  ! \        V 4      R 7      P                  V4      # ))data)r   newr   read)taglengths   &&T/home/ubuntu/cf-venv/lib/python3.14/site-packages/Crypto/SelfTest/Cipher/test_GCM.pyget_tag_randomr   .   s     <<WS\*//77    c                      a  ] tR t^2t o ]! R^4      t]! R^4      t]! R^4      tR tR t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )GcmTestskey_128	nonce_128r   c                p   \         P                  ! V P                  \         P                  V P                  R 7      p\        RR4      pVP                  V4      p\         P                  ! V P                  \         P                  V P                  R 7      pVP                  V4      pV P                  W$4       R# )nonce	plaintextNi@  )	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                   \         P                  ! V P                  \         P                  4       \         P                  ! V P                  \         P                  V P                  4      pVP                  V P                  4      p\         P                  ! V P                  \         P                  V P                  R 7      pV P                  W!P                  V P                  4      4       R# r   N)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                    V P                  \        \        P                  V P                  \        P
                  R R7       R# )test12345678r   N)assertRaises	TypeErrorr
   r   r   r   r$   s   &r   test_nonce_must_be_bytes!GcmTests.test_nonce_must_be_bytesK   s,    )SWWdllCLL / 	 	1r   c                b   V P                  \        \        P                  V P                  \        P
                  R R7       \        ^^4       F^  p\        P                  ! V P                  \        P
                  \        ^4      V,          R7      pVP                  \        ^4      4       K`  	  R# )r   r   N)	r1   
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                    \         P                  ! V P                  \         P                  V P                  R 7      pV P                  VP                  \         P                  4       R# r,   )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                   \         P                  ! V P                  \         P                  V P                  R 7      pV P                  VP                  V P                  4       \         P                  ! V P                  \         P                  4      P                  p\         P                  ! V P                  \         P                  4      P                  pV P                  \        V4      ^4       V P                  W#4       R# 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           	        V P                  \        \        P                  V P                  \        P
                  V P                  ^4       V P                  \        \        P                  V P                  \        P
                  V P                  ^R7       \        P                  ! V P                  \        P
                  V P                  RR7       R# )   )r   unknownF)r   	use_aesniN)r1   r2   r
   r   r   r   r    r3   s   &r   test_unknown_parameters GcmTests.test_unknown_parametersf   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                    R Fa  p\         P                  ! V P                  \         P                  V P                  R7      p\        W!4      ! R4      pV P                  VR4       Kc  	  R# )r!   r   r   N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                   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  R4       V P                  \        VP                  R4       \         P                  ! V P                  \         P                  V P                  R 7      pVP                  R4       V P                  \        VP
                  R4       R# )r   r   N)	r
   r   r   r   r    r!   r1   r2   r"   r>   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                v   \         P                  ! V P                  \         P                  V P                  R 7      pV P                  \        VP                  R4       \         P                  ! V P                  \         P                  V P                  R 7      pV P                  \        VP                  R4       R# )r   ztest1234567890-*N)	r
   r   r   r   r    r1   r2   r!   r"   r>   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           	     &   V P                  \        \        P                  V P                  \        P
                  V P                  ^R7       V P                  \        \        P                  V P                  \        P
                  V P                  ^R7       \        ^^4       Fw  p\        P                  ! V P                  \        P
                  V P                  VR7      pVP                  V P                  4      w  r4V P                  \        V4      V4       Ky  	  \        P                  ! V P                  \        P
                  V P                  R7      pVP                  V P                  4      w  r4V P                  \        V4      ^4       R# )   )r   mac_lenr   N)r1   r7   r
   r   r   r   r    r8   encrypt_and_digestr   r#   rB   )r$   r]   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                   ^ RI Hp \        P                  ! V P                  \        P
                  V P                  R7      pVP                  V P                  4      w  r4V! V^4      p\        P                  ! V P                  \        P
                  V P                  R7      pV P                  \        VP                  VV4       R# )r   )strxor_cr   N)Crypto.Util.strxorrd   r
   r   r   r   r    r^   r   r1   r7   decrypt_and_verify)r$   rd   r%   r'   r`   invalid_macs   &     r   test_invalid_macGcmTests.test_invalid_mac   s    /s||4==I++DII6sD)s||4==I*f&?&?%	'r   c                   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  4       pV P                  VP                  4       \        V4      4       \         P                  ! V P                  \         P                  V P                  R 7      pVP                  V4       R# r,   )
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                   \        R ^4      p\        R^4      p\        P                  ! V P                  \        P                  V P
                  R7      pVP                  V4       VP                  V4      w  rER pR F  p\        P                  ! V P                  \        P                  V P
                  R7      pV! W4       F  pVP                  V4       K  	  Rp	V! WG4       F  pWP                  V4      ,          p	K  	  V P                  W)4       VP                  V4       K  	  R F  p\        P                  ! V P                  \        P                  V P
                  R7      pV! W4       F  pVP                  V4       K  	  Rp
V! W'4       F  pWP                  V4      ,          p
K  	  V P                  WJ4       V P                  VP                  4       V4       K  	  R# )zauthenticated datar   r   c                 h    \        ^ \        V 4      V4       Uu. uF  q W"V,            NK  	  up# u upi )r   )r8   rB   )r   chunk_lengthis   && r   break_up.GcmTests.test_message_chunks.<locals>.break_up   s?    49!SY 5" # 5"q\>* 5" # # #s   /r   N)
      r\   rI   
         (   P      )r   r
   r   r   r   r    updater^   r"   r#   verifyr!   rl   )r$   	auth_datar   r%   
ciphertextref_macru   rs   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                   \        V P                  4      p\        V P                  4      p\        V P                  4      p\        V P                  4      p\        P
                  ! V P                  \        P                  V P                  R 7      pVP                  V P                  4       VP                  V P                  4      pVP                  4       p\        P
                  ! V\        P                  VR 7      pRVR&   RVR&   VP                  V4       RVR&   VP                  V4      p	RVR&   VP                  4       p
V P                  Wi4       V P                  Wz4       V P                  VP                  VP                  4       \        V P                  4      p\        V P                  4      p\        V P                  4      p?\        P
                  ! V\        P                  VR 7      pRVR&   RVR&   VP                  V4       RVR&   VP                  \        V	4      \        V
4      4      pV P                  V P                  V4       R# r   s   :Nr\   NN)	bytearrayr   r    r   r
   r   r   r   r!   rl   r#   r   rf   )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!'	"//'*%>>#%'6 4<<(T]]+dii(	''&,, (* %r
&y!'	",,Yw-?8ATUG,r   c                &   \        \        V P                  4      4      p\        \        V P                  4      4      p\        \        V P                  4      4      p\        \        V P                  4      4      p\
        P                  ! V P                  \
        P                  V P                  R 7      pVP                  V P                  4       VP                  V P                  4      pVP                  4       p\
        P                  ! V\
        P                  VR 7      pRVR&   RVR&   VP                  V4       RVR&   VP                  V4      p	RVR&   VP                  4       p
V P                  Wi4       V P                  Wz4       V P                  VP                  VP                  4       \        \        V P                  4      4      p\        \        V P                  4      4      p\        \        V P                  4      4      p?\
        P                  ! V\
        P                  VR 7      pRVR&   RVR&   VP                  V4       RVR&   VP                  \        V	4      \        V
4      4      pV P                  V P                  V4       R# r   )
memoryviewr   r   r    r   r
   r   r   r   r!   rl   r#   r   rf   )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!'	"//'*%>>#%'6 Idll34i67y34	''&,, (* %r
&y!'	",,Z-@*XBVWG,r   c                   Rp\         P                  ! V P                  \         P                  V P                  R7      pVP                  V4      pVP                  4       p\        ^4      p\         P                  ! V P                  \         P                  V P                  R7      pVP                  WR7      pV P                  W54       V P                  VR4       \         P                  ! V P                  \         P                  V P                  R7      pVP                  W5R7      pV P                  W4       V P                  VR4       \         P                  ! V P                  \         P                  V P                  R7      pVP                  WR7      w  rgV P                  W54       V P                  VR4       V P                  WG4       \         P                  ! V P                  \         P                  V P                  R7      pVP                  W4VR7      pV P                  W4       V P                  VR4       R#    5r   outputNs   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555)r
   r   r   r   r    r!   rl   r   r#   r"   r^   rf   )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                B   Rp\         P                  ! V P                  \         P                  V P                  R7      pVP                  V4      p\        \        ^4      4      p\         P                  ! V P                  \         P                  V P                  R7      pVP                  WR7       V P                  W44       \         P                  ! V P                  \         P                  V P                  R7      pVP                  W4R7       V P                  W4       R# 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                   ^pRV,          p\         P                  ! V P                  \         P                  V P                  R7      pVP                  V4      p\         P                  ! V P                  \         P                  V P                  R7      pV P                  \        VP
                  VRV,          R7       \         P                  ! V P                  \         P                  V P                  R7      pV P                  \        VP                  VRV,          R7       \        V^,
          4      p\         P                  ! V P                  \         P                  V P                  R7      pV P                  \        VP
                  W%R7       \         P                  ! V P                  \         P                  V P                  R7      pV P                  \        VP                  WER7       R# )r~   r   r      0r   N)r
   r   r   r   r    r!   r1   r2   r"   r   r7   )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)   r-   r4   r:   r?   rF   rL   rS   rV   rY   ra   rh   ro   r   r   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r   r   2   s     Y+Gk2.H&#&D"81$<,	!*:J'&	'"'7R--^--^$:%Q Qr   r   c                      a  ] tR tRt o ]! R^4      t]! R^4      t]! R^4      tR tR t	R t
R tR	 tR
 tR tR tR tR tR tRtV tR# )GcmFSMTestsit  r   r   r   c                   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4      pVP                  4       p\         P                  ! V P                  \         P                  V P                  R 7      pVP                  V4       VP                  V4       R# r,   )
r
   r   r   r   r    r!   r   rl   r"   r   r$   r%   r'   r`   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                   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4       VP                  4       p\         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4       VP                  V4       R# r,   )	r
   r   r   r   r    r   r   rl   r   r$   r%   r`   s   &  r   $test_valid_init_update_digest_verify0GcmFSMTests.test_valid_init_update_digest_verify  s     s||#}}.dii mmo s||#}}.dii cr   c                   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4       VP                  V P                  4      pVP                  4       p\         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4       VP                  V4       VP                  V4       R# r,   )r
   r   r   r   r    r   r   r!   rl   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                    \         P                  ! V P                  \         P                  V P                  R 7      pVP                  4        R# r,   )r
   r   r   r   r    rl   r>   s   & r   test_valid_init_digest"GcmFSMTests.test_valid_init_digest  s)    s||4==Ir   c                4   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  4       p\         P                  ! V P                  \         P                  V P                  R 7      pVP                  V4       R# r,   )r
   r   r   r   r    rl   r   r   s   &  r   test_valid_init_verify"GcmFSMTests.test_valid_init_verify  sU    s||4==Immos||4==Icr   c                   R F  pRRV P                   V P                   R,           3 F  pVf   RpM\        V4      p\        P                  ! V P                  \        P
                  V P                  R7      pVe   VP                  V4       \        WA4      pV! V P                   4       V! V P                   4       V! V P                   4       V! V P                   4       K  	  K  	  R# )r!   Ns   333   3r   rO   )	r   rB   r
   r   r   r   r    r   rP   )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                &   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4       VP                  4       p\        ^4       F"  pV P                  W!P                  4       4       K$  	  \         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4       \        ^4       F  pVP                  V4       K  	  R# r,   )r
   r   r   r   r    r   r   rl   r8   r#   r   )r$   r%   	first_macr9   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                   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4       VP                  V P                  4      w  r#\         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4       VP                  W#4      pV P                  V P                  V4       R# r,   )
r
   r   r   r   r    r   r   r^   rf   r#   )r$   r%   r'   r`   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           	     t   R F  w  rR F  p\         P                  ! V P                  \         P                  V P                  R7      pV'       d   VP                  V P                  4       \        WA4      ! V P                  4       V P                  \        \        WB4      V P                  4       K  	  K  	  R# )r!   r   N)rO   )r"   r!   )TF)
r
   r   r   r   r    r   r   rP   r1   r2   )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                   R F  p\         P                  ! V P                  \         P                  V P                  R7      pVP                  V P                  4       VP                  4        V P                  \        \        W!4      V P                  4       \         P                  ! V P                  \         P                  V P                  R7      pVP                  V P                  4       K  	  R# )r!   r   N)r!   r   )r
   r   r   r   r    r!   r   rl   r1   r2   rP   r^   )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                   \         P                  ! V P                  \         P                  V P                  R 7      pVP                  V P                  4      pVP                  4       pR EF  p\         P                  ! V P                  \         P                  V P                  R 7      pVP                  V4       VP                  V4       V P                  \        \        W4      V P                  4       \         P                  ! V P                  \         P                  V P                  R 7      pVP                  W#4       V P                  \        \        W4      V P                  4       EK  	  R# )r   N)r"   r   )r
   r   r   r   r    r!   r   rl   r"   r   r1   r2   rP   rf   )r$   r%   r'   r`   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   s   @r   r   r   t  se     Y+Gk2.H&#&D 
"$%
(-	1) )r   r   c            
          a ] tR tRt oRt. ROt] U Uu. uF  q  Uu. uF  p\        V4      NK  	  upNK  	  upp tR tRt	Vt
R# u upi u upp i )TestVectorsi	  zClass exercising the GCM test vectors found in
http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdfc           	        V P                    F  w  rr4rV\        P                  ! V\        P                  V\	        V4      R 7      pVP                  V4       VP                  V4      w  rV P                  W84       V P                  WI4       \        P                  ! V\        P                  V\	        V4      R 7      pVP                  V4       VP                  W44      p
V P                  W*4       K  	  R# ))r]   N)	test_vectorsr
   r   r   rB   r   r^   r#   rf   )r$   
assoc_datar&   r'   r`   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    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  )r   r   r   r   __doc__test_vectors_hexr   r   r   r   r   )tvr9   r   s   00@r   r   r   	  sS     fn` :JJ9I22.2aYq\2.9IJL& & /Js   A
AA
A
r   c                   0   a  ] tR tRt o RtR tR tRtV tR# )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                   \        R 4      p\        R4      p\        R4      p\        R4      p\        P                  ! V\        P                  V4      P	                  V4      pV P                  WEP                  4       4       R# ) 3da6c536d6295579c0959a7043efb5032b926197d34e091ef722db94 69dd586555ce3fcc89663801a71d957bNڠ00000000000000000000000000000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f)r   r
   r   r   r   r#   rl   )r$   r   ivaadrl   r%   s   &     r   test_1TestVectorsGueronKrasnov.test_1  si    :;23 ; <
 =>cllB/66s;1r   c                ^   \        R 4      p\        R4      p\        R4      p\        R4      p\        R4      p\        R4      p\        P                  ! V\        P                  V4      P	                  V4      pVP                  V4      w  rV P                  WX4       V P                  Wi4       R# ) 843ffcf5d2b72694d19ed01d01249412dbcca32ebf9b804617c3aa9e 3b629ccfbc1119b7319e1dce2cd6fd6dN@00000000000000000000000000000000101112131415161718191a1b1c1d1e1fڠ000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4fڠ6268c6fa2a80b2d137467f092f657ac04d89be2beaa623d61b5a868c8f03ff95d3dcee23ad2f1ab3a6c80eaf4b140eb05de3457f0fbc111a6b43d0763aa422a3013cf1dc37fe417d1fbfc449b75d4cc5)r   r
   r   r   r   r^   r#   )
r$   r   r)  r*  r&   r'   rl   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+  r5  r   r   r   s   @r   r#  r#    s     /2* *r   r#  c                   &   a  ] tR tRt o R tRtV tR# )NISTTestVectorsGCMi  c                R    R V n         \        P                  P                  W4       R# )TN	use_clmulunittestTestCase__init__r$   as   &&r   r>  NISTTestVectorsGCM.__init__  s    ""4+r   r;  Nr   r   r   r   r>  r   r   r   s   @r   r8  r8         , ,r   r8  c                   &   a  ] tR tRt o R tRtV tR# )NISTTestVectorsGCM_no_clmuli  c                R    R V n         \        P                  P                  W4       R# )FNr:  r?  s   &&r   r>  $NISTTestVectorsGCM_no_clmul.__init__
  s    ""4+r   rB  NrC  r   s   @r   rF  rF    rD  r   rF  zgcmDecrypt128.rspzGCM decryptcountc                     \        V 4      # Nintr9   s   &r   <lambda>rO        CFr   zgcmEncryptExtIV128.rspzGCM encryptc                     \        V 4      # rK  rL  rN  s   &r   rO  rO    rP  r   c                 &   VP                   V n        \        P                  ! VP                  \        P
                  VP                  \        VP                  4      V P                  R 7      pVP                  VP                  4       RVP                  9   d9   V P                  \        VP                  VP                   VP                  4       R# VP                  VP                   VP                  4      pV P#                  W1P$                  4       R# ))r   r]   r;  FAILN)descdescriptionr
   r   r   r   r)  rB   r   r;  r   r*  othersr1   r7   rf   r'   r#   r&   )r$   r!  r%   r&   s   &&  r   single_testrW  !  s    77RUU%([DNNLbffRYYj&*C*C"$%%1 **255"&&9BR'r   ztest_%dc                   P   a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
tV tR# )TestVectorsWycheproofi2  c                j    \         P                  P                  V 4       Wn        W n        R V n        R# )NoneN)r<  r=  r>  _wycheproof_warnings_extra_params_id)r$   wycheproof_warningsextra_paramss   &&,r   r>  TestVectorsWycheproof.__init__4  s)    ""4($7!)r   c                8    R  p\        RRRRV/R7      V n        R# )c                 "    V R ,          ^,          # )tagSizer   )groups   &r   
filter_tag/TestVectorsWycheproof.setUp.<locals>.filter_tag<  s    #q((r   zaes_gcm_test.jsonzWycheproof GCMtag_size)	group_tagN)Cipher
wycheproof)r   r!  )r$   rf  s   & r   setUpTestVectorsWycheproof.setUp:  s'    	) //G/B/?:Dj9QSr   c                    V P                   # rK  )r^  r3   s   &r   shortDescription&TestVectorsWycheproof.shortDescriptionD  s    xxr   c                    VP                   '       dI   V P                  '       d5   ^ RIpVP                  RV P                  : RVP
                  : R24       R# R# R# )r   NzWycheproof warning: z ())warningr\  warningswarnr^  comment)r$   r!  rt  s   && r   ru  TestVectorsWycheproof.warnG  s9    :::$333MM488RZZPQ 4:r   c                   R \        VP                  4      ,           V n         \        P                  ! VP
                  \        P                  VP                  3RVP                  /V P                  B pTP                  TP                  4       TP                  TP                  4      w  rETP                   '       dJ   T P#                  YAP$                  4       T P#                  YQP&                  4       T P)                  T4       R# R#   \         d8   p\        TP                  4      ^ 8X  d   R\        T4      9   d    Rp?R# ThRp?ii ; i)zWycheproof Encrypt GCM Test #r]   Nonce cannot be emptyN)stridr^  r
   r   r   r   r)  rh  r]  r7   rB   r   r*  r^   msgvalidr#   r'   r   ru  )r$   r!  r%   er'   r   s   &&    r   test_encrypt"TestVectorsWycheproof.test_encryptL  s    2SZ?	WWRVVS\\255 ."++ .,,.F 	bff++BFF3888R'S&&)IIbM   	255zQ#:c!f#DG	s   AD	 	E*EEEc                   R \        VP                  4      ,           V n         \        P                  ! VP
                  \        P                  VP                  3RVP                  /V P                  B pTP                  TP                  4        TP                  TP                  TP                   4      pTP"                  '       g   Q hT P%                  YAP&                  4       T P)                  T4       R#   \         d8   p\        TP                  4      ^ 8X  d   R\        T4      9   d    Rp?R# ThRp?ii ; i  \         d    TP"                  '       d   Q h R# i ; i)zWycheproof Decrypt GCM Test #r]   ry  N)rz  r{  r^  r
   r   r   r   r)  rh  r]  r7   rB   r   r*  rf   r'   r   r}  r#   r|  ru  )r$   r!  r%   r~  r&   s   &&   r   test_decrypt"TestVectorsWycheproof.test_decrypt^  s   2SZ?	WWRVVS\\255 ."++ .,,.F 	bff	**255"&&9B 888O8R(IIbM  	255zQ#:c!f#DG	  	 xxx<x	 s6   AC8 &D= 8D:*D53D55D:=E E E c                ^   R \        VP                  4      ,           V n        \        VP                  4      ^ 8X  g   \        VP
                  4      ^8  d   R# \        P                  ! VP                  \        P                  VP                  3RVP                  /V P                  B pVP                  VP                  4       \        VP
                  R\        VP
                  4      ^,
          ,          R,           4      pV P                  \         VP"                  W1P$                  4       R# )z%Wycheproof Corrupt Decrypt GCM Test #Nr]          )rz  r{  r^  rB   r)  r'   r
   r   r   r   rh  r]  r   r*  r   r1   r7   rf   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                    V P                    F6  pV P                  V4       V P                  V4       V P                  V4       K8  	  R # rK  )r!  r  r  r  )r$   r!  s   & r   r   TestVectorsWycheproof.runTest}  s:    ''Bb!b!%%b) r   )r]  r^  r\  r!  N)r   r   r   r   r>  rl  ro  ru  r  r  r  r   r   r   r   s   @r   rY  rY  2  s5     SR
$*U* *r   rY  c                   ,   a  ] tR tRt o R tR tRtV tR# )TestVariableLengthi  c                P    \         P                  P                  V 4       Wn        R # rK  )r<  r=  r>  r]  )r$   r`  s   &,r   r>  TestVariableLength.__init__  s    ""4()r   c                   Rp\         P                  ! 4       p\        ^4       F  pRP                  V4      P	                  R4      p\        V4      V,          p\        P                  ! V\        P                  3RV/V P                  B pVP                  V4      w  rxVP                  V4       VP                  V4       K  	  V P                  VP                  4       R4       R# )r   z{0:04d}zutf-8r   @7b7eb1ffbe67a2e53a912067c0ec8e62ebc7ce4d83490ea7426941349811bdf4Ns   0000000000000000)r   r   r8   formatencoder	   r
   r   r]  r^   r   r#   rk   )	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   )r]  N)r   r   r   r   r>  r   r   r   r   s   @r   r  r    s     *l lr   r  c                 v   ^ RI Hp V P                  R4      p. pV\        \        4      ,          pV\        \
        4      ,          pV\        4       .,          pV\        V4      .,          pV\        \        4      ,          pV\        4       .,          pV P                  R4      '       d   V\        \        4      ,          pVP                  4       '       dY   V\        VRR7      .,          pV\        RR7      .,          pV P                  R4      '       d   V\        \        4      ,          pV# \        R4       V# )r   )_cpu_featuresr_  
slow_testsFrB  z%Skipping test of PCLMULDQD in AES GCM)Crypto.Utilr  getr   r   r   r   rY  r#  r  r8  
have_clmulrF  print)configr  r_  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                  B    \         P                  ! \        4       4       R # rK  )r<  	TestSuiter  r   r   r   suiter    s    9;'r   r  )defaultTest)rj  r
   )*
__future__r   r<  binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   r   Crypto.Util.py3compatr   r	   Crypto.Cipherr
   Crypto.Hashr   r   re   r   r   r=  r   r   r   r#  r8  rF  test_vectors_nist	enumerateidxr!  
isinstancerz  rW  setattrrY  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   