Current File : //usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyc
�
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 iiticCs�tjd|jddddt�|_d|_t|j�|_d|j>|jks_t	�t
|j|j�|_|j|j|jks�t	�|j
|j|_dS(Ntnbitsit
initial_valueit
little_endiani(Rtnewt
block_sizetTruetcountertNonetkeyRtblock_size_shifttAssertionErrorRtkey_sizetblocks_per_keytmax_blocks_per_requesttmax_bytes_per_request(tself((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyt__init__As(	cCsw|jdkr(td�|j|_n|jtj|j|�j��|j�t	|j�|jksst
�dS(NR(RRtbRt_set_keytSHAd256RtdigestRtlenR(Rtseed((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pytreseedNs
#
cCs�|dkst�|d?}|d@}g}x*t|�D]}|j|jd��q9W|j|j|��td�j|�S(Niiitii��i(Rtxrangetappendt_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	cCs�d|ko|jkns.td��nt||j�}|j|�| }|j|j|j��t|�|ks�t�t|j�|j	ks�t�|S(Nis6You cannot ask for more than 1 MiB of data per request(
RRRRt_generate_blocksRRRRR(RR%t
num_blocksR(((sL/usr/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR#gscCs�|jdkrtd��nd|ko8|jknsCt�g}x4t|d?�D]"}|j|jj|j��qZW|d@|j	>}|j|jj|j| ��t
d�j|�S(Ns#generator must be seeded before useiii�R (RRRRR!R"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RRRR0RRR*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&