B
    u9a                 @   s>  d dl Z d dlZd dlZdd Zdd Zdd Zdd	 Ze jd
 Zedkrte	de  e	de d  e
ded nedkree jdkrd dlZe	de jd   e
de jd  eee jd  nedkree jdkrd dlZe	de jd   e
de jd   nVeeerLeeeedrLeeeZe
de eee ne	de  e
de  y
e  W nT ek
r   e
  e
d e
d e
d e
d e
d  e
d! e
   Y nX e  ed"d#d$ ed%d&d$ ed'd(d$ ed)d*d$ ed+d,d$ ed-d.d$ ed/d0d$ ee jd1d$ ed2d3d$ dS )4    Nc               C   s   t dd S )Nzeek, creatorFunc not overridden)RuntimeError r   r   "/usr/lib/python3.7/time_hashlib.pycreatorFunc	   s    r   c       	      C   sj   d|  d }d|  }t }t }xt|D ]}|| }q*W t }td||  d|dt|d| d S )Niٞ       Zz%2.2fsecondsxbytes)r   timeperf_counterrangedigestprintlen)	scalenameZ
iterationsZlongStrZlocalCFstartfr	   endr   r   r   test_scaled_msg   s    r   c              C   s@   t  } xtdD ]
}t }qW t  }td||   dd d S )Ni N  z%2.2fr   z[20000 creations])r   r   r   r   r   )r   r   dr   r   r   r   test_create   s
    
r   c              C   sD   t  } xtdD ]}t  }qW t  }td||   dd d S )Ni N  z%2.2fr   z[20000 "" digests])r   r   r   r   r   r   )r   r   r	   r   r   r   r   	test_zero    s
    r      )Z_md5Z_shazimport zcreatorFunc = z.newztesting speed of oldzlegacy interface_hashlib   zcreatorFunc = _hashlib.%s   ztesting speed of _hashlib.%sz+creatorFunc = lambda x=_hashlib.new : x(%r)z!testing speed of _hashlib.new(%r)__call__ztesting speed of hashlib.z*creatorFunc = lambda x=hashlib.new : x(%r)z testing speed of hashlib.new(%r)z8pass argument(s) naming the hash to run a speed test on:z6 '_md5' and '_sha' test the legacy builtin md5 and shaz= '_hashlib' 'openssl_hName' 'fast' tests the builtin _hashlibz6 '_hashlib' 'hName' tests builtin _hashlib.new(shaFOO)z> 'hName' tests the hashlib.hName() implementation if it existsz.         otherwise it uses hashlib.new(hName).iٞ z[huge data])r   r   i|)  z[large data]i&  z[medium data]i  z[4*small data]iP  z[3*small data]   z[2*small data]j   z[small data]z[digest_size data]
   z[tiny data])sysr   Zhashlibr   r   r   r   argvZhNameexecr   r   r   getattrhasattr
ValueErrorZdigest_sizer   r   r   r   <module>   s\   

"

