
    ~h                     h    d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddlm	Z	  G d	 d
      Z
y)    N)OrderedDict)
json_dumps)to_bytes)
to_unicode)urlsafe_b64encode   )InvalidUseErrorc                       e Zd ZdZdZg dZg dZg dZg ZddZ	e
d        Ze
d	        Zd
 Zd Ze
d        Zd Zd Zd ZddZddZd Zed        Zed        Zy)Keyz*This is the base class for a JSON Web Key._)usekey_opsalgkidx5ux5cx5tzx5t#S256)signdecrypt	unwrapKey)verifyencryptwrapKeyNc                 (    |xs i | _         i | _        y N)options
_dict_data)selfr   s     Y/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/jose/rfc7517/base_key.py__init__zKey.__init__    s    }"    c                     | j                   s| j                          t        | j                         }| j                  |d<   | j                  D ](  }||vs|| j
                  v s| j
                  |   ||<   * |S )Nkty)r   load_dict_keydictr#   ALLOWED_PARAMSr   )r   rvks      r   tokensz
Key.tokens$   so     $//"HH5	$$ 	(A{qDLL0Q1	( 	r!   c                 8    | j                   j                  d      S )Nr   )r)   getr   s    r   r   zKey.kid0   s    {{u%%r!   c                 6    | j                   j                         S r   )r)   keysr,   s    r   r.   zKey.keys4   s    {{!!r!   c                      | j                   |   S r   )r)   )r   items     r   __getitem__zKey.__getitem__7   s    {{4  r!   c                     t               r   NotImplementedErrorr,   s    r   public_onlyzKey.public_only:       !##r!   c                     t               r   r3   r,   s    r   load_raw_keyzKey.load_raw_key>       !##r!   c                     t               r   r3   r,   s    r   r$   zKey.load_dict_keyA   r9   r!   c                 B   | j                   j                  d      }|||vrt        d| d      || j                  v r| j                  rt        d| d      | j                   j                  d      }|r)|dv r|d	k7  r
t               y|d
v r|dk7  r
t               yyy)zCheck if the given key_op is supported by this key.

        :param operation: key operation value, such as "sign", "encrypt".
        :raise: ValueError
        r   NzUnsupported key_op ""zInvalid key_op "z" for public keyr   )r   r   sig)r   r   r   r   enc)r)   r+   
ValueErrorPRIVATE_KEY_OPSr5   r	   )r   	operationr   r   s       r   check_key_opzKey.check_key_opD   s     ++//),9G#;3I;a@AA,,,1A1A/	{:JKLLkkooe$..%<)++  LL%<)++   M	 r!   c                     t               r   r3   )r   
is_privateparamss      r   as_dictzKey.as_dictZ   r9   r!   c                 >     | j                   |fi |}t        |      S )z$Represent this key as a JSON string.)rF   r   )r   rD   rE   objs       r   as_jsonzKey.as_json]   s!    dll:00#r!   c                 J   t        | j                        }|j                  d       |j                          t	               }|D ]  }| j
                  |   ||<    t        |      }t        j                  t        |            j                         }t        t        |            S )z8Implementation of RFC7638 JSON Web Key (JWK) Thumbprint.r#   )listREQUIRED_JSON_FIELDSappendsortr   r)   r   hashlibsha256r   digestr   r   )r   fieldsdatar(   	json_datadigest_datas         r   
thumbprintzKey.thumbprintb   s    d//0e} 	%Akk!nDG	% t$	nnXi%89@@B+K899r!   c                 L    | j                   D ]  }||vst        d| d       y )NzMissing required field: "r<   )rL   r?   )clsrS   r(   s      r   check_required_fieldszKey.check_required_fieldsp   s5    )) 	CA} #<QCq!ABB	Cr!   c                     t               r   r3   )rX   keys     r   validate_raw_keyzKey.validate_raw_keyv   r6   r!   r   )F)__name__
__module____qualname____doc__r#   r&   r@   PUBLIC_KEY_OPSrL   r    propertyr)   r   r.   r1   r5   r8   r$   rB   rF   rI   rV   classmethodrY   r\    r!   r   r   r      s    4
CVNO
N  	 	 & &"! $ $$$,,$
: C C
 $ $r!   r   )rO   collectionsr   authlib.common.encodingr   r   r   r   errorsr	   r   rd   r!   r   <module>rh      s&     # . , . 5 $l$ l$r!   