o !Qçdôã@sr gd¢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 |dkr tdƒ‚t |¡S)Nr zUpper bound must be positive.)Ú ValueErrorÚ_sysrandZ _randbelow)Zexclusive_upper_bound©r ú./opt/alt/python310/lib64/python3.10/secrets.pyrs ré cCs |durt}t |¡S©N)ÚDEFAULT_ENTROPYr Z randbytes©Únbytesr r r r"s  rcCs t t|ƒ¡ d¡S)NÚascii)ÚbinasciiZhexlifyrÚdecoderr r r r0s rcCs t|ƒ}t |¡ d¡ d¡S)Nó=r)rÚbase64Zurlsafe_b64encodeÚrstripr)rÚtokr r r r=s rr)Ú__all__rrZhmacrZrandomrr Z getrandbitsrrrrrrrr r r r Ús