
    k7i                     h    S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  SSKJ	r	   " S	 S
5      r
g)    N)OrderedDict)
json_dumps)to_bytes)
to_unicode)urlsafe_b64encode   )InvalidUseErrorc                       \ rS rSrSrSr/ SQr/ SQr/ SQr/ r	SS jr
\S	 5       r\S
 5       rS rS r\S 5       rS rS rS rSS jrSS jrS r\S 5       r\S 5       rSrg)Key   z*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                 2    U=(       d    0 U l         0 U l        g N)options
_dict_data)selfr   s     W/home/james-whalen/.local/lib/python3.13/site-packages/authlib/jose/rfc7517/base_key.py__init__Key.__init__    s    }"    c                    U R                   (       d  U R                  5         [        U R                   5      nU R                  US'   U R                   H,  nX!;  d  M
  X R
                  ;   d  M  U R
                  U   X'   M.     U$ )Nkty)r   load_dict_keydictr%   ALLOWED_PARAMSr   )r   rvks      r    tokens
Key.tokens$   sd     $//"HH5	$$A{qLL0Q % 	r#   c                 8    U R                   R                  S5      $ )Nr   )r+   getr   s    r    r   Key.kid0   s    {{u%%r#   c                 6    U R                   R                  5       $ r   )r+   keysr/   s    r    r2   Key.keys4   s    {{!!r#   c                      U R                   U   $ r   )r+   )r   items     r    __getitem__Key.__getitem__7   s    {{4  r#   c                     [        5       er   NotImplementedErrorr/   s    r    public_onlyKey.public_only:       !##r#   c                     [        5       er   r9   r/   s    r    load_raw_keyKey.load_raw_key>       !##r#   c                     [        5       er   r9   r/   s    r    r&   Key.load_dict_keyA   rA   r#   c                 h   U R                   R                  S5      nUb  X;  a  [        SU S35      eXR                  ;   a   U R                  (       a  [        SU S35      eU R                   R                  S5      nU(       a/  US;   a  US	:w  a
  [        5       egUS
;   a  US:w  a
  [        5       eggg)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_OPSr;   r	   )r   	operationr   r   s       r    check_key_opKey.check_key_opD   s     ++//),9#;3I;a@AA,,,1A1A/	{:JKLLkkooe$..%<)++  LL%<)++   M	 r#   c                     [        5       er   r9   )r   
is_privateparamss      r    as_dictKey.as_dictZ   rA   r#   c                 >    U R                   " U40 UD6n[        U5      $ )z$Represent this key as a JSON string.)rP   r   )r   rN   rO   objs       r    as_jsonKey.as_json]   s    ll:00#r#   c                 N   [        U R                  5      nUR                  S5        UR                  5         [	        5       nU H  nU R
                  U   X#'   M     [        U5      n[        R                  " [        U5      5      R                  5       n[        [        U5      5      $ )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    
thumbprintKey.thumbprintb   s    d//0e}Akk!nDG  t$	nnXi%89@@B+K899r#   c                 R    U R                    H  nX!;  d  M
  [        SU S35      e   g )NzMissing required field: "rE   )rX   rH   )clsr_   r*   s      r    check_required_fieldsKey.check_required_fieldsp   s,    ))A} #<QCq!ABB *r#   c                     [        5       er   r9   )re   keys     r    validate_raw_keyKey.validate_raw_keyv   r=   r#   )r   r   r   )F)__name__
__module____qualname____firstlineno____doc__r%   r(   rI   PUBLIC_KEY_OPSrX   r!   propertyr+   r   r2   r6   r;   r?   r&   rK   rP   rT   rb   classmethodrf   rj   __static_attributes__ r#   r    r   r      s    4
CVNO
N  	 	 & &"! $ $$$,,$
: C C
 $ $r#   r   )r[   collectionsr   authlib.common.encodingr   r   r   r   errorsr	   r   ru   r#   r    <module>ry      s&     # . , . 5 $l$ l$r#   