Current File : //usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyo
�
Bd\Rc@s�dZddlZejddkrEejddkrEddlTnddlTddlZddlmZmZm	Z	ddl
mZdd	lm
Z
ddlZd
efd��YZdS(s$Id$i����Niii(t*(t
ceil_shiftt
exact_log2t	exact_div(tCounter(tAEStAESGeneratorcBsmeZdZejZdZdZed�edZd�Z	d�Z
d�Zd	�Zd
�Z
d�ZRS(
s)The Fortuna "generator"

    This is used internally by the Fortuna PRNG to generate arbitrary amounts
    of pseudorandom data from a smaller amount of seed data.

    The output is generated by running AES-256 in counter mode and re-keying
    after every mebibyte (2**16 blocks) of output.
    i iiticCsrtjd|jddddt�|_d|_t|j�|_t	|j
|j�|_|j|j|_
dS(Ntnbitsit
initial_valueit
little_endian(Rtnewt
block_sizetTruetcountertNonetkeyRtblock_size_shiftRtkey_sizetblocks_per_keytmax_blocks_per_requesttmax_bytes_per_request(tself((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyt__init__As
(	cCsY|jdkr(td�|j|_n|jtj|j|�j��|j�dS(NR(	RRtbRt_set_keytSHAd256RtdigestR(Rtseed((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pytreseedNs
#
cCsp|d?}|d@}g}x*t|�D]}|j|jd��q'W|j|j|��td�j|�S(Niitii��i(txrangetappendt_pseudo_random_dataRtjoin(Rtbytestnum_full_blockst	remaindertretvalti((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pytpseudo_random_dataVs

cCs.||_tj|tjd|j�|_dS(NR(RRRtMODE_CTRRt_cipher(RR((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyRcs	cCspd|ko|jkns.td��nt||j�}|j|�| }|j|j|j��|S(Nis6You cannot ask for more than 1 MiB of data per request(RtAssertionErrorRRt_generate_blocksRR(RR#t
num_blocksR&((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR!gscCs�|jdkrtd��ng}x4t|d?�D]"}|j|jj|j��q5W|d@|j>}|j|jj|j| ��t	d�j
|�S(Ns#generator must be seeded before useii�R(RRR+RR R*tencryptt_four_kiblocks_of_zerosRRR"(RR-R&R'tremaining_bytes((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR,ys  i(t__name__t
__module__t__doc__RRRRRR/RRR(RR!R,(((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR(s	
	
		
		(t__revision__tsystversion_infotCrypto.Util.py21compattCrypto.Util.py3compattstructtCrypto.Util.numberRRRtCrypto.UtilRt
Crypto.CipherRRtobjectR(((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyt<module>s&