
    ([fG	                     R    d dl mZmZmZmZ d dlmZ ddlmZ  G d de          Z	dS )    )to_bytes
to_unicodeurlsafe_b64encodeurlsafe_b64decode)generate_token   )Keyc                        e Zd ZdZdZdgZd fd	Zed             Zd Z	d Z
d	 ZddZed             Zedd            Zedd            Z xZS )OctKeyz"Key class of the ``oct`` key type.octkNc                 X    t                                          |           || _        d S N)super__init__raw_key)selfr   options	__class__s      P/var/www/piapp/venv/lib/python3.11/site-packages/authlib/jose/rfc7518/oct_key.pyr   zOctKey.__init__   s&    !!!    c                     dS )NF r   s    r   public_onlyzOctKey.public_only   s    ur   c                 p    |                      |           | j        s|                                  | j        S )zGet the raw key for the given key_op. This method will also
        check if the given key_op is supported by this key.

        :param operation: key operation value, such as "sign", "encrypt".
        :return: raw key
        )check_key_opr   load_raw_key)r   	operations     r   
get_op_keyzOctKey.get_op_key   s<     	)$$$| 	 |r   c                 ^    t          t          | j        d                             | _        d S )Nr   )r   r   tokensr   r   s    r   r   zOctKey.load_raw_key#   s$    ($+c2B)C)CDDr   c                 f    t          t          | j                            }| j        |d| _        d S )N)ktyr   )r   r   r   r$   
_dict_data)r   r   s     r   load_dict_keyzOctKey.load_dict_key&   s/    (6677"&(33r   Fc                 t    | j         }d|vr|                                 |d<   |                    |           |S )Nkid)r"   
thumbprintupdate)r   
is_privateparamsr"   s       r   as_dictzOctKey.as_dict*   s>     OO--F5Mfr   c                 ,    t          |t                    S r   )
isinstancebytes)clskeys     r   validate_raw_keyzOctKey.validate_raw_key2   s    #u%%%r   c                    t          ||           r||j                            |           |S t          |t                    r)|                     |            | |          }||_        nt          |          } | ||          }|S )z.Import a key from bytes, string, or dict data.N)r   )r   r   )r/   r   r*   dictcheck_required_fieldsr%   r   )r1   rawr   r2   r   s        r   
import_keyzOctKey.import_key6   s     c3 	"""7+++Jc4   	8%%c***#g&&&C CNNsmmG#gw777C
r      Tc                     |st          d          |dz  dk    rt          d          |                     t          |dz            |          S )z.Generate a ``OctKey`` with the given bit size.z&oct key can not be generated as public   r   zInvalid bit size for oct key)
ValueErrorr8   r   )r1   key_sizer   r+   s       r   generate_keyzOctKey.generate_keyG   sZ      	GEFFFa<1;<<<~~nX];;WEEEr   )NN)Fr   )r9   NT)__name__
__module____qualname____doc__r$   REQUIRED_JSON_FIELDSr   propertyr   r    r   r&   r-   classmethodr3   r8   r>   __classcell__)r   s   @r   r   r   	   s       ,,
C5        X
 
 
E E E4 4 4    & & [&    [  F F F [F F F F Fr   r   N)
authlib.common.encodingr   r   r   r   authlib.common.securityr   rfc7517r	   r   r   r   r   <module>rJ      s               3 2 2 2 2 2      GF GF GF GF GFS GF GF GF GF GFr   