
    'j	                     n    d Z ddlZddlZddlmZ ddlmZmZmZ  G d d          Z G d d          Z	dS )	z Slack request signature verifier    Ntime)DictOptionalUnionc                       e Zd ZdefdZdS )Clockreturnc                     t                      S )Nr   )selfs    ]/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/slack_sdk/signature/__init__.pynowz	Clock.now
   s    vv    N)__name__
__module____qualname__floatr    r   r   r	   r	   	   s/        U      r   r	   c                       e Zd Z e            fdedefdZdeeef         deeef         de	fdZ
deeef         ded	ede	fd
Zdedeeef         dee         fdZdS )SignatureVerifiersigning_secretclockc                 "    || _         || _        dS )aA  Slack request signature verifier

        Slack signs its requests using a secret that's unique to your app.
        With the help of signing secrets, your app can more confidently verify
        whether requests from us are authentic.
        https://docs.slack.dev/authentication/verifying-requests-from-slack/
        N)r   r   )r   r   r   s      r   __init__zSignatureVerifier.__init__   s     -


r   bodyheadersr
   c                     |dS d |                                 D             }|                     ||                    dd          |                    dd                    S )(Verifies if the given signature is validNFc                 >    i | ]\  }}|                                 |S r   )lower).0kvs      r   
<dictcomp>z6SignatureVerifier.is_valid_request.<locals>.<dictcomp>"   s&    GGGtq!aggiiGGGr   zx-slack-request-timestampzx-slack-signature)r   	timestamp	signature)itemsis_validget)r   r   r   normalized_headerss       r   is_valid_requestz"SignatureVerifier.is_valid_request   sp     ?5GGw}}GGG}}(,,-H$OO(,,-@$GG  
 
 	
r   r%   r&   c                     ||dS t          | j                                        t          |          z
            dk    rdS |                     ||          }|dS t          j        ||          S )r   NFi,  )r%   r   )absr   r   intgenerate_signaturehmaccompare_digest)r   r   r%   r&   calculated_signatures        r   r(   zSignatureVerifier.is_valid)   s|     	 15tz~~#i..011F::5#66QU6VV'5"#7CCCr   c                V   |dS |d}t          |t                    r|                    d          }t                              d| d|           }t                              | j                  }t          j        ||t          j	                  
                                }d| }|S )zGenerates a signatureN zutf-8zv0::zv0=)
isinstancebytesdecodestrencoder   r0   newhashlibsha256	hexdigest)r   r%   r   
format_reqencoded_secretrequest_hashr2   s          r   r/   z$SignatureVerifier.generate_signature;   s    4<DdE"" 	(;;w''DZZ 8i 8 8$ 8 899
D$788x
GNKKUUWW3\33##r   N)r   r   r   r	   r9   r   r   r7   r   boolr+   r(   r   r/   r   r   r   r   r      s	       ;@577 	 	s 	5 	 	 	 	
CJ
 c3h
 
	
 
 
 
DCJD D 	D
 
D D D D$$s $%U
:K $PXY\P] $ $ $ $ $ $r   r   )
__doc__r<   r0   r   typingr   r   r   r	   r   r   r   r   <module>rE      s    & &         ( ( ( ( ( ( ( ( ( (       
:$ :$ :$ :$ :$ :$ :$ :$ :$ :$r   