
    i                     \   S SK r S SKJr  S SKJr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 SKJr  S	 r " S
 S\ R$                  5      r " S S\ R$                  5      rS r " S S\ R$                  5      r " S S\ R$                  5      r0 4S jr\S:X  a  S r\ R6                  " SS9  gg)    N)	unhexlify)btobytesbchr)long_to_bytes)load_test_vectors)list_test_cases)AES)SHAKE128c                 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_OCB.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g)OcbTests/   key_128   	nonce_128   r      c                 f   [         R                  " U R                  [         R                  U R                  S9n[        SS5      nUR                  U5      u  p4[         R                  " U R                  [         R                  U R                  S9nUR                  X45      nU R                  X%5        g )Nnonce	plaintexti@  )	r
   r   r   MODE_OCBnonce_96r   encrypt_and_digestdecrypt_and_verifyassertEqual)selfcipherptctmacpt2s         r   test_loopback_128OcbTests.test_loopback_1285   sz    s||4==IK2++B/s||4==I''0!r   c                    [         R                  " U R                  [         R                  5        [         R                  " U R                  [         R                  U R                  5      nUR                  U R                  5      n[         R                  " U R                  [         R                  U R                  S9nU R                  X!R                  U R                  5      5        g Nr   )r
   r   r   r!   r"   encryptr   r%   r&   r'   r)   s      r   
test_nonceOcbTests.test_nonce>   s    cll+s||T]]C^^DII&s||4==I^^DII67r   c                 ~    U R                  [        [        R                  U R                  [        R
                  SS9  g )Ntest12345678r   )assertRaises	TypeErrorr
   r   r   r!   r&   s    r   test_nonce_must_be_bytes!OcbTests.test_nonce_must_be_bytesH   s,    )SWWdllCLL / 	 	1r   c           	         U R                  [        [        R                  U R                  [        R
                  [        S5      S9  [        SS5       H>  n[        R                  " U R                  [        R
                  U R                  S U S9  M@     U R                  [        [        R                  U R                  [        R
                  U R                  S9  g )N r      r   )	r6   
ValueErrorr
   r   r   r!   r   ranger   )r&   r   s     r   test_nonce_lengthOcbTests.test_nonce_lengthL   s    *cggt||S\\ !" 	 	' ArlFGGDLL#,,dii6HI # 	*cggt||S\\ $		 	 	+r   c                    [         R                  " U R                  [         R                  U R                  S9nU R                  UR                  [         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%   
block_sizer   lenassertNotEqualr&   r'   nonce1nonce2s       r   test_block_size_128OcbTests.test_block_size_128X   s    s||4==I**CNN; s||4::s||4::Vb)F+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 rC   )	r
   r   r   r!   r"   r%   r   rF   rG   rH   s       r   test_nonce_attributeOcbTests.test_nonce_attributeb   s    s||4==It}}5 s||4::s||4::Vb)F+r   c           	         U R                  [        [        R                  U R                  [        R
                  U R                  S5        U R                  [        [        R                  U R                  [        R
                  U R                  SS9  [        R                  " U R                  [        R
                  U R                  SS9  g )N   )r   unknownF)r   	use_aesni)r6   r7   r
   r   r   r!   r"   r8   s    r   test_unknown_parameters OcbTests.test_unknown_parametersl   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                     S Hp  n[         R                  " U R                  [         R                  U R                  S9n[        X!5      " [        S5      5      nU R                  U[        S5      5        Mr     g )Nr0   decryptr   r<   )r
   r   r   r!   r"   getattrr   r%   )r&   funcr'   results       r   test_null_encryption_decryption(OcbTests.test_null_encryption_decryptionw   sQ    (DWWT\\3<<t}}MFV*1R51FVQrU+ )r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  [        S5      5        U R                  [        UR                  [        S5      5        [         R                  " U R                  [         R                  U R                  S9nUR                  [        S5      5        U R                  [        UR
                  [        S5      5        g )Nr   xyz)
r
   r   r   r!   r"   r0   r   r6   r7   rX   r&   r'   s     r   test_either_encrypt_or_decrypt'OcbTests.test_either_encrypt_or_decrypt}   s    s||4==Iqx )V^^QuX>s||4==Iqx )V^^QuX>r   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"   r6   r7   r0   rX   r`   s     r   test_data_must_be_bytes OcbTests.test_data_must_be_bytes   sl    s||4==I)V^^5HIs||4==I)V^^5HIr   c           	         U R                  [        [        R                  U R                  [        R
                  U R                  SS9  U R                  [        [        R                  U R                  [        R
                  U R                  SS9  [        SS5       Ht  n[        R                  " U R                  [        R
                  U R                  US9nUR                  U R                  5      u  p4U R                  [        U5      U5        Mv     [        R                  " U R                  [        R
                  U R                  S9nUR                  U R                  5      u  p4U R                  [        U5      S5        g )NrQ   r   mac_len      r   r   )r6   r>   r
   r   r   r!   r"   r?   r#   r   r%   rF   )r&   rh   r'   _r*   s        r   test_mac_lenOcbTests.test_mac_len   s   *cggt||S\\ $q 	 	:*cggt||S\\ $t 	 	= Q'GWWT\\3<<t}}%,.F..tyy9FASXw/	 ( s||4==I**4995S2&r   c                    SSK Jn  [        R                  " U R                  [        R
                  U R                  S9nUR                  U R                  5      u  p4U" US5      n[        R                  " U R                  [        R
                  U R                  S9nU R                  [        UR                  UU5        g )Nr   )strxor_cr   r=   )Crypto.Util.strxorro   r
   r   r   r!   r"   r#   r   r6   r>   r$   )r&   ro   r'   r)   r*   invalid_macs         r   test_invalid_macOcbTests.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 r/   )
r
   r   r   r!   r"   	hexdigestr%   digestr   	hexverify)r&   r'   mac_hexs      r   test_hex_macOcbTests.test_hex_mac   su    s||4==I""$)G*<=s||4==I!r   c                    [        SS5      n[        SS5      n[        R                  " U R                  [        R                  U R
                  S9nUR                  U5        UR                  U5      u  pES nS H  n[        R                  " U R                  [        R                  U R
                  S9nU" X5       H  nUR                  U5        M     [        S5      n	U" XG5       H  nXR                  U5      -  n	M     XR                  5       -  n	U R                  X)5        UR                  U5        M     S H  n[        R                  " U R                  [        R                  U R
                  S9nU" X5       H  nUR                  U5        M     [        S5      n
U" X'5       H  nXR                  U5      -  n
M     XR                  5       -  n
U R                  XJ5        U R                  UR                  5       U5        M     g )Nzauthenticated data   r    r   c                 b    [        S[        U 5      U5       Vs/ s H	  o X"U-    PM     sn$ s  snf )Nr   )r?   rF   )r   chunk_lengthis      r   break_up.OcbTests.test_message_chunks.<locals>.break_up   s?    49!SY 5" # 5"q\>* 5" # # #s   ,)
r=         rQ   
      r   (   P   r   r<   )r   r
   r   r   r!   r"   updater#   r   rX   r%   verifyr0   rv   )r&   	auth_datar    r'   
ciphertextref_macr   r~   chunkr+   ct2s              r   test_message_chunksOcbTests.test_message_chunks   s    ##7=	";4	s||4==Ii $77	B
	#
 @LWWT\\3<<t}}MF!):e$ ;B%C!*;~~e,, <>>##CY,MM'" @ @LWWT\\3<<t}}MF!):e$ ;B%C!):~~e,, ;>>##C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      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      UR                  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   r   )	bytearrayr   r"   r   r
   r   r!   r   r0   rv   r%   r   r$   )r&   key_banonce_ba	header_badata_bacipher1r)   r   cipher2ct_testtag_testcipher4pt_tests                r   test_bytearrayOcbTests.test_bytearray   s    4<<(T]]+dii(	DII&''$,,,, $/ 	tyy!__TYY''//*;;nn''&,, (* %r
&!y!'	"1//'*W__->>%>>#%'6 4<<(T]]+dii(	''&,, (* %r
&!y!'	"1,,Yw-?8ATUG,r   c                 V   [        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[
        R                  " U R                  [
        R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      U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      UR                  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   r0   rv   r%   r   r$   )r&   key_mvnonce_mv	header_mvdata_mvr   r)   r   r   r   r   r   r   s                r   test_memoryviewOcbTests.test_memoryview  s    Idll34i67y34	Ytyy12''$,,,, $/ 	tyy!__TYY''//*;;nn''&,, (* %r
&!y!'	"1//'*W__->>%>>#%'6 Idll34i67y34	''&,, (* %r
&!y!'	"1,,Z-@*XBVWG,r    N)__name__
__module____qualname____firstlineno__r   r   r"   r   r,   r2   r9   r@   rK   rN   rT   r\   ra   rd   rl   rr   ry   r   r   r   __static_attributes__r   r   r   r   r   /   sy    Y+Gk2.H&#&D"81
+,,	!,?J'&	'")7V--^--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S rSrg)OcbFSMTestsi=  r   r   r   r   r   r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5      nX!R                  5       -  nUR                  5       n[         R                  " U R                  [         R                  U R                  S9nUR                  U5        UR                  5         UR                  U5        g r/   )
r
   r   r   r!   r"   r0   r   rv   rX   r   )r&   r'   r)   r*   s       r   -test_valid_init_encrypt_decrypt_digest_verify9OcbFSMTests.test_valid_init_encrypt_decrypt_digest_verifyC  s     s||#}}.^^DII&
nnmmo s||#}}.rcr   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5      nU R                  [        UR                  5        [         R                  " U R                  [         R                  U R                  S9nUR                  U5        U R                  [        UR                  5        g r/   )r
   r   r   r!   r"   r0   r   r6   r7   rv   rX   r   r1   s      r   /test_invalid_init_encrypt_decrypt_digest_verify;OcbFSMTests.test_invalid_init_encrypt_decrypt_digest_verifyS  s     s||#}}.^^DII&)V]]3 s||#}}.r)V]]3r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  5       n[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U5        g r/   )	r
   r   r   r!   r"   r   r   rv   r   r&   r'   r*   s      r   $test_valid_init_update_digest_verify0OcbFSMTests.test_valid_init_update_digest_verifya  s     s||#}}.dii mmo s||#}}.dii cr   c                 :   [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      nX!R                  5       -  nUR                  5       n[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U5        UR                  5         UR                  U5        [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U R                  S S 5      nUR                  U R                  SS  5      u  pS[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U5        UR                  XS5        g )Nr   r   )r
   r   r   r!   r"   r   r   r0   rv   rX   r   r#   r$   )r&   r'   r)   r*   ct1r   s         r   test_valid_full_path OcbFSMTests.test_valid_full_patho  sj    s||#}}.dii ^^DII&
nnmmo s||#}}.dii rc s||#}}.dii nnTYYr]+,,TYYqr]; s||#}}.dii s!!#+r   c                 V   [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U R                  5        UR                  5         U R                  [        UR                  U R                  5        g r/   )
r
   r   r   r!   r"   r   r   r0   r6   r7   r`   s     r    test_invalid_encrypt_after_final,OcbFSMTests.test_invalid_encrypt_after_final  g    s||#}}.dii tyy!)V^^TYY?r   c                 V   [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U R                  5        UR                  5         U R                  [        UR                  U R                  5        g r/   )
r
   r   r   r!   r"   r   r   rX   r6   r7   r`   s     r    test_invalid_decrypt_after_final,OcbFSMTests.test_invalid_decrypt_after_final  r   r   c                     [         R                  " U R                  [         R                  U R                  S9nUR                  5         g r/   )r
   r   r   r!   r"   rv   r`   s     r   test_valid_init_digest"OcbFSMTests.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 r/   )r
   r   r   r!   r"   rv   r   r   s      r   test_valid_init_verify"OcbFSMTests.test_valid_init_verify  sU    s||4==Immos||4==Icr   c                    S H  nS [        S5      U R                  U R                  [        S5      -   4 H  n[        R                  " U R                  [        R
                  U R                  S9nUb  UR                  U5        [        X15      nU" U R                  5        U" U R                  5        U" U R                  5        U" U R                  5        U" 5         M     M     g )NrW   3333r   )	r   r   r
   r   r   r!   r"   r   rY   )r&   method_namer   r'   methods        r   &test_valid_multiple_encrypt_or_decrypt2OcbFSMTests.test_valid_multiple_encrypt_or_decrypt  s    /K"AeHdii"ii!C&02	s||'+}}6(MM), 5tyy!tyy!tyy!tyy!2 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         )r
   r   r   r!   r"   r   r   rv   r?   r%   r   )r&   r'   	first_macxs       r   $test_valid_multiple_digest_or_verify0OcbFSMTests.test_valid_multiple_digest_or_verify  s    s||4==Idii MMO	qAY8  s||4==Idii qAMM)$ r   c                    [         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  U R                  5      u  p#[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  X#5      nU R                  U R                  U5        g r/   )
r
   r   r   r!   r"   r   r   r#   r$   r%   )r&   r'   r)   r*   r(   s        r   0test_valid_encrypt_and_digest_decrypt_and_verify<OcbFSMTests.test_valid_encrypt_and_digest_decrypt_and_verify  s    s||4==Idii ++DII6 s||4==Idii &&r/B'r   c           	      j   S H  u  pS H  n[         R                  " U R                  [         R                  U R                  S9nU(       a  UR                  U R                  5        [        XA5      " U R                  5        U R                  [        [        XB5      U R                  5        M     M     g )N)rW   )rX   r0   )TFr   )
r
   r   r   r!   r"   r   r   rY   r6   r7   )r&   method1_namemethod2_nameassoc_data_presentr'   s        r   #test_invalid_mixing_encrypt_decrypt/OcbFSMTests.test_invalid_mixing_encrypt_decrypt  s    +C&L&3"s||'+}}6%MM$)),-dii8!!)WV-J"&))- '4+Cr   c                    S H  n[         R                  " U R                  [         R                  U R                  S9nUR                  U R                  5        UR                  5         UR                  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)r0   r   r   )r
   r   r   r!   r"   r0   r   rv   r6   r7   rY   r#   )r&   r   r'   s      r   +test_invalid_encrypt_or_update_after_digest7OcbFSMTests.test_invalid_encrypt_or_update_after_digest  s    .KWWT\\3<<t}}MFNN499%NN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X!R                  5       -  nUR                  5       nS GH  n[         R                  " U R                  [         R                  U R                  S9nUR                  U5        UR                  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        GM     g )Nr   )rX   r   )r
   r   r   r!   r"   r0   r   rv   rX   r   r6   r7   rY   r$   )r&   r'   r)   r*   r   s        r   +test_invalid_decrypt_or_update_after_verify7OcbFSMTests.test_invalid_decrypt_or_update_after_verify  s    s||4==I^^DII&
nnmmo.KWWT\\3<<t}}MFNN2NN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   r   r   =  so    Y+Gk2.H&#&D 4,@@@
%
(-
1)r   r   c                     [        S5      U S-  S-
  -  [        U5      -   nSn[        S5       GHu  n[        S5      U-  n[        SU-  S-   US-  5      n[        R                  " U[        R
                  XqS-  S9nUR                  U5        XHR                  U5      UR                  5       -   UR                  5       -   -  n[        SU-  S-   US-  5      n[        R                  " U[        R
                  XqS-  S9nXHR                  U5      UR                  5       -   UR                  5       -   -  n[        SU-  S-   US-  5      n[        R                  " U[        R
                  XqS-  S9nUR                  U5        XHR                  5       UR                  5       -   -  nGMx     [        S	US-  5      n[        R                  " U[        R
                  XqS-  S9nUR                  U5        UR                  5       UR                  5       -   $ )
z.Implement the algorithm at page 18 of RFC 7253r   rj   r=   r   r   r   rg   r   i  )	r   r?   r   r
   r   r!   r   r0   rv   )	keylentaglennoncelenkeyCr   SNr'   s	            r   algo_rfc7253r     s    q'Vq[1_
%V
4CA3ZGaK!a%!)X]3cll!q[Ia	^^A!11FMMOCC!a%!)X]3cll!q[I	^^A!11FMMOCC!a%!)X]3cll!q[Ia	^^// " 	c8q=)AWWS#,,a1EF
MM!>>fmmo--r   c                   6    \ rS rSrSrSrSrSrS rS r	S r
S	rg
)OcbRfc7253Testi   000102030405060708090A0B0C0D0E0F))BBAA99887766554433221100r<   r<    785407BFFFC8AD9EDCC5520AC9111EE6)BBAA998877665544332211010001020304050607r   06820B3657B6F615A5725BDA0D3B4EB3A257C9AF1F8F03009)BBAA99887766554433221102r   r<    81017F8203F081277152FADE694A0A00)BBAA99887766554433221103r<   r   045DD69F8F5AAE72414054CD1F35D82760B2CD00D2F99BFA9)BBAA99887766554433221104r   r   @571D535B60B277188BE5147170A9A22C3AD7A4FF3835B8C5701C1CCEC8FC3358)BBAA99887766554433221105r   r<    8CF761B6902EF764462AD86498CA6B97)BBAA99887766554433221106r<   r   @5CE88EC2E0692706A915C00AEB8B2396F40E1C743F52436BDF06D8FA1ECA343D)BBAA998877665544332211070000102030405060708090A0B0C0D0E0F1011121314151617r  P1CA2207308C87C010756104D8840CE1952F09673A448A122C92C62241051F57356D7F3C90BB0E07F)BBAA99887766554433221108r  r<    6DC225A071FC1B9F7C69F93B0F1E10DE)BBAA99887766554433221109r<   r  P221BD0DE7FA6FE993ECCD769460A0AF2D6CDED0C395B1C3CE725F32494B9F914D85C0B1EB38357FF)BBAA9988776655443322110A@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1Fr  `BD6F6C496201C69296C11EFD138A467ABD3C707924B964DEAFFC40319AF5A48540FBBA186C5553C68AD9F592A79A4240)BBAA9988776655443322110Br  r<    FE80690BEE8A485D11F32965BC9D2A32)BBAA9988776655443322110Cr<   r  `2942BFC773BDA23CABC6ACFD9BFD5835BD300F0973792EF46040C53F1432BCDFB5E1DDE3BC18A5F840B52E653444D5DF)BBAA9988776655443322110DP000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627r  pD5CA91748410C1751FF8A2F618255B68A0A12E093FF454606E59F9C1D0DDC54B65E8628E568BAD7AED07BA06A4A69483A7035490C5769E60)BBAA9988776655443322110Er  r<    C5CD9D1850C141E358649994EE701B68)BBAA9988776655443322110Fr<   r  p4412923493C57D5DE0D700F753CCE0D1D2D95060122E9F15A5DDBFC5787E50B5CC55EE507BCB084E479AD363AC366B95A98CA5F3000B1479) 0F0E0D0C0B0A09080706050403020100r  r  r  h1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FDAC4F02AA)	)r   r    67E944D23256C5E0B6C61FA22FDF1EA2)   r    F673F2C3E7174AAE7BAE986CA9F29E17)   r    D90EB8E9C977C88B79DD793D7FFA161C)r   `   77A3D8E73589158D25D01209)r  r  05D56EAD2752C86BE6932C5E)r  r  5458359AC23B0CBA9E6330DD)r   @   192C9B7BD90BA06A)r  r#  0066BC6E0EF34E24)r  r#  7D4EA5D445501CBEc           	         [        [        U R                  5      5      nU R                   GH5  nU Vs/ s H  n[        [        U5      5      PM     snu  pEpgUS S USS  p[        R
                  " U[        R                  US9n	U	R                  U5        U	R                  U5      U	R                  5       -   n
U R                  Xz5        U R                  XR                  5       5        [        R
                  " U[        R                  US9n	U	R                  U5        U	R                  U5      U	R                  5       -   nU R                  Xk5        U	R                  U5        GM8     g s  snf )Nir   )r   r   tv1_keytv1r
   r   r!   r   r0   r%   rv   rX   r   )r&   r   tvr   r   aadr(   r)   mac_tagr'   r   r+   s               r   test1OcbRfc7253Test.test1  s   $,,(((B;=!>2a)AaD/2!>ETc(BstHWWS#,,e<FMM#..$v~~'77CR%Wmmo6WWS#,,e<FMM#..$v~~'77CR%MM'" !>s   E&c                    U R                    Vs/ s H  n[        [        U5      5      PM     snu  p#pEnUS S USS  pv[        R                  " U[        R
                  USS9nUR                  U5        UR                  U5      UR                  5       -   n	U R                  Xi5        U R                  XxR                  5       5        [        R                  " U[        R
                  USS9nUR                  U5        UR                  U5      UR                  5       -   n
U R                  XZ5        UR                  U5        g s  snf )Nir   rg   )tv2r   r   r
   r   r!   r   r0   r%   rv   rX   r   )r&   r   r   r   r+  r(   r)   r,  r'   r   r+   s              r   test2OcbRfc7253Test.test2  s    <@HH"EHq9QqT?H"ECR#h34Gcll%DcnnR 6>>#33!--/2cll%DcnnR 6>>#33!g #Fs   E c                     U R                    H6  u  pn[        XS5      nU R                  [        [	        U5      5      U5        M8     g )Nr  )tv3r   r%   r   r   )r&   r   r   r[   result2s        r   test3OcbRfc7253Test.test3  s:    &*hh"FF"626GYqy17; '/r   r   N)r   r   r   r   r(  r)  r0  r4  r-  r1  r6  r   r   r   r   r   r     s/     1Gs
Cv

C 
C#$"<r   r   c                   *    \ rS rSrSrS rS rS rSrg)
OcbDkgTesti  z9Test vectors from https://gitlab.com/dkg/ocb-test-vectorsc           	      :   / nS HZ  nS HQ  n[        SSX#4-  SX#4-  0 5      nUc    M$  US   R                  nUSS   H  nXVl        UR                  U5        M     MS     M\     U H  nUR                  UR                  UR                  UR
                  UR                  4u  pxpn[        U5      [        U
5      -
  n[        R                  " U[        R                  XS9nUR                  U	5        UR                  U
5      u  pU R                  XU-   5        M     g )	N)r=   r   )h   p   x   )Cipherr
   ztest-vector-%d-nonce%d.txtzDKG tests, %d, %d bitsr   r=   rg   )r   kappendnapcrF   r
   r   r!   r   r#   r%   )r&   tvsfinbtv_filer   r*  r?  rA  rB  rC  rD  rh   r'   c_outtag_outs                   r   test_1_2OcbDkgTest.test_1_2  s   B%+,=,HB8,S,Dx,O,.0 ?ajll!!"+BDJJrN & &  BDD"$$bddBDD8MA!!fs1voGWWQAGFMM!#66q9NEQ0 r   c                 d  ^  U 4S jnU" SSSS5        U" SSSS5        U" SSSS5        U" SS	SS
5        U" SS	SS5        U" SS	SS5        U" SSSS5        U" SSSS5        U" SSSS5        U" SSSS5        U" SSSS5        U" SSSS5        U" SS	SS5        U" SS	SS5        U" SS	SS5        U" SSSS5        U" SSSS5        U" SSSS5        U" SSSS5        U" SSSS5        U" SSSS5        U" SS	SS5        U" SS	SS 5        U" SS	SS!5        U" SSSS"5        U" SSSS#5        U" SSSS$5        g )%Nc                 T   > [        XU5      nTR                  U[        U5      5        g N)r   r%   r   )r   r   r   expr[   r&   s        r   check OcbDkgTest.test_3.<locals>.check  s#    !&(;FVYs^4r   r   r;   C47F5F0341E15326D4D1C46F47F05062r   95B9167A38EB80495DFC561A8486E109r   AFE1CDDB97028FD92F8FB3C8CFBA7D83r  F471B4983BA80946DF217A545AE828BC51C24D85FA5CC7B28C8335982E2B734616CAD14Cr#  B553F74B85FD1E5B3B49D20E513531F9ED6DA5B1216BF8BBr<   CA8AFCA031BAC3F480A583BD6C50A547 D170C1DF356308079DA9A3F619147148 57F94381F2F9231EFB04AECD323757C33A618B2531ED39F260C750DC9071EB89FEDBADDA88FD286EFDF0EFB97F21A39AC4BAB5ACFAB2FF3A8DD82A13AC01D912BD0737D39D1FD0B500EA4ECFr=   9E043A7140A25FB91F43BCC9DD7E0F46 680000E53908323A7F396B955B8EC641 8304B97FAACDA56E676602E1878A7E6F81F978AC9867E825D339847DEFCF2D60B24926ADA48CF5B184961DC56E917B165E58C174227AEE6C9D905A61541DE691B9E1A2F9B0E761381C7129FCr   )r&   rQ  s   ` r   test_3OcbDkgTest.test_3  s   	5
 	c3?@c3?@c3?@c2s67c2s67c2s67c2s./c2s./c2s./ 	c3?@c3?@c3?@c2s67c2s67c2s67c2s./c2s./c2s./ 	c3?@c3?@c3?@c2s67c2s67c2s67c2s./c2s./c2s./r   c                 v   [        S5      n[        S5      n[        S5      n[        S5      n[        S5      n[        U5      [        U5      -
  n[        S5      n[        R                  " U[        R                  US S US9nUR                  U5        UR                  U5      u  pU R                  XyU
-   5        g )NEEDDCCBBAA9988776655443322110Dr  r  h07E903BFC49552411ABC865F5ECE60F6FAD1F5A9F14D3070FA2F1308A563207FFE14C1EEA44B22059C7484319D8A2C53C236A7B3hBA015C4E5AE54D76C890AE81BD40DC5703EDC30E8AC2A58BC5D8FA4D61C5BAE6C39BEAC435B2FD56A2A5085C1B135D770C8264B7rg   )r   rF   r
   r   r!   r   r#   r%   )r&   r   r   APr   rh   buggy_resultr'   C_out2tag_out2s              r   test_2_bugfixOcbDkgTest.test_2_bugfix(  s    :;:; 9 : 9 : ! " a&3q6/
 ! ", - cll%*gNa!44Q7'89r   r   N)	r   r   r   r   __doc__rK  rn  rz  r   r   r   r   r9  r9    s    C1.%0N:r   r9  c                     / nU[        [        5      -  nU[        [        5      -  nU[        [        5      -  nU[        [        5      -  nU$ rO  )r	   r   r   r   r9  )configtestss     r   	get_testsr  A  sH    E	_X&&E	_[))E	_^,,E	_Z((ELr   __main__c                  >    [         R                  " [        5       5      $ rO  )unittest	TestSuiter  r   r   r   suiter  K  s    !!)+..r   r  )defaultTest)r  binasciir   Crypto.Util.py3compatr   r   r   Crypto.Util.numberr   Crypto.SelfTest.loaderr   Crypto.SelfTest.st_commonr	   Crypto.Cipherr
   Crypto.Hashr   r   TestCaser   r   r   r   r9  r  r   r  mainr   r   r   <module>r     s   >   2 2 , 4 5   8K-x   K-\B)(## B)J.:E<X&& E<PW:"" W:t   z/MMg& r   