
    !<i                     p    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
dS )    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dS )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                 &    |pi | _         i | _        d S N)options
_dict_data)selfr   s     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/authlib/jose/rfc7517/base_key.py__init__zKey.__init__    s    }"    c                     | j         s|                                  t          | j                   }| j        |d<   | j        D ]}||vr|| j        v r| j        |         ||<    |S )Nkty)r   load_dict_keydictr#   ALLOWED_PARAMSr   )r   rvks      r   tokensz
Key.tokens$   st     	!   $/""H5	$ 	( 	(A{{qDL00Q1	r!   c                 6    | j                             d          S )Nr   )r)   getr   s    r   r   zKey.kid0   s    {u%%%r!   c                 4    | 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                 V   | j                             d          }|||vrt          d| d          || j        v r| j        rt          d| d          | j                             d          }|r2|dv r|d	k    rt                      dS |d
v r|dk    rt                      dS dS dS )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#;#;@I@@@AAA,,,1A,K	KKKLLLkooe$$ 	,...%<<)+++  <LLL%<<)+++	, 	, ML<r!   Fc                     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'    dl:0000#r!   c                 ~   t          | j                  }|                    d           |                                 t	                      }|D ]}| j        |         ||<   t          |          }t          j        t          |                    
                                }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0e}} 	% 	%Ak!nDGGt$$	nXi%8%899@@BB+K88999r!   c                 H    | j         D ]}||vrt          d| d          d S )NzMissing required field: "r<   )rL   r?   )clsrS   r(   s      r   check_required_fieldszKey.check_required_fieldsp   sJ    ) 	C 	CA}} !AQ!A!A!ABBB 	C 	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      st       44
CVVVN  O
  N     	 	 X	 & & X&" " "! ! ! $ $ X$$ $ $$ $ $, , ,,$ $ $ $   
: : : C C [C
 $ $ [$ $ $r!   r   )rO   collectionsr   authlib.common.encodingr   r   r   r   errorsr	   r   rd   r!   r   <module>rh      s     # # # # # # . . . . . . , , , , , , . . . . . . 5 5 5 5 5 5 $ $ $ $ $ $l$ l$ l$ l$ l$ l$ l$ l$ l$ l$r!   