
    =h!                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZ dZd Zd Zd	 Zd
 Zd Z eee      Zd Zy)    N)InvalidSignature)hashes)padding)load_pem_public_keyload_pem_private_keyi c                 (     d fd	}dfd	}||dS )Nc           	          | t        t        j                         dz        } |      }d| d || t        |      z          S )N  zv=z,d=)inttimestr)	input_strsecret_or_private_key	timestampsigner
get_signers       g/var/www/html/phonemate/phone_mate_backend/venv/lib/python3.12/site-packages/retell/lib/webhook_auth.pysignz"make_secure_webhooks.<locals>.sign   sK    DIIK$./I12I;c&S^)C"D!EFF    c                    |i }t        j                  d|      }|syt        |j                  d            }|j                  d      }|j	                  dt        t        j
                         dz              }|j	                  dt              }t        ||z
        }	|	|kD  ry |      }
 |
| t        |      z   |      S )Nzv=(\d+),d=(.*)F      r   r
   timeout)	researchr   groupgetr   FIVE_MINUTESabsr   )r   secret_or_public_key	signatureoptsmatch	poststamppost_digestr   r   
differenceverifierget_verifiers              r   verifyz$make_secure_webhooks.<locals>.verify   s    <D		+Y7A'	kk!nHH[#diikD.@*AB	((9l3Y./
 45	C	N2K@@r   )r   r)   N )r   r(   r   r)   s   ``  r   make_secure_webhooksr,      s    GA  F++r   c                       fd}|S )Nc                     t        j                  j                         | j                         z         j                         S r*   )hashlibsha256encode	hexdigest)r   secrets    r   r   z$symmetric_get_signer.<locals>.signer*   s/    ~~fmmo	0@0@0BBCMMOOr   r+   )r3   r   s   ` r   symmetric_get_signerr4   )   s    P Mr   c                       fd}|S )Nc                     t         j                  }t        j                  j	                         |      }|j                  | j	                                |j                         |k(  S )N)	digestmod)r/   r0   hmacnewr1   updater2   )r   digestalgohmac_instancer3   s       r   r'   z(symmetric_get_verifier.<locals>.verifier1   sM    ~~DAY--/0&&(F22r   r+   )r3   r'   s   ` r   symmetric_get_verifierr>   0   s    3 Or   c                       fd}|S )Nc           	         t        j                         d       }|j                  | j                         t        j                  t        j
                  t        j                               t        j                  j                        t        j                               }t        j                  |      j                         S )N)passwordmgfsalt_length)r   r1   r   r   PSSMGF1r   SHA256
MAX_LENGTHbase64	b64encodedecode)r   private_key_objr!   private_keys      r   r   z%asymmetric_get_signer.<locals>.signer;   s    .{/A/A/CdS#((KKLL1#KK22 MMO
	 	*1133r   r+   )rM   r   s   ` r   asymmetric_get_signerrN   :   s    
4 Mr   c                       fd}|S )Nc           
         t        j                               }	 |j                  t        j                  |      | j                         t        j                  t        j                  t        j                               t
        j                  j                        t        j                                y# t        $ r Y yw xY w)NrB   TF)r   r1   r)   rI   	b64decoder   rE   rF   r   rG   rH   r   )r   r;   public_key_obj
public_keys      r   r'   z)asymmetric_get_verifier.<locals>.verifierK   s    ,Z->->-@A	!!  (  "V]]_5 ' 6 6   		s   BB6 6	CCr+   )rS   r'   s   ` r   asymmetric_get_verifierrT   J   s      Or   c                 "    t        d   | ||      S )Nr)   )	symmetric)bodyapi_keyr!   s      r   r)   r)   a   s    XtWi88r   )r   r8   r   rI   r/   cryptography.exceptionsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   ,cryptography.hazmat.primitives.serializationr   r   r   r,   r4   r>   rN   rT   rV   r)   r+   r   r   <module>r]      sS    	     4 1 = b,4 ( !!57MN	9r   