
    ([f                     X    d dl Z d dlmZ d dlmZmZmZ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     Q/var/www/piapp/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.kid.   s    {u%%%r!   c                 4    | j                                         S r   )r)   keysr,   s    r   r.   zKey.keys2   s    {!!!r!   c                     | j         |         S r   )r)   )r   items     r   __getitem__zKey.__getitem__5   s    {4  r!   c                     t                      r   NotImplementedErrorr,   s    r   public_onlyzKey.public_only8       !###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_key?   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_opB   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_dictX   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.thumbprint`   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_fieldsn   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_keyt   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      sz       44
C  N
  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     # # # # # #            % $ $ $ $ $j$ j$ j$ j$ j$ j$ j$ j$ j$ j$r!   