o
    �¨ÊhD  ã                   @   s8   d dl mZ d dlmZ d dlmZ G dd„ deƒZdS )é    )Úsha256)Ústring_types)ÚJwtc                       sL   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Zed	d
„ ƒZ	edd„ ƒZ
‡  ZS )ÚClientValidationJwtzIA JWT included on requests so that Twilio can verify request authenticityztwilio-pkrv;v=1c                    s*   t t| ƒj|||ddd� || _|| _dS )aû  
        Create a new ClientValidationJwt
        :param str account_sid: A Twilio Account Sid starting with 'AC'
        :param str api_key_sid: A Twilio API Key Sid starting with 'SK'
        :param str credential_sid: A Credential Sid starting with 'CR',
                                   public key Twilio will use to verify the JWT.
        :param str private_key: The private key used to sign the JWT.
        :param ValidationPayload validation_payload: information from the request to sign
        ÚRS256i,  )Ú
secret_keyÚissuerÚsubjectÚ	algorithmÚttlN)Úsuperr   Ú__init__Úcredential_sidÚvalidation_payload)ÚselfÚaccount_sidÚapi_key_sidr   Úprivate_keyr   ©Ú	__class__© úP/var/www/html/env/lib/python3.10/site-packages/twilio/jwt/validation/__init__.pyr      s   

û
zClientValidationJwt.__init__c                 C   s   t j| jdœS )N)ÚctyÚkid)r   Ú_ClientValidationJwt__CTYr   ©r   r   r   r   Ú_generate_headers   s   þz%ClientValidationJwt._generate_headersc                    sÐ   ‡fdd„ˆj j ¡ D ƒ‰ tˆj jƒ}‡ fdd„|D ƒ}d |¡}ˆj j d¡}ˆ |d¡}ˆ 	ˆj j
¡p6d}d |¡}ˆj jˆj j|g}|rL| |¡ | d¡ | |¡ | |¡ d |¡}|ˆ 	|¡d	œS )
Nc                    s"   i | ]\}}|  ¡ ˆ  |d ¡“qS )ú,)ÚlowerÚ_sort_and_join)Ú.0ÚkÚvr   r   r   Ú
<dictcomp>'   s   " z9ClientValidationJwt._generate_payload.<locals>.<dictcomp>c                    s$   g | ]}|ˆ v rd   |ˆ | ¡‘qS )z{}:{})Úformat)r    Úh)Úall_headersr   r   Ú
<listcomp>,   s   $ z9ClientValidationJwt._generate_payload.<locals>.<listcomp>Ú
ú&Ú ú;)ÚhrhÚrqh)r   r&   ÚitemsÚsortedÚsigned_headersÚjoinÚquery_stringÚsplitr   Ú_hashÚbodyÚmethodÚpathÚappend)r   r0   Úheaders_strr2   Úreq_body_hashÚsigned_headers_strÚsigned_payloadr   )r&   r   r   Ú_generate_payload%   s*   

ý




þz%ClientValidationJwt._generate_payloadc                 C   s   t |tƒr|S | t|ƒ¡S )N)Ú
isinstancer   r1   r/   )r   ÚvaluesÚjoinerr   r   r   r   J   s   
z"ClientValidationJwt._sort_and_joinc                 C   s(   |s|S t |tƒs| d¡}t|ƒ ¡ S )Nzutf-8)r>   ÚbytesÚencoder   Ú	hexdigest)r   Ú	input_strr   r   r   r4   P   s
   

zClientValidationJwt._hash)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r=   Úclassmethodr   r4   Ú__classcell__r   r   r   r   r      s    %
r   N)Úhashlibr   Úsixr   Ú
twilio.jwtr   r   r   r   r   r   Ú<module>   s    