o ?Og@sr gdZddlZddlZddlmZddlmZeZejZ ej Z ddZ dZ ddd Z dd d Zdd d ZdS))choice randbelowrandbits SystemRandom token_bytes token_hex token_urlsafecompare_digestN)r)rcCs |dkr tdt|S)Nr zUpper bound must be positive.) ValueError_sysrandZ _randbelow)Zexclusive_upper_boundr ./opt/alt/python310/lib64/python3.10/secrets.pyrs r cCs |durt}t|SN)DEFAULT_ENTROPYr Z randbytesnbytesr r r r"s  rcCs tt|dS)Nascii)binasciiZhexlifyrdecoderr r r r0s rcCs t|}t|ddS)N=r)rbase64Zurlsafe_b64encoderstripr)rtokr r r r=s rr)__all__rrZhmacrZrandomrr Z getrandbitsrrrrrrrr r r r s