a àMÒe’ã@s¢UddlZddlZddlZddlZddlZddlmZmZGdd„dƒZeƒZ eee d<z e  ¡Z Wne y|dZ Yn0edœdd„Zeeed œd d „ZdS) éN)ÚAnyÚOptionalc@sŠeZdZdeedœdd„Zeddœdd„Zeddœdd „Zdd œd d „Ze d œd d„Z e d œdd„Z e d œdd„Z e e e dœdd„Z dS)Ú EntropyPoolN)ÚseedcCspd|_d|_d|_t ¡|_t ¡|_d|_ t d|j ƒ|_ |dur`|  |¡d|_ t ¡|_n d|_ d|_dS)NréóTF)Ú pool_indexÚdigestÚ next_byteÚ threadingÚLockÚlockÚhashlibZsha1ÚhashÚhash_lenÚ bytearrayÚpoolÚ_stirÚseededÚosÚgetpidÚseed_pid)Úselfr©rú//usr/lib/python3.9/site-packages/dns/entropy.pyÚ__init__ s    zEntropyPool.__init__)ÚentropyÚreturncCsJ|D]@}|j|jkrd|_|d@}|j|j|N<|jd7_qdS)Nréÿé)rrr)rrÚcÚbrrrr0s  zEntropyPool._stircCs4|j| |¡Wdƒn1s&0YdS)N)r r)rrrrrÚstir8szEntropyPool.stir©rc CsÀ|jr|jt ¡kr¼zt d¡}Wnpty’z:tdddƒ}| d¡}Wdƒn1s^0YWn"tyŒtt   ¡ƒ  ¡}Yn0Yn0d|_t ¡|_d|_ t |ƒ}|  |¡dS)Néz /dev/urandomÚrbrT)rrrrÚurandomÚ ExceptionÚopenÚreadÚstrÚtimeÚencoder rr)rrÚrrrrÚ _maybe_seed<s ,  zEntropyPool._maybe_seedcCs–|j|| ¡|jdus&|j|jkrZ|j t|jƒ¡t |j ¡ƒ|_|  |j¡d|_|j|j}|jd7_Wdƒn1sˆ0Y|S)Nrr) r r.r r rrÚupdateÚbytesrrr)rÚvaluerrrÚrandom_8Ls  ,zEntropyPool.random_8cCs| ¡d| ¡S)Né)r2©rrrrÚ random_16XszEntropyPool.random_16cCs| ¡d| ¡S)Né)r5r4rrrÚ random_32[szEntropyPool.random_32©ÚfirstÚlastrcCsd||d}|dkrtdƒ‚|dkr0|j}d}n|dkrD|j}d}n |j}d}|||ƒ|dS) Nrlztoo bigr6lÿÿr3iÿÿr)Ú ValueErrorr7r5r2)rr9r:ÚsizeZrandÚmaxrrrÚrandom_between^s zEntropyPool.random_between)N)Ú__name__Ú __module__Ú __qualname__rr0rrr"r.Úintr2r5r7r>rrrrrs rÚ system_randomr#cCs tdurt dd¡St ¡SdS)Nrr6)rCÚ randrangerr5rrrrr5ws r5r8cCs(tdurt ||d¡St ||¡SdS)Nr)rCrDrr>)r9r:rrrÚbetween~srE)rrZrandomr r+ÚtypingrrrrÚ__annotations__Z SystemRandomrCr'rBr5rErrrrÚs T