§
    cÒ³g“  ã                  ó¤   — 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dS )é    )ÚannotationsN)ÚquoteÚ	urlencode)Úconstant_timeÚhmac)ÚSHA1ÚSHA256ÚSHA512)ÚInvalidTokenÚ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          úk/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/hotp.pyÚ_generate_urir)      sÝ   € ð 
�4”<Ð Ø	•6Ô# D¤IÑ.Ô.Ð/Ø	�d”oÔ*×0Ò0Ñ2Ô2Ð3ð€Jð ÐØ×Ò˜8 VÐ,Ñ-Ô-Ð-à×ÒÐ&Ñ'Ô'Ð'ð ð	!�5�‰=Œ=Ð0Ð0�5 Ñ.Ô.Ð0Ð0Ð0å�<Ñ Ô ð 
ð
 D˜	ÐCÐC EÐCÐC­I°jÑ,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ÚkeyÚbytesÚ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±   € õ ˆs‰8Œ8�bŠ=ˆ=Ð/°4Ð7Ð7ÝÐFÑGÔGÐGå˜&¥#Ñ&Ô&ð 	IÝÐGÑHÔHÐHà�AŠ:ˆ:˜ !š˜ÝÐHÑIÔIÐIå˜)¥d­FµFÐ%;Ñ<Ô<ð 	IÝÐGÑHÔHÐHàˆŒ	ØˆŒØ#ˆŒˆˆr*   Úcounterc                óè   — 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.generateE   sl   € Ý˜'¥3Ñ'Ô'ð 	JÝÐHÑIÔIÐIà×0Ò0°Ñ9Ô9ˆØ " d¤lÑ"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_eqrG   r   )r>   r   r@   s      r(   ÚverifyzHOTP.verifyM   s?   € ÝÔ% d§m¢m°GÑ&<Ô&<¸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   ÿÿÿÿ ú.é   é   é   )rM   iÿÿÿ)r   ÚHMACr    r!   ÚupdateÚto_bytesÚOverflowErrorr;   Úfinalizer:   r/   Ú
from_bytes)r>   r@   ÚctxÚ
hmac_valueÚoffsetÚps         r(   rC   zHOTP._dynamic_truncateQ   sÕ   € ÝŒi˜œ	 4¤?Ñ3Ô3ˆð	NØ�JŠJ�w×'Ò'¨q¸EÐ'ÑBÔBÑCÔCÐCÐCøÝð 	Nð 	Nð 	NÝÐL¸kÐLÐLÐLÑMÔMÐMð	Nøøøð —\’\‘^”^ˆ
à�C 
™OœO¨aÑ/Ô0°6Ñ9ˆØ�v ¨¡
Ð*Ô+ˆÝ�~Š~˜a¨5ˆ~Ñ1Ô1°JÑ>Ð>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À¹\¼\Ð1JÐ0Kñ
ô 
ð 	
r*   )NT)r,   r-   r.   r/   r   r0   r1   r2   r3   r4   r   r5   )r@   r/   r   r-   )r   r-   r@   r/   r   r5   )r@   r/   r   r/   )r   r   r@   r/   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r?   rG   rJ   rC   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   ÚUnionr0   r)   r   ra   r*   r(   ú<module>ri      sè   ðð
 #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )à >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ AÐ AÐ AÐ AÐ AÐ Aà”˜T 6¨6Ð1Ô2€ðDð Dð Dð Dð48
ð 8
ð 8
ð 8
ð 8
ñ 8
ô 8
ð 8
ð 8
ð 8
r*   