U
    ÈZj  ã                   @   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rädd„ Ze jdd� 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   úb/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/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 )NZ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"   Znonce1Znonce2r   r   r   Útest_block_size_128X   s    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 r5   )	r	   r   r   r   r   r    r   r8   r9   r:   r   r   r   Útest_nonce_attributeb   s    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   Z	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   r0   )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   Zxyz)
r	   r   r   r   r   r)   r   r,   r-   rA   ©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)   rA   rF   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|ƒ|¡ qFtj| jtj| jd�}| | j	¡\}}|  
t|ƒd¡ d S )Nr=   ©r   Úmac_lené   é   r   r   )r,   r2   r	   r   r   r   r   r3   r   r   r    r8   )r!   rJ   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   r1   )ZCrypto.Util.strxorrO   r	   r   r   r   r   r   r   r,   r2   r   )r!   rO   r"   r$   r%   Z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   Z	hexverify)r!   r"   Zmac_hexr   r   r   Útest_hex_mac«   s
    zOcbTests.test_hex_macc                 C   sZ  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 ]}| |¡ qrtdƒ}	|||ƒD ]}|	| 	|¡7 }	q”|	| 	¡ 7 }	|  
||	¡ | |¡ qNdD ]„}tj| jtj| jd�}|||ƒD ]}| |¡ qôtdƒ}
|||ƒD ]}|
| |¡7 }
�q|
| ¡ 7 }
|  
||
¡ |  
| ¡ |¡ qÐd 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   )r3   r8   )r   rX   r   rW   r   Úbreak_up¾   s    ÿz.OcbTests.test_message_chunks.<locals>.break_up)
r1   é   é   r=   é
   é   r   é(   éP   r   r0   )r   r	   r   r   r   r   Úupdater   r   rA   r    Úverifyr)   rR   )r!   Ú	auth_datar   r"   Z
ciphertextZref_macrZ   rX   Úchunkr&   Úct2r   r   r   Útest_message_chunks³   s4    


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   ÿÿÿr\   )Ú	bytearrayr   r   r   r	   r   r   ra   r)   rR   r    r   r   )r!   Zkey_baZnonce_baZ	header_baZ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 rg   )Ú
memoryviewrh   r   r   r   r	   r   r   ra   r)   rR   r    r   r   )r!   Zkey_mvZnonce_mvZ	header_mvZdata_mvri   r$   r   rj   rk   rl   rm   rn   r   r   r   Útest_memoryview  sN    þþ
þ
zOcbTests.test_memoryviewN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r'   r+   r/   r4   r;   r<   r?   rE   rG   rH   rN   rP   rS   rf   ro   rq   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   rR   rA   rb   )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-   rR   rA   rb   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   ra   r   rR   rb   ©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   r[   )r	   r   r   r   r   ra   r   r)   rR   rA   rb   r   r   )r!   r"   r$   r%   Zct1re   r   r   r   Útest_valid_full_patho  s4    ÿÿ

ÿÿ
z OcbFSMTests.test_valid_full_pathc                 C   sL   t j| jt j| jd�}| | j¡ | | j¡ | ¡  |  t	|j| j¡ d S r(   )
r	   r   r   r   r   ra   r   r)   r,   r-   rF   r   r   r   Ú test_invalid_encrypt_after_final�  s    ÿz,OcbFSMTests.test_invalid_encrypt_after_finalc                 C   sL   t j| jt j| jd�}| | j¡ | | j¡ | ¡  |  t	|j| j¡ d S r(   )
r	   r   r   r   r   ra   r   rA   r,   r-   rF   r   r   r   Ú test_invalid_decrypt_after_final—  s    ÿz,OcbFSMTests.test_invalid_decrypt_after_finalc                 C   s"   t j| jt j| jd�}| ¡  d S r(   )r	   r   r   r   r   rR   rF   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   rR   rb   rx   r   r   r   Útest_valid_init_verify¤  s    z"OcbFSMTests.test_valid_init_verifyc                 C   s�   dD ]†}d t dƒ| j| jt dƒ fD ]d}tj| jtj| jd�}|d k	rP| |¡ t||ƒ}|| jƒ || jƒ || jƒ || jƒ |ƒ  q$qd S )Nr@   Z333Ú3r   )	r   r   r	   r   r   r   r   ra   rB   )r!   Úmethod_namerc   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 ]}|  	|| ¡ ¡ q2t j| jt j| jd�}| | j¡ tdƒD ]}| 
|¡ qrd S )Nr   é   é   )r	   r   r   r   r   ra   r   rR   r3   r    rb   )r!   r"   Z	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   ra   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 ]P}t j| jt j| jd�}|r:| | j¡ t||ƒ| jƒ |  t	t||ƒ| j¡ qqd S )N)r@   )rA   r)   )TFr   )
r	   r   r   r   r   ra   r   rB   r,   r-   )r!   Zmethod1_nameZmethod2_nameZassoc_data_presentr"   r   r   r   Ú#test_invalid_mixing_encrypt_decryptÕ  s    ÿÿz/OcbFSMTests.test_invalid_mixing_encrypt_decryptc                 C   sx   dD ]n}t j| jt j| jd�}| | j¡ | ¡  | ¡  |  t	t
||ƒ| j¡ t j| jt j| jd�}| | j¡ qd S )N)r)   ra   r   )r	   r   r   r   r   r)   r   rR   r,   r-   rB   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 ]„}t j| jt j| jd�}| |¡ | ¡  | 	|¡ |  
tt||ƒ| j¡ t j| jt j| jd�}| ||¡ |  
tt||ƒ| j¡ q:d S )Nr   )rA   ra   )r	   r   r   r   r   r)   r   rR   rA   rb   r,   r-   rB   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)rr   rs   rt   r   r   r   r   rv   rw   ry   rz   r{   r|   r}   r~   r‚   r†   r‡   rˆ   r‰   rŠ   r   r   r   r   ru   =  s"   


 ru   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   rL   r1   ó    r   r\   rI   r[   i�  )	r   r3   r   r	   r   r   ra   r)   rR   )	ÚkeylenÚtaglenÚnoncelenÚkeyÚCrV   Ú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))ZBBAA99887766554433221100r0   r0   Z 785407BFFFC8AD9EDCC5520AC9111EE6)ZBBAA99887766554433221101Ú0001020304050607r–   Z06820B3657B6F615A5725BDA0D3B4EB3A257C9AF1F8F03009)ZBBAA99887766554433221102r–   r0   Z 81017F8203F081277152FADE694A0A00)ZBBAA99887766554433221103r0   r–   Z045DD69F8F5AAE72414054CD1F35D82760B2CD00D2F99BFA9)ZBBAA99887766554433221104r•   r•   Z@571D535B60B277188BE5147170A9A22C3AD7A4FF3835B8C5701C1CCEC8FC3358)ZBBAA99887766554433221105r•   r0   Z 8CF761B6902EF764462AD86498CA6B97)ZBBAA99887766554433221106r0   r•   Z@5CE88EC2E0692706A915C00AEB8B2396F40E1C743F52436BDF06D8FA1ECA343D)ZBBAA99887766554433221107Ú0000102030405060708090A0B0C0D0E0F1011121314151617r—   ZP1CA2207308C87C010756104D8840CE1952F09673A448A122C92C62241051F57356D7F3C90BB0E07F)ZBBAA99887766554433221108r—   r0   Z 6DC225A071FC1B9F7C69F93B0F1E10DE)ZBBAA99887766554433221109r0   r—   ZP221BD0DE7FA6FE993ECCD769460A0AF2D6CDED0C395B1C3CE725F32494B9F914D85C0B1EB38357FF)ZBBAA9988776655443322110AÚ@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1Fr˜   Z`BD6F6C496201C69296C11EFD138A467ABD3C707924B964DEAFFC40319AF5A48540FBBA186C5553C68AD9F592A79A4240)ZBBAA9988776655443322110Br˜   r0   Z FE80690BEE8A485D11F32965BC9D2A32)ZBBAA9988776655443322110Cr0   r˜   Z`2942BFC773BDA23CABC6ACFD9BFD5835BD300F0973792EF46040C53F1432BCDFB5E1DDE3BC18A5F840B52E653444D5DF)ÚBBAA9988776655443322110DÚP000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627rš   ZpD5CA91748410C1751FF8A2F618255B68A0A12E093FF454606E59F9C1D0DDC54B65E8628E568BAD7AED07BA06A4A69483A7035490C5769E60)ZBBAA9988776655443322110Erš   r0   Z C5CD9D1850C141E358649994EE701B68)ZBBAA9988776655443322110Fr0   rš   Zp4412923493C57D5DE0D700F753CCE0D1D2D95060122E9F15A5DDBFC5787E50B5CC55EE507BCB084E479AD363AC366B95A98CA5F3000B1479)Ú 0F0E0D0C0B0A09080706050403020100r™   rš   rš   Zh1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FDAC4F02AA)	)r   r   Z 67E944D23256C5E0B6C61FA22FDF1EA2)éÀ   r   Z F673F2C3E7174AAE7BAE986CA9F29E17)é   r   Z D90EB8E9C977C88B79DD793D7FFA161C)r   é`   Z77A3D8E73589158D25D01209)rœ   rž   Z05D56EAD2752C86BE6932C5E)r�   rž   Z5458359AC23B0CBA9E6330DD)r   é@   Z192C9B7BD90BA06A)rœ   rŸ   Z0066BC6E0EF34E24)r�   rŸ   Z7D4EA5D445501CBEc                 C   sÜ   t t| jƒƒ}| jD ]Â}dd„ |D ƒ\}}}}|d d… |dd …  }}tj|tj|d�}| |¡ | |¡| ¡  }	|  	||	¡ |  	|| 
¡ ¡ tj|tj|d�}| |¡ | |¡| ¡  }
|  	||
¡ | |¡ qd S )Nc                 S   s   g | ]}t t|ƒƒ‘qS r   ©r   r   ©rU   r…   r   r   r   rY   Á  s     z(OcbRfc7253Test.test1.<locals>.<listcomp>iðÿÿÿr   )r   r   Útv1_keyÚtv1r	   r   r   ra   r)   r    rR   rA   rb   )r!   r�   Útvr   Úaadr#   r$   Úmac_tagr"   re   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   s   g | ]}t t|ƒƒ‘qS r   r    r¡   r   r   r   rY   Ò  s     z(OcbRfc7253Test.test2.<locals>.<listcomp>iôÿÿÿr   rI   )
Útv2r	   r   r   ra   r)   r    rR   rA   rb   )
r!   r�   r   r¥   r#   r$   r¦   r"   re   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�   rD   Zresult2r   r   r   Útest3á  s    zOcbRfc7253Test.test3N)
rr   rs   rt   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 ]d}dD ]Z}t dd||f d||f i ƒ}|d kr> q|d j}|dd … D ]}||_| |¡ qTqq|D ]r}|j|j|j|j|jf\}}}	}
}t|ƒt|
ƒ }tj	|tj
||d�}| |	¡ | |
¡\}}|  ||| ¡ qrd S )	N)r1   r[   )éh   ép   éx   )ZCipherr	   ztest-vector-%d-nonce%d.txtzDKG tests, %d, %d bitsr   r1   rI   )r   ÚkÚappendÚnÚaÚpÚcr8   r	   r   r   ra   r   r    )r!   ZtvsÚfiÚnbZtv_filer�   r¤   r°   r²   r³   r´   rµ   rJ   r"   Zc_outZtag_outr   r   r   Útest_1_2ê  s*    

ý
"
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Ž   ÚexprD   r.   r   r   Úcheck  s    z OcbDkgTest.test_3.<locals>.checkr   r­   Z C47F5F0341E15326D4D1C46F47F05062rœ   Z 95B9167A38EB80495DFC561A8486E109r�   Z AFE1CDDB97028FD92F8FB3C8CFBA7D83rž   ZF471B4983BA80946DF217A54Z5AE828BC51C24D85FA5CC7B2Z8C8335982E2B734616CAD14CrŸ   ZB553F74B85FD1E5BZ3B49D20E513531F9ZED6DA5B1216BF8BBr®   Z CA8AFCA031BAC3F480A583BD6C50A547Z D170C1DF356308079DA9A3F619147148Z 57F94381F2F9231EFB04AECD323757C3Z3A618B2531ED39F260C750DCZ9071EB89FEDBADDA88FD286EZFDF0EFB97F21A39AC4BAB5ACZFAB2FF3A8DD82A13ZAC01D912BD0737D3Z9D1FD0B500EA4ECFr¯   Z 9E043A7140A25FB91F43BCC9DD7E0F46Z 680000E53908323A7F396B955B8EC641Z 8304B97FAACDA56E676602E1878A7E6FZ81F978AC9867E825D339847DZEFCF2D60B24926ADA48CF5B1Z84961DC56E917B165E58C174Z227AEE6C9D905A61Z541DE691B9E1A2F9Z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 )NZEEDDCCBBAA9988776655443322110Dr›   rš   Zh07E903BFC49552411ABC865F5ECE60F6FAD1F5A9F14D3070FA2F1308A563207FFE14C1EEA44B22059C7484319D8A2C53C236A7B3ZhBA015C4E5AE54D76C890AE81BD40DC5703EDC30E8AC2A58BC5D8FA4D61C5BAE6C39BEAC435B2FD56A2A5085C1B135D770C8264B7éÿÿÿÿrI   )r   r8   r	   r   r   ra   r   r    )r!   r   r�   ÚAÚPr�   rJ   Zbuggy_resultr"   ZC_out2Ztag_out2r   r   r   Útest_2_bugfix(  s    
zOcbDkgTest.test_2_bugfixN)rr   rs   rt   Ú__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   ru   r”   r¬   )ÚconfigZtestsr   r   r   Ú	get_testsA  s    rÃ   Ú__main__c                   C   s   t  tƒ ¡S r¹   )ÚunittestZ	TestSuiterÃ   r   r   r   r   ÚsuiteK  s    rÆ   )ZdefaultTest)rÅ   Úbinasciir   ZCrypto.Util.py3compatr   r   r   ZCrypto.Util.numberr   ZCrypto.SelfTest.loaderr   ZCrypto.SelfTest.st_commonr   ZCrypto.Cipherr	   ZCrypto.Hashr
   r   ZTestCaser   ru   r“   r”   r¬   rÃ   rr   rÆ   Úmainr   r   r   r   Ú<module>   s*      F IZ	