U
    Š¾úg²&  ã                   @   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   )Z
hex_stringZshorter© r
   úC/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/SelfTest/Hash/common.pyÚt2b$   s    r   c                   @   s$   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   s   | j S r   ©r   ©r   r
   r
   r   ÚshortDescription2   s    z'HashDigestSizeSelfTest.shortDescriptionc                 C   sb   d| j kr.|  t| jdƒ¡ |  | jj| j¡ | jjf | j Ž}|  t|dƒ¡ |  |j| j¡ d S )NÚtruncateÚdigest_size)r   Ú
assertTrueÚhasattrr   ÚassertEqualr   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                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú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   s   | j S r   r   r   r
   r
   r   r   H   s    zHashSelfTest.shortDescriptionc                 C   s  | j jf | jŽ}| | j¡ t | ¡ ¡}| ¡ }| j j| jf| jŽ}| ¡ }t | ¡ ¡}|  	| j
|¡ tjd dkr–|  	| j
|¡ |  	| j
|¡ n$|  	| j
 ¡ |¡ |  	| j
 ¡ |¡ |  	| j
|¡ | j jdksàt|dƒr| ¡ }| | j¡ t | ¡ ¡}|  	| j
|¡ d S )Nr   é   )zCryptodome.Hash.MD5zCryptodome.Hash.SHA1r   )r   r   r   Úupdater)   ÚbinasciiÚb2a_hexÚdigestÚ	hexdigestr   r   ÚsysÚversion_infoÚdecoder$   r   )r   r!   Zout1Zout2Zout3Zout4Úh2Zout5r
   r
   r   r"   K   s&    zHashSelfTest.runTestNr#   r
   r
   r
   r   r'   >   s   r'   c                   @   s   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   r5   r   r
   r
   r   r   l   s    zHashTestOID.__init__c                 C   s$   | j jf | jŽ}|  |j| j¡ d S r   )r   r   r   r   r5   r    r
   r
   r   r"   r   s    zHashTestOID.runTestN©r$   r%   r&   r   r"   r
   r
   r
   r   r4   k   s   r4   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚByteArrayTestc                 C   s   t j | ¡ || _|| _d S r   ©r   r   r   Úmoduler   ©r   r9   r   r
   r
   r   r   y   s    zByteArrayTest.__init__c                 C   s´   t dƒ}t|ƒ}| jj|f| jŽ}| jj|f| jŽ}d|d d…< |  | ¡ | ¡ ¡ t|ƒ}| jjf | jŽ}| jjf | jŽ}| |¡ | |¡ d|d d…< |  | ¡ | ¡ ¡ d S )Nz ó   ÿé   )r   Ú	bytearrayr9   r   r   r   r.   r+   )r   ÚdataÚbaÚh1r3   r
   r
   r   r"   ~   s    

zByteArrayTest.runTestNr6   r
   r
   r
   r   r7   w   s   r7   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚMemoryViewTestc                 C   s   t j | ¡ || _|| _d S r   r8   r:   r
   r
   r   r   ˜   s    zMemoryViewTest.__init__c                 C   sÚ   d}dd„ }dd„ }||fD ]¸}||ƒ}| j j|f| jŽ}| j j|f| jŽ}|js^d|d d…< |  | ¡ | ¡ ¡ ||ƒ}| j jf | jŽ}| j jf | jŽ}| |¡ | |¡ |jsÀd|d d…< |  | ¡ | ¡ ¡ qd S )Ns    c                 S   s   t | ƒS r   )Ú
memoryview©r>   r
   r
   r   Ú	get_mv_ro¡   s    z)MemoryViewTest.runTest.<locals>.get_mv_roc                 S   s   t t| ƒƒS r   )rB   r=   rC   r
   r
   r   Ú	get_mv_rw¤   s    z)MemoryViewTest.runTest.<locals>.get_mv_rwr;   r<   )r9   r   r   Úreadonlyr   r.   r+   )r   r>   rD   rE   Zget_mvÚmvr@   r3   r
   r
   r   r"      s$    

zMemoryViewTest.runTestNr6   r
   r
   r
   r   rA   –   s   rA   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚMACSelfTestc                 C   s@   t j | ¡ || _t|ƒ| _t|ƒ| _t|ƒ| _|| _|| _	d S r   )
r   r   r   r9   r   Úresultr>   ÚkeyÚparamsr   )r   r9   r   rI   r>   rJ   rK   r
   r
   r   r   À   s    


zMACSelfTest.__init__c                 C   s   | j S r   r   r   r
   r
   r   r   É   s    zMACSelfTest.shortDescriptionc                 C   s´  t | jƒ}| jj| jf| jŽ}| | j¡ |  | j| 	¡ ¡ |  t | jƒ 
d¡| ¡ ¡ | | j¡ | |¡ t| jdƒ}|  t|j|¡ |  t|jd¡ | jj| j| jf| jŽ}|  | j| 	¡ ¡ |  t | jƒ 
d¡| ¡ ¡ zf| jj| j| jf| jŽ}| ¡ }| ¡ }| d¡ |  | 	¡ | j¡ | d¡ |  | 	¡ | 	¡ ¡ W n tk
r\   Y nX |  t| 	¡ tdƒƒ¡ |  t| ¡ tdƒƒ¡ | | ¡ ¡ | | ¡  d¡¡ d S )NÚasciiéÿ   Z4556s   blar   Ú )r   rI   r9   r   rJ   rK   r+   r>   r   r.   r2   r/   ÚverifyZ	hexverifyr   ÚassertRaisesÚ
ValueErrorÚcopyÚNotImplementedErrorr   Ú
isinstanceÚtypeÚencode)r   Z
result_hexr!   Z	wrong_macr3   Úh3r
   r
   r   r"   Ì   s6    



zMACSelfTest.runTestNr#   r
   r
   r
   r   rH   ¾   s   	rH   c              	   C   sà   g }t t|ƒƒD ]h}|| }tt|dd… ƒ\}	}
t|ƒdk rHt|
ƒ}n|d }d||d |f }| t| ||	|
|ƒ¡ qd|t|ƒd f }| t| |||ƒ¡ |d k	r¼| t| ||ƒ¡ | t	| |ƒ¡ | t
| |ƒ¡ |S )Nr   r*   é   ú
%s #%d: %sr<   z%s #%d: digest_size)ÚrangeÚlenÚmapr   ÚreprÚappendr'   r   r4   r7   rA   )r9   Úmodule_nameÚ	test_datar   r5   r   ÚtestsÚiÚrowr   r)   r   Únamer
   r
   r   Úmake_hash_testsý   s     
re   c              
   C   sx   g }t |ƒD ]f\}}t|ƒdkr:t|ƒi g \}}}}	}
n|\}}}}	}
d||d |	f }| t| |||||
ƒ¡ q|S )Né   rY   r<   )Ú	enumerater[   Úlistr^   rH   )r9   r_   r`   ra   rb   rc   rJ   r>   Úresultsr   rK   rd   r
   r
   r   Úmake_mac_tests  s    rj   )Ú__doc__r   r0   r   r,   ZCryptodome.HashZ
Cryptodomer   r   ZCryptodome.Util.py3compatr   r   ZCryptodome.Util.strxorr   r   r   r   r'   r4   r7   rA   rH   re   rj   r
   r
   r
   r   Ú<module>   s&   -(?ÿ
