+
    '(jQ                     j   ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIHtH	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ R	IHt R
 t ! R R] P&                  4      t ! R R] P&                  4      t ! R R] P&                  4      t ! R R] P&                  4      t/ 3R lt]R8X  d   R t] P6                  ! RR7       R# R# )    N)	unhexlify)list_test_cases)load_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128)strxor)CCMMessageTooLongErrorc                 `    \         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_CCM.pyget_tag_randomr   -   s     <<WS\*//77    c                      a  ] tR t^1t 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R tR tR tR tRt V t!R# )CcmTests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_CCMnonce_96r   encryptdecryptassertEqual)selfcipherptctpt2s   &    r   test_loopback_128CcmTests.test_loopback_1287   st    s||4==IK2^^Bs||4==InnR !r   c                   \         P                  ! V P                  \         P                  4      pVP                  p\         P                  ! V P                  \         P                  4      pVP                  pV P                  \        V4      ^4       V P                  W#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                  WAP                  V P                  4      4       R# )   r   N)r   r   r   r   r   r!   lenassertNotEqualr   r   r   )r"   r#   nonce1nonce2r%   s   &    r   
test_nonceCcmTests.test_nonce@   s    s||4s||4Vb)F+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!CcmTests.test_nonce_must_be_bytesO   s,    )SWWdllCLL / 	 	1r   c           	     n   V P                  \        \        P                  V P                  \        P
                  R R7       V P                  \        \        P                  V P                  \        P
                  \        ^4      ^,          R7       V P                  \        \        P                  V P                  \        P
                  \        ^4      ^,          R7       \        ^^4       FD  p\        P                  ! V P                  \        P
                  \        ^4      V,          R7       KF  	  R# )r   r   N)r3   
ValueErrorr   r   r   r   r   range)r"   xs   & r   test_nonce_lengthCcmTests.test_nonce_lengthS   s    *cggt||S\\ # 	 	%*cggt||S\\ $Q! 	 	-*cggt||S\\ $Q" 	 	.q&!AGGDLL#,,d1gkB "r   c                    \         P                  ! V P                  \         P                  V P                  R 7      pV P                  VP                  \         P                  4       R# r   N)r   r   r   r   r   r!   
block_sizer"   r#   s   & r   test_block_sizeCcmTests.test_block_size]   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   r+   r,   )r"   r#   r-   r.   s   &   r   test_nonce_attributeCcmTests.test_nonce_attributea   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)r3   r4   r   r   r   r   r   r5   s   &r   test_unknown_parameters CcmTests.test_unknown_parametersk   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(CcmTests.test_null_encryption_decryptionv   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   r3   r4   r    rA   s   & r   test_either_encrypt_or_decrypt'CcmTests.test_either_encrypt_or_decrypt|   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   r3   r4   r   r    rA   s   & r   test_data_must_be_bytes CcmTests.test_data_must_be_bytes   sl    s||4==I)V^^5HIs||4==I)V^^5HIr   c           
        \        ^^^4       FN  pV P                  \        \        P                  V P
                  \        P                  V P                  VR7       KP  	  \        ^^^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)r:   r3   r9   r   r   r   r   r   encrypt_and_digestr   r!   r+   )r"   r\   r#   _macs   &    r   test_mac_lenCcmTests.test_mac_len   s    Q*Gj#''4<<$(MM7  D +
 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.strxorrc   r   r   r   r   r   r]   r   r3   r9   decrypt_and_verify)r"   rc   r#   r%   r_   invalid_macs   &     r   test_invalid_macCcmTests.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CcmTests.test_hex_mac   su    s||4==I""$)G*<=s||4==I!r   c                   \         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                  V P                  4       R# )r   r   	assoc_len   1N)	r   r   r   r   r   r3   r9   updater   rA   s   & r   $test_longer_assoc_data_than_declared-CcmTests.test_longer_assoc_data_than_declared   sz    s||4==#$&*fmmT: s||4==#%'*fmmTYY?r   c                   \        V P                  4      p\        P                  ! V P                  \        P
                  V P                  V^,           R7      pVP                  V P                  4       V P                  \        VP                  V P                  4       \        P                  ! V P                  \        P
                  V P                  V^,           R7      pVP                  V P                  4       V P                  \        VP                  4       \        P                  ! V P                  \        P
                  V P                  V^,           R7      pVP                  V P                  4       V P                  \        VP                  V P                  4       \        P                  ! V P                  \        P
                  V P                  R7      pVP                  V P                  4       VP                  4       p\        P                  ! V P                  \        P
                  V P                  V^,           R7      pVP                  V P                  4       V P                  \        VP                  V4       R# )   rq   r   N)r+   r   r   r   r   r   r   rt   r3   r9   r   rk   r    verify)r"   DATA_LENr#   r_   s   &   r   %test_shorter_assoc_data_than_expected.CcmTests.test_shorter_assoc_data_than_expected   s   tyy> s||4==#+a<1dii *fnndii@ s||4==#+a<1dii *fmm4 s||4==#+a<1dii *fnndii@ s||4==Idii mmos||4==#+a<1dii *fmmS9r   c                   \        V P                  4      p\        P                  ! V P                  \        P
                  V P                  V^,           R7      pVP                  V P                  4       V P                  \        VP                  4       \        P                  ! V P                  \        P
                  V P                  V^,
          R7      pV P                  \        VP                  V P                  4       R# )rx   r   msg_lenN)r+   r   r   r   r   r   r   r   r3   r9   rk   )r"   rz   r#   s   &  r   /test_shorter_and_longer_plaintext_than_declared8CcmTests.test_shorter_and_longer_plaintext_than_declared   s    tyy>s||4==!)A/tyy!*fmm4s||4==!)A/*fnndii@r   c                   \        V P                  4      p\        P                  ! V P                  \        P
                  V P                  R 7      pVP                  V P                  4      w  r4\        P                  ! V P                  \        P
                  V P                  V^,           R7      pVP                  V4       V P                  \        VP                  V4       \        P                  ! V P                  \        P
                  V P                  V^,
          R7      pV P                  \        VP                  V4       R# )r   r~   N)r+   r   r   r   r   r   r   r]   r    r3   r9   ry   )r"   rz   r#   r%   r_   s   &    r   %test_shorter_ciphertext_than_declared.CcmTests.test_shorter_ciphertext_than_declared   s    tyy>s||4==I++DII6s||4==!)A/r*fmmS9s||4==!)A/*fnnb9r   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   )r:   r+   )r   chunk_lengthis   && r   break_up.CcmTests.test_message_chunks.<locals>.break_up  s?    49!SY 5" # 5"q\>* 5" # # #s   /r   r   rr   r   N)
rx      r[   rH   
         (   P      )r   r   r   r   r   r   rt   r]   r    r!   ry   r   rk   )r"   	auth_datar   r#   
ciphertextref_macr   r   chunkr&   ct2s   &          r   test_message_chunksCcmTests.test_message_chunks   s    ##7=	";4	s||4==Ii $77	B
	#
 @LWWT\\3<<t}}%(C9F "):e$ ;C!*;~~e,, <Y,MM'" @ @LWWT\\3<<t}}%(C9F "):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   rt   r   rk   r!   r   re   )r"   key_banonce_ba	header_badata_bacipher1r%   r   cipher2ct_testtag_testcipher4pt_tests   &            r   test_bytearrayCcmTests.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   rt   r   rk   r!   r   re   )r"   key_mvnonce_mv	header_mvdata_mvr   r%   r   r   r   r   r   r   s   &            r   test_memoryviewCcmTests.test_memoryviewP  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   rk   r   r!   r    r]   re   )r"   r$   r#   r%   r   r   restag_outs   &       r   test_output_paramCcmTests.test_output_param  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%CcmTests.test_output_param_memoryview  s    s||4==I^^BIcN+s||4==Ir)$s||4==Ir)$r   c                   R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R7       \         P                  ! V P                  \         P                  V P                  R7      pV P                  \        VP                  VRR7       \        ^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                  W4R7       R# )r   r   r   Ns   5555555555555555s   0000000000000000)r   r   r   r   r   r   r3   r4   r    r   r9   )r"   r$   r#   r%   shorter_outputs   &    r   test_output_param_negCcmTests.test_output_param_neg  s   s||4==I^^Bs||4==I)V^^RHs||4==I)V^^RH"2s||4==I*fnnbPs||4==I*fnnbPr   c           
        RpV P                  \        \        P                  V P                  \        P
                  V^RR7       RpV P                  \        \        P                  V P                  \        P
                  V^RR7       Rp\        P                  ! V P                  \        P
                  VR7      pV P                  \        VP                  RR,          4       Rp\        P                  ! V P                  \        P
                  VR7      pV P                  \        VP                  RR,          4       R# )	   Ni   r   rr   r   r      CNs   NNNNNNNNNNNNNs   NNNNNNNl            )r3   r   r   r   r   r   r   r    )r"   r   r#   s   &  r   test_message_too_longCcmTests.test_message_too_long  s    0'',,,, %$&") 	 	+ 0'',,,, %$&"' 	 	) s||5A0 ...	* s||5A0 ...	*r    N)"__name__
__module____qualname____firstlineno__r   r   r   r   r'   r/   r6   r<   rB   rE   rK   rR   rU   rX   r`   rg   rn   ru   r{   r   r   r   r   r   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r   r   1   s     Y+Gk2.H&#&D"81C<,	!*:J'$	'"	@:>
A:)7V--^--^$:%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RtV tR# )CcmFSMTestsi  r   r   r   c           
        R F  pR \        V P                  4      3 F  p\        P                  ! V P                  \        P
                  V P                  VVR7      pVP                  V P                  4      pVP                  4       p\        P                  ! V P                  \        P
                  V P                  VVR7      pVP                  V4       VP                  V4       K  	  K  	  R # Nr   )Nr   )r+   r   r   r   r   r   r   r   rk   r    ry   r"   rr   r   r#   r%   r_   s   &     r   -test_valid_init_encrypt_decrypt_digest_verify9CcmFSMTests.test_valid_init_encrypt_decrypt_digest_verify  s    "I #dii.1s||'+}}+4)02 ^^DII.mmo s||'+}}+4)02 r"c" 2 #r   c           
        R \        V P                  4      3 F  pR F  p\        P                  ! V P                  \        P
                  V P                  VVR7      pVP                  V P                  4       VP                  4       p\        P                  ! V P                  \        P
                  V P                  VVR7      pVP                  V P                  4       VP                  V4       K  	  K  	  R # r   )
r+   r   r   r   r   r   r   rt   rk   ry   )r"   rr   r   r#   r_   s   &    r   $test_valid_init_update_digest_verify0CcmFSMTests.test_valid_init_update_digest_verify  s    DII/I$s||'+}}+4)02 dii(mmo s||'+}}+4)02 dii(c" % 0r   c           
        R \        V P                  4      3 EF!  pR \        V P                  4      3 EF  p\        P                  ! V P                  \        P
                  V P                  VVR7      pVP                  V P                  4       VP                  V P                  4      pVP                  4       p\        P                  ! V P                  \        P
                  V P                  VVR7      pVP                  V P                  4       VP                  V4       VP                  V4       EK  	  EK$  	  R # )Nr   )r+   r   r   r   r   r   r   rt   r   rk   r    ry   r   s   &     r   test_valid_full_path CcmFSMTests.test_valid_full_path  s    DII/I #dii.1s||'+}}+4)02 dii(^^DII.mmo s||'+}}+4)02 dii(r"c"# 2 0r   c                    \         P                  ! V P                  \         P                  V P                  R 7      pVP                  4        R# r?   )r   r   r   r   r   rk   rA   s   & r   test_valid_init_digest"CcmFSMTests.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   rk   ry   )r"   r#   r_   s   &  r   test_valid_init_verify"CcmFSMTests.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                  ^@V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   rN   )	r   r+   r   r   r   r   r   rt   rO   )r"   method_namer   rr   r#   methods   &     r   &test_valid_multiple_encrypt_or_decrypt2CcmFSMTests.test_valid_multiple_encrypt_or_decrypt/  s    /K"FDII"ii$.0	$ $I #IIs||'+}})++4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   rt   r   rk   r:   r!   ry   )r"   r#   	first_macr;   s   &   r   $test_valid_multiple_digest_or_verify0CcmFSMTests.test_valid_multiple_digest_or_verifyD  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   rt   r   r]   re   r!   )r"   r#   r%   r_   r$   s   &    r   0test_valid_encrypt_and_digest_decrypt_and_verify<CcmFSMTests.test_valid_encrypt_and_digest_decrypt_and_verifyR  s    s||4==Idii ++DII6 s||4==Idii &&r/B'r   c                `   R F  pR F  p\         P                  ! V P                  \         P                  V P                  R7      pV'       d   VP                  V P                  4       \        W14      pV! V P                  4       V P                  \        W@P                  4       K  	  K  	  R# )r   r   NrN   TF
r   r   r   r   r   rt   r   rO   r3   r4   )r"   r   assoc_data_presentr#   r   s   &    r   5test_invalid_multiple_encrypt_decrypt_without_msg_lenACcmFSMTests.test_invalid_multiple_encrypt_decrypt_without_msg_len^  su    /K&3"s||'+}}6%MM$)), 5tyy!!!)VYY? '4 0r   c           	     v   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)rN   )r    r   r   r   )r"   method1_namemethod2_namer   r#   s   &    r   #test_invalid_mixing_encrypt_decrypt/CcmFSMTests.test_invalid_mixing_encrypt_decryptj  s    +C&L&3"s||'+}})+- &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   rt   )r   r   r   r   r   r   r   rk   r3   r4   rO   r]   )r"   r   r#   s   &  r   +test_invalid_encrypt_or_update_after_digest7CcmFSMTests.test_invalid_encrypt_or_update_after_digestx  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    rt   )r   r   r   r   r   r   r   rk   r    ry   r3   r4   rO   re   )r"   r#   r%   r_   r   s   &    r   +test_invalid_decrypt_or_update_after_verify7CcmFSMTests.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   s   @r   r   r     sk     Y+Gk2.H&"%D#(#(#,
"*%
(
@-	1) )r   r   c                     a ] tR tRt oRtRRRRP                  ]! ^ ^4       U Uu. uF-  p \        ^ ^4       F  pRV ^,          V,           ,          NK  	  K/  	  upp 4      R,          RRR	RR
3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] 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p i u up i u up pi ))TestVectorsi  z\Class exercising the CCM test vectors found in Appendix C
of NIST SP 800-38C and in RFC 3610 404142434445464748494a4b4c4d4e4f z%02X   @202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f@69915dad1e84c6376a68c2967e4dab615ae0fd1faec44cc484828529463ccf72b4ac6bec93e8598e7f0dadbcea5b101112131415161718191a1b1cc           	        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   r+   rt   r]   r!   re   )r"   
assoc_datar$   r%   r_   keyr   r#   r   mac2r&   s   &          r   runTestTestVectors.runTestP  s    373D3D/JBSWWS#,,s3xHFMM*%11"5ICR%S' WWS#,,s3xHFMM*%++B4CR% 4Er   r   N)0001020304050607202122237162015b4dac255dr  10111213141516) 000102030405060708090a0b0c0d0e0f 202122232425262728292a2b2c2d2e2f d2a1f0e051ea5f62081a7792073d593d1fc64fbfaccdr  1011121314151617)(000102030405060708090a0b0c0d0e0f101112130202122232425262728292a2b2c2d2e2f30313233343536370e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5484392fbc1b09951r  101112131415161718191a1b)r  .08090a0b0c0d0e0f101112131415161718191a1b1c1d1e.588c979a61c663d2f066d0c2c0f989806d5f6b61dac38417e8d12cfdf926e0 c0c1c2c3c4c5c6c7c8c9cacbcccdcecf00000003020100a0a1a2a3a4a5)r  008090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f072c91a36e135f8cf291ca894085c87e3cc15c439c9e43a3ba091d56e10400916r#  00000004030201a0a1a2a3a4a5)r  208090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20251b1e5f44a197d1da46b0f8e2d282ae871e838bb64da8596574adaa76fbd9fb0c5r#  00000005040302A0A1A2A3A4A5)000102030405060708090a0b&0c0d0e0f101112131415161718191a1b1c1d1e&a28c6865939a9a79faaa5c4c2a9d4a91cdac8c96c861b9c9e61ef1r#  00000006050403a0a1a2a3a4a5)r-  (0c0d0e0f101112131415161718191a1b1c1d1e1f(dcf1fb7b5d9e23fb9d4e131253658ad86ebdca3e51e83f077d9c2d93r#  00000007060504a0a1a2a3a4a5)r-  *0c0d0e0f101112131415161718191a1b1c1d1e1f20*6fc1b011f006568b5171a42d953d469b2570a4bd87405a0443ac91cb94r#  00000008070605a0a1a2a3a4a5)r  r   .0135d1b2c95f41d5d1d4fec185d166b8094e999dfed96c048c56602c97acbb7490r#  00000009080706a0a1a2a3a4a5)r  r%  07b75399ac0831dd2f0bbd75879a2fd8f6cae6b6cd9b7db24c17b4433f434963f34b4r#  0000000a090807a0a1a2a3a4a5)r  r)  282531a60cc24945a4b8279181ab5c84df21ce7f9b73f42e197ea9c07e56b5eb17e5f4er#  0000000b0a0908a0a1a2a3a4a5)r-  r.  &07342594157785152b074098330abb141b947b566aa9406b4d999988ddr#  0000000c0b0a09a0a1a2a3a4a5)r-  r2  (676bb20380b0e301e8ab79590a396da78b834934f53aa2e9107a8b6c022cr#  0000000d0c0b0aa0a1a2a3a4a5)r-  r6  *c0ffa0d6f05bdb67f24d43a4338d2aa4bed7b20e43cd1aa31662e7ad65d6dbr#  0000000e0d0c0ba0a1a2a3a4a5)0be1a88bace018b1.08e8cf97d820ea258460e96ad9cf5289054d895ceac47c.4cb97f86a2a4689a877947ab8091ef5386a6ffbdd080f8e78cf7cb0cddd7b3 d7828d13b2b0bdc325a76236df93cc6b00412b4ea9cdbe3c9696766cfa)63018f76dc8a1bcb09020ea6f91bdd85afa0039ba4baff9bfb79c7028949cd0ec04ccb1e7ca981befaa0726c55d378061298c85c92814abc33c52ee81d7d77c08arP  0033568ef7b2633c9696766cfa)aa6cfa36cae86b402b916e0eacc1c00d7dcec68ec0b3bbb1a02de8a2d1aa346132e2b1d23a2220ddc0ac900d9aa03c61fcf4a559a4417767089708a776796edb723506rP  00103fe41336713c9696766cfa)d0d0735c531e1becf049c244&12daac5630efa5396f770ce1a66b21f7b2101c&14d253c3967b70609b7cbb7c499160283245269a6f49975bcadeafrP  00764c63b8058e3c9696766cfa)77b60f011c03e1525899bcae(e88b6a46c78d63e52eb8c546efb5de6f75e9cc0d(5545ff1a085ee2efbf52b2e04bee1e2336c73e3f762c0c7744fe7e3crP  00f8b678094e3b3c9696766cfa)cd9044d2b71fdb8120ea60c0*6435acbafb11a82e2f071d7ca4a5ebd93a803ba87f*009769ecabdf48625594c59251e6035722675e04c847099e5ae0704551rP  00d560912d3f703c9696766cfa)d85bc7e69f944fb8.8a19b950bcf71a018e5e6701c91787659809d67dbedd18.bc218daa947427b6db386a99ac1aef23ade0b52939cb6a637cf9bec2408897c6barP  0042fff8f1951c3c9696766cfa)74a0ebc9069f5b3701761433c37c5a35fc1f39f406302eb907c6163be38c9843705810e6fd25874022e80361a478e3e9cf484ab04f447efff6f0a477cc2fc9bf548944rP  00920f40e56cdc3c9696766cfa)44a3aa3aae6475ca2a434a8e58500c6e41530538862d686ea9e81301b5ae4226bfa2f2beed7bc5098e83feb5b31608f8e29c38819a89c8e776f1544d4151a4ed3a8b87b9cerP  0027ca0c7120bc3c9696766cfa)ec46bb63b02520c33c49fd70&b96b49e21d621741632875db7f6c9243d2d7c2&31d750a09da3ed7fddd49a2032aabf17ec8ebf7d22c8088c666be5c197rP  005b8ccbcd9af83c9696766cfa)47a65ac78b3d594227e85e71(e2fcfbb880442c731bf95167c8ffd7895e337076(e882f1dbd38ce3eda7c23f04dd65071eb41342acdf7e00dccec7ae52987drP  003ebe94044b9a3c9696766cfa)6e37a6ef546d955d34ab6059*abf21c0b02feb88f856df4a37381bce3cc128517d4*f32905b88a641b04b9c9ffb58cc390900f3da12ab16dce9e82efa16da62059rP  008d493b30ae8b3c9696766cfa)r   r   r   r   __doc__joinr:   test_vectors_hexr   r  r  r   r   )r;   ytvr   s   000@r   r  r    s>    *			& 77uQr{P{!E!BKqFad1f%%K%{PQSV
V
L
L
(
,
&	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(Ml\ :JJ9I22.2aYq\2.9IJL& &y Qt /Js   3B<CC(CCr  c                   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# )TestVectorsWycheproofi`  c                j    \         P                  P                  V 4       Wn        W n        R V n        R# )NoneN)unittestTestCase__init___wycheproof_warnings_extra_params_id)r"   wycheproof_warningsextra_paramss   &&,r   r  TestVectorsWycheproof.__init__b  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_tagj  s    #q((r   zaes_ccm_test.jsonzWycheproof AES CCMtag_size)	group_tagN)Cipher
wycheproof)r   r  )r"   r  s   & r   setUpTestVectorsWycheproof.setUph  s'    	) //G/B/C:Dj9QSr   c                    V P                   # N)r  r5   s   &r   shortDescription&TestVectorsWycheproof.shortDescriptionr  s    xxr   c                    VP                   '       dI   V P                  '       d5   ^ RIpVP                  RV P                  : RVP
                  : R24       R# R# R# )r   NzWycheproof warning: z ())warningr  warningswarnr  comment)r"   r  r  s   && r   r  TestVectorsWycheproof.warnu  s9    :::$333MM488RZZPQ 4:r   c                f   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#   \         d   p\        TP                  4      \        ^^^4      9  d+   R\        T4      9   d   TP                  '       d   Q h Rp?R# TP                  \        ^^^4      9  d+   R\        T4      9   d   TP                  '       d   Q h Rp?R# ThRp?ii ; i)zWycheproof Encrypt CCM Test #r\   Length of parameter 'nonce'NParameter 'mac_len')stridr  r   r   r  r   ivr  r  r9   r+   r:   validrt   aadr]   msgr!   r%   r   r  )r"   r  r#   er%   r   s   &&    r   test_encrypt"TestVectorsWycheproof.test_encryptz  s>   2SZ?
	WWRVVS\\255 6"++ 6"&"4"46F 	bff++BFF3888R'S&&)IIbM   	255zq&!!449VZ]^_Z`9`888#|{{%61"55:OSVWXSY:Y888#|G	s1   AD	 	F0AF+F+#=F+!F+)F++F0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#   \         d   p\        TP                  4      \        ^^^4      9  d+   R\        T4      9   d   TP                  '       d   Q h Rp?R# TP                  \        ^^^4      9  d+   R\        T4      9   d   TP                  '       d   Q h Rp?R# ThRp?ii ; i  \         d    TP                  '       d   Q h R# i ; i)zWycheproof Decrypt CCM Test #r\   r  Nr  )r  r  r  r   r   r  r   r  r  r  r9   r+   r:   r  rt   r  re   r%   r   r!   r  r  )r"   r  r#   r  r$   s   &&   r   test_decrypt"TestVectorsWycheproof.test_decrypt  sV   2SZ?
	WWRVVS\\255 6"++ 6"&"4"46F 	bff	**255"&&9B 888O8R(IIbM#  	255zq&!!449VZ]^_Z`9`888#|{{%61"55:OSVWXSY:Y888#|G	  	 xxx<x	 sI   AC8 &F" 8FAF
F=FFFF"G?GGc                t   R \        VP                  4      ,           V n        \        VP                  4      \        ^^^4      9  g   \        VP                  4      ^ 8X  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 CCM Test #Nr\          )r  r  r  r+   r  r:   r%   r   r   r  r   r  r  rt   r  r
   r3   r9   re   r   )r"   r  r#   
ct_corrupts   &&  r   test_corrupt_decrypt*TestVectorsWycheproof.test_corrupt_decrypt  s    :SZGruu:U1fa00CJ!Oruu 2bkk 2"002bffBEE7c"%%j1n#=#GH
*f&?&?VVTr   c                    V P                    F6  pV P                  V4       V P                  V4       V P                  V4       K8  	  R # r  )r  r  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  r  r  r  r  r  r  r  r   r   r   s   @r   r  r  `  s5     SR
,2U* *r   r  c                     V P                  R 4      p. pV\        \        4      ,          pV\        \        4      ,          pV\	        4       .,          pV\        V4      .,          pV# )r  )getr   r   r   r  r  )configr  testss   &  r   	get_testsr    s\     **%:;E	_X&&E	_[))E	km_E	#$7899ELr   __main__c                  B    \         P                  ! \        4       4       R # r  )r  	TestSuiter  r   r   r   suiter    s    9;'r   r  )defaultTest)r  binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.Util.py3compatr   r   Crypto.Cipherr   Crypto.Hashr	   rd   r
   Crypto.Cipher._mode_ccmr   r   r  r   r   r  r  r  r   r  mainr   r   r   <module>r     s   >   5 ? /    % :8j*x   j*Zt)(## t)nH&(## H&VX*H-- X*v  	 z(MMg& r   