Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/dist-packages/Crypto/Random/Fortuna/
Upload File :
Current File : //usr/lib/python2.7/dist-packages/Crypto/Random/Fortuna/FortunaGenerator.pyc

ó
T:´Nc@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((sJ/usr/lib/python2.7/dist-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((sJ/usr/lib/python2.7/dist-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((sJ/usr/lib/python2.7/dist-packages/Crypto/Random/Fortuna/FortunaGenerator.pytpseudo_random_dataVs

cCs.||_tj|tjd|jƒ|_dS(NR(RRRtMODE_CTRRt_cipher(RR((sJ/usr/lib/python2.7/dist-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(((sJ/usr/lib/python2.7/dist-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((sJ/usr/lib/python2.7/dist-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR-ys%  i(t__name__t
__module__t__doc__RRRRRR0RRR*RR#R-(((sJ/usr/lib/python2.7/dist-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR(s	
	
		
		(t__revision__tsystversion_infotCrypto.Util.py21compattCrypto.Util.py3compattstructtCrypto.Util.numberRRRtCrypto.UtilRt
Crypto.CipherRRtobjectR(((sJ/usr/lib/python2.7/dist-packages/Crypto/Random/Fortuna/FortunaGenerator.pyt<module>s&