o
    Ìn~b²&  ã                   @   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
   úJ/usr/local/lib/python3.10/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   Ú
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                   @   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Ú	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                   @   ó   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   r9   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   r!   r9   r#   r
   r
   r   r%   r   s   zHashTestOID.runTestN©r'   r(   r)   r   r%   r
   r
   r
   r   r8   k   s    r8   c                   @   r7   )ÚByteArrayTestc                 C   ó   t j | ¡ || _|| _d S r   ©r   r   r   Úmoduler   ©r   r>   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   Ú	bytearrayr>   r"   r   r!   r1   r.   )r   ÚdataÚbaÚh1r6   r
   r
   r   r%   ~   s   

zByteArrayTest.runTestNr:   r
   r
   r
   r   r;   w   ó    r;   c                   @   r7   )ÚMemoryViewTestc                 C   r<   r   r=   r?   r
   r
   r   r   ˜   r@   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©rD   r
   r
   r   Ú	get_mv_ro¡   s   z)MemoryViewTest.runTest.<locals>.get_mv_roc                 S   s   t t| ƒƒS r   )rI   rC   rJ   r
   r
   r   Ú	get_mv_rw¤   s   z)MemoryViewTest.runTest.<locals>.get_mv_rwrA   rB   r
   )r>   r"   r   Úreadonlyr!   r1   r.   )r   rD   rK   rL   Zget_mvÚmvrF   r6   r
   r
   r   r%      s&   

ìzMemoryViewTest.runTestNr:   r
   r
   r
   r   rH   –   rG   rH   c                   @   r   )ÚMACSelfTestc                 C   s@   t j | ¡ || _t|ƒ| _t|ƒ| _t|ƒ| _|| _|| _	d S r   )
r   r   r   r>   r   ÚresultrD   ÚkeyÚparamsr   )r   r>   r   rP   rD   rQ   rR   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éÿ   Z4556s   blar   Ú )r   rP   r>   r"   rQ   rR   r.   rD   r!   r1   r5   r2   ÚverifyZ	hexverifyr   ÚassertRaisesÚ
ValueErrorÚcopyÚNotImplementedErrorr   Ú
isinstanceÚtypeÚencode)r   Z
result_hexr$   Z	wrong_macr6   Úh3r
   r
   r   r%   Ì   s8   



ÿzMACSelfTest.runTestNr&   r
   r
   r
   r   rO   ¾   s    	rO   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: %srB   z%s #%d: digest_size)ÚrangeÚlenÚmapr   ÚreprÚappendr*   r   r8   r;   rH   )r>   Úmodule_nameÚ	test_datar   r9   r   ÚtestsÚiÚrowr   r,   r   Únamer
   r
   r   Úmake_hash_testsý   s    
rl   c              
   C   sx   g }t |ƒD ]3\}}t|ƒdkrt|ƒi g \}}}}	}
n|\}}}}	}
d||d |	f }| t| |||||
ƒ¡ q|S )Né   r`   rB   )Ú	enumeraterb   Úlistre   rO   )r>   rf   rg   rh   ri   rj   rQ   rD   Úresultsr   rR   rk   r
   r
   r   Úmake_mac_tests  s   rq   )Ú__doc__r   r3   r   r/   ZCryptodome.HashZ
Cryptodomer   r   ZCryptodome.Util.py3compatr   r   ZCryptodome.Util.strxorr   r   r   r   r*   r8   r;   rH   rO   rl   rq   r
   r
   r
   r   Ú<module>   s(   -(?
ÿ