Current File : //usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyo
�
Bd\Rc@s�dZddlZejddkrEejddkrEddlTnddlTddlmZddlZddlZddl	m
Z
ddlZddlZd	e
fd
��YZd�Zde
fd
��YZdS(s$Id$i����Niii(t*(tb2a_hex(tClockRewindWarningtFortunaPoolcBsDeZdZejZd�Zd�Zd�Zd�Zd�Z	RS(sgFortuna pool type

    This object acts like a hash object, with the following differences:

        - It keeps a count (the .length attribute) of the number of bytes that
          have been added to the pool
        - It supports a .reset() method for in-place reinitialization
        - The method to add bytes to the pool is .append(), not .update().
    cCs|j�dS(N(treset(tself((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyt__init__6scCs)|jj|�|jt|�7_dS(N(t_htupdatetlengthtlen(Rtdata((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pytappend9scCs
|jj�S(N(Rtdigest(R((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyR
=scCs=tjddkr#t|j��St|j��j�SdS(Nii(tsystversion_infoRR
tdecode(R((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyt	hexdigest@scCstj�|_d|_dS(Ni(tSHAd256tnewRR	(R((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyRFs(
t__name__t
__module__t__doc__Rtdigest_sizeRRR
RR(((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyR)s						cCsVg}d}xCtd�D]5}||@dkr?|j|�nP|d>dB}qW|S(s?Return a list of pools indexes (in range(32)) that are to be included during reseed number r.

    According to _Practical Cryptography_, chapter 10.5.2 "Pools":

        "Pool P_i is included if 2**i is a divisor of r.  Thus P_0 is used
        every reseed, P_1 every other reseed, P_2 every fourth reseed, etc."
    ii il(trangeR(trtretvaltmaskti((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pytwhich_poolsJs
tFortunaAccumulatorcBsDeZdZdZd�Zd�Zd�Zdd�Zd�Z	RS(i@g�������?cCsJd|_tj�|_d|_gtd�D]}t�^q.|_dS(Nii (	treseed_counttFortunaGeneratortAESGeneratort	generatortNonetlast_reseedRRtpools(RR((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyRus
		%cCs
d|_dS(N(R#R$(R((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyt_forget_last_reseed�scCs�tj�}|jdk	rF|j|krFtjdt�d|_n|jdj|jkr�|jdks�||j|j	kr�|j
|�n|jj|�S(Ns-Clock rewind detected. Resetting last_reseed.i(
ttimeR$R#twarningstwarnRR%R	t
min_pool_sizetreseed_intervalt_reseedR"tpseudo_random_data(Rtbytestcurrent_time((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pytrandom_data�scCs�|dkrtj�}ng}|jd7_||_xBt|j�D]1}|j|j|j��|j|j�qIWt	d�j
|�}|jj|�dS(Nit(
R#R'RR$RRR%R
RtbtjoinR"treseed(RR/tseedR((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyR,�s	cCsR|j|jt|��|j|jtt|���|j|j|�dS(N(R%RtbchrR
(Rt
source_numbertpool_numberR((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pytadd_random_event�s N(
RRR*R+RR&R0R#R,R9(((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyR_s
				
(t__revision__RRtCrypto.Util.py21compattCrypto.Util.py3compattbinasciiRR'R(tCrypto.pct_warningsRRR tobjectRRR(((sN/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.pyt<module>s&

!