
    .Ph                        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dS )    )annotationsN)quote	urlencode)constant_timehmac)SHA1SHA256SHA512)InvalidToken)BufferhotpHOTP	type_namestraccount_nameissuer
str | Noneextra_parameterslist[tuple[str, int]]returnc                x   d| j         fdt          j        | j                  fd| j        j                                        fg}||                    d|f           |                    |           |r!t          |           dt          |           nt          |          }d| d| dt          |           S )	Ndigitssecret	algorithmr   :z
otpauth:///?)_lengthbase64	b32encode_key
_algorithmnameupperappendextendr   r   )r   r   r   r   r   
parameterslabels          m/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py_generate_urir*      s     
4< 	6#DI../	do*00223J 8V,---&''' 	!5==005..000<   

 D	CCECCIj,A,ACCC    c                  <    e Zd Z	 	 dddZddZddZddZd dZdS )!r   NTkeyr   lengthintr   HOTPHashTypesbackend
typing.Anyenforce_key_lengthboolr   Nonec                \   t          |          dk     r|du rt          d          t          |t                    st	          d          |dk     s|dk    rt          d          t          |t
          t          t          f          st	          d          || _        || _	        || _
        d S )	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
isinstancer/   	TypeErrorr   r	   r
   r!   r   r"   )selfr-   r.   r   r1   r3   s         r)   __init__zHOTP.__init__.   s     s88b==/477FGGG&#&& 	IGHHHA::!HIII)dFF%;<< 	IGHHH	#r+   counterbytesc                    t          |t                    st          d          |                     |          }|d| j        z  z  }d                    || j                                                  S )Nz*Counter parameter must be an integer type.
   z{0:0{1}})r<   r/   r=   _dynamic_truncater   formatencode)r>   r@   truncated_valuer   s       r)   generatezHOTP.generateF   sl    '3'' 	JHIII0099"dl"23  t|44;;===r+   r   c                t    t          j        |                     |          |          st          d          d S )Nz#Supplied HOTP value does not match.)r   bytes_eqrH   r   )r>   r   r@   s      r)   verifyzHOTP.verifyN   s?    %dmmG&<&<dCC 	FDEEE	F 	Fr+   c                   t          j        | j        | j                  }	 |                    |                    dd                     n!# t          $ r t          dd d          w xY w|                                }|t          |          dz
           dz  }|||d	z            }t                              |d
          dz  S )Nr9   big)r.   	byteorderzCounter must be between 0 and l    .         )rN   i)r   HMACr!   r"   updateto_bytesOverflowErrorr;   finalizer:   r/   
from_bytes)r>   r@   ctx
hmac_valueoffsetps         r)   rD   zHOTP._dynamic_truncateR   s    i	4?33	LJJw''qE'BBCCCC 	L 	L 	LJiJJJKKK	L \\^^
C
OOa/069v
*+~~a5~11J>>s   *A A*r   r   r   r   c           
     H    t          | d||dt          |          fg          S )Nr   r@   )r*   r/   )r>   r   r@   r   s       r)   get_provisioning_urizHOTP.get_provisioning_uri`   s/     &,)S\\1J0K
 
 	
r+   )NT)r-   r   r.   r/   r   r0   r1   r2   r3   r4   r   r5   )r@   r/   r   rA   )r   rA   r@   r/   r   r5   )r@   r/   r   r/   )r   r   r@   r/   r   r   r   r   )__name__
__module____qualname__r?   rH   rK   rD   r^    r+   r)   r   r   -   s         ##'$ $ $ $ $0> > > >F F F F? ? ? ?
 
 
 
 
 
r+   )r   r   r   r   r   r   r   r   r   r   r   r   )
__future__r   r   typingurllib.parser   r   cryptography.hazmat.primitivesr   r   %cryptography.hazmat.primitives.hashesr   r	   r
   (cryptography.hazmat.primitives.twofactorr   cryptography.utilsr   Unionr0   r*   r   rb   r+   r)   <module>rk      s   
 # " " " " "   ) ) ) ) ) ) ) ) > > > > > > > > F F F F F F F F F F A A A A A A % % % % % %T6612D D D D48
 8
 8
 8
 8
 8
 8
 8
 8
 8
r+   