3 bWq@sddlZddlZddlZddlmZmZy ddlZWnek rPddl ZYnXGddde Z e Z y ej ZWnek rdZYnXddZdd ZdS) N)long binary_typec@sHeZdZdddZdddZddZd d Zd d Zd dZddZ dS) EntropyPoolNcCsd|_d|_d|_tj|_yddl}|j|_d|_ Wn^t k ryddl }|j |_d|_ Wn,t k rddl }|j |_d|_ YnXYnXtd|j |_|dk r|jt|d|_tj|_n d|_d|_dS)NrTF) pool_indexdigest next_byte _threadingZLocklockhashlibZsha1hashhash_len ImportErrorshanewmd5 bytearraypoolstirseededosgetpidseed_pid)selfseedrrrr/usr/lib/python3.6/entropy.py__init__s0       zEntropyPool.__init__Fc Csr|s|jjzNxH|D]@}|j|jkr,d|_|d@}|j|j|N<|jd7_qWWd|sl|jjXdS)Nrr)r acquirer rrrelease)rZentropyZalready_lockedcbrrrr7s   zEntropyPool.stircCs|j s|jtjkrytjd}Wn`tk ry*tddd}z|jd}Wd|jXWn tk r~t t j }YnXYnXd|_tj|_d|_ t |}|j |ddS)Nrz /dev/urandomrbrT)rrrrurandom Exceptionopenreadclosestrtimer rr)rrrrrr _maybe_seedEs   zEntropyPool._maybe_seedc Cs|jjzr|j|jdks*|j|jkr`|jjt|j t |jj|_|j |jdd|_|j|j}|jd7_Wd|jj X|S)NTrr) r r"r/r r rrupdaterrrrr#)rvaluerrrrandom_8Xs   zEntropyPool.random_8cCs|jd|jS)N)r2)rrrr random_16gszEntropyPool.random_16cCs|jd|jS)Ni)r4)rrrr random_32jszEntropyPool.random_32cCsl||d}|tdkr td|dkr8|j}td}n|dkrL|j}d}n |j}d}||||dS) Nrlztoo bigilr3ir!)r ValueErrorr5r4r2)rfirstlastsizeZrandmaxrrrrandom_betweenms   zEntropyPool.random_between)N)F) __name__ __module__ __qualname__r rr/r2r4r5r;rrrrrs  rcCs tdk rtjddStjSdS)Nri) system_random randrangerr4rrrrr4s r4cCs(tdk rtj||dStj||SdS)Nr)r?r@rr;)r7r8rrrbetweensrA)rZrandomr-Z_compatrrZ threadingr rZdummy_threadingobjectrrZ SystemRandomr?r(r4rArrrrs b