
    -hh                         / S Qr SSKrSSKJr  SSKJr  \" 5       r\R                  r\R                  r	S r
SrS
S jrS
S jrS
S	 jrg))choice	randbelowrandbitsSystemRandomtoken_bytes	token_hextoken_urlsafecompare_digest    N)r	   )r   c                 N    U S::  a  [        S5      e[        R                  U 5      $ )Nr
   zUpper bound must be positive.)
ValueError_sysrand
_randbelow)exclusive_upper_bounds    0/opt/python-3.13.8/usr/lib/python3.13/secrets.pyr   r      s(    !899455        c                 >    U c  [         n [        R                  U 5      $ N)DEFAULT_ENTROPYr   	randbytesnbytess    r   r   r   !   s     ~ f%%r   c                 4    [        U 5      R                  5       $ r   )r   hexr   s    r   r   r   /   s     v""$$r   c                     [        U 5      n[        R                  " U5      R                  S5      R	                  S5      $ )N   =ascii)r   base64urlsafe_b64encoderstripdecode)r   toks     r   r   r   <   s5     f
C##C(//5<<WEEr   r   )__all__r   hmacr	   randomr   r   getrandbitsr   r   r   r   r   r   r    r   r   <module>r(      sN      >	6 &%Fr   