o
    ‰¡e´&  ã                   @   sæ   d Z ddlZddlZddlZddlZddlZddlmZmZ ddl	m
Z
mZ ddlmZ dd„ ZG dd	„ d	ejƒZG d
d„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZdi fdd„Zdd„ ZdS )z*Self-testing for PyCryptodome hash modulesé    N)ÚhexlifyÚ	unhexlify)ÚbÚtobytes)Ústrxor_cc                 C   s   t  ddt| ƒ¡}t|ƒS )Ns   \s+ó    )ÚreÚsubr   r   )Ú
hex_stringÚshorter© r   úA/usr/lib/python3/dist-packages/Cryptodome/SelfTest/Hash/common.pyÚt2b$   s   r   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚHashDigestSizeSelfTestc                 C   s(   t j | ¡ || _|| _|| _|| _d S ©N)ÚunittestÚTestCaseÚ__init__ÚhashmodÚexpectedÚdescriptionÚextra_params)Úselfr   r   r   r   r   r   r   r   +   s
   
zHashDigestSizeSelfTest.__init__c                 C   ó   | j S r   ©r   ©r   r   r   r   ÚshortDescription2   ó   z'HashDigestSizeSelfTest.shortDescriptionc                 C   sf   d| j vr|  t| jdƒ¡ |  | jj| j¡ | jjdi | j ¤Ž}|  t|dƒ¡ |  |j| j¡ d S )NÚtruncateÚdigest_sizer   )r   Ú
failUnlessÚhasattrr   ÚassertEqualsr    r   Únew©r   Úhr   r   r   ÚrunTest5   s   
zHashDigestSizeSelfTest.runTestN©Ú__name__Ú
__module__Ú__qualname__r   r   r'   r   r   r   r   r   )   s    r   c                   @   r   )ÚHashSelfTestc                 C   s2   t j | ¡ || _| ¡ | _|| _|| _|| _d S r   )	r   r   r   r   Úlowerr   Úinputr   r   )r   r   r   r   r.   r   r   r   r   r   @   s   

zHashSelfTest.__init__c                 C   r   r   r   r   r   r   r   r   H   r   zHashSelfTest.shortDescriptionc                 C   s  | j jdi | j¤Ž}| | j¡ t | ¡ ¡}| ¡ }| j j| jfi | j¤Ž}| ¡ }t | ¡ ¡}|  	| j
|¡ tjd dkrO|  	| j
|¡ |  	| j
|¡ n|  	| j
 ¡ |¡ |  	| j
 ¡ |¡ |  	| j
|¡ | j jdvsst|dƒr| ¡ }| | j¡ t | ¡ ¡}|  	| j
|¡ d S d S )Nr   é   )zCryptodome.Hash.MD5zCryptodome.Hash.SHA1r$   r   )r   r$   r   Úupdater.   ÚbinasciiÚb2a_hexÚdigestÚ	hexdigestÚassertEqualr   ÚsysÚversion_infoÚdecoder)   r"   )r   r&   Úout1Úout2Úout3Úout4Úh2Úout5r   r   r   r'   K   s(   üzHashSelfTest.runTestNr(   r   r   r   r   r,   >   s    r,   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚHashTestOIDc                 C   s"   t j | ¡ || _|| _|| _d S r   )r   r   r   r   Úoidr   )r   r   rA   r   r   r   r   r   l   s   
zHashTestOID.__init__c                 C   s(   | j jdi | j¤Ž}|  |j| j¡ d S )Nr   )r   r$   r   r5   rA   r%   r   r   r   r'   r   s   zHashTestOID.runTestN©r)   r*   r+   r   r'   r   r   r   r   r@   k   s    r@   c                   @   r?   )ÚByteArrayTestc                 C   ó   t j | ¡ || _|| _d S r   ©r   r   r   Úmoduler   ©r   rF   r   r   r   r   r   y   ó   
zByteArrayTest.__init__c                 C   sÄ   t dƒ}t|ƒ}| jj|fi | j¤Ž}| jj|fi | j¤Ž}d|d d…< |  | ¡ | ¡ ¡ t|ƒ}| jjdi | j¤Ž}| jjdi | j¤Ž}| |¡ | |¡ d|d d…< |  | ¡ | ¡ ¡ d S )Nz ó   ÿé   r   )r   Ú	bytearrayrF   r$   r   r5   r3   r0   )r   ÚdataÚbaÚh1r=   r   r   r   r'   ~   s   

zByteArrayTest.runTestNrB   r   r   r   r   rC   w   ó    rC   c                   @   r?   )ÚMemoryViewTestc                 C   rD   r   rE   rG   r   r   r   r   ˜   rH   zMemoryViewTest.__init__c                 C   sê   d}dd„ }dd„ }||fD ]d}||ƒ}| j j|fi | j¤Ž}| j j|fi | j¤Ž}|js3d|d d…< |  | ¡ | ¡ ¡ ||ƒ}| j jdi | j¤Ž}| j jdi | j¤Ž}| |¡ | |¡ |jshd|d d…< |  | ¡ | ¡ ¡ qd S )	Ns    c                 S   s   t | ƒS r   )Ú
memoryview©rL   r   r   r   Ú	get_mv_ro¡   s   z)MemoryViewTest.runTest.<locals>.get_mv_roc                 S   s   t t| ƒƒS r   )rQ   rK   rR   r   r   r   Ú	get_mv_rw¤   s   z)MemoryViewTest.runTest.<locals>.get_mv_rwrI   rJ   r   )rF   r$   r   Úreadonlyr5   r3   r0   )r   rL   rS   rT   Úget_mvÚmvrN   r=   r   r   r   r'      s&   

ìzMemoryViewTest.runTestNrB   r   r   r   r   rP   –   rO   rP   c                   @   r   )ÚMACSelfTestc                 C   s@   t j | ¡ || _t|ƒ| _t|ƒ| _t|ƒ| _|| _|| _	d S r   )
r   r   r   rF   r   ÚresultrL   ÚkeyÚparamsr   )r   rF   r   rY   rL   rZ   r[   r   r   r   r   À   s   



zMACSelfTest.__init__c                 C   r   r   r   r   r   r   r   r   É   r   zMACSelfTest.shortDescriptionc                 C   s¼  t | jƒ}| jj| jfi | j¤Ž}| | j¡ |  | j| 	¡ ¡ |  t | jƒ 
d¡| ¡ ¡ | | j¡ | |¡ t| jdƒ}|  t|j|¡ |  t|jd¡ | jj| j| jfi | j¤Ž}|  | j| 	¡ ¡ |  t | jƒ 
d¡| ¡ ¡ z5| jj| j| jfi | j¤Ž}| ¡ }| ¡ }| d¡ |  | 	¡ | j¡ | d¡ |  | 	¡ | 	¡ ¡ W n	 ty²   Y nw |  t| 	¡ tdƒƒ¡ |  t| ¡ tdƒƒ¡ | | ¡ ¡ | | ¡  d¡¡ d S )NÚasciiéÿ   Ú4556s   blar   Ú )r   rY   rF   r$   rZ   r[   r0   rL   r5   r3   r8   r4   ÚverifyÚ	hexverifyr   ÚassertRaisesÚ
ValueErrorÚcopyÚNotImplementedErrorÚ
assertTrueÚ
isinstanceÚtypeÚencode)r   Ú
result_hexr&   Ú	wrong_macr=   Úh3r   r   r   r'   Ì   s8   



ÿzMACSelfTest.runTestNr(   r   r   r   r   rX   ¾   s    	rX   c              	   C   sà   g }t t|ƒƒD ]4}|| }tt|dd… ƒ\}	}
t|ƒdk r$t|
ƒ}n|d }d||d |f }| t| ||	|
|ƒ¡ qd|t|ƒd f }| t| |||ƒ¡ |d ur^| t| ||ƒ¡ | t	| |ƒ¡ | t
| |ƒ¡ |S )Nr   r/   é   ú
%s #%d: %srJ   z%s #%d: digest_size)ÚrangeÚlenÚmapr   ÚreprÚappendr,   r   r@   rC   rP   )rF   Úmodule_nameÚ	test_datar    rA   r   ÚtestsÚiÚrowr   r.   r   Únamer   r   r   Úmake_hash_testsý   s    
rz   c              
   C   sx   g }t |ƒD ]3\}}t|ƒdkrt|ƒi g \}}}}	}
n|\}}}}	}
d||d |	f }| t| |||||
ƒ¡ q|S )Né   rn   rJ   )Ú	enumeraterp   Úlistrs   rX   )rF   rt   ru   rv   rw   rx   rZ   rL   Úresultsr   r[   ry   r   r   r   Úmake_mac_tests  s   r   )Ú__doc__r   r6   r   r1   ÚCryptodome.HashÚ
Cryptodomer   r   ÚCryptodome.Util.py3compatr   r   ÚCryptodome.Util.strxorr   r   r   r   r,   r@   rC   rP   rX   rz   r   r   r   r   r   Ú<module>   s(   -(?
ÿ