B
    ë?[¤  ã               @   sž   d Z dZddlZddlZddlZddlT ejdk r<dd„ Zne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dd„Zdd„ ZdS )z&Self-testing for PyCrypto hash modulesz$Id$é    N)Ú*i  c              K   s   |   ¡ S )N)Úcopy)Úkwargs© r   ú:lib/python3.7/site-packages/Crypto/SelfTest/Hash/common.pyÚdict&   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)Úselfr   r   r   r   r   r   r   .   s    zHashDigestSizeSelfTest.__init__c             C   s   | j S )N)r   )r   r   r   r   ÚshortDescription4   s    z'HashDigestSizeSelfTest.shortDescriptionc             C   sR   |   t| jdƒ¡ |  | jj| j¡ | j ¡ }|   t|dƒ¡ |  |j| j¡ d S )NÚdigest_size)Z
assertTrueÚhasattrr   ÚassertEqualr   r   Únew)r   Úhr   r   r   ÚrunTest7   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   s(   t j | ¡ || _|| _|| _|| _d S )N)r	   r
   r   r   r   Úinputr   )r   r   r   r   r   r   r   r   r   A   s
    zHashSelfTest.__init__c             C   s   | j S )N)r   )r   r   r   r   r   H   s    zHashSelfTest.shortDescriptionc             C   sð   | j  ¡ }| | j¡ t | ¡ ¡}| ¡ }| j  | j¡}| ¡ }t | ¡ ¡}|  | j	|¡ t
jd dkrŠ|  | j	|¡ |  | j	|¡ n$|  | j	 ¡ |¡ |  | j	 ¡ |¡ |  | j	|¡ | ¡ }| | j¡ t | ¡ ¡}|  | j	|¡ d S )Nr   é   )r   r   Úupdater   ÚbinasciiÚb2a_hexÚdigestÚ	hexdigestr   r   ÚsysÚversion_infoÚdecode)r   r   Úout1Úout2Úout3Úout4Úh2Úout5r   r   r   r   K   s$    
zHashSelfTest.runTestN)r   r   r   r   r   r   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 )N)r	   r
   r   r   Úoid)r   r   r,   r   r   r   r   h   s    zHashTestOID.__init__c             C   s^   | j  ¡ }| jd krJyd}|j}W n tk
r:   d}Y nX |  |d¡ n|  |j| j¡ d S )Nr   é   )r   r   r,   ÚAttributeErrorr   )r   r   ZraisedÚar   r   r   r   m   s    



zHashTestOID.runTestN)r   r   r   r   r   r   r   r   r   r+   g   s   r+   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚMACSelfTestc             C   s4   t j | ¡ || _|| _|| _|| _|| _|| _d S )N)	r	   r
   r   r   Úexpected_dictr   ÚkeyÚhashmodsr   )r   r   r   r1   r   r2   r3   r   r   r   r   {   s    zMACSelfTest.__init__c             C   s   | j S )N)r   )r   r   r   r   r   „   s    zMACSelfTest.shortDescriptionc             C   sJ  xBt | j ¡ ƒD ].}| j| }t t| jƒ¡}t t| jƒ¡}td 	| j|  
¡ ¡ƒ}| jj||d}| |¡ t | ¡ ¡}| ¡ }| j |||¡}| ¡ }	t | ¡ ¡}
| ¡ }| tdƒ¡ t | ¡ ¡}|  ||¡ tjd dkr
|  ||¡ |  ||	¡ n |  | ¡ |¡ |  | ¡ |	¡ |  ||
¡ |  ||¡ qW d S )NÚ )Z	digestmodzblah blah blahr   r   )Úlistr1   Úkeysr3   r   Za2b_hexÚbr2   r   ÚjoinÚsplitr   r   r   r   r    r!   r   r   r"   r#   r$   )r   Zhashnamer   r2   Údatar   r   r%   r&   r'   r(   r)   r*   r   r   r   r   ‡   s.    

zMACSelfTest.runTestN)r   r   r   r   r   r   r   r   r   r   r0   y   s   	r0   c             C   sÌ   g }x€t t|ƒƒD ]p}|| }ttt|dd… ƒƒ\}}	t|ƒdk rNt|	ƒ}
n|d  d¡}
d||d |
f }| t| |||	ƒ¡ qW |d k	r–t|ƒ}d||d f }| t	| ||ƒ¡ | t
| |ƒ¡ |S )Nr   r   é   zlatin-1z
%s #%d: %sr-   z%s #%d: digest_size)ÚrangeÚlenr5   Úmapr7   ÚreprÚencodeÚappendr   r   r+   )ÚmoduleÚmodule_nameÚ	test_datar   r,   ÚtestsÚiÚrowr   r   r   Únamer   r   r   Úmake_hash_testsª   s    
rI   c          
   C   s\   g }xRt t|ƒƒD ]B}|| }|\}}}	}
d||d |
f }| t| ||	|||ƒ¡ qW |S )Nz
%s #%d: %sr-   )r<   r=   rA   r0   )rB   rC   rD   r3   rE   rF   rG   r2   r:   Zresultsr   rH   r   r   r   Úmake_mac_tests¼   s    rJ   )N)Ú__doc__Z__revision__r"   r	   r   ZCrypto.Util.py3compatÚ
hexversionr   r
   r   r   r+   r0   rI   rJ   r   r   r   r   Ú<module>   s   

(1
