
    ¿ig                     P   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 j        d           dS dS )    N)	unhexlify)btobytesbchr)long_to_bytes)load_test_vectors)list_test_cases)AES)SHAKE128c                 l    t          j        t          |                                         |          S )N)data)r   newr   read)taglengths     _/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Cipher/test_OCB.pyget_tag_randomr   +   s)    <WS\\***//7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dS )OcbTestskey_128   	nonce_128   r      c                 Z   t          j        | j        t           j        | j                  }t          dd          }|                    |          \  }}t          j        | j        t           j        | j                  }|                    ||          }|                     ||           d S )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IIK22++B//Cs|4=III''C00S!!!!!r   c                    t          j        | j        t           j                   t          j        | j        t           j        | j                  }|                    | j                  }t          j        | j        t           j        | j                  }|                     ||                    | j                             d S Nr   )r
   r   r   r    r!   encryptr   r$   r%   r&   r(   s      r   
test_noncezOcbTests.test_nonce>   s    cl+++s|T]CC^^DI&&s|4=IIIV^^DI6677777r   c                 v    |                      t          t          j        | j        t          j        d           d S )Ntest12345678r   )assertRaises	TypeErrorr
   r   r   r    r%   s    r   test_nonce_must_be_bytesz!OcbTests.test_nonce_must_be_bytesH   s:    )SWdlCL / 	 	1 	1 	1 	1 	1r   c           	         |                      t          t          j        | j        t          j        t          d                     t          dd          D ]5}t          j        | j        t          j        | j        d |                    6|                      t          t          j        | j        t          j        | j                   d S )N r      r   )	r3   
ValueErrorr
   r   r   r    r   ranger   )r%   r   s     r   test_nonce_lengthzOcbTests.test_nonce_lengthL   s    *cgt|S\ !" 	 	' 	' 	' Arll 	J 	JFGDL#,di6HIIIII*cgt|S\ $	 	 	+ 	+ 	+ 	+ 	+r   c                    t          j        | j        t           j        | j                  }|                     |j        t           j                   t          j        | j        t           j                  j        }t          j        | j        t           j                  j        }|                     t          |          d           | 	                    ||           d S 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II*CN;;; s|44:s|44:Vb)))FF+++++r   c                    t          j        | j        t           j        | j                  }|                     |j        | j                   t          j        | j        t           j                  j        }t          j        | j        t           j                  j        }|                     t          |          d           |                     ||           d S r>   )	r
   r   r   r    r!   r$   r   rA   rB   rC   s       r   test_nonce_attributezOcbTests.test_nonce_attributeb   s    s|4=IIIt}555 s|44:s|44:Vb)))FF+++++r   c                 T   |                      t          t          j        | j        t          j        | j        d           |                      t          t          j        | j        t          j        | j        d           t          j        | j        t          j        | j        d           d S )N   )r   unknownF)r   	use_aesni)r3   r4   r
   r   r   r    r!   r5   s    r   test_unknown_parametersz OcbTests.test_unknown_parametersl   s    )SWdlCL-	, 	, 	,)SWdlCL $q 	 	: 	: 	:
 	cl$-	! 	! 	! 	! 	! 	!r   c                     dD ]v}t          j        | j        t           j        | j                  } t          ||          t          d                    }|                     |t          d                     wd S )Nr.   decryptr   r8   )r
   r   r   r    r!   getattrr   r$   )r%   funcr&   results       r   test_null_encryption_decryptionz(OcbTests.test_null_encryption_decryptionw   su    ( 	, 	,DWT\3<t}MMMF*WVT**1R5511FVQrUU++++	, 	,r   c                    t          j        | j        t           j        | j                  }|                    t          d                     |                     t          |j	        t          d                     t          j        | j        t           j        | j                  }|	                    t          d                     |                     t          |j        t          d                     d S )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IIqxx   )V^QuXX>>>s|4=IIIqxx   )V^QuXX>>>>>r   c                 6   t          j        | j        t           j        | j                  }|                     t          |j        d           t          j        | j        t           j        | j                  }|                     t          |j        d           d S )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   sv    s|4=III)V^5HIIIs|4=III)V^5HIIIIIr   c                    |                      t          t          j        | j        t          j        | j        d           |                      t          t          j        | j        t          j        | j        d           t          dd          D ]n}t          j        | j        t          j        | j        |          }|                    | j	                  \  }}| 
                    t          |          |           ot          j        | j        t          j        | j                  }|                    | j	                  \  }}| 
                    t          |          d           d S )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   s7   *cgt|S\ $q 	 	: 	: 	:*cgt|S\ $t 	 	= 	= 	= Q'' 	0 	0GWT\3<t}%,. . .F..ty99FAsSXXw//// s|4=III**49553S2&&&&&r   c                 T   ddl m} t          j        | j        t          j        | j                  }|                    | j                  \  }} ||d          }t          j        | j        t          j        | j                  }| 	                    t          |j        ||           d S )Nr   )strxor_cr   r9   )Cryptodome.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    333333s|4=III++DI66ChsD))s|4=III*f&?%	' 	' 	' 	' 	'r   c                 n   t          j        | j        t           j        | j                  }|                                }|                     |                                t          |                     t          j        | j        t           j        | j                  }|	                    |           d S r-   )
r
   r   r   r    r!   	hexdigestr$   digestr   	hexverify)r%   r&   mac_hexs      r   test_hex_maczOcbTests.test_hex_mac   s    s|4=III""$$)G*<*<===s|4=III!!!!!r   c                 R   t          dd          }t          dd          }t          j        | j        t          j        | j                  }|                    |           |                    |          \  }}d }dD ]}t          j        | j        t          j        | j                  } |||          D ]}|                    |           t          d          }	 |||          D ]}|	|	                    |          z  }	|	|	                                z  }	| 
                    ||	           |                    |           dD ]}t          j        | j        t          j        | j                  } |||          D ]}|                    |           t          d          }
 |||          D ]}|
|                    |          z  }
|
|                                z  }
| 
                    ||
           | 
                    |                                |           d S )Nzauthenticated data   r   r   c                 \      fdt          dt                               D             S )Nc                 *    g | ]}||z            S  rq   ).0ichunk_lengthr   s     r   
<listcomp>zBOcbTests.test_message_chunks.<locals>.break_up.<locals>.<listcomp>   s3     # # #qD1\>)* # # #r   r   )r;   rA   )r   rt   s   ``r   break_upz.OcbTests.test_message_chunks.<locals>.break_up   sJ    # # # # #E!SYY 5" 5" # # # #r   )
r9         rJ   
      r   (   P   r   r8   )r   r
   r   r   r    r!   updater"   r   rP   r$   verifyr.   ri   )r%   	auth_datar   r&   
ciphertextref_macrv   rt   chunkr*   ct2s              r   test_message_chunkszOcbTests.test_message_chunks   sD    ##7==	";44	s|4=IIIi   $77	BB
G	# 	# 	#
 @ 	# 	#LWT\3<t}MMMF!)\:: % %e$$$$B%%C!*l;; - -v~~e,,,6>>###CY,,,MM'"""" @ 	7 	7LWT\3<t}MMMF!)\:: % %e$$$$B%%C!)\:: - -v~~e,,,6>>###CZ---V]]__g6666	7 	7r   c                    t          | j                  }t          | j                  }t          | j                  }t          | j                  }t	          j        | j        t          j        | j                  }|                    | j                   |                    | j                  |                                z   }|	                                }t	          j        |t          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    |          |                                z   }	d|d d<   |	                                }
| 
                    ||	           | 
                    ||
           | 
                    |j        |j                   t          | j                  }t          | j                  }t          | j                  }~t	          j        |t          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    t          |	          t          |
                    }| 
                    | j        |           d S Nr   s   rx   )	bytearrayr   r!   r   r
   r   r    r}   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   sX    4<((T]++di((	DI&&'$,, $/ / / 	ty!!!__TY'''//*;*;;nn'&, (* * * %rr
&!y!!!'	"1"//'**W__->->>%>>##W%%%h'''666 4<((T]++di((	'&, (* * * %rr
&!y!!!'	"1",,Yw-?-?8ATATUUG,,,,,r   c                    t          t          | j                            }t          t          | j                            }t          t          | j                            }t          t          | j                            }t          j        | j        t
          j        | j                  }|                    | j                   |	                    | j                  |	                                z   }|
                                }t          j        |t
          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |	                    |          |	                                z   }	d|d d<   |
                                }
|                     ||	           |                     ||
           |                     |j        |j                   t          t          | j                            }t          t          | j                            }t          t          | j                            }~t          j        |t
          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    t          |	          t          |
                    }|                     | j        |           d S r   )
memoryviewr   r   r!   r   r
   r   r    r}   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    Idl3344i6677y3344	Yty1122'$,, $/ / / 	ty!!!__TY'''//*;*;;nn'&, (* * * %rr
&!y!!!'	"1"//'**W__->->>%>>##W%%%h'''666 Idl3344i6677y3344	'&, (* * * %rr
&!y!!!'	"1",,Z-@-@*XBVBVW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   rq   r   r   r   r   /   s<       nY++G~k2..H>&#&&D" " "8 8 81 1 1
+ 
+ 
+, , ,, , ,	! 	! 	!, , ,? ? ?J J J' ' '&	' 	' 	'" " ")7 )7 )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dS )OcbFSMTestsr   r   r   r   r   r   c                    t          j        | j        t           j        | j                  }|                    | j                  }||                                z  }|                                }t          j        | j        t           j        | j                  }|                    |           |                                 |	                    |           d S r-   )
r
   r   r   r    r!   r.   r   ri   rP   r~   )r%   r&   r(   r)   s       r   -test_valid_init_encrypt_decrypt_digest_verifyz9OcbFSMTests.test_valid_init_encrypt_decrypt_digest_verifyC  s     s|#}. . .^^DI&&
fnnmmoo s|#}. . .rcr   c                    t          j        | j        t           j        | j                  }|                    | j                  }|                     t          |j	                   t          j        | j        t           j        | j                  }|
                    |           |                     t          |j                   d S r-   )r
   r   r   r    r!   r.   r   r3   r4   ri   rP   r~   r/   s      r   /test_invalid_init_encrypt_decrypt_digest_verifyz;OcbFSMTests.test_invalid_init_encrypt_decrypt_digest_verifyS  s     s|#}. . .^^DI&&)V]333 s|#}. . .r)V]33333r   c                 l   t          j        | j        t           j        | j                  }|                    | j                   |                                }t          j        | j        t           j        | j                  }|                    | j                   |                    |           d S r-   )	r
   r   r   r    r!   r}   r   ri   r~   r%   r&   r)   s      r   $test_valid_init_update_digest_verifyz0OcbFSMTests.test_valid_init_update_digest_verifya  s     s|#}. . .di   mmoo s|#}. . .di   cr   c                    t          j        | j        t           j        | j                  }|                    | j                   |                    | j                  }||                                z  }|                                }t          j        | j        t           j        | j                  }|                    | j                   |	                    |           |	                                 |
                    |           t          j        | j        t           j        | j                  }|                    | j                   |                    | j        d d                   }|                    | j        dd                    \  }}t          j        | j        t           j        | j                  }|                    | j                   |	                    |           |                    ||           d S )Nr   rw   )r
   r   r   r    r!   r}   r   r.   ri   rP   r~   r"   r#   )r%   r&   r(   r)   ct1r   s         r   test_valid_full_pathz OcbFSMTests.test_valid_full_patho  s    s|#}. . .di   ^^DI&&
fnnmmoo s|#}. . .di   rc s|#}. . .di   nnTYrr]++,,TYqrr];;S s|#}. . .di   s!!#s+++++r   c                 8   t          j        | j        t           j        | j                  }|                    | j                   |                    | j                   |                                 |                     t          |j        | j                   d S r-   )
r
   r   r   r    r!   r}   r   r.   r3   r4   rW   s     r    test_invalid_encrypt_after_finalz,OcbFSMTests.test_invalid_encrypt_after_final      s|#}. . .di   ty!!!)V^TY?????r   c                 8   t          j        | j        t           j        | j                  }|                    | j                   |                    | j                   |                                 |                     t          |j        | j                   d S r-   )
r
   r   r   r    r!   r}   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                  }|                                 d S r-   )r
   r   r   r    r!   ri   rW   s     r   test_valid_init_digestz"OcbFSMTests.test_valid_init_digest  s/    s|4=IIIr   c                    t          j        | j        t           j        | j                  }|                                }t          j        | j        t           j        | j                  }|                    |           d S r-   )r
   r   r   r    r!   ri   r~   r   s      r   test_valid_init_verifyz"OcbFSMTests.test_valid_init_verify  s_    s|4=IIImmoos|4=IIIcr   c                    dD ]}d t          d          | j        | j        t          d          z   fD ]}t          j        | j        t          j        | j                  }||                    |           t          ||          } || j                    || j                    || j                    || j                    |             d S )NrO   3333r   )	r   r   r
   r   r   r    r!   r}   rQ   )r%   method_namer   r&   methods        r   &test_valid_multiple_encrypt_or_decryptz2OcbFSMTests.test_valid_multiple_encrypt_or_decrypt  s    / 	 	K"AeHHdi"i!C&&02  	s|'+}6 6 6(MM),,, 55ty!!!ty!!!ty!!!ty!!!	 	r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                                }t          d          D ]*}| 	                    ||                                           +t          j        | j        t           j        | j                  }|                    | j                   t          d          D ]}|
                    |           d S )Nr         )r
   r   r   r    r!   r}   r   ri   r;   r$   r~   )r%   r&   	first_macxs       r   $test_valid_multiple_digest_or_verifyz0OcbFSMTests.test_valid_multiple_digest_or_verify  s    s|4=IIIdi   MMOO	q 	9 	9AY8888 s|4=IIIdi   q 	% 	%AMM)$$$$	% 	%r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                    | j                  \  }}t          j        | j        t           j        | j                  }|                    | j                   |                    ||          }| 	                    | j        |           d S 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_verifyz<OcbFSMTests.test_valid_encrypt_and_digest_decrypt_and_verify  s    s|4=IIIdi   ++DI66C s|4=IIIdi   &&r3//B'''''r   c           	      H   dD ]\  }}dD ]}t          j        | j        t           j        | j                  }|r|                    | j                    t          ||          | j                   |                     t          t          ||          | j                   d S )N)rO   )rP   r.   )TFr   )
r
   r   r   r    r!   r}   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 6 6% -MM$),,,---di888!!)WV\-J-J"&)- - - --		- 		-r   c                    dD ]}t          j        | j        t           j        | j                  }|                    | j                   |                                 |                                 |                     t          t          ||          | j                   t          j        | j        t           j        | j                  }|                    | j                   d S )N)r.   r}   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    . 		1 		1KWT\3<t}MMMFNN49%%%NNMMOOOi)E)E"i) ) ) WT\3<t}MMMF%%di0000		1 		1r   c                    t          j        | j        t           j        | j                  }|                    | j                  }||                                z  }|                                }dD ]}t          j        | j        t           j        | j                  }|                    |           |                                 |	                    |           | 
                    t          t          ||          | j                   t          j        | j        t           j        | j                  }|                    ||           | 
                    t          t          ||          | j                   d S )Nr   )rP   r}   )r
   r   r   r    r!   r.   r   ri   rP   r~   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  sJ   s|4=III^^DI&&
fnnmmoo. 	) 	)KWT\3<t}MMMFNN2NNMM#i)E)E"i) ) ) WT\3<t}MMMF%%b#...i)E)E"i) ) ) )	) 	)r   N)r   r   r   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   =  s        nY++G~k2..H>&#&&D   4 4 4  , , ,@@ @ @@ @ @  
    % % %
( 
( 
(- - -
1 
1 
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            }|                    |           ||                    |          |                                z   |                                z   z  }t          d|z  dz   |dz            }t          j        |t          j        ||dz            }||                    |          |                                z   |                                z   z  }t          d|z  dz   |dz            }t          j        |t          j        ||dz            }|                    |           ||                                |                                z   z  }t          d	|dz            }t          j        |t          j        ||dz            }|                    |           |                                |                                z   S )
z.Implement the algorithm at page 18 of RFC 7253r   r_   r9   r   r   rx   r\   rw   i  )	r   r;   r   r
   r   r    r}   r.   ri   )	keylentaglennoncelenkeyCrs   SNr&   s	            r   algo_rfc7253r     s    q''Vq[1_
%V
4CA3ZZ 0 0GGaK!a%!)X]33cl!Vq[IIIa	V^^A!1!11FMMOOCC!a%!)X]33cl!Vq[III	V^^A!1!11FMMOOCC!a%!)X]33cl!Vq[IIIa	V^^//c8q=))AWS#,a1EEEF
MM!>>fmmoo--r   c                   0    e Zd ZdZdZdZdZd Zd Zd Z	dS )	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 ]Q}d |D             \  }}}}|d d         |dd          }}t	          j        |t          j        |          }|                    |           |                    |          |                                z   }	| 	                    ||	           | 	                    ||
                                           t	          j        |t          j        |          }|                    |           |                    |          |                                z   }
| 	                    ||
           |                    |           Sd S )Nc                 F    g | ]}t          t          |                    S rq   r   r   rr   r   s     r   ru   z(OcbRfc7253Test.test1.<locals>.<listcomp>  s$    !>!>!>a)AaDD//!>!>!>r   ir   )r   r   tv1_keytv1r
   r   r    r}   r.   r$   ri   rP   r~   )r%   r   tvr   aadr'   r(   mac_tagr&   r   r*   s              r   test1zOcbRfc7253Test.test1  sZ   $,((( 	# 	#B!>!>2!>!>!>E3BTcT(BsttHBWS#,e<<<FMM#..$$v~~'7'77CR%%%Wfmmoo666WS#,e<<<FMM#..$$v~~'7'77CR%%%MM'""""	# 	#r   c                    d | j         D             \  }}}}}|d d         |dd          }}t          j        |t          j        |d          }|                    |           |                    |          |                                z   }|                     ||           |                     ||                                           t          j        |t          j        |d          }|                    |           |                    |          |                                z   }	|                     ||	           |	                    |           d S )Nc                 F    g | ]}t          t          |                    S rq   r
  r  s     r   ru   z(OcbRfc7253Test.test2.<locals>.<listcomp>  s$    "E"E"Eq9QqTT??"E"E"Er   ir   r\   )
tv2r
   r   r    r}   r.   r$   ri   rP   r~   )
r%   r   r   r  r'   r(   r  r&   r   r*   s
             r   test2zOcbRfc7253Test.test2  s5   "E"EDH"E"E"EUCR#h344Gcl%DDDcnnR  6>>#3#33S!!!&--//222cl%DDDcnnR  6>>#3#33S!!!gr   c                     | j         D ]G\  }}}t          ||d          }|                     t          t	          |                    |           Hd S )Nr   )tv3r   r$   r   r   )r%   r   r   rS   result2s        r   test3zOcbRfc7253Test.test3  s\    &*h 	< 	<"FFF"66266GYqyy117;;;;	< 	<r   N)
r   r   r   r  r  r  r  r  r  r  rq   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dS )
OcbDkgTestz9Test vectors from https://gitlab.com/dkg/ocb-test-vectorsc           	      .   g }dD ]]}dD ]X}t          dd||fz  d||fz  i           }| n7|d         j        }|dd          D ]}||_        |                    |           Y^|D ]}|j        |j        |j        |j        |j        f\  }}}	}
}t          |          t          |
          z
  }t          j	        |t          j
        ||          }|                    |	           |                    |
          \  }}|                     |||z              d S )	N)r9   rw   )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    r}   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  sS    	# 	#B% 
# 
#+,=,HBPR8,S,DBx,O,.0 0 ?Eajl!!""+ # #BBDJJrNNNN#  	1 	1BD"$bdBD8MAq!Q!ffs1vvoGWQAwGGGFMM!#66q99NE7Q0000	1 	1r   c                      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$           d S )%Nc                 p    t          | ||          }                    |t          |                     d S N)r   r$   r   )r   r   r   exprS   r%   s        r   checkz OcbDkgTest.test_3.<locals>.check  s6    !&&(;;FVYs^^4444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B0E761381C7129FCrq   )r%   r2  s   ` r   test_3zOcbDkgTest.test_3  s   	5 	5 	5 	5 	5
 	c3?@@@c3?@@@c3?@@@c2s6777c2s6777c2s6777c2s.///c2s.///c2s./// 	c3?@@@c3?@@@c3?@@@c2s6777c2s6777c2s6777c2s.///c2s.///c2s./// 	c3?@@@c3?@@@c3?@@@c2s6777c2s6777c2s677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         |          }|                    |           |                    |          \  }	}
|                     ||	|
z              d S )NEEDDCCBBAA9988776655443322110Dr   r   h07E903BFC49552411ABC865F5ECE60F6FAD1F5A9F14D3070FA2F1308A563207FFE14C1EEA44B22059C7484319D8A2C53C236A7B3hBA015C4E5AE54D76C890AE81BD40DC5703EDC30E8AC2A58BC5D8FA4D61C5BAE6C39BEAC435B2FD56A2A5085C1B135D770C8264B7r\   )r   rA   r
   r   r    r}   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&&3q66/
 ! ", - - cl%*gNNNa!44Q77v'899999r   N)r   r   r   __doc__r-  rN  rY  rq   r   r   r  r    sH        CC1 1 1.%0 %0 %0N: : : : :r   r  c                     g }|t          t                    z  }|t          t                    z  }|t          t                    z  }|t          t                    z  }|S r0  )r	   r   r   r   r  )configtestss     r   	get_testsr^  A  sT    E	_X&&&E	_[)))E	_^,,,E	_Z(((ELr   __main__c                  B    t          j        t                                S r0  )unittest	TestSuiter^  rq   r   r   suiterc  K  s    !)++...r   rc  )defaultTest)ra  binasciir   Cryptodome.Util.py3compatr   r   r   Cryptodome.Util.numberr   Cryptodome.SelfTest.loaderr   Cryptodome.SelfTest.st_commonr	   Cryptodome.Cipherr
   Cryptodome.Hashr   r   TestCaser   r   r   r   r  r^  r   rc  mainrq   r   r   <module>rn     s  >        6 6 6 6 6 6 6 6 6 6 0 0 0 0 0 0 8 8 8 8 8 8 9 9 9 9 9 9 ! ! ! ! ! ! $ $ $ $ $ $8 8 8K- K- K- K- K-x  K- K- K-\B) B) B) B) B)(# B) B) B)J. . .:E< E< E< E< E<X& E< E< E<PW: W: W: W: W:" W: W: W:t      z/ / /HMg&&&&&& r   