
    ,h                     ^   d dl Z d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d	 Z G d
 de j$                        Z G d de j$                        Zd Z G d de j$                        Z G d de j$                        Zi fdZedk(  rd Z e j6                  d       yy)    N)	unhexlify)btobytesbchr)long_to_bytes)load_test_vectors)list_test_cases)AES)SHAKE128c                 ^    t        j                  t        |             j                  |      S )N)data)r   newr   read)taglengths     a/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Cipher/test_OCB.pyget_tag_randomr   +   s     <<WS\*//77    c                       e Zd Z edd      Z edd      Z edd      Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)OcbTestskey_128   	nonce_128   r      c                 t   t        j                  | j                  t         j                  | j                        }t        dd      }|j                  |      \  }}t        j                  | j                  t         j                  | j                        }|j                  ||      }| j                  ||       y )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_128zOcbTests.test_loopback_1285   s    s||4==IK2++B/Cs||4==I''C0S!r   c                    t        j                  | j                  t         j                         t        j                  | j                  t         j                  | j                        }|j                  | j                        }t        j                  | j                  t         j                  | j                        }| j                  ||j                  | j                               y Nr   )r
   r   r   r    r!   encryptr   r$   r%   r&   r(   s      r   
test_noncezOcbTests.test_nonce>   s    cll+s||T]]C^^DII&s||4==IV^^DII67r   c                     | j                  t        t        j                  | j                  t        j
                  d       y )Ntest12345678r   )assertRaises	TypeErrorr
   r   r   r    r%   s    r   test_nonce_must_be_bytesz!OcbTests.test_nonce_must_be_bytesH   s,    )SWWdllCLL / 	 	1r   c           	         | j                  t        t        j                  | j                  t        j
                  t        d             t        dd      D ]?  }t        j                  | j                  t        j
                  | j                  d |        A | j                  t        t        j                  | j                  t        j
                  | j                         y )N r      r   )	r3   
ValueErrorr
   r   r   r    r   ranger   )r%   r   s     r   test_nonce_lengthzOcbTests.test_nonce_lengthL   s    *cggt||S\\ !" 	 	' Arl 	JFGGDLL#,,dii6HI	J 	*cggt||S\\ $		 	 	+r   c                    t        j                  | j                  t         j                  | j                        }| j                  |j                  t         j                         t        j                  | j                  t         j                        j                  }t        j                  | j                  t         j                        j                  }| j                  t        |      d       | j                  ||       y Nr      )
r
   r   r   r    r!   r$   
block_sizer   lenassertNotEqualr%   r&   nonce1nonce2s       r   test_block_size_128zOcbTests.test_block_size_128X   s    s||4==I**CNN; s||4::s||4::Vb)FF+r   c                    t        j                  | j                  t         j                  | j                        }| j                  |j                  | j                         t        j                  | j                  t         j                        j                  }t        j                  | j                  t         j                        j                  }| j                  t        |      d       | j                  ||       y r>   )	r
   r   r   r    r!   r$   r   rA   rB   rC   s       r   test_nonce_attributezOcbTests.test_nonce_attributeb   s    s||4==It}}5 s||4::s||4::Vb)FF+r   c                    | j                  t        t        j                  | j                  t        j
                  | j                  d       | j                  t        t        j                  | j                  t        j
                  | j                  d       t        j                  | j                  t        j
                  | j                  d       y )N   )r   unknownF)r   	use_aesni)r3   r4   r
   r   r   r    r!   r5   s    r   test_unknown_parametersz OcbTests.test_unknown_parametersl   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                     dD ]r  }t        j                  | j                  t         j                  | j                        } t        ||      t        d            }| j                  |t        d             t y )Nr.   decryptr   r8   )r
   r   r   r    r!   getattrr   r$   )r%   funcr&   results       r   test_null_encryption_decryptionz(OcbTests.test_null_encryption_decryptionw   sZ    ( 	,DWWT\\3<<t}}MF*WVT*1R51FVQrU+	,r   c                    t        j                  | j                  t         j                  | j                        }|j                  t        d             | j                  t        |j                  t        d             t        j                  | j                  t         j                  | j                        }|j                  t        d             | j                  t        |j
                  t        d             y )Nr   xyz)
r
   r   r   r    r!   r.   r   r3   r4   rP   r%   r&   s     r   test_either_encrypt_or_decryptz'OcbTests.test_either_encrypt_or_decrypt}   s    s||4==Iqx )V^^QuX>s||4==Iqx )V^^QuX>r   c                 p   t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       y )Nr   ztest1234567890-*)	r
   r   r   r    r!   r3   r4   r.   rP   rW   s     r   test_data_must_be_bytesz OcbTests.test_data_must_be_bytes   sl    s||4==I)V^^5HIs||4==I)V^^5HIr   c                     | j                  t        t        j                  | j                  t        j
                  | j                  d       | j                  t        t        j                  | j                  t        j
                  | j                  d       t        dd      D ]v  }t        j                  | j                  t        j
                  | j                  |      }|j                  | j                        \  }}| j                  t        |      |       x t        j                  | j                  t        j
                  | j                        }|j                  | j                        \  }}| j                  t        |      d       y )NrJ   r   mac_len      r   r   )r3   r:   r
   r   r   r    r!   r;   r"   r   r$   rA   )r%   r]   r&   _r)   s        r   test_mac_lenzOcbTests.test_mac_len   s   *cggt||S\\ $q 	 	:*cggt||S\\ $t 	 	= Q' 	0GWWT\\3<<t}}%,.F..tyy9FAsSXw/		0 s||4==I**49953S2&r   c                    ddl m} t        j                  | j                  t        j
                  | j                        }|j                  | j                        \  }} ||d      }t        j                  | j                  t        j
                  | j                        }| j                  t        |j                  ||       y )Nr   )strxor_cr   r9   )Crypto.Util.strxorrc   r
   r   r   r    r!   r"   r   r3   r:   r#   )r%   rc   r&   r(   r)   invalid_macs         r   test_invalid_maczOcbTests.test_invalid_mac   s    /s||4==I++DII6CsD)s||4==I*f&?&?%	'r   c                    t        j                  | j                  t         j                  | j                        }|j                         }| j                  |j                         t        |             t        j                  | j                  t         j                  | j                        }|j                  |       y r-   )
r
   r   r   r    r!   	hexdigestr$   digestr   	hexverify)r%   r&   mac_hexs      r   test_hex_maczOcbTests.test_hex_mac   su    s||4==I""$)G*<=s||4==I!r   c                 "   t        dd      }t        dd      }t        j                  | j                  t        j                  | j
                        }|j                  |       |j                  |      \  }}d }dD ]  }t        j                  | j                  t        j                  | j
                        } |||      D ]  }|j                  |        t        d      }	 |||      D ]  }|	|j                  |      z  }	 |	|j                         z  }	| j                  ||	       |j                  |        dD ]  }t        j                  | j                  t        j                  | j
                        } |||      D ]  }|j                  |        t        d      }
 |||      D ]  }|
|j                  |      z  }
 |
|j                         z  }
| j                  ||
       | j                  |j                         |        y )Nzauthenticated data   r   r   c                 `    t        dt        |       |      D cg c]
  }| |||z     c}S c c}w )Nr   )r;   rA   )r   chunk_lengthis      r   break_upz.OcbTests.test_message_chunks.<locals>.break_up   s9    49!SY 5" #qD1\>* # # #s   +)
r9         rJ   
      r   (   P   r   r8   )r   r
   r   r   r    r!   updater"   r   rP   r$   verifyr.   ri   )r%   	auth_datar   r&   
ciphertextref_macrr   rp   chunkr*   ct2s              r   test_message_chunkszOcbTests.test_message_chunks   s    ##7=	";4	s||4==Ii $77	B
G	#
 @ 	#LWWT\\3<<t}}MF!)\: %e$%B%C!*l; -v~~e,,-6>>##CY,MM'"	# @ 	7LWWT\\3<<t}}MF!)\: %e$%B%C!)\: -v~~e,,-6>>##CZ-V]]_g6	7r   c                    t        | j                        }t        | j                        }t        | j                        }t        | j                        }t	        j
                  | j                  t        j                  | j                        }|j                  | j                         |j                  | j                        |j                         z   }|j                         }t	        j
                  |t        j                  |      }d|d d d|d d |j                  |       d|d d |j                  |      |j                         z   }	d|d d |j                         }
| j                  ||	       | j                  ||
       | j                  |j                  |j                         t        | j                        }t        | j                        }t        | j                        }~t	        j
                  |t        j                  |      }d|d d d|d d |j                  |       d|d d |j                  t        |	      t        |
            }| j                  | j                  |       y Nr   s   rt   )	bytearrayr   r!   r   r
   r   r    ry   r.   ri   r$   r   r#   )r%   key_banonce_ba	header_badata_bacipher1r(   r   cipher2ct_testtag_testcipher4pt_tests                r   test_bytearrayzOcbTests.test_bytearray   s    4<<(T]]+dii(	DII&''$,,,, $/ 	tyy!__TYY''//*;;nn''&,, (* %r
&!y!'	"1//'*W__->>%>>#W%h'6 4<<(T]]+dii(	''&,, (* %r
&!y!'	"1,,Yw-?8ATUG,r   c                 f   t        t        | j                              }t        t        | j                              }t        t        | j                              }t        t        | j                              }t        j                  | j                  t
        j                  | j                        }|j                  | j                         |j                  | j                        |j                         z   }|j                         }t        j                  |t
        j                  |      }d|d d d|d d |j                  |       d|d d |j                  |      |j                         z   }	d|d d |j                         }
| j                  ||	       | j                  ||
       | j                  |j                  |j                         t        t        | j                              }t        t        | j                              }t        t        | j                              }~t        j                  |t
        j                  |      }d|d d d|d d |j                  |       d|d d |j                  t        |	      t        |
            }| j                  | j                  |       y r   )
memoryviewr   r   r!   r   r
   r   r    ry   r.   ri   r$   r   r#   )r%   key_mvnonce_mv	header_mvdata_mvr   r(   r   r   r   r   r   r   s                r   test_memoryviewzOcbTests.test_memoryview  s    Idll34i67y34	Ytyy12''$,,,, $/ 	tyy!__TYY''//*;;nn''&,, (* %r
&!y!'	"1//'*W__->>%>>#W%h'6 Idll34i67y34	''&,, (* %r
&!y!'	"1,,Z-@*XBVWG,r   N)__name__
__module____qualname__r   r   r!   r   r+   r0   r6   r<   rF   rH   rM   rT   rX   rZ   ra   rf   rl   r   r   r    r   r   r   r   /   sy    Y+Gk2.H&#&D"81
+,,	!,?J'&	'")7V--^--r   r   c                       e Zd Z edd      Z edd      Z edd      Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)OcbFSMTestsr   r   r   r   r   r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                        }||j                         z  }|j                         }t        j                  | j                  t         j                  | j                        }|j                  |       |j                          |j                  |       y r-   )
r
   r   r   r    r!   r.   r   ri   rP   rz   )r%   r&   r(   r)   s       r   -test_valid_init_encrypt_decrypt_digest_verifyz9OcbFSMTests.test_valid_init_encrypt_decrypt_digest_verifyC  s     s||#}}.^^DII&
fnnmmo s||#}}.rcr   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                        }| j                  t        |j                         t        j                  | j                  t         j                  | j                        }|j                  |       | j                  t        |j                         y r-   )r
   r   r   r    r!   r.   r   r3   r4   ri   rP   rz   r/   s      r   /test_invalid_init_encrypt_decrypt_digest_verifyz;OcbFSMTests.test_invalid_init_encrypt_decrypt_digest_verifyS  s     s||#}}.^^DII&)V]]3 s||#}}.r)V]]3r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                         }t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  |       y r-   )	r
   r   r   r    r!   ry   r   ri   rz   r%   r&   r)   s      r   $test_valid_init_update_digest_verifyz0OcbFSMTests.test_valid_init_update_digest_verifya  s     s||#}}.dii mmo s||#}}.dii cr   c                 P   t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  | j                        }||j                         z  }|j                         }t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  |       |j                          |j                  |       t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  | j                  d d       }|j                  | j                  dd        \  }}t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  |       |j                  ||       y )Nr   rs   )r
   r   r   r    r!   ry   r   r.   ri   rP   rz   r"   r#   )r%   r&   r(   r)   ct1r   s         r   test_valid_full_pathz OcbFSMTests.test_valid_full_patho  sp    s||#}}.dii ^^DII&
fnnmmo s||#}}.dii rc s||#}}.dii nnTYYr]+,,TYYqr];S s||#}}.dii s!!#s+r   c                 Z   t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  | j                         |j                          | j                  t        |j                  | j                         y r-   )
r
   r   r   r    r!   ry   r   r.   r3   r4   rW   s     r    test_invalid_encrypt_after_finalz,OcbFSMTests.test_invalid_encrypt_after_final  g    s||#}}.dii tyy!)V^^TYY?r   c                 Z   t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  | j                         |j                          | j                  t        |j                  | j                         y r-   )
r
   r   r   r    r!   ry   r   rP   r3   r4   rW   s     r    test_invalid_decrypt_after_finalz,OcbFSMTests.test_invalid_decrypt_after_final  r   r   c                     t        j                  | j                  t         j                  | j                        }|j                          y r-   )r
   r   r   r    r!   ri   rW   s     r   test_valid_init_digestz"OcbFSMTests.test_valid_init_digest  s)    s||4==Ir   c                 .   t        j                  | j                  t         j                  | j                        }|j                         }t        j                  | j                  t         j                  | j                        }|j                  |       y r-   )r
   r   r   r    r!   ri   rz   r   s      r   test_valid_init_verifyz"OcbFSMTests.test_valid_init_verify  sU    s||4==Immos||4==Icr   c                    dD ]  }d t        d      | j                  | j                  t        d      z   fD ]  }t        j                  | j                  t        j
                  | j                        }||j                  |       t        ||      } || j                          || j                          || j                          || j                          |          y )NrO   3333r   )	r   r   r
   r   r   r    r!   ry   rQ   )r%   method_namer{   r&   methods        r   &test_valid_multiple_encrypt_or_decryptz2OcbFSMTests.test_valid_multiple_encrypt_or_decrypt  s    / 	K"AeHdii"ii!C&02 	s||'+}}6(MM), 5tyy!tyy!tyy!tyy!	r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                         }t        d      D ]"  }| j                  ||j                                $ t        j                  | j                  t         j                  | j                        }|j                  | j                         t        d      D ]  }|j                  |        y )Nr         )r
   r   r   r    r!   ry   r   ri   r;   r$   rz   )r%   r&   	first_macxs       r   $test_valid_multiple_digest_or_verifyz0OcbFSMTests.test_valid_multiple_digest_or_verify  s    s||4==Idii MMO	q 	9AY8	9 s||4==Idii q 	%AMM)$	%r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  | j                        \  }}t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  ||      }| j                  | j                  |       y r-   )
r
   r   r   r    r!   ry   r   r"   r#   r$   )r%   r&   r(   r)   r'   s        r   0test_valid_encrypt_and_digest_decrypt_and_verifyz<OcbFSMTests.test_valid_encrypt_and_digest_decrypt_and_verify  s    s||4==Idii ++DII6C s||4==Idii &&r3/B'r   c           	      b   dD ]  \  }}dD ]  }t        j                  | j                  t         j                  | j                        }|r|j                  | j                          t        ||      | j                         | j                  t        t        ||      | j                           y )N)rO   )rP   r.   )TFr   )
r
   r   r   r    r!   ry   r   rQ   r3   r4   )r%   method1_namemethod2_nameassoc_data_presentr&   s        r   #test_invalid_mixing_encrypt_decryptz/OcbFSMTests.test_invalid_mixing_encrypt_decrypt  s    +C 		-&L,&3 -"s||'+}}6%MM$)),--dii8!!)WV\-J"&))--		-r   c                    dD ]  }t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                          |j                          | j                  t        t        ||      | j                         t        j                  | j                  t         j                  | j                        }|j                  | j                          y )N)r.   ry   r   )r
   r   r   r    r!   r.   r   ri   r3   r4   rQ   r"   )r%   r   r&   s      r   +test_invalid_encrypt_or_update_after_digestz7OcbFSMTests.test_invalid_encrypt_or_update_after_digest  s    . 		1KWWT\\3<<t}}MFNN499%NNMMOi)E"ii) WWT\\3<<t}}MF%%dii0		1r   c                 "   t        j                  | j                  t         j                  | j                        }|j                  | j                        }||j                         z  }|j                         }dD ]  }t        j                  | j                  t         j                  | j                        }|j                  |       |j                          |j                  |       | j                  t        t        ||      | j                         t        j                  | j                  t         j                  | j                        }|j                  ||       | j                  t        t        ||      | j                          y )Nr   )rP   ry   )r
   r   r   r    r!   r.   r   ri   rP   rz   r3   r4   rQ   r#   )r%   r&   r(   r)   r   s        r   +test_invalid_decrypt_or_update_after_verifyz7OcbFSMTests.test_invalid_decrypt_or_update_after_verify  s   s||4==I^^DII&
fnnmmo. 	)KWWT\\3<<t}}MFNN2NNMM#i)E"ii) WWT\\3<<t}}MF%%b#.i)E"ii)	)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   =  so    Y+Gk2.H&#&D 4,@@@
%
(-
1)r   r   c                 :   t        d      | dz  dz
  z  t        |      z   }d}t        d      D ]  }t        d      |z  }t        d|z  dz   |dz        }t        j                  |t        j
                  ||dz        }|j                  |       ||j                  |      |j                         z   |j                         z   z  }t        d|z  dz   |dz        }t        j                  |t        j
                  ||dz        }||j                  |      |j                         z   |j                         z   z  }t        d|z  dz   |dz        }t        j                  |t        j
                  ||dz        }|j                  |       ||j                         |j                         z   z  } t        d	|dz        }t        j                  |t        j
                  ||dz        }|j                  |       |j                         |j                         z   S )
z.Implement the algorithm at page 18 of RFC 7253r   r_   r9   r   r   rt   r\   rs   i  )	r   r;   r   r
   r   r    ry   r.   ri   )	keylentaglennoncelenkeyCrq   SNr&   s	            r   algo_rfc7253r     s    q'Vq[1_
%V
4CA3Z 0GaK!a%!)X]3cll!Vq[Ia	V^^A!11FMMOCC!a%!)X]3cll!Vq[I	V^^A!11FMMOCC!a%!)X]3cll!Vq[Ia	V^^//0" 	c8q=)AWWS#,,a1EF
MM!>>fmmo--r   c                   .    e Zd ZdZdZdZdZd Zd Zd Z	y)	OcbRfc7253Test 000102030405060708090A0B0C0D0E0F))BBAA99887766554433221100r8   r8    785407BFFFC8AD9EDCC5520AC9111EE6)BBAA998877665544332211010001020304050607r   06820B3657B6F615A5725BDA0D3B4EB3A257C9AF1F8F03009)BBAA99887766554433221102r   r8    81017F8203F081277152FADE694A0A00)BBAA99887766554433221103r8   r   045DD69F8F5AAE72414054CD1F35D82760B2CD00D2F99BFA9)BBAA99887766554433221104r   r   @571D535B60B277188BE5147170A9A22C3AD7A4FF3835B8C5701C1CCEC8FC3358)BBAA99887766554433221105r   r8    8CF761B6902EF764462AD86498CA6B97)BBAA99887766554433221106r8   r   @5CE88EC2E0692706A915C00AEB8B2396F40E1C743F52436BDF06D8FA1ECA343D)BBAA998877665544332211070000102030405060708090A0B0C0D0E0F1011121314151617r   P1CA2207308C87C010756104D8840CE1952F09673A448A122C92C62241051F57356D7F3C90BB0E07F)BBAA99887766554433221108r   r8    6DC225A071FC1B9F7C69F93B0F1E10DE)BBAA99887766554433221109r8   r   P221BD0DE7FA6FE993ECCD769460A0AF2D6CDED0C395B1C3CE725F32494B9F914D85C0B1EB38357FF)BBAA9988776655443322110A@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1Fr   `BD6F6C496201C69296C11EFD138A467ABD3C707924B964DEAFFC40319AF5A48540FBBA186C5553C68AD9F592A79A4240)BBAA9988776655443322110Br   r8    FE80690BEE8A485D11F32965BC9D2A32)BBAA9988776655443322110Cr8   r   `2942BFC773BDA23CABC6ACFD9BFD5835BD300F0973792EF46040C53F1432BCDFB5E1DDE3BC18A5F840B52E653444D5DF)BBAA9988776655443322110DP000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627r   pD5CA91748410C1751FF8A2F618255B68A0A12E093FF454606E59F9C1D0DDC54B65E8628E568BAD7AED07BA06A4A69483A7035490C5769E60)BBAA9988776655443322110Er   r8    C5CD9D1850C141E358649994EE701B68)BBAA9988776655443322110Fr8   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           	         t        t        | j                              }| j                  D ];  }|D cg c]  }t        t        |             c}\  }}}}|d d |dd  }}t	        j
                  |t        j                  |      }	|	j                  |       |	j                  |      |	j                         z   }
| j                  ||
       | j                  ||	j                                t	        j
                  |t        j                  |      }	|	j                  |       |	j                  |      |	j                         z   }| j                  ||       |	j                  |       > y c c}w )Nir   )r   r   tv1_keytv1r
   r   r    ry   r.   r$   ri   rP   rz   )r%   r   tvr   r   aadr'   r(   mac_tagr&   r   r*   s               r   test1zOcbRfc7253Test.test1  s   $,,((( 	#B;=!>a)AaD/!>E3BTc(BstHBWWS#,,e<FMM#..$v~~'77CR%Wfmmo6WWS#,,e<FMM#..$v~~'77CR%MM'"	#!>s   E+c                    | j                   D cg c]  }t        t        |             c}\  }}}}}|d d |dd  }}t        j                  |t        j
                  |d      }|j                  |       |j                  |      |j                         z   }	| j                  ||	       | j                  ||j                                t        j                  |t        j
                  |d      }|j                  |       |j                  |      |j                         z   }
| j                  ||
       |j                  |       y c c}w )Nir   r\   )tv2r   r   r
   r   r    ry   r.   r$   ri   rP   rz   )r%   r   r   r   r	  r'   r(   r
  r&   r   r*   s              r   test2zOcbRfc7253Test.test2  s   <@HH"Eq9QqT?"EUCR#h34Gcll%DcnnR 6>>#33S!&--/2cll%DcnnR 6>>#33S!g #Fs   Ec                     | j                   D ]7  \  }}}t        ||d      }| j                  t        t	        |            |       9 y )Nr   )tv3r   r$   r   r   )r%   r   r   rS   result2s        r   test3zOcbRfc7253Test.test3  sC    &*hh 	<"FFF"6626GYqy17;	<r   N)
r   r   r   r  r  r  r  r  r  r  r   r   r   r   r     s/     1Gs
Cv

C 
C#$"<r   r   c                   "    e Zd ZdZd Zd Zd Zy)
OcbDkgTestz9Test vectors from https://gitlab.com/dkg/ocb-test-vectorsc           	      :   g }dD ]V  }dD ]O  }t        dd||fz  d||fz  i       }| $|d   j                  }|dd  D ]  }||_        |j                  |        Q X |D ]  }|j                  |j                  |j                  |j
                  |j                  f\  }}}	}
}t        |      t        |
      z
  }t        j                  |t        j                  ||      }|j                  |	       |j                  |
      \  }}| j                  |||z           y )	N)r9   rs   )h   p   x   )Cipherr
   ztest-vector-%d-nonce%d.txtzDKG tests, %d, %d bitsr   r9   r\   )r   kappendnapcrA   r
   r   r    ry   r"   r$   )r%   tvsfinbtv_filer   r  r  r  r  r  r  r]   r&   c_outtag_outs                   r   test_1_2zOcbDkgTest.test_1_2  s(    	#B% 
#+,=,HBPR8,S,DBx,O,.0 ?ajll!!"+ #BBDJJrN#
#	#  	1BDD"$$bddBDD8MAq!Q!fs1voGWWQAwGFMM!#66q9NE7Q0	1r   c                 b     fd} |dddd        |dddd        |dddd        |dd	dd
        |dd	dd        |dd	dd        |dddd        |dddd        |dddd        |dddd        |dddd        |dddd        |dd	dd        |dd	dd        |dd	dd        |dddd        |dddd        |dddd        |dddd        |dddd        |dddd        |dd	dd        |dd	dd         |dd	dd!        |dddd"        |dddd#        |dddd$       y )%Nc                 V    t        | ||      }j                  |t        |             y N)r   r$   r   )r   r   r   exprS   r%   s        r   checkz 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%   r+  s   ` r   test_3z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                 ~   t        d      }t        d      }t        d      }t        d      }t        d      }t        |      t        |      z
  }t        d      }t        j                  |t        j                  |d d |      }|j                  |       |j                  |      \  }	}
| j                  ||	|
z          y )NEEDDCCBBAA9988776655443322110Dr   r   h07E903BFC49552411ABC865F5ECE60F6FAD1F5A9F14D3070FA2F1308A563207FFE14C1EEA44B22059C7484319D8A2C53C236A7B3hBA015C4E5AE54D76C890AE81BD40DC5703EDC30E8AC2A58BC5D8FA4D61C5BAE6C39BEAC435B2FD56A2A5085C1B135D770C8264B7r\   )r   rA   r
   r   r    ry   r"   r$   )r%   r   r   APr   r]   buggy_resultr&   C_out2tag_out2s              r   test_2_bugfixzOcbDkgTest.test_2_bugfix(  s    :;:; 9 : 9 : ! " a&3q6/
 ! ", - cll%*gNa!44Q7v'89r   N)r   r   r   __doc__r&  rG  rR  r   r   r   r  r    s    C1.%0N:r   r  c                     g }|t        t              z  }|t        t              z  }|t        t              z  }|t        t              z  }|S r)  )r	   r   r   r   r  )configtestss     r   	get_testsrW  A  sH    E	_X&&E	_[))E	_^,,E	_Z((ELr   __main__c                  <    t        j                  t                     S r)  )unittest	TestSuiterW  r   r   r   suiter\  K  s    !!)+..r   r\  )defaultTest)rZ  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   r  rW  r   r\  mainr   r   r   <module>rg     s   >   2 2 , 4 5   8K-x   K-\B)(## B)J.:E<X&& E<PW:"" W:t   z/HMMg& r   