
    bAj              	           d Z ddlZddlZddlZddlZddlZddlZddlmZ de	fdZ
de	de	de	de	fd	Zdde	d
e	dedefdZde	dede	fdZy)z9Small TOTP implementation for admin second-factor checks.    Nquotereturnc                      t        j                  t        j                  d            j	                  d      j                  d      S )z:Return a base32 secret compatible with authenticator apps.   ascii=)base64	b32encodesecretstoken_bytesdecoderstrip     7C:\xampp\htdocs\tradingbinance\backend\app\core\totp.pygenerate_totp_secretr      s4    G//34;;GDKKCPPr   secretaccount_nameissuerc                 L    | d| }dt        |       d|  dt        |       dS )N:zotpauth://totp/z?secret=z&issuer=z"&algorithm=SHA1&digits=6&period=30r   )r   r   r   labels       r   build_provisioning_urir      s<    ha~&E
%,
6((5=/1S	Ur   codevalid_windowc                 6   |j                         j                  dd      }|j                         rt        |      dk7  ryt	        t        j
                         dz        }t        | |dz         D ]'  }t        j                  t        | ||z         |      s' y y)N     F      T)
stripreplaceisdigitleninttimerangehmaccompare_digest_totp_at)r   r   r   
normalizedcurrent_counteroffsets         r   verify_totpr0      s    %%c2.J3z?a#7$))++,O|a'78x&0HI:V 9 r   counterc                    | ddt        |       dz  z
  dz  z  z   }t        j                  |j                               }t	        j
                  d|      }t        j                  ||t        j                        j                         }|d   dz  }t	        j                  d|||dz          d   d	z  }t        |d
z        j                  d      S )Nr	      z>Q   z>I   r   ii@B r    )r&   r
   	b32decodeupperstructpackr*   newhashlibsha1digestunpackstrzfill)r   r1   padded_secretkeymsgr>   r/   r   s           r   r,   r,   %   s    SQVq%8A$=>>M


=..0
1C
++dG
$CXXc3-446FBZ$F==vfvz:;A>KDti &&q))r   )r"   )__doc__r
   r<   r*   r   r9   r(   urllib.parser   r@   r   r   r'   boolr0   r,   r   r   r   <module>rH      s    ?       Qc Q
3 c 3 3 	 	3 	c 	$ 	*S *3 *3 *r   