a ÕDOgôã@spgd¢ZddlZddlZddlmZddlmZeƒZejZ ej Z dd„Z dZ ddd „Z dd d „Zdd d „ZdS))Ú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Ú_sysrandÚ _randbelow)Zexclusive_upper_bound©r ú/usr/lib64/python3.9/secrets.pyrsré cCs|dur t}t |¡S)N)ÚDEFAULT_ENTROPYr Ú randbytes©Únbytesr r rr"s rcCst t|ƒ¡ d¡S)NÚascii)ÚbinasciiZhexlifyrÚdecoderr r rr0s rcCst|ƒ}t |¡ d¡ d¡S)Nó=r)rÚbase64Zurlsafe_b64encodeÚrstripr)rÚtokr r rr=s r)N)N)N)Ú__all__rrÚhmacrÚrandomrr Ú getrandbitsrrrrrrrr r r rÚ s