
    piT                     2    d dl mZ d dlmZ  G d de      Zy)    )sha256)Jwtc                   V     e Zd ZdZdZdZ fdZd Zd Ze	d        Z
e	d        Z xZS )	ClientValidationJwtzIA JWT included on requests so that Twilio can verify request authenticityztwilio-pkrv;v=1RS256c                 f    t         t        |   |||| j                  d       || _        || _        y)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
        i,  )
secret_keyissuersubject	algorithmttlN)superr   __init__	ALGORITHMcredential_sidvalidation_payload)selfaccount_sidapi_key_sidr   private_keyr   	__class__s         `/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/twilio/jwt/validation/__init__.pyr   zClientValidationJwt.__init__   s?     	!41"nn 	2 	
 -"4    c                 <    t         j                  | j                  dS )N)ctykid)r   _ClientValidationJwt__CTYr   )r   s    r   _generate_headersz%ClientValidationJwt._generate_headers"   s    *009L9LMMr   c           	         | j                   j                  j                         D ci c]&  \  }}|j                         | j	                  |d      ( }}}t        | j                   j                        }|D cg c]  }||v rdj                  |||          }}dj                  |      }| j                   j                  j                  d      }| j	                  |d      }| j                  | j                   j                        xs d}dj                  |      }	| j                   j                  | j                   j                  |g}
|r|
j                  |       |
j                  d       |
j                  |	       |
j                  |       dj                  |
      }
|	| j                  |
      dS c c}}w c c}w )N,z{}:{}
& ;)hrhrqh)r   all_headersitemslower_sort_and_joinsortedsigned_headersformatjoinquery_stringsplit_hashbodymethodpathappend)r   kvr'   r,   hheaders_strr/   req_body_hashsigned_headers_strsigned_payloads              r   _generate_payloadz%ClientValidationJwt._generate_payload%   s    //;;AAC
1 GGIt**1c22
 

   7 7 F FG
 $
K NN1k!n-
 

 ii, ..;;AA#F**<=

4#:#:#?#?@FB XXn5 ##**##((
 !!+.b!01m,>2)$**^2LMMK

s   +F59 F;c                 Z    t        |t              r|S |j                  t        |            S )N)
isinstancestrr.   r+   )clsvaluesjoiners      r   r*   z"ClientValidationJwt._sort_and_joinN   s$    fc"M{{6&>**r   c                 ~    |s|S t        |t              s|j                  d      }t        |      j	                         S )Nzutf-8)r?   bytesencoder   	hexdigest)rA   	input_strs     r   r1   zClientValidationJwt._hashT   s9    )U+!((1Ii **,,r   )__name__
__module____qualname____doc__r   r   r   r   r=   classmethodr*   r1   __classcell__)r   s   @r   r   r      sJ    SEI5,N'NR + +
 - -r   r   N)hashlibr   
twilio.jwtr   r    r   r   <module>rR      s     V-# V-r   