Ë
    ±éä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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          úk/var/www/skyplay_api_hub/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                óÒ   — 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.   r/   r0   Ú_dynamic_truncater   ÚformatÚencode)r1   ÚcounterÚtruncated_valuer   s       r$   ÚgeneratezHOTP.generateE   s[   € Ü˜'¤3Ô'ÜÐHÓIÐIà×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.verifyM   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 # t        $ r t        dd› d�«      ‚w xY w)Nr+   Úbig)r3   Ú	byteorderzCounter must be between 0 and l   ÿÿÿÿ ú.é   é   é   )rD   iÿÿÿ)r   ÚHMACr   r   ÚupdateÚto_bytesÚOverflowErrorr-   Úfinalizer,   r/   Ú
from_bytes)r1   r<   ÚctxÚ
hmac_valueÚoffsetÚps         r$   r9   zHOTP._dynamic_truncateQ   s±   € Ü�i‰i˜Ÿ	™	 4§?¡?Ó3ˆð	NØ�J‰J�w×'Ñ'¨q¸EÐ'ÓBÔCð —\‘\“^ˆ
àœC 
›O¨aÑ/Ñ0°6Ñ9ˆØ�v ¨¡
Ð+ˆÜ�~‰~˜a¨5ˆ~Ó1°JÑ>Ð>øô ò 	NÜÐ=¸k¸]È!ÐLÓMÐMð	Nús   ¬"B ÂB-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_uri_   s(   € ô Ø�&˜,¨°)¼SÀ»\Ð1JÐ0Kó
ð 	
r&   )NT)r2   Úbytesr3   r/   r   ÚHOTPHashTypesr4   z
typing.Anyr5   ÚboolÚreturnÚNone)r<   r/   rX   rU   )r   rU   r<   r/   rX   rY   )r<   r/   rX   r/   )r    Ústrr<   r/   r   ú
str | NonerX   rZ   )Ú__name__Ú
__module__Ú__qualname__r6   r>   rA   r9   rT   © r&   r$   r   r   ,   s~   „ ð #Ø#'ð$àð$ð ð$ð !ð	$ð
 ð$ð !ð$ð 
ó$ó0>óFó?ð
Øð
Ø*-ð
Ø7Að
à	ô
r&   )r   r   r   rZ   r    rZ   r   r[   r!   zlist[tuple[str, int]]rX   rZ   )Ú
__future__r   r   ÚtypingÚurllib.parser   r   Úcryptography.hazmat.primitivesr   r   Ú%cryptography.hazmat.primitives.hashesr   r	   r
   Ú(cryptography.hazmat.primitives.twofactorr   ÚUnionrV   r%   r   r_   r&   r$   ú<module>rg      s‚   ðõ
 #ã Û ß )ç >ß FÑ FÝ Aà—‘˜T 6¨6Ð1Ñ2€ðDØ
ðDàðDð ðDð ð	Dð
 ,ðDð 	óD÷48
ò 8
r&   