B
    ë?[  ã               @   sV   d Z dgZddlZddlZddlZddlmZ ddlmZ G dd„ deƒZ	dd	„ Z
dS )
z$Id$ÚDevURandomRNGé    Né   )ÚBaseRNG)Úbc               @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	r   Nc             C   sn   |d krd| _ n|| _ t| j ddƒ}t | ¡ ¡tj }t |¡sZ| ¡  t	d| j f ƒ‚|| _
t | ¡ d S )Nz/dev/urandomÚrbr   z$%r is not a character special device)ÚnameÚopenÚosÚfstatÚfilenoÚstatÚST_MODEÚS_ISCHRÚcloseÚ	TypeErrorÚ_DevURandomRNG__filer   Ú__init__)ÚselfZdevnameÚfZfmode© r   ú8lib/python3.7/site-packages/Crypto/Random/OSRNG/posix.pyr   %   s    
zDevURandomRNG.__init__c             C   s   | j  ¡  d S )N)r   r   )r   r   r   r   Ú_close6   s    zDevURandomRNG._closec          
   C   sŽ   t dƒ}x€t|ƒ|k rˆy| j |t|ƒ ¡}W n2 tk
r` } z|jtjkrNw
‚ W d d }~X Y nX |d krn|S t|ƒdkr~|S ||7 }q
W |S )NÚ r   )r   Úlenr   ÚreadÚIOErrorÚerrnoZEINTR)r   ÚNÚdataÚdÚer   r   r   Ú_read9   s    zDevURandomRNG._read)N)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r   r   r   r   r   #   s   
c              O   s
   t | |ŽS )N)r   )ÚargsÚkwargsr   r   r   ÚnewR   s    r'   )Z__revision__Ú__all__r   r	   r   Zrng_baser   ZCrypto.Util.py3compatr   r   r'   r   r   r   r   Ú<module>   s   /