
    +h                        d dl mZ d dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZ ej                   eeef   Z	 	 	 	 	 	 	 	 	 	 	 	 d
dZ G d	 d      Zy)    )annotationsN)quote	urlencode)constant_timehmac)SHA1SHA256SHA512)InvalidTokenHOTPc                j   d| j                   fdt        j                  | j                        fd| j                  j
                  j                         fg}||j                  d|f       |j                  |       |rt        |       dt        |       n
t        |      }d| d| dt        |       S )	Ndigitssecret	algorithmissuer:z
otpauth:///?)_lengthbase64	b32encode_key
_algorithmnameupperappendextendr   r   )hotp	type_nameaccount_namer   extra_parameters
parameterslabels          `/var/www/html/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py_generate_urir%      s     
4<< 	6##DII./	doo**0023J 8V,-&'  =/5./0<  

 	{!E7!Ij,A+BCC    c                  `    e Zd Z	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZ	 	 	 	 	 	 	 	 ddZy)r   Nc                   t        |      dk  r|du rt        d      t        |t              st	        d      |dk  s|dkD  rt        d      t        |t
        t        t        f      st	        d      || _        || _	        || _
        y )	N   Tz'Key length has to be at least 128 bits.z)Length parameter must be an integer type.      z)Length of HOTP has to be between 6 and 8.z)Algorithm must be SHA1, SHA256 or SHA512.)len
ValueError
isinstanceint	TypeErrorr   r	   r
   r   r   r   )selfkeylengthr   backendenforce_key_lengths         r$   __init__zHOTP.__init__-   s     s8b=/47FGG&#&GHHA:!HII)dFF%;<GHH	#r&   c                    | j                  |      }|d| j                  z  z  }dj                  || j                        j                         S )N
   z{0:0{1}})_dynamic_truncater   formatencode)r1   countertruncated_valuer   s       r$   generatezHOTP.generateE   sE    009"dll"23  t||4;;==r&   c                d    t        j                  | j                  |      |      st        d      y )Nz#Supplied HOTP value does not match.)r   bytes_eqr>   r   )r1   r   r<   s      r$   verifyzHOTP.verifyJ   s-    %%dmmG&<dCDEE Dr&   c                &   t        j                  | j                  | j                        }|j	                  |j                  dd             |j                         }|t        |      dz
     dz  }|||dz    }t        j                  |d      dz  S )	Nr+   big)r3   	byteorder         )rD   i)
r   HMACr   r   updateto_bytesfinalizer,   r/   
from_bytes)r1   r<   ctx
hmac_valueoffsetps         r$   r9   zHOTP._dynamic_truncateN   s    ii		4??3

7##1#>?\\^
C
Oa/069v
+~~a5~1J>>r&   c           
     8    t        | d||dt        |      fg      S )Nr   r<   )r%   r/   )r1   r    r<   r   s       r$   get_provisioning_urizHOTP.get_provisioning_uriW   s(     &,)S\1J0K
 	
r&   )NT)r2   bytesr3   r/   r   HOTPHashTypesr4   z
typing.Anyr5   boolreturnNone)r<   r/   rV   rS   )r   rS   r<   r/   rV   rW   )r<   r/   rV   r/   )r    strr<   r/   r   typing.Optional[str]rV   rX   )__name__
__module____qualname__r6   r>   rA   r9   rR    r&   r$   r   r   ,   s~     ##'$$ $ !	$
 $ !$ 
$0>
F?

*-
7K
	
r&   )r   r   r   rX   r    rX   r   rY   r!   z#typing.List[typing.Tuple[str, int]]rV   rX   )
__future__r   r   typingurllib.parser   r   cryptography.hazmat.primitivesr   r   %cryptography.hazmat.primitives.hashesr   r	   r
   (cryptography.hazmat.primitives.twofactorr   UnionrT   r%   r   r]   r&   r$   <module>re      s   
 #   ) > F F AT6612D
DD D !	D
 :D 	D40
 0
r&   