
    iQ                     ^   S SK r S SKJr  S SKJr  S SKJr  S SKJrJ	r	  S SK
Jr  S SKJr  S SKJr  S S	KJr  S
 r " S S\ R&                  5      r " S S\ R&                  5      r " S S\ R&                  5      r " S S\ R&                  5      r0 4S jr\S:X  a  S r\ R6                  " SS9  gg)    N)	unhexlify)list_test_cases)load_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128)strxor)CCMMessageTooLongErrorc                 Z    [         R                  " [        U 5      S9R                  U5      $ )N)data)r	   newr   read)taglengths     Z/var/www/html/trading/venv/lib/python3.13/site-packages/Crypto/SelfTest/Cipher/test_CCM.pyget_tag_randomr   -   s     <<WS\*//77    c                       \ rS rSr\" SS5      r\" SS5      r\" SS5      rS rS	 r	S
 r
S rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r g!)"CcmTests1   key_128   	nonce_128   r      c                 b   [         R                  " U R                  [         R                  U R                  S9n[        SS5      nUR                  U5      n[         R                  " U R                  [         R                  U R                  S9nUR                  U5      nU R                  X$5        g )Nnonce	plaintexti@  )	r   r   r   MODE_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                    [         R                  " U R                  [         R                  5      nUR                  n[         R                  " U R                  [         R                  5      nUR                  nU R                  [        U5      S5        U R                  X#5        [         R                  " U R                  [         R                  U R                  5      nUR                  U R                  5      n[         R                  " U R                  [         R                  U R                  S9nU R                  XAR                  U R                  5      5        g )N   r   )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                 ~    U R                  [        [        R                  U R                  [        R
                  SS9  g )Ntest12345678r   )assertRaises	TypeErrorr   r   r   r!   r&   s    r   test_nonce_must_be_bytes!CcmTests.test_nonce_must_be_bytesO   s,    )SWWdllCLL / 	 	1r   c           	      <   U R                  [        [        R                  U R                  [        R
                  SS9  U R                  [        [        R                  U R                  [        R
                  [        S5      S-  S9  U R                  [        [        R                  U R                  [        R
                  [        S5      S-  S9  [        SS5       H=  n[        R                  " U R                  [        R
                  [        S5      U-  S9  M?     g )Nr   r               )r7   
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                     [         R                  " U R                  [         R                  U R                  S9nU R                  UR                  [         R                  5        g Nr   )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                    [         R                  " U R                  [         R                  U R                  S9nU R                  UR                  U R                  5        [         R                  " U R                  [         R                  5      R                  n[         R                  " U R                  [         R                  5      R                  nU R                  [        U5      S5        U R                  X#5        g )Nr   r.   )	r   r   r   r!   r"   r%   r   r/   r0   )r&   r'   r1   r2   s       r   test_nonce_attributeCcmTests.test_nonce_attributea   s    s||4==It}}5 s||4::s||4::Vb)F+r   c           	         U R                  [        [        R                  U R                  [        R
                  U R                  S5        U R                  [        [        R                  U R                  [        R
                  U R                  SS9  [        R                  " U R                  [        R
                  U R                  SS9  g )Nr@   )r   unknownF)r   	use_aesni)r7   r8   r   r   r   r!   r"   r9   s    r   test_unknown_parameters CcmTests.test_unknown_parametersk   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                     S H^  n[         R                  " U R                  [         R                  U R                  S9n[        X!5      " S5      nU R                  US5        M`     g )Nr#   r$   r   r   )r   r   r   r!   r"   getattrr%   )r&   funcr'   results       r   test_null_encryption_decryption(CcmTests.test_null_encryption_decryptionv   sI    (DWWT\\3<<t}}MFV*3/FVS) )r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  S5        U R                  [        UR                  S5        [         R                  " U R                  [         R                  U R                  S9nUR                  S5        U R                  [        UR
                  S5        g )Nr   r   )	r   r   r   r!   r"   r#   r7   r8   r$   rI   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                 h   [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  S5        [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  S5        g )Nr   ztest1234567890-*)	r   r   r   r!   r"   r7   r8   r#   r$   rI   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           
         [        SSS5       HK  nU R                  [        [        R                  U R
                  [        R                  U R                  US9  MM     [        SSS5       Ht  n[        R                  " U R
                  [        R                  U R                  US9nUR                  U R                  5      u  p4U R                  [        U5      U5        Mv     [        R                  " U R
                  [        R                  U R                  S9nUR                  U R                  5      u  p4U R                  [        U5      S5        g )	N         )r   mac_len      r   r   )rB   r7   rA   r   r   r   r!   r"   encrypt_and_digestr   r%   r/   )r&   re   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                    SSK Jn  [        R                  " U R                  [        R
                  U R                  S9nUR                  U R                  5      u  p4U" US5      n[        R                  " U R                  [        R
                  U R                  S9nU R                  [        UR                  UU5        g )Nr   )strxor_cr   r=   )Crypto.Util.strxorrn   r   r   r   r!   r"   rh   r   r7   rA   decrypt_and_verify)r&   rn   r'   r)   rj   invalid_macs         r   test_invalid_macCcmTests.test_invalid_mac   s    /s||4==I++DII6sD)s||4==I*f&?&?%	'r   c                 x   [         R                  " U R                  [         R                  U R                  S9nUR                  5       nU R                  UR                  5       [        U5      5        [         R                  " U R                  [         R                  U R                  S9nUR                  U5        g rG   )
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                    [         R                  " U R                  [         R                  U R                  SS9nU R                  [        UR                  S5        [         R                  " U R                  [         R                  U R                  SS9nU R                  [        UR                  U R                  5        g )Nr   r   	assoc_len   1   )	r   r   r   r!   r"   r7   rA   updater   rI   s     r   $test_longer_assoc_data_than_declared-CcmTests.test_longer_assoc_data_than_declared   sz    s||4==#$&*fmmT: s||4==#%'*fmmTYY?r   c                    [        U R                  5      n[        R                  " U R                  [        R
                  U R                  US-   S9nUR                  U R                  5        U R                  [        UR                  U R                  5        [        R                  " U R                  [        R
                  U R                  US-   S9nUR                  U R                  5        U R                  [        UR                  5        [        R                  " U R                  [        R
                  U R                  US-   S9nUR                  U R                  5        U R                  [        UR                  U R                  5        [        R                  " U R                  [        R
                  U R                  S9nUR                  U R                  5        UR                  5       n[        R                  " U R                  [        R
                  U R                  US-   S9nUR                  U R                  5        U R                  [        UR                  U5        g )Nr=   r|   r   )r/   r   r   r   r   r!   r"   r   r7   rA   r#   rv   r$   verify)r&   DATA_LENr'   rj   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                    [        U R                  5      n[        R                  " U R                  [        R
                  U R                  US-   S9nUR                  U R                  5        U R                  [        UR                  5        [        R                  " U R                  [        R
                  U R                  US-
  S9nU R                  [        UR                  U R                  5        g )Nr=   r   msg_len)r/   r   r   r   r   r!   r"   r#   r7   rA   rv   )r&   r   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                 n   [        U R                  5      n[        R                  " U R                  [        R
                  U R                  S9nUR                  U R                  5      u  p4[        R                  " U R                  [        R
                  U R                  US-   S9nUR                  U5        U R                  [        UR                  U5        [        R                  " U R                  [        R
                  U R                  US-
  S9nU R                  [        UR                  U5        g )Nr   r=   r   )r/   r   r   r   r   r!   r"   rh   r$   r7   rA   r   )r&   r   r'   r)   rj   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           	         [        SS5      n[        SS5      n[        R                  " U R                  [        R                  U R
                  S9nUR                  U5        UR                  U5      u  pES nS H  n[        R                  " U R                  [        R                  U R
                  SSS9nU" X5       H  nUR                  U5        M     Sn	U" XG5       H  nXR                  U5      -  n	M     U R                  X)5        UR                  U5        M     S H  n[        R                  " U R                  [        R                  U R
                  SSS9nU" X5       H  nUR                  U5        M     Sn
U" X'5       H  nXR                  U5      -  n
M     U R                  XJ5        U R                  UR                  5       U5        M     g )	Nzauthenticated data   r    r   c                 b    [        S[        U 5      U5       Vs/ s H	  o X"U-    PM     sn$ s  snf Nr   )rB   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=   rd   rb   r@   
      r   (   P   r   r   r   r}   r   )r   r   r   r   r!   r"   r   rh   r$   r%   r   r#   rv   )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                    [        U R                  5      n[        U R                  5      n[        U R                  5      n[        U R                  5      n[        R
                  " U R                  [        R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      nUR                  5       n[        R
                  " U[        R                  US9nSUS S& SUS S& UR                  U5        SUS S& UR                  U5      n	SUS S& UR                  5       n
U R                  Xi5        U R                  Xz5        U R                  UR                  UR                  5        [        U R                  5      n[        U R                  5      n[        U R                  5      nA[        R
                  " U[        R                  US9nSUS S& SUS S& UR                  U5        SUS S& UR                  [        U	5      [        U
5      5      nU R                  U R                  U5        g Nr   s   rb   )	bytearrayr   r"   r   r   r   r!   r   r#   rv   r%   r   rp   )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!'	"1//'*%>>#%'6 4<<(T]]+dii(	''&,, (* %r
&!y!'	"1,,Yw-?8ATUG,r   c                    [        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[
        R                  " U R                  [
        R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      nUR                  5       n[
        R                  " U[
        R                  US9nSUS S& SUS S& UR                  U5        SUS S& UR                  U5      n	SUS S& UR                  5       n
U R                  Xi5        U R                  Xz5        U R                  UR                  UR                  5        [        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      nA[
        R                  " U[
        R                  US9nSUS S& SUS S& UR                  U5        SUS S& UR                  [        U	5      [        U
5      5      nU R                  U R                  U5        g r   )
memoryviewr   r   r"   r   r   r   r!   r   r#   rv   r%   r   rp   )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!'	"1//'*%>>#%'6 Idll34i67y34	''&,, (* %r
&!y!'	"1,,Z-@*XBVWG,r   c                 H   Sn[         R                  " U R                  [         R                  U R                  S9nUR                  U5      nUR                  5       n[        S5      n[         R                  " U R                  [         R                  U R                  S9nUR                  XS9nU R                  X55        U R                  US 5        [         R                  " U R                  [         R                  U R                  S9nUR                  X5S9nU R                  X5        U R                  US 5        [         R                  " U R                  [         R                  U R                  S9nUR                  XS9u  pgU R                  X55        U R                  US 5        U R                  XG5        [         R                  " U R                  [         R                  U R                  S9nUR                  X4US9nU R                  X5        U R                  US 5        g Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r   r   output)r   r   r   r!   r"   r#   rv   r   r%   r$   rh   rp   )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                 "   Sn[         R                  " U R                  [         R                  U R                  S9nUR                  U5      n[        [        S5      5      n[         R                  " U R                  [         R                  U R                  S9nUR                  XS9  U R                  X45        [         R                  " U R                  [         R                  U R                  S9nUR                  X4S9  U R                  X5        g r   )
r   r   r   r!   r"   r#   r   r   r%   r$   )r&   r(   r'   r)   r   s        r   test_output_param_memoryview%CcmTests.test_output_param_memoryview  s    s||4==I^^BIcN+s||4==Ir)$s||4==Ir)$r   c                 l   Sn[         R                  " U R                  [         R                  U R                  S9nUR                  U5      n[         R                  " U R                  [         R                  U R                  S9nU R                  [        UR
                  USS9  [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  USS9  [        S5      n[         R                  " U R                  [         R                  U R                  S9nU R                  [        UR
                  XS9  [         R                  " U R                  [         R                  U R                  S9nU R                  [        UR                  X4S9  g )Ns   5555555555555555r   s   0000000000000000r   r   )r   r   r   r!   r"   r#   r7   r8   r$   r   rA   )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           
      X   SnU R                  [        [        R                  U R                  [        R
                  USSS9  SnU R                  [        [        R                  U R                  [        R
                  USSS9  Sn[        R                  " U R                  [        R
                  US9nU R                  [        UR                  SS-  5        Sn[        R                  " U R                  [        R
                  US9nU R                  [        UR                  SS-  5        g )	Ns   NNNNNNNNNNNNN   i   r   r}   r   s   NNNNNNNl            r      C)r7   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+   r3   r:   rD   rJ   rM   rR   rY   r\   r_   rk   rr   ry   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r   r   r   r   r   1   s    Y+Gk2.H&#&D"81C<,	!*:J'$	'"	@:>
A:)7V--^--^$:%Q$*r   r   c                       \ rS rSr\" SS5      r\" SS5      r\" SS5      rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rSrg)CcmFSMTestsi  r   r   r   r   r   c           
         S H  nS [        U R                  5      4 H  n[        R                  " U R                  [        R
                  U R                  UUS9nUR                  U R                  5      nUR                  5       n[        R                  " U R                  [        R
                  U R                  UUS9nUR                  U5        UR                  U5        M     M     g Nr   r   )r/   r   r   r   r   r!   r"   r#   rv   r$   r   r&   r}   r   r'   r)   rj   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           
         S [        U R                  5      4 H  nS H  n[        R                  " U R                  [        R
                  U R                  UUS9nUR                  U R                  5        UR                  5       n[        R                  " U R                  [        R
                  U R                  UUS9nUR                  U R                  5        UR                  U5        M     M     g r   )
r/   r   r   r   r   r!   r"   r   rv   r   )r&   r}   r   r'   rj   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           
      n   S [        U R                  5      4 GH  nS [        U R                  5      4 H  n[        R                  " U R                  [        R
                  U R                  UUS9nUR                  U R                  5        UR                  U R                  5      nUR                  5       n[        R                  " U R                  [        R
                  U R                  UUS9nUR                  U R                  5        UR                  U5        UR                  U5        M     GM     g )Nr   )r/   r   r   r   r   r!   r"   r   r#   rv   r$   r   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                     [         R                  " U R                  [         R                  U R                  S9nUR                  5         g rG   )r   r   r   r!   r"   rv   rI   s     r   test_valid_init_digest"CcmFSMTests.test_valid_init_digest"  s)    s||4==Ir   c                 &   [         R                  " U R                  [         R                  U R                  S9nUR                  5       n[         R                  " U R                  [         R                  U R                  S9nUR                  U5        g rG   )r   r   r   r!   r"   rv   r   )r&   r'   rj   s      r   test_valid_init_verify"CcmFSMTests.test_valid_init_verify'  sU    s||4==Immos||4==Icr   c           
         S H  nS SU R                   U R                   S-   4 H  nUc  S nO[        U5      n[        R                  " U R                  [        R
                  U R                  SUS9nUb  UR                  U5        [        XA5      nU" U R                   5        U" U R                   5        U" U R                   5        U" U R                   5        M     M     g )NrU   s   333   3@   r   )	r   r/   r   r   r   r!   r"   r   rV   )r&   method_namer   r}   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                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  5       n[        S5       H"  nU R                  X!R                  5       5        M$     [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        [        S5       H  nUR                  U5        M     g )Nr   rf      )r   r   r   r!   r"   r   r   rv   rB   r%   r   )r&   r'   	first_macrC   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                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      u  p#[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  X#5      nU R                  U R                  U5        g rG   )
r   r   r   r!   r"   r   r   rh   rp   r%   )r&   r'   r)   rj   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                 V   S H  nS H  n[         R                  " U R                  [         R                  U R                  S9nU(       a  UR                  U R                  5        [        X15      nU" U R                  5        U R                  [        X@R                  5        M     M     g )NrU   TFr   
r   r   r   r!   r"   r   r   rV   r7   r8   )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           	      l   S H  u  pS H  n[         R                  " U R                  [         R                  U R                  SS9nU(       a  UR                  U R                  5        [        XA5      " U R                  5        U R                  [        [        XB5      U R                  5        M     M     g )N)rU   )r$   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                    S H  n[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  5         U R                  [        [        X!5      U R                  5        [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        M     g )N)r#   r   r   )r   r   r   r!   r"   r#   r   rv   r7   r8   rV   rh   )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                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5      nUR                  5       nS H  n[         R                  " U R                  [         R                  U R                  S9nUR                  U5        UR                  U5        U R                  [        [        X5      U R                  5        [         R                  " U R                  [         R                  U R                  S9nUR                  X#5        U R                  [        [        X5      U R                  5        M     g )Nr   )r$   r   )r   r   r   r!   r"   r#   r   rv   r$   r   r7   r8   rV   rp   )r&   r'   r)   rj   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   r   r   r     sc    Y+Gk2.H&"%D#(#(#,
"*%
(
@-	1)r   r   c                      \ rS rSrSrSSSSR                  \" SS5       V VVVs/ s H"  n[        SS5        H  nS	US-  U-   -  PM     M$     snnnn 5      S
-  SSSSS4SSSSSSSSSSSSSSSSS S!S"S#S$S%S&S'/r\ V VVVs/ s H  oD Vs/ s H  n[        U5      PM     snPM      snnnn r	S( r
S)rg*s  snnnn f s  snf s  snnnn f )+TestVectorsi  z\Class exercising the CCM test vectors found in Appendix C
of NIST SP 800-38C and in RFC 3610)0001020304050607202122237162015b4dac255d 404142434445464748494a4b4c4d4e4f10111213141516) 000102030405060708090a0b0c0d0e0f 202122232425262728292a2b2c2d2e2f d2a1f0e051ea5f62081a7792073d593d1fc64fbfaccdr  1011121314151617)(000102030405060708090a0b0c0d0e0f101112130202122232425262728292a2b2c2d2e2f30313233343536370e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5484392fbc1b09951r  101112131415161718191a1b r   r   z%02X   @202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f@69915dad1e84c6376a68c2967e4dab615ae0fd1faec44cc484828529463ccf72b4ac6bec93e8598e7f0dadbcea5br  101112131415161718191a1b1c)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/  r0  &07342594157785152b074098330abb141b947b566aa9406b4d999988ddr%  0000000c0b0a09a0a1a2a3a4a5)r/  r4  (676bb20380b0e301e8ab79590a396da78b834934f53aa2e9107a8b6c022cr%  0000000d0c0b0aa0a1a2a3a4a5)r/  r8  *c0ffa0d6f05bdb67f24d43a4338d2aa4bed7b20e43cd1aa31662e7ad65d6dbr%  0000000e0d0c0ba0a1a2a3a4a5)0be1a88bace018b1.08e8cf97d820ea258460e96ad9cf5289054d895ceac47c.4cb97f86a2a4689a877947ab8091ef5386a6ffbdd080f8e78cf7cb0cddd7b3 d7828d13b2b0bdc325a76236df93cc6b00412b4ea9cdbe3c9696766cfa)63018f76dc8a1bcb09020ea6f91bdd85afa0039ba4baff9bfb79c7028949cd0ec04ccb1e7ca981befaa0726c55d378061298c85c92814abc33c52ee81d7d77c08arR  0033568ef7b2633c9696766cfa)aa6cfa36cae86b402b916e0eacc1c00d7dcec68ec0b3bbb1a02de8a2d1aa346132e2b1d23a2220ddc0ac900d9aa03c61fcf4a559a4417767089708a776796edb723506rR  00103fe41336713c9696766cfa)d0d0735c531e1becf049c244&12daac5630efa5396f770ce1a66b21f7b2101c&14d253c3967b70609b7cbb7c499160283245269a6f49975bcadeafrR  00764c63b8058e3c9696766cfa)77b60f011c03e1525899bcae(e88b6a46c78d63e52eb8c546efb5de6f75e9cc0d(5545ff1a085ee2efbf52b2e04bee1e2336c73e3f762c0c7744fe7e3crR  00f8b678094e3b3c9696766cfa)cd9044d2b71fdb8120ea60c0*6435acbafb11a82e2f071d7ca4a5ebd93a803ba87f*009769ecabdf48625594c59251e6035722675e04c847099e5ae0704551rR  00d560912d3f703c9696766cfa)d85bc7e69f944fb8.8a19b950bcf71a018e5e6701c91787659809d67dbedd18.bc218daa947427b6db386a99ac1aef23ade0b52939cb6a637cf9bec2408897c6barR  0042fff8f1951c3c9696766cfa)74a0ebc9069f5b3701761433c37c5a35fc1f39f406302eb907c6163be38c9843705810e6fd25874022e80361a478e3e9cf484ab04f447efff6f0a477cc2fc9bf548944rR  00920f40e56cdc3c9696766cfa)44a3aa3aae6475ca2a434a8e58500c6e41530538862d686ea9e81301b5ae4226bfa2f2beed7bc5098e83feb5b31608f8e29c38819a89c8e776f1544d4151a4ed3a8b87b9cerR  0027ca0c7120bc3c9696766cfa)ec46bb63b02520c33c49fd70&b96b49e21d621741632875db7f6c9243d2d7c2&31d750a09da3ed7fddd49a2032aabf17ec8ebf7d22c8088c666be5c197rR  005b8ccbcd9af83c9696766cfa)47a65ac78b3d594227e85e71(e2fcfbb880442c731bf95167c8ffd7895e337076(e882f1dbd38ce3eda7c23f04dd65071eb41342acdf7e00dccec7ae52987drR  003ebe94044b9a3c9696766cfa)6e37a6ef546d955d34ab6059*abf21c0b02feb88f856df4a37381bce3cc128517d4*f32905b88a641b04b9c9ffb58cc390900f3da12ab16dce9e82efa16da62059rR  008d493b30ae8b3c9696766cfac           	         U R                    H  u  pp4pV[        R                  " U[        R                  U[	        U5      S9nUR                  U5        UR                  U5      u  pU R                  X85        U R                  XI5        [        R                  " U[        R                  U[	        U5      S9nUR                  U5        UR                  X45      n
U R                  X*5        M     g )N)re   )	test_vectorsr   r   r!   r/   r   rh   r%   rp   )r&   
assoc_datar(   r)   rj   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)r   r   r   r   __doc__joinrB   test_vectors_hexr   r  r  r   ).0rC   yrB   tvr   s   000000r   r  r    s3   *			& 77uQr{P{!E!BKqFad1f%K%{PQSV
V
L
L
(
,
&	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(Ml\ :JJ9I22.2aYq\2.9IJL&y Qt /Js   )B2	B?

B:B?
:B?
r  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestVectorsWycheproofi`  c                 h    [         R                  R                  U 5        Xl        X l        SU l        g )NNone)unittestTestCase__init___wycheproof_warnings_extra_params_id)r&   wycheproof_warningsextra_paramss      r   r  TestVectorsWycheproof.__init__b  s)    ""4($7!)r   c                 0    S n[        SSSSU0S9U l        g )Nc                     U S   S-  $ )NtagSize   r   )groups    r   
filter_tag/TestVectorsWycheproof.setUp.<locals>.filter_tagj  s    #q((r   )Cipher
wycheproofzaes_ccm_test.jsonzWycheproof AES CCMtag_size)	group_tag)r   r  )r&   r  s     r   setUpTestVectorsWycheproof.setUph  s'    	) //G/B/C:Dj9QSr   c                     U R                   $ N)r  r9   s    r   shortDescription&TestVectorsWycheproof.shortDescriptionr  s    xxr   c                     UR                   (       aE  U R                  (       a3  SS KnUR                  SU R                  < SUR
                  < S35        g g g )Nr   zWycheproof warning: z ())warningr  warningswarnr  comment)r&   r  r  s      r   r  TestVectorsWycheproof.warnu  s4    ::$33MM488RZZPQ 4:r   c                 F   S[        UR                  5      -   U l         [        R                  " UR
                  [        R                  UR                  4SUR                  0U R                  D6nUR                  UR                  5        UR!                  UR"                  5      u  pEUR                  (       aH  U R%                  XAR&                  5        U R%                  XQR(                  5        U R+                  U5        g g ! [         a  n[        UR                  5      [        SSS5      ;  a'  S[        U5      ;   a  UR                  (       a   e S nAg UR                  [        SSS5      ;  a'  S	[        U5      ;   a  UR                  (       a   e S nAg UeS nAff = f)
NzWycheproof Encrypt CCM Test #re   r@   r?   rd   Length of parameter 'nonce'rf   rg   Parameter 'mac_len')stridr  r   r   r  r!   ivr  r  rA   r/   rB   validr   aadrh   msgr%   r)   r   r  )r&   r  r'   er)   r   s         r   test_encrypt"TestVectorsWycheproof.test_encryptz  s8   2SZ?
	WWRVVS\\255 6"++ 6"&"4"46F 	bff++BFF388R'S&&)IIbM   	255zq&!!449VZ]^_Z`9`88#|{{%61"55:OSVWXSY:Y88#|G	s%   AD 
F AF=FFF c                 l   S[        UR                  5      -   U l         [        R                  " UR
                  [        R                  UR                  4SUR                  0U R                  D6nUR                  UR                  5         UR!                  UR"                  UR$                  5      nUR                  (       d   eU R'                  XAR(                  5        U R+                  U5        g ! [         a  n[        UR                  5      [        SSS5      ;  a'  S[        U5      ;   a  UR                  (       a   e S nAg UR                  [        SSS5      ;  a'  S	[        U5      ;   a  UR                  (       a   e S nAg UeS nAff = f! [         a    UR                  (       a   e g f = f)
NzWycheproof Decrypt CCM Test #re   r@   r?   rd   r  rf   rg   r  )r  r  r  r   r   r  r!   r  r  r  rA   r/   rB   r  r   r  rp   r)   r   r%   r  r  )r&   r  r'   r  r(   s        r   test_decrypt"TestVectorsWycheproof.test_decrypt  sN   2SZ?
	WWRVVS\\255 6"++ 6"&"4"46F 	bff	**255"&&9B 88O8R(IIbM#  	255zq&!!449VZ]^_Z`9`88#|{{%61"55:OSVWXSY:Y88#|G	  	 xx<x	 s7   AC2 &F 2
F<AF=F	FFF32F3c                 L   S[        UR                  5      -   U l        [        UR                  5      [        SSS5      ;  d  [        UR                  5      S:X  a  g [        R                  " UR                  [        R                  UR                  4SUR                  0U R                  D6nUR                  UR                  5        [        UR                  S[        UR                  5      S-
  -  S	-   5      nU R!                  ["        UR$                  X1R&                  5        g )
Nz%Wycheproof Corrupt Decrypt CCM Test #r@   r?   rd   r   re       r=      )r  r  r  r/   r  rB   r)   r   r   r  r!   r  r  r   r  r
   r7   rA   rp   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                     U R                    H6  nU R                  U5        U R                  U5        U R                  U5        M8     g 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   r   r  r  `  s-    SR
,2U*r   r  c                     U R                  S5      n/ nU[        [        5      -  nU[        [        5      -  nU[	        5       /-  nU[        U5      /-  nU$ )Nr  )getr   r   r   r  r  )configr  testss      r   	get_testsr    s\     **%:;E	_X&&E	_[))E	km_E	#$7899ELr   __main__c                  @    [         R                  " [        5       5        g 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	   ro   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   