ó
BwLc           @   sN   d  Z  d g Z d d l Z d d l m Z d e f d     YZ d   Z d S(   s   $Id$t
   WindowsRNGi˙˙˙˙N(   t   BaseRNGc           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s   <CryptGenRandom>c         C   s    t  j   |  _ t j |   d  S(   N(   t	   winrandomt   newt   _WindowsRNG__winrandR   t   __init__(   t   self(    (    s:   /usr/lib/python2.7/dist-packages/Crypto/Random/OSRNG/nt.pyR   #   s    c         C   sS   |  j  r t d   n  |  j j d  } t |  d k sB t  t j |   d S(   s*  Work around weakness in Windows RNG.

        The CryptGenRandom mechanism in some versions of Windows allows an
        attacker to learn 128 KiB of past and future output.  As a workaround,
        this function reads 128 KiB of 'random' data from Windows and discards
        it.

        For more information about the weaknesses in CryptGenRandom, see
        _Cryptanalysis of the Random Number Generator of the Windows Operating
        System_, by Leo Dorrendorf and Zvi Gutterman and Benny Pinkas
        http://eprint.iacr.org/2007/419
        s   I/O operation on closed filei   i   Ni   i   (   t   closedt
   ValueErrorR   t	   get_bytest   lent   AssertionErrorR   t   flush(   R   t   data(    (    s:   /usr/lib/python2.7/dist-packages/Crypto/Random/OSRNG/nt.pyR   '   s
    	c         C   s   d  |  _ d  S(   N(   t   NoneR   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/Crypto/Random/OSRNG/nt.pyt   _close:   s    c         C   s*   |  j    |  j j |  } |  j    | S(   N(   R   R   R	   (   R   t   NR   (    (    s:   /usr/lib/python2.7/dist-packages/Crypto/Random/OSRNG/nt.pyt   _read=   s    

(   t   __name__t
   __module__t   nameR   R   R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/Crypto/Random/OSRNG/nt.pyR       s
   			c          O   s   t  |  |   S(   N(   R    (   t   argst   kwargs(    (    s:   /usr/lib/python2.7/dist-packages/Crypto/Random/OSRNG/nt.pyR   G   s    (   t   __revision__t   __all__R   t   rng_baseR   R    R   (    (    (    s:   /usr/lib/python2.7/dist-packages/Crypto/Random/OSRNG/nt.pyt   <module>   s
   	(