o
    Dfv
                     @   sH   d dl mZmZmZmZ d dlmZ ddlmZ dZ	G dd deZ
dS )	    )to_bytes
to_unicodeurlsafe_b64encodeurlsafe_b64decode)generate_token   )Key)s   -----BEGIN s   ---- BEGIN s   ssh-rsa s   ssh-dss s   ssh-ed25519 s   ecdsa-sha2-c                       s   e Zd ZdZdZdgZd fdd	Zedd Zd	d
 Z	dd Z
dd ZdddZedd ZedddZedddZ  ZS )OctKeyz"Key class of the ``oct`` key type.octkNc                    s   t  | || _d S N)super__init__raw_key)selfr   options	__class__ U/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/jose/rfc7518/oct_key.pyr      s   
zOctKey.__init__c                 C   s   dS )NFr   r   r   r   r   public_only   s   zOctKey.public_onlyc                 C   s   |  | | 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   	operationr   r   r   
get_op_key!   s   
zOctKey.get_op_keyc                 C   s   t t| jd | _d S )Nr   )r   r   tokensr   r   r   r   r   r   -   s   zOctKey.load_raw_keyc                 C   s    t t| j}| j|d| _d S )N)ktyr   )r   r   r   r   
_dict_data)r   r   r   r   r   load_dict_key0   s   zOctKey.load_dict_keyFc                 K   s(   | j }d|vr|  |d< || |S )Nkid)r   
thumbprintupdate)r   
is_privateparamsr   r   r   r   as_dict4   s
   
zOctKey.as_dictc                 C   s
   t |tS r   )
isinstancebytes)clskeyr   r   r   validate_raw_key<   s   
zOctKey.validate_raw_keyc                 C   st   t || r|dur|j| |S t |tr%| | | |d}||_|S t|}|tr2t	d| ||d}|S )z.Import a key from bytes, string, or dict data.N)r   z"This key may not be safe to import)r   r   )
r&   r   r"   dictcheck_required_fieldsr   r   
startswithPOSSIBLE_UNSAFE_KEYS
ValueError)r(   rawr   r)   r   r   r   r   
import_key@   s   



	
zOctKey.import_key   Tc                 C   s4   |st d|d dkrt d| t|d |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)r/   r1   r   )r(   key_sizer   r#   r   r   r   generate_keyV   s
   zOctKey.generate_key)NN)Fr   )r2   NT)__name__
__module____qualname____doc__r   REQUIRED_JSON_FIELDSr   propertyr   r   r   r   r%   classmethodr*   r1   r5   __classcell__r   r   r   r   r	      s"    


r	   N)authlib.common.encodingr   r   r   r   authlib.common.securityr   rfc7517r   r.   r	   r   r   r   r   <module>   s
    
