o
    
>h                     @   s8   d dl Z d dlZd dlZddlmZ G dd deZdS )    N   )SignatureVerificationErrorc                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )UtilityNc                 C   s
   || _ d S N)client)selfr    r   x/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/razorpay/utility/utility.py__init__
   s   
zUtility.__init__c                 C   sN   t |d }t |d }t |d }d||}t | jjd }| |||S )Nrazorpay_order_idrazorpay_payment_idrazorpay_signature{}|{}   )strformatr   authverify_signature)r   
parametersorder_id
payment_idr   msgsecretr   r   r	   verify_payment_signature   s   z Utility.verify_payment_signaturec           	      C   s   d|  v r1d|  v r1d|  v r1t|d }t|d }t|d }t|d }t|d }ndS d||||}d|  v rGt|d nt| jjd	 }| |||S )
Nr   payment_link_reference_idpayment_link_statuspayment_link_idr   Fz{}|{}|{}|{}r   r   )keysr   r   r   r   r   )	r   r   r   r   r   r   r   r   r   r   r   r	   verify_payment_link_signature   s   $(z%Utility.verify_payment_link_signaturec                 C   sf   t |d }t |d }t |d }d||}d| v r$t |d nt | jjd }| |||S )z
        To consider the payment as successful and subscription as authorized 
        after the signature has been successfully verified
        razorpay_subscription_idr   r   r   r   r   )r   r   r   r   r   r   )r   r   subscription_idr   r   r   r   r   r   r	   %verify_subscription_payment_signature)   s   (z-Utility.verify_subscription_payment_signaturec                 C   s   |  |||S r   )r   )r   body	signaturer   r   r   r	   verify_webhook_signature8   s   z Utility.verify_webhook_signaturec                 C   sx   t jd dkrt|d}t|d}tj||tjd}| }t jdd dk r.| ||}nt	||}|s:t
d|S )Nr      zutf-8)keyr   	digestmod)r      r(   z&Razorpay Signature Verification Failed)sysversion_infobyteshmacnewhashlibsha256	hexdigestcompare_stringcompare_digestr   )r   r"   r#   r&   diggenerated_signatureresultr   r   r	   r   ;   s    

zUtility.verify_signaturec                 C   sH   t |t |kr
dS d}t||D ]\}}|t|t|A O }q|dkS )aX  
        Returns True if the two strings are equal, False otherwise
        The time taken is independent of the number of characters that match
        For the sake of simplicity, this function executes in constant time only
        when the two strings have the same length. It short-circuits when they
        have different lengths
        Fr   )lenzipord)r   expected_str
actual_strr5   xyr   r   r	   r1   S   s   zUtility.compare_stringr   )
__name__
__module____qualname__r
   r   r   r!   r$   r   r1   r   r   r   r	   r   	   s    
r   )r,   r.   r)   errorsr   objectr   r   r   r   r	   <module>   s
    