3 \öã@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ƒ‚tj|ƒS)Nr zUpper bound must be positive.)Ú ValueErrorÚ_sysrandZ _randbelow)Zexclusive_upper_bound©r ú/usr/lib64/python3.6/secrets.pyrsé cCs|dkr t}tj|ƒS)N)ÚDEFAULT_ENTROPYÚosÚurandom)Únbytesr r r r#s cCstjt|ƒƒjdƒS)NÚascii)ÚbinasciiZhexlifyrÚdecode)rr r r r1s cCst|ƒ}tj|ƒjdƒjdƒS)Nó=r)rÚbase64Zurlsafe_b64encodeÚrstripr)rÚtokr r r r>s )N)N)N)Ú__all__rrrZhmacrZrandomrr Z getrandbitsrrrrrrrr r r r Ú s