Ë
    ¹2ÚiÂ  ã                  ó¸   — 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          úd/var/www/html/acx/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/hotp.pyÚ_generate_urir%      sÀ   € ð 
�4—<‘<Ð Ø	”6×#Ñ# D§I¡IÓ.Ð/Ø	�d—o‘o×*Ñ*×0Ñ0Ó2Ð3ð€Jð ÐØ×Ñ˜8 VÐ,Ô-à×ÑÐ&Ô'ñ ô �‹=ˆ/˜œ5 Ó.Ð/Ñ0ä�<Ó ð 
ð
 ˜	�{ ! E 7¨!¬I°jÓ,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„   € ô ˆs‹8�bŠ=Ð/°4Ñ7ÜÐFÓGÐGä˜&¤#Ô&ÜÐGÓHÐHà�AŠ:˜ !šÜÐHÓIÐIä˜)¤d¬F´FÐ%;Ô<ÜÐ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ˆØ " d§l¡lÑ"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-   € Ü×%Ñ% d§m¡m°GÓ&<¸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�   € Ü�i‰i˜Ÿ	™	 4§?¡?Ó3ˆØ�
‰
�7×#Ñ#¨1¸Ð#Ó>Ô?Ø—\‘\“^ˆ
àœC 
›O¨aÑ/Ñ0°6Ñ9ˆØ�v ¨¡
Ð+ˆÜ�~‰~˜a¨5ˆ~Ó1°JÑ>Ð>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À»\Ð1JÐ0Kó
ð 	
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à—‘˜T 6¨6Ð1Ñ2€ðDØ
ðDàðDð ðDð !ð	Dð
 :ðDð 	óD÷40
ò 0
r&   