o
    yiy                     @   sl   d dl Z d dlmZmZ ddlmZmZ ddlmZm	Z	 ddl
mZ ddlmZmZ dgZG d	d dZdS )
    N)AbstractSetOptional   )JWSDecodeErrorJWSEncodeError)AbstractSigningAlgorithmsupported_signing_algorithms)AbstractJWKBase)	b64decode	b64encodeJWSc                
   @   s   e Zd ZdddZdedefddZ			dd	ed
ee	 dee
eef  defddZd	edee
eef eeef fddZ			dd	ed
ee	 deee  defddZdS )r   returnNc                 C   s   t  | _d S )N)r   _supported_algs)self r   g/var/www/snowflake_co_dev_github/snow_flake_back_end_deploy/env/lib/python3.10/site-packages/jwt/jws.py__init__(   s   zJWS.__init__algc                 C   s$   z| j | W S  ty   tdw )NUnsupported signing algorithm.)r   KeyErrorr   )r   r   r   r   r   _retrieve_alg+   s
   zJWS._retrieve_algHS256messagekeyoptional_headersc                 C   s   || j vrtd| | |}|r| ni }||d< ttj|ddd}t|}|d | }	||	d|}
t|
}|	d | S )Nzunsupported algorithm: r   ),:)
separatorsascii.)	r   r   r   copyr   jsondumpsencodesign)r   r   r   r   r   alg_implheader
header_b64message_b64signing_message	signaturesignature_b64r   r   r   r#   1   s   

z
JWS.encodec           	      C   sj   z| dd\}}|d\}}W n ty   tdw tt|d}t|}t|}||||fS )Nr   r   zmalformed JWS payloadr   )rsplitsplit
ValueErrorr   r!   loadsr
   decode)	r   r   r)   r+   r'   r(   r&   message_binr*   r   r   r   _decode_segmentsJ   s   zJWS._decode_segmentsT
algorithmsc                 C   sn   |d u rt t  }| |\}}}}|d }	|	|vr td| |	}
|r5|
|d||s5td|S )Nr   r   r   z!JWS passed could not be validated)setr   keysr2   r   r   verifyr#   )r   r   r   	do_verifyr3   r&   r1   r*   r)   	alg_valuer%   r   r   r   r0   X   s   

z
JWS.decode)r   N)Nr   N)NTN)__name__
__module____qualname__r   strr   r   bytesr   r	   dictr#   tupler2   r   r0   r   r   r   r   r   &   s@    
	


)r!   typingr   r   
exceptionsr   r   jwar   r   jwkr	   utilsr
   r   __all__r   r   r   r   r   <module>   s   