???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
bWq                 @   s   d dl Z d dlZd dlZddlmZmZ yd dlZW n ek
rP   d dl	ZY nX G dd de
Ze Zyej ZW n ek
r   dZY nX dd Zdd	 ZdS )
    N   )longbinary_typec               @   sH   e Zd ZdddZdddZdd Zd	d
 Zdd Zdd Zdd Z	dS )EntropyPoolNc             C   s   d| _ d | _d| _tj | _ydd l}|j | _d| _	W n^ t
k
r   ydd l}|j | _d| _	W n, t
k
r   dd l}|j | _d| _	Y nX Y nX td| j	 | _|d k	r| jt| d| _tj | _nd| _d| _d S )Nr             TF)
pool_indexdigest	next_byte
_threadingZLocklockhashlibZsha1hashhash_lenImportErrorshanewmd5	bytearraypoolstirseededosgetpidseed_pid)selfseedr   r   r    r   /usr/lib/python3.6/entropy.py__init__   s0    





zEntropyPool.__init__Fc             C   sr   |s| j j  zNxH|D ]@}| j| jkr,d| _|d@ }| j| j  |N  < |  jd7  _qW W d |sl| j j  X d S )Nr      r   )r   acquirer	   r   r   release)r   ZentropyZalready_lockedcbr   r   r   r   7   s    

zEntropyPool.stirc             C   s   | j  s| jtj krytjd}W n` tk
r   y*tddd}z|jd}W d |j  X W n  tk
r~   t	t
j
 }Y nX Y nX d| _ tj | _d | _t|}| j|d d S )Nr   z/dev/urandomrbr   T)r   r   r   r   urandom	Exceptionopenreadclosestrtimer
   r   r   )r   r   rr   r   r   _maybe_seedE   s     
zEntropyPool._maybe_seedc          
   C   s   | j j  zr| j  | jd ks*| j| jkr`| jjt| j	 t
| jj | _| j| jd d| _| j| j }|  jd7  _W d | j j  X |S )NTr   r   )r   r"   r/   r
   r   r   r   updater   r   r   r   r#   )r   valuer   r   r   random_8X   s    
zEntropyPool.random_8c             C   s   | j  d | j   S )N   )r2   )r   r   r   r   	random_16g   s    zEntropyPool.random_16c             C   s   | j  d | j   S )Ni   )r4   )r   r   r   r   	random_32j   s    zEntropyPool.random_32c             C   sl   || d }|t dkr td|dkr8| j}t d}n|dkrL| j}d}n
| j}d}|||  |d   S )	Nr   l        ztoo bigi   l    r3   i  r!   )r   
ValueErrorr5   r4   r2   )r   firstlastsizeZrandmaxr   r   r   random_betweenm   s    
zEntropyPool.random_between)N)F)
__name__
__module____qualname__r    r   r/   r2   r4   r5   r;   r   r   r   r   r      s   

r   c               C   s    t d k	rt jddS tj S d S )Nr   i   )system_random	randranger   r4   r   r   r   r   r4      s    r4   c             C   s(   t d k	rt j| |d S tj| |S d S )Nr   )r?   r@   r   r;   )r7   r8   r   r   r   between   s    rA   )r   Zrandomr-   Z_compatr   r   Z	threadingr   r   Zdummy_threadingobjectr   r   ZSystemRandomr?   r(   r4   rA   r   r   r   r   <module>   s   b
