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Ú_sysrandZ _randbelow)Zexclusive_upper_bound©r ú,/opt/alt/python39/lib64/python3.9/secrets.pyrsré cCs|dur t}t |¡S)N)ÚDEFAULT_ENTROPYr Z randbytes©Únbytesr r r r"s rcCst t|ƒ¡ d¡S)NÚascii)ÚbinasciiZhexlifyrÚdecoderr r r r0s rcCst|ƒ}t |¡ d¡ d¡S)Nó=r)rÚbase64Zurlsafe_b64encodeÚrstripr)rÚtokr r r r=s r)N)N)N)Ú__all__rrZhmacrZrandomrr Z getrandbitsrrrrrrrr r r r Ú s