ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ Bd\Rc@sdZddlZejddkrEejddkrEddlTnddlTddlZddlmZmZm Z ddl m Z dd l m Z ddlZd efd YZdS( s$Id$iNiii(t*(t ceil_shiftt exact_log2t exact_div(tCounter(tAESt AESGeneratorcBsmeZdZejZdZd ZededZdZ dZ dZ d 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 iisicCsrtjd|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((sY/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyt__init__As ( cCsY|jdkr(td|j|_n|jtj|j|j|jdS(Ns( RRtbRt_set_keytSHAd256R tdigestR (Rtseed((sY/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pytreseedNs # cCsp|d?}|d@}g}x*t|D]}|j|jdq'W|j|j|tdj|S(Niitiii(txrangetappendt_pseudo_random_dataRtjoin(Rtbytestnum_full_blockst remaindertretvalti((sY/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pytpseudo_random_dataVs  cCs.||_tj|tjd|j|_dS(NR (RRR tMODE_CTRR t_cipher(RR((sY/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyRcs cCspd|ko|jkns.tdnt||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%((sY/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR gs cCs|jdkrtdng}x4t|d?D]"}|j|jj|jq5W|d@|j>}|j|jj|j| t dj |S(Ns#generator must be seeded before usei iR( RRR*RRR)tencryptt_four_kiblocks_of_zerosRRR!(RR,R%R&tremaining_bytes((sY/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR+ys  i(t__name__t __module__t__doc__RR RRRR.RRR'RR R+(((sY/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyR(s     (t __revision__tsyst version_infotCrypto.Util.py21compattCrypto.Util.py3compattstructtCrypto.Util.numberRRRt Crypto.UtilRt Crypto.CipherRRtobjectR(((sY/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/Fortuna/FortunaGenerator.pyts &