o
    Þý°j›  ã                   @   sì   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	d
„ ZG dd„ de jƒZG dd„ de jƒZdd„ ZG dd„ de jƒZG dd„ de jƒZi fdd„Zedkrtdd„ Ze jdd� dS dS )é    N)Ú	unhexlify)ÚbÚtobytesÚbchr)Úlong_to_bytes)Úload_test_vectors)Úlist_test_cases)ÚAES)ÚSHAKE128c                 C   s   t jt| ƒd� |¡S )N)Údata)r
   Únewr   Úread)ÚtagÚlength© r   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/Cipher/test_OCB.pyÚget_tag_random+   s   r   c                   @   sª   e Zd ZeddƒZeddƒZeddƒZdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(ÚOcbTestsÚkey_128é   Ú	nonce_128é   r   é€   c                 C   s`   t j| jt j| jd�}tddƒ}| |¡\}}t j| jt j| jd�}| ||¡}|  ||¡ d S )N©ÚnonceÚ	plaintexti@  )	r	   r   r   ÚMODE_OCBÚnonce_96r   Úencrypt_and_digestÚdecrypt_and_verifyÚassertEqual)ÚselfÚcipherÚptÚctÚmacÚpt2r   r   r   Útest_loopback_1285   s   
zOcbTests.test_loopback_128c                 C   s^   t  | jt j¡ t  | jt j| j¡}| | j¡}t j| jt j| jd�}|  || | j¡¡ d S ©Nr   )r	   r   r   r   r   Úencryptr   r    ©r!   r"   r$   r   r   r   Ú
test_nonce>   s
   zOcbTests.test_noncec                 C   s   | j ttj| jtjdd� d S )NÚtest12345678r   )ÚassertRaisesÚ	TypeErrorr	   r   r   r   ©r!   r   r   r   Útest_nonce_must_be_bytesH   s   
ÿz!OcbTests.test_nonce_must_be_bytesc                 C   sl   | j ttj| jtjtdƒd� tddƒD ]}tj| jtj| jd |… d� q| j ttj| jtj| jd� d S )NÚ r   é   r   )	r-   Ú
ValueErrorr	   r   r   r   r   Úranger   )r!   r   r   r   r   Útest_nonce_lengthL   s   ÿ 
ÿzOcbTests.test_nonce_lengthc                 C   sj   t j| jt j| jd�}|  |jt j¡ t  | jt j¡j}t  | jt j¡j}|  t|ƒd¡ |  	||¡ d S ©Nr   é   )
r	   r   r   r   r   r    Ú
block_sizer   ÚlenÚassertNotEqual©r!   r"   Únonce1Únonce2r   r   r   Útest_block_size_128X   ó   zOcbTests.test_block_size_128c                 C   sj   t j| jt j| jd�}|  |j| j¡ t  | jt j¡j}t  | jt j¡j}|  t|ƒd¡ |  ||¡ d S r6   )	r	   r   r   r   r   r    r   r9   r:   r;   r   r   r   Útest_nonce_attributeb   r?   zOcbTests.test_nonce_attributec                 C   sV   |   ttj| jtj| jd¡ | j ttj| jtj| jdd� tj| jtj| jdd� d S )Né   )r   ÚunknownF)r   Ú	use_aesni)r-   r.   r	   r   r   r   r   r/   r   r   r   Útest_unknown_parametersl   s   ÿÿ
ÿz OcbTests.test_unknown_parametersc                 C   sF   dD ]}t j| jt j| jd�}t||ƒtdƒƒ}|  |tdƒ¡ qd S )N©r)   Údecryptr   r1   )r	   r   r   r   r   Úgetattrr   r    )r!   Úfuncr"   Úresultr   r   r   Útest_null_encryption_decryptionw   s
   ýz(OcbTests.test_null_encryption_decryptionc                 C   st   t j| jt j| jd�}| tdƒ¡ |  t|j	tdƒ¡ t j| jt j| jd�}| 	tdƒ¡ |  t|jtdƒ¡ d S )Nr   Úxyz)
r	   r   r   r   r   r)   r   r-   r.   rF   ©r!   r"   r   r   r   Útest_either_encrypt_or_decrypt}   s   z'OcbTests.test_either_encrypt_or_decryptc                 C   sP   t j| jt j| jd�}|  t|jd¡ t j| jt j| jd�}|  t|jd¡ d S )Nr   ztest1234567890-*)	r	   r   r   r   r   r-   r.   r)   rF   rL   r   r   r   Útest_data_must_be_bytes†   s   z OcbTests.test_data_must_be_bytesc                 C   s¾   | j ttj| jtj| jdd� | j ttj| jtj| jdd� tddƒD ]}tj| jtj| j|d�}| | j	¡\}}|  
t|ƒ|¡ q#tj| jtj| jd�}| | j	¡\}}|  
t|ƒd¡ d S )NrA   ©r   Úmac_lené   é   r   r   )r-   r3   r	   r   r   r   r   r4   r   r   r    r9   )r!   rP   r"   Ú_r%   r   r   r   Útest_mac_len�   s   ÿÿÿzOcbTests.test_mac_lenc                 C   sh   ddl m} tj| jtj| jd�}| | j¡\}}||dƒ}tj| jtj| jd�}|  	t
|j||¡ d S )Nr   )Ústrxor_cr   r2   )ÚCryptodome.Util.strxorrU   r	   r   r   r   r   r   r   r-   r3   r   )r!   rU   r"   r$   r%   Úinvalid_macr   r   r   Útest_invalid_mac    s   
ÿzOcbTests.test_invalid_macc                 C   sV   t j| jt j| jd�}| ¡ }|  | ¡ t|ƒ¡ t j| jt j| jd�}| 	|¡ d S r(   )
r	   r   r   r   r   Ú	hexdigestr    Údigestr   Ú	hexverify)r!   r"   Úmac_hexr   r   r   Útest_hex_mac«   s
   zOcbTests.test_hex_macc                 C   sX  t ddƒ}t ddƒ}tj| jtj| jd�}| |¡ | |¡\}}dd„ }dD ]>}tj| jtj| jd�}|||ƒD ]}| |¡ q9tdƒ}	|||ƒD ]	}|	| 	|¡7 }	qJ|	| 	¡ 7 }	|  
||	¡ | |¡ q'dD ]A}tj| jtj| jd�}|||ƒD ]}| |¡ qztdƒ}
|||ƒD ]	}|
| |¡7 }
q‹|
| ¡ 7 }
|  
||
¡ |  
| ¡ |¡ qhd S )	Nzauthenticated dataé   r   r   c                    s    ‡ ‡fdd„t dtˆƒˆ ƒD ƒS )Nc                    s   g | ]
}ˆ||ˆ  … ‘qS r   r   )Ú.0Úi©Úchunk_lengthr   r   r   Ú
<listcomp>¿   s    zBOcbTests.test_message_chunks.<locals>.break_up.<locals>.<listcomp>r   )r4   r9   )r   rb   r   ra   r   Úbreak_up¾   s   ÿz.OcbTests.test_message_chunks.<locals>.break_up)
r2   é   é   rA   é
   é   r   é(   éP   r   r1   )r   r	   r   r   r   r   Úupdater   r   rF   r    Úverifyr)   rZ   )r!   Ú	auth_datar   r"   Ú
ciphertextÚref_macrd   rb   Úchunkr&   Úct2r   r   r   Útest_message_chunks³   s6   


õzOcbTests.test_message_chunksc                 C   sz  t | jƒ}t | jƒ}t | jƒ}t | jƒ}tj| jtj| jd�}| | j¡ | | j¡| ¡  }| 	¡ }tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | |¡| ¡  }	d|d d…< | 	¡ }
|  
||	¡ |  
||
¡ |  
|j|j¡ t | jƒ}t | jƒ}t | jƒ}~tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | t |	ƒt |
ƒ¡}|  
| j|¡ d S ©Nr   s   ÿÿÿrf   )Ú	bytearrayr   r   r   r	   r   r   rk   r)   rZ   r    r   r   )r!   Úkey_baÚnonce_baÚ	header_baÚdata_baÚcipher1r$   r   Úcipher2Úct_testÚtag_testÚcipher4Úpt_testr   r   r   Útest_bytearrayÞ   sN   



þþ



þ
zOcbTests.test_bytearrayc                 C   s–  t t| jƒƒ}t t| jƒƒ}t t| jƒƒ}t t| jƒƒ}tj| jtj| jd�}| | j¡ | 	| j¡| 	¡  }| 
¡ }tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | 	|¡| 	¡  }	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 d…< | t |	ƒt |
ƒ¡}|  | j|¡ d S rs   )Ú
memoryviewrt   r   r   r   r	   r   r   rk   r)   rZ   r    r   r   )r!   Úkey_mvÚnonce_mvÚ	header_mvÚdata_mvry   r$   r   rz   r{   r|   r}   r~   r   r   r   Útest_memoryview  sN   þþ
þ
zOcbTests.test_memoryviewN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r'   r+   r0   r5   r>   r@   rD   rJ   rM   rN   rT   rX   r]   rr   r   r…   r   r   r   r   r   /   s(    


	


	+/r   c                   @   sš   e Zd ZeddƒZeddƒZeddƒZdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚOcbFSMTestsr   r   r   r   r   r   c                 C   sl   t j| jt j| jd�}| | j¡}|| ¡ 7 }| ¡ }t j| jt j| jd�}| |¡ | ¡  | 	|¡ d S r(   )
r	   r   r   r   r   r)   r   rZ   rF   rl   )r!   r"   r$   r%   r   r   r   Ú-test_valid_init_encrypt_decrypt_digest_verifyC  s   ÿÿ
z9OcbFSMTests.test_valid_init_encrypt_decrypt_digest_verifyc                 C   sb   t j| jt j| jd�}| | j¡}|  t|j	¡ t j| jt j| jd�}| 
|¡ |  t|j¡ d S r(   )r	   r   r   r   r   r)   r   r-   r.   rZ   rF   rl   r*   r   r   r   Ú/test_invalid_init_encrypt_decrypt_digest_verifyS  s   ÿÿ
z;OcbFSMTests.test_invalid_init_encrypt_decrypt_digest_verifyc                 C   sZ   t j| jt j| jd�}| | j¡ | ¡ }t j| jt j| jd�}| | j¡ | |¡ d S r(   )	r	   r   r   r   r   rk   r   rZ   rl   ©r!   r"   r%   r   r   r   Ú$test_valid_init_update_digest_verifya  s   ÿÿz0OcbFSMTests.test_valid_init_update_digest_verifyc                 C   s
  t j| jt j| jd�}| | j¡ | | j¡}|| ¡ 7 }| ¡ }t j| jt j| jd�}| | j¡ | 	|¡ | 	¡  | 
|¡ t j| jt j| jd�}| | j¡ | | jd d… ¡}| | jdd … ¡\}}t j| jt j| jd�}| | j¡ | 	|¡ | ||¡ d S )Nr   re   )r	   r   r   r   r   rk   r   r)   rZ   rF   rl   r   r   )r!   r"   r$   r%   Úct1rq   r   r   r   Útest_valid_full_patho  s4   ÿÿ

ÿÿ
z OcbFSMTests.test_valid_full_pathc                 C   óL   t j| jt j| jd�}| | j¡ | | j¡ | ¡  |  t	|j| j¡ d S r(   )
r	   r   r   r   r   rk   r   r)   r-   r.   rL   r   r   r   Ú test_invalid_encrypt_after_final�  ó   ÿz,OcbFSMTests.test_invalid_encrypt_after_finalc                 C   r�   r(   )
r	   r   r   r   r   rk   r   rF   r-   r.   rL   r   r   r   Ú test_invalid_decrypt_after_final—  r’   z,OcbFSMTests.test_invalid_decrypt_after_finalc                 C   s"   t j| jt j| jd�}| ¡  d S r(   )r	   r   r   r   r   rZ   rL   r   r   r   Útest_valid_init_digestŸ  s   z"OcbFSMTests.test_valid_init_digestc                 C   sB   t j| jt j| jd�}| ¡ }t j| jt j| jd�}| |¡ d S r(   )r	   r   r   r   r   rZ   rl   rŒ   r   r   r   Útest_valid_init_verify¤  s   z"OcbFSMTests.test_valid_init_verifyc                 C   s�   dD ]C}d t dƒ| j| jt dƒ fD ]2}tj| jtj| jd�}|d ur(| |¡ t||ƒ}|| jƒ || jƒ || jƒ || jƒ |ƒ  qqd S )NrE   Ú333Ú3r   )	r   r   r	   r   r   r   r   rk   rG   )r!   Úmethod_namerm   r"   Úmethodr   r   r   Ú&test_valid_multiple_encrypt_or_decrypt¬  s"   ÿÿ





õÿz2OcbFSMTests.test_valid_multiple_encrypt_or_decryptc                 C   s†   t j| jt j| jd�}| | j¡ | ¡ }tdƒD ]
}|  	|| ¡ ¡ qt j| jt j| jd�}| | j¡ tdƒD ]}| 
|¡ q9d S )Nr   é   é   )r	   r   r   r   r   rk   r   rZ   r4   r    rl   )r!   r"   Ú	first_macÚxr   r   r   Ú$test_valid_multiple_digest_or_verify»  s   ÿz0OcbFSMTests.test_valid_multiple_digest_or_verifyc                 C   sr   t j| jt j| jd�}| | j¡ | | j¡\}}t j| jt j| jd�}| | j¡ | ||¡}|  	| j|¡ d S r(   )
r	   r   r   r   r   rk   r   r   r   r    )r!   r"   r$   r%   r#   r   r   r   Ú0test_valid_encrypt_and_digest_decrypt_and_verifyÉ  s   z<OcbFSMTests.test_valid_encrypt_and_digest_decrypt_and_verifyc                 C   sh   dD ]/\}}dD ](}t j| jt j| jd�}|r| | j¡ t||ƒ| jƒ |  t	t||ƒ| j¡ qqd S )N)rE   )rF   r)   )TFr   )
r	   r   r   r   r   rk   r   rG   r-   r.   )r!   Úmethod1_nameÚmethod2_nameÚassoc_data_presentr"   r   r   r   Ú#test_invalid_mixing_encrypt_decryptÕ  s   ÿÿúþz/OcbFSMTests.test_invalid_mixing_encrypt_decryptc                 C   sx   dD ]7}t j| jt j| jd�}| | j¡ | ¡  | ¡  |  t	t
||ƒ| j¡ t j| jt j| jd�}| | j¡ qd S )N)r)   rk   r   )r	   r   r   r   r   r)   r   rZ   r-   r.   rG   r   )r!   r˜   r"   r   r   r   Ú+test_invalid_encrypt_or_update_after_digestâ  s   ÿ÷z7OcbFSMTests.test_invalid_encrypt_or_update_after_digestc                 C   sÄ   t j| jt j| jd�}| | j¡}|| ¡ 7 }| ¡ }dD ]B}t j| jt j| jd�}| |¡ | ¡  | 	|¡ |  
tt||ƒ| j¡ t j| jt j| jd�}| ||¡ |  
tt||ƒ| j¡ qd S )Nr   )rF   rk   )r	   r   r   r   r   r)   r   rZ   rF   rl   r-   r.   rG   r   )r!   r"   r$   r%   r˜   r   r   r   Ú+test_invalid_decrypt_or_update_after_verifyî  s$   

ÿÿöz7OcbFSMTests.test_invalid_decrypt_or_update_after_verifyN)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‰   =  s$    


 r‰   c           	      C   sh  t dƒ| d d  t |ƒ }d}tdƒD ]}t dƒ| }td| d |d ƒ}tj|tj||d d�}| |¡ || |¡| ¡  | ¡  7 }td| d |d ƒ}tj|tj||d d�}|| |¡| ¡  | ¡  7 }td| d |d ƒ}tj|tj||d d�}| |¡ || ¡ | ¡  7 }qtd	|d ƒ}tj|tj||d d�}| |¡ | ¡ | ¡  S )
z.Implement the algorithm at page 18 of RFC 7253r   rR   r2   ó    r   rf   rO   re   i�  )	r   r4   r   r	   r   r   rk   r)   rZ   )	ÚkeylenÚtaglenÚnoncelenÚkeyÚCr`   ÚSÚNr"   r   r   r   Úalgo_rfc7253  s&   


r¯   c                   @   s4   e Zd ZdZdZdZdZdd„ Zdd„ Zd	d
„ Z	dS )ÚOcbRfc7253TestÚ 000102030405060708090A0B0C0D0E0F))ÚBBAA99887766554433221100r1   r1   Ú 785407BFFFC8AD9EDCC5520AC9111EE6)ÚBBAA99887766554433221101Ú0001020304050607rµ   Ú06820B3657B6F615A5725BDA0D3B4EB3A257C9AF1F8F03009)ÚBBAA99887766554433221102rµ   r1   Ú 81017F8203F081277152FADE694A0A00)ÚBBAA99887766554433221103r1   rµ   Ú045DD69F8F5AAE72414054CD1F35D82760B2CD00D2F99BFA9)ÚBBAA99887766554433221104r±   r±   Ú@571D535B60B277188BE5147170A9A22C3AD7A4FF3835B8C5701C1CCEC8FC3358)ÚBBAA99887766554433221105r±   r1   Ú 8CF761B6902EF764462AD86498CA6B97)ÚBBAA99887766554433221106r1   r±   Ú@5CE88EC2E0692706A915C00AEB8B2396F40E1C743F52436BDF06D8FA1ECA343D)ÚBBAA99887766554433221107Ú0000102030405060708090A0B0C0D0E0F1011121314151617rÂ   ÚP1CA2207308C87C010756104D8840CE1952F09673A448A122C92C62241051F57356D7F3C90BB0E07F)ÚBBAA99887766554433221108rÂ   r1   Ú 6DC225A071FC1B9F7C69F93B0F1E10DE)ÚBBAA99887766554433221109r1   rÂ   ÚP221BD0DE7FA6FE993ECCD769460A0AF2D6CDED0C395B1C3CE725F32494B9F914D85C0B1EB38357FF)ÚBBAA9988776655443322110AÚ@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1FrÉ   Ú`BD6F6C496201C69296C11EFD138A467ABD3C707924B964DEAFFC40319AF5A48540FBBA186C5553C68AD9F592A79A4240)ÚBBAA9988776655443322110BrÉ   r1   Ú FE80690BEE8A485D11F32965BC9D2A32)ÚBBAA9988776655443322110Cr1   rÉ   Ú`2942BFC773BDA23CABC6ACFD9BFD5835BD300F0973792EF46040C53F1432BCDFB5E1DDE3BC18A5F840B52E653444D5DF)ÚBBAA9988776655443322110DÚP000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627rÐ   ÚpD5CA91748410C1751FF8A2F618255B68A0A12E093FF454606E59F9C1D0DDC54B65E8628E568BAD7AED07BA06A4A69483A7035490C5769E60)ÚBBAA9988776655443322110ErÐ   r1   Ú C5CD9D1850C141E358649994EE701B68)ÚBBAA9988776655443322110Fr1   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                 C   sÜ   t t| jƒƒ}| jD ]a}dd„ |D ƒ\}}}}|d d… |dd … }}tj|tj|d�}| |¡ | |¡| ¡  }	|  	||	¡ |  	|| 
¡ ¡ tj|tj|d�}| |¡ | |¡| ¡  }
|  	||
¡ | |¡ q
d S )Nc                 S   ó   g | ]}t t|ƒƒ‘qS r   ©r   r   ©r_   rž   r   r   r   rc   Á  ó    z(OcbRfc7253Test.test1.<locals>.<listcomp>iðÿÿÿr   )r   r   Útv1_keyÚtv1r	   r   r   rk   r)   r    rZ   rF   rl   )r!   r«   Útvr   Úaadr#   r$   Úmac_tagr"   rq   r&   r   r   r   Útest1¾  s   


òzOcbRfc7253Test.test1c           
      C   sÊ   dd„ | j D ƒ\}}}}}|d d… |dd … }}tj|tj|dd�}| |¡ | |¡| ¡  }|  ||¡ |  || ¡ ¡ tj|tj|dd�}| |¡ | |¡| ¡  }	|  ||	¡ | 	|¡ d S )Nc                 S   rå   r   ræ   rç   r   r   r   rc   Ò  rè   z(OcbRfc7253Test.test2.<locals>.<listcomp>iôÿÿÿr   rO   )
Útv2r	   r   r   rk   r)   r    rZ   rF   rl   )
r!   r«   r   rì   r#   r$   rí   r"   rq   r&   r   r   r   Útest2Ð  s   

zOcbRfc7253Test.test2c                 C   s6   | j D ]\}}}t||dƒ}|  tt|ƒƒ|¡ qd S )NrÝ   )Útv3r¯   r    r   r   )r!   r¨   r©   rI   Úresult2r   r   r   Útest3á  s   þzOcbRfc7253Test.test3N)
r†   r‡   rˆ   ré   rê   rï   rñ   rî   rð   ró   r   r   r   r   r°     s    {r°   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú
OcbDkgTestz9Test vectors from https://gitlab.com/dkg/ocb-test-vectorsc                 C   sê   g }dD ]2}dD ]-}t dd||f d||f i ƒ}|d u r n|d j}|dd … D ]
}||_| |¡ q*qq|D ]9}|j|j|j|j|jf\}}}	}
}t|ƒt|
ƒ }tj	|tj
||d�}| |	¡ | |
¡\}}|  ||| ¡ q9d S )	N)r2   re   )éh   ép   éx   )ÚCipherr	   ztest-vector-%d-nonce%d.txtzDKG tests, %d, %d bitsr   r2   rO   )r   ÚkÚappendÚnÚaÚpÚcr9   r	   r   r   rk   r   r    )r!   ÚtvsÚfiÚnbÚtv_filer«   rë   rù   rû   rü   rý   rþ   rP   r"   Úc_outÚtag_outr   r   r   Útest_1_2ê  s0   

ý
þ€"
úzOcbDkgTest.test_1_2c                    sŠ  ‡ 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%ƒ d S )&Nc                    s    t | ||ƒ}ˆ  |t|ƒ¡ d S ©N)r¯   r    r   )r¨   r©   rª   ÚexprI   r/   r   r   Úcheck  s   z OcbDkgTest.test_3.<locals>.checkr   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  r   r/   r   Útest_3  s8   zOcbDkgTest.test_3c                 C   sˆ   t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t|ƒt|ƒ }t dƒ}tj|tj|d d… |d�}| |¡ | |¡\}	}
|  ||	|
 ¡ d S )NÚEEDDCCBBAA9988776655443322110DrÖ   rÐ   Úh07E903BFC49552411ABC865F5ECE60F6FAD1F5A9F14D3070FA2F1308A563207FFE14C1EEA44B22059C7484319D8A2C53C236A7B3ÚhBA015C4E5AE54D76C890AE81BD40DC5703EDC30E8AC2A58BC5D8FA4D61C5BAE6C39BEAC435B2FD56A2A5085C1B135D770C8264B7éÿÿÿÿrO   )r   r9   r	   r   r   rk   r   r    )r!   r   r«   ÚAÚPr¬   rP   Úbuggy_resultr"   ÚC_out2Útag_out2r   r   r   Útest_2_bugfix(  s   
zOcbDkgTest.test_2_bugfixN)r†   r‡   rˆ   Ú__doc__r  r$  r.  r   r   r   r   rô   ç  s
    'rô   c                 C   s8   g }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|S r  )r   r   r‰   r°   rô   )ÚconfigÚtestsr   r   r   Ú	get_testsA  s   r2  Ú__main__c                   C   s   t  tƒ ¡S r  )ÚunittestÚ	TestSuiter2  r   r   r   r   ÚsuiteK  s   r6  )ÚdefaultTest)r4  Ú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ô   r2  r†   r6  Úmainr   r   r   r   Ú<module>   s.      F IZ	ý