§
    Ètºf´  ã                   óÖ   — d Z ddlZddlZddlZ eedd¦  «        Zej        Z G d„ de	¦  «        Z
 G d„ de	¦  «        Z G d„ d	¦  «        Z e¦   «         Zej        Zej        Z[g d
¢ZdS )zQ
Cryptographically secure random implementation, with fallback on normal random.
é    NÚgetrandbitsc                   ó   — e Zd ZdZdS )ÚSecureRandomNotAvailablezD
    Exception raised when no secure random algorithm is found.
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úW/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/python/randbytes.pyr   r      ó   € € € € € ðð ð ð r   r   c                   ó   — e Zd ZdZdS )ÚSourceNotAvailablezQ
    Internal exception used when a specific random source is not available.
    Nr   r   r   r   r   r      r   r   r   c                   ó–   — e Zd ZdZdZeZdedefd„Zddede	defd„Z
dedefd	„Zej        Z ed
d
¦  «        Zdedefd„Zdedefd„ZdS )ÚRandomFactoryzù
    Factory providing L{secureRandom} and L{insecureRandom} methods.

    You shouldn't have to instantiate this class, use the module level
    functions instead: it is an implementation detail and could be removed or
    changed arbitrarily.
    r   ÚnbytesÚreturnc                 ó|   — 	 t          j        |¦  «        S # t          t          f$ r}t	          |¦  «        ‚d}~ww xY w)zO
        Wrapper around C{os.urandom} that cleanly manage its absence.
        N)ÚosÚurandomÚAttributeErrorÚNotImplementedErrorr   )Úselfr   Úes      r   Ú
_osUrandomzRandomFactory._osUrandom-   sJ   € ð	(Ý”:˜fÑ%Ô%Ð%øÝÕ 3Ð4ð 	(ð 	(ð 	(Ý$ QÑ'Ô'Ð'øøøøð	(øøøs   ‚ –;§6¶;FÚfallbackc                 óÒ   — 	 |                       |¦  «        S # t          $ r Y nw xY w|r1t          j        dt          d¬¦  «         |                      |¦  «        S t          d¦  «        ‚)ak  
        Return a number of secure random bytes.

        @param nbytes: number of bytes to generate.
        @type nbytes: C{int}
        @param fallback: Whether the function should fallback on non-secure
            random or not.  Default to C{False}.
        @type fallback: C{bool}

        @return: a string of random bytes.
        @rtype: C{str}
        zPurandom unavailable - proceeding with non-cryptographically secure random sourceé   )ÚcategoryÚ
stacklevelz!No secure random source available)r   r   ÚwarningsÚwarnÚRuntimeWarningÚinsecureRandomr   )r   r   r   s      r   ÚsecureRandomzRandomFactory.secureRandom6   sŽ   € ð	Ø—?’? 6Ñ*Ô*Ð*øÝ!ð 	ð 	ð 	ØˆDð	øøøð ð 		PÝŒMðMå'Øð	ñ ô ð ð ×&Ò& vÑ.Ô.Ð.å*Ð+NÑOÔOÐOó   ‚ —
$£$c                 ó’   — | j         �2|                       |dz  ¦  «        }d|dz  z  |z  }t          |¦  «        S t          d¦  «        ‚)z3
        Wrapper around C{os.getrandbits}.
        Né   z%%0%dxr   z#random.getrandbits is not available)r   Ú_fromhexr   )r   r   ÚnÚhexBytess       r   Ú	_randBitszRandomFactory._randBitsS   sT   € ð ÔÐ'Ø× Ò  ¨!¡Ñ,Ô,ˆAØ  F¨Q¡JÑ/°1Ñ4ˆHÝ˜HÑ%Ô%Ð%Ý Ð!FÑGÔGÐGr   r   c                 ó`   ‡ — d                      ˆ fd„t          |¦  «        D ¦   «         ¦  «        S )z6
        Wrapper around the C{random} module.
        r   c                 ó^   •— g | ])}t          t          j        ‰j        ¦  «        g¦  «        ‘Œ*S r   )ÚbytesÚrandomÚchoiceÚ_BYTES)Ú.0Úir   s     €r   ú
<listcomp>z-RandomFactory._randModule.<locals>.<listcomp>d   s0   ø€ ÐTÐTÐTÀ�¥¤¨d¬kÑ :Ô :Ð;Ñ<Ô<ÐTÐTÐTr   )ÚjoinÚrange©r   r   s   ` r   Ú_randModulezRandomFactory._randModule`   s2   ø€ ð �xŠxÐTÐTÐTÐTÅeÈFÁmÄmÐTÑTÔTÑUÔUÐUr   c                 óx   — 	 |                       |¦  «        S # t          $ r Y nw xY w|                      |¦  «        S )zÒ
        Return a number of non secure random bytes.

        @param nbytes: number of bytes to generate.
        @type nbytes: C{int}

        @return: a string of random bytes.
        @rtype: C{str}
        )r-   r   r:   r9   s     r   r%   zRandomFactory.insecureRandomf   sM   € ð	Ø—>’> &Ñ)Ô)Ð)øÝ!ð 	ð 	ð 	ØˆDð	øøøà×Ò Ñ'Ô'Ð'r'   N)F)r   r   r	   r
   ÚrandomSourcesr   Úintr0   r   Úboolr&   r-   Ú	maketransÚ
_maketransr3   r:   r%   r   r   r   r   r      s  € € € € € ðð ð €Mà€Kð( ð (¨ð (ð (ð (ð (ðPð P 3ð P°$ð PÀ5ð Pð Pð Pð Pð:H ð H¨ð Hð Hð Hð Hð ”€JØˆZ˜˜SÑ!Ô!€FðV #ð V¨%ð Vð Vð Vð Vð( Sð (¨Uð (ð (ð (ð (ð (ð (r   r   )r&   r%   r   )r
   r   r1   r"   Úgetattrr   r0   Úfromhexr*   ÚRuntimeErrorr   r   r   Úfactoryr&   r%   Ú__all__r   r   r   ú<module>rF      sý   ðð
ð ð
 
€	€	€	Ø €€€Ø €€€àˆg�f˜m¨TÑ2Ô2€àŒ=€ðð ð ð ð ˜|ñ ô ð ðð ð ð ð ˜ñ ô ð ðU(ð U(ð U(ð U(ð U(ñ U(ô U(ð U(ðp ˆ-‰/Œ/€àÔ#€àÔ'€àð IÐ
HÐ
H€€€r   