
    ӝgh                        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 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)Buffer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          q/var/www/enzed_healthcare/enzed_env/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                    t        |t              st        d      | j                  |      }|d| j                  z  z  }dj                  || j                        j                         S )Nz*Counter parameter must be an integer type.
   z{0:0{1}})r/   r0   r1   _dynamic_truncater   formatencode)r2   countertruncated_valuer   s       r%   generatezHOTP.generateF   s[    '3'HII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   )r2   r   r=   s      r%   verifyzHOTP.verifyN   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 # t        $ r t        dd d      w xY w)Nr,   big)r4   	byteorderzCounter must be between 0 and l    .         )rE   i)r   HMACr   r   updateto_bytesOverflowErrorr.   finalizer-   r0   
from_bytes)r2   r=   ctx
hmac_valueoffsetps         r%   r:   zHOTP._dynamic_truncateR   s    ii		4??3	LJJw''qE'BC \\^
C
Oa/069v
+~~a5~1J>>  	L=i[JKK	Ls   "B B-c           
     8    t        | d||dt        |      fg      S )Nr   r=   )r&   r0   )r2   r!   r=   r   s       r%   get_provisioning_urizHOTP.get_provisioning_uri`   s(     &,)S\1J0K
 	
r'   )NT)r3   r   r4   r0   r   HOTPHashTypesr5   z
typing.Anyr6   boolreturnNone)r=   r0   rX   bytes)r   rZ   r=   r0   rX   rY   )r=   r0   rX   r0   )r!   strr=   r0   r   
str | NonerX   r[   )__name__
__module____qualname__r7   r?   rB   r:   rU    r'   r%   r   r   -   s~     ##'$$ $ !	$
 $ !$ 
$0>F?

*-
7A
	
r'   )r   r   r    r[   r!   r[   r   r\   r"   zlist[tuple[str, int]]rX   r[   )
__future__r   r   typingurllib.parser   r   cryptography.hazmat.primitivesr   r   %cryptography.hazmat.primitives.hashesr   r	   r
   (cryptography.hazmat.primitives.twofactorr   cryptography.utilsr   UnionrV   r&   r   r`   r'   r%   <module>ri      s   
 #   ) > F F A %T6612D
DD D 	D
 ,D 	D48
 8
r'   