U iÛföã@s„ddddddddgZdd lZdd lZdd lZdd lmZdd lmZeƒZej Z ej Z d d„Z d Z ddd„Zddd„Zddd„Zd S)ÚchoiceÚ randbelowÚrandbitsÚ SystemRandomÚ token_bytesÚ token_hexÚ token_urlsafeÚcompare_digestéN)r)rcCs|dkrtdƒ‚t |¡S)Nr zUpper bound must be positive.)Ú ValueErrorÚ_sysrandZ _randbelow)Zexclusive_upper_bound©r ú,/opt/alt/python38/lib64/python3.8/secrets.pyrsé cCs|dkr t}t |¡S)N)ÚDEFAULT_ENTROPYÚosÚurandom©Únbytesr r r r#s cCst t|ƒ¡ d¡S)NÚascii)ÚbinasciiZhexlifyrÚdecoderr r r r1s cCst|ƒ}t |¡ d¡ d¡S)Nó=r)rÚbase64Zurlsafe_b64encodeÚrstripr)rÚtokr r r r>s )N)N)N)Ú__all__rrrZhmacrZrandomrr Z getrandbitsrrrrrrrr r r r Ú s$þ