o
    ^[2h¸
  ã                   @   s\   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ZG d	d
„ d
eƒZ	dS )é    N)Úto_bytes)Ú
to_unicode)Úurlsafe_b64decode)Úurlsafe_b64encodeé   )Ú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__© úm/home/skpark/git/infrasmart_work/infrasmart/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 )zäGet 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_key1   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_dict5   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_keyA   s   



	ù
zOctKey.import_keyé   Tc                 C   s:   |st dƒ‚|d dkrt dƒ‚|  t 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.   r0   ÚsecretsÚtoken_bytesÚint)r'   Úkey_sizer   r"   r   r   r   Úgenerate_keyW   s
   zOctKey.generate_key)NN)Fr   )r1   NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚREQUIRED_JSON_FIELDSr   Úpropertyr   r   r   r   r$   Úclassmethodr)   r0   r7   Ú__classcell__r   r   r   r   r      s"    


r   )
r3   Úauthlib.common.encodingr   r   r   r   Úrfc7517r   r-   r   r   r   r   r   Ú<module>   s    
