
                             S SK r S SKrS SKrSSKJrJr   S SKr " S S\
5      r\" 5       r \R                  " 5       rS rS rg! \ a    S SK	r N7f = f! \ a    Sr N!f = f)    N   )longbinary_typec                   F    \ rS rSrSS jrSS jrS rS rS rS r	S	 r
S
rg)EntropyPool   Nc                 <   SU l         S U l        SU l        [        R                  " 5       U l         SS KnUR                  5       U l        SU l	        [        SU R                  -  5      U l        Ub<  U R!                  [        U5      5        SU l        [$        R&                  " 5       U l        g SU l        SU l        g ! [         aU     SS KnUR                  5       U l        SU l	         N! [         a$    SS KnUR                  5       U l        SU l	          Nf = ff = f)Nr             TF)
pool_indexdigest	next_byte
_threadingLocklockhashlibsha1hashhash_lenImportErrorshanewmd5	bytearraypoolstirseededosgetpidseed_pid)selfseedr   r   r   s        lib/third_party/dns/entropy.py__init__EntropyPool.__init__#   s    OO%		#DIDM edmm34	IIio&DKIIKDMDKDM!  	##GGI	 " #GGI	 "#	#s)    B< <
D C))*DDDDc                    U(       d  U R                   R                  5          U H_  nU R                  U R                  :X  a  SU l        US-  nU R                  U R                  ==   U-  ss'   U =R                  S-  sl        Ma     U(       d  U R                   R                  5         g g ! U(       d  U R                   R                  5         f f = f)Nr      r   )r   acquirer   r   r   release)r"   entropyalready_lockedcbs        r$   r   EntropyPool.stir>   s    II		$??dmm3&'DOH		$//*a/*1$  "		!!# ">		!!# "s   A%B+ +$Cc                 .   U R                   (       a#  U R                  [        R                  " 5       :w  a]   [        R                  " S5      nSU l         [        R                  " 5       U l        S U l        [        U5      nU R                  US5        g g ! [
         aw     [        SSS5      n UR                  S5      nUR                  5          N! UR                  5         f = f! [
         a"    [        [        R                  " 5       5      n  Nf = ff = f)Nr   z/dev/urandomrbr   T)r   r!   r   r    urandom	Exceptionopenreadclosestrtimer   r   r   )r"   r#   rs      r$   _maybe_seedEntropyPool._maybe_seedL   s    {{dmmryy{:
,zz"~ DKIIKDMDKT?DIIdD!! ;  ,,^T15A" vvbz		  ,tyy{+D,,sA   B 
DC$,C=C$C!!C$$(DDDDc                 j   U R                   R                  5          U R                  5         U R                  b  U R                  U R
                  :X  ay  U R                  R                  [        U R                  5      5        [        U R                  R                  5       5      U l        U R                  U R                  S5        SU l        U R                  U R                     nU =R                  S-  sl        U R                   R                  5         U$ ! U R                   R                  5         f = f)NTr   r   )r   r)   r:   r   r   r   r   updater   r   r   r   r*   )r"   values     r$   random_8EntropyPool.random_8_   s    		
	 {{"dnn&E		  TYY!78'		(8(8(:;		$++t,!"KK/ENNaNII IIs   CD D2c                 J    U R                  5       S-  U R                  5       -   $ )N   )r?   r"   s    r$   	random_16EntropyPool.random_16n   s    }}$t}}66    c                 J    U R                  5       S-  U R                  5       -   $ )N   )rD   rC   s    r$   	random_32EntropyPool.random_32q   s     ~~%'$..*:::rF   c                     X!-
  S-   nU[        S5      :  a  [        S5      eUS:  a  U R                  n[        S5      nO#US:  a  U R                  nSnOU R                  nSnXU" 5       -  US-   -  -   $ )	Nr   l        ztoo bigrH   l    rB   i  r(   )r   
ValueErrorrI   rD   r?   )r"   firstlastsizerandmaxs         r$   random_betweenEntropyPool.random_betweent   s{    |a$z""Y''%<>>Dz"CCZ>>DC==DCdf}q111rF   )	r   r   r   r   r   r   r   r!   r   )N)F)__name__
__module____qualname____firstlineno__r%   r   r:   r?   rD   rI   rR   __static_attributes__ rF   r$   r   r      s%    6$"&7;2rF   r   c                  d    [         b  [         R                  SS5      $ [        R                  5       $ )Nr   rH   )system_random	randranger   rD   rY   rF   r$   rD   rD      s(     &&q%00~~rF   c                 j    [         b  [         R                  XS-   5      $ [        R                  X5      $ )Nr   )r[   r\   r   rR   )rM   rN   s     r$   betweenr^      s.     &&uQh77""5//rF   )r   randomr8   _compatr   r   	threadingr   r   dummy_threadingobjectr   r   SystemRandomr[   r3   rD   r^   rY   rF   r$   <module>re      s{   $ 
   &)"
e2& e2N }'')M 0q  )()^  Ms"   A A 
AAA A 