ó
T:´Nc           @   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
   	(