
    U\h                         d dl Z d dlmZ d dlmZmZmZ d dlmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ d ed      fdedee   defdZd ed      fdedee   defdZdedefdZy)    N)split)AnyDictSequence)	parse_qslunquoteurlparse   )contrib)random)HOTP)OTP)TOTP     ABCDEFGHIJKLMNOPQRSTUVWXYZ234567lengthcharsreturnc                 j    | dk  rt        d      dj                  fdt        |       D              S )Nr   #Secrets should be at least 160 bits c              3   H   K   | ]  }t        j                          y w)N)r   choice).0_r   s     J/var/www/html/trade_iq/venv/lib/python3.12/site-packages/pyotp/__init__.py	<genexpr>z random_base32.<locals>.<genexpr>   s     ?A6=='?s   ")
ValueErrorjoinranger   r   s    `r   random_base32r"      s1     {>??77?v???    (   ABCDEF0123456789c                 <    | dk  rt        d      t        | |      S )Nr$   r   r!   )r   r"   r!   s     r   
random_hexr'      s"    {>??e44r#   uric                    d}d}d}i }t        t        |             }|j                  dk7  rt        d      t	        d|j
                  dd d      }t        |      dk(  r	|d   |d<   n|d   |d	<   |d   |d<   t        |j                        D ]  \  }}|d
k(  r|}|d	k(  r"d	|v r|d	   |d	   |k7  rt        d      ||d	<   5|dk(  rV|dk(  rt        j                  |d<   S|dk(  rt        j                  |d<   l|dk(  rt        j                  |d<   t        d      |dk(  r|}|dk(  rt        |      }||d<   |dk(  rt        |      |d<   |dk(  rt        |      |d<   |dk7  st        dj                  |             |dk7  r||dvrt        d      |st        d      |dk(  rt        j                   |fi |S |j"                  dk(  rt%        |fi |S |j"                  dk(  rt'        |fi |S t        d       )!z
    Parses the provisioning URI for the OTP; works for either TOTP or HOTP.

    See also:
        https://github.com/google/google-authenticator/wiki/Key-Uri-Format

    :param uri: the hotp/totp URI to parse
    :returns: OTP object
    NotpauthzNot an otpauth URIz:|%3Ar
   )maxsplitr   nameissuersecretzHIf issuer is specified in both label and parameters, it should be equal.	algorithmSHA1digestSHA256SHA512z;Invalid value for algorithm, must be SHA1, SHA256 or SHA512encoderdigitsperiodintervalcounterinitial_countimagez{} is not a valid parametersteam)         zDigits may only be 6, 7, or 8zNo secret found in URItotphotpzNot a supported OTP type)r	   r   schemer   r   pathlenr   queryhashlibsha1sha256sha512intformatr   Steamnetlocr   r   )	r(   r.   r4   r5   otp_data
parsed_uriaccountinfo_partskeyvalues	            r   	parse_urirR      sg    F G F  "H '#,'JI%-.. gzqr':QG
",Q/.q1,Q/  
 0 01 H
U(?FH_8#(:(F8T\K]afKf !kll!&HXK%,\\"("%,^^"("%,^^" !^__IGH_ZF!'HXH_#&u:HZ I(+E
H_%G^:AA#FGG5H8 '&	"9<==122 '}}V0x00F"F'h''			f	$F'h''
/
00r#   )rE   rer   typingr   r   r   urllib.parser   r   r	   r   r   compatr   r@   r   otpr   r?   r   listrI   strr"   r'   rR    r#   r   <module>r[      s      & & 5 5      !#4@b;c @# @8C= @hk @  =O8P 5s 5 5UX 5Q13 Q13 Q1r#   