
    ~h
                     b    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
e      Z	y)    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                        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kc                 2    t         |   |       || _        y N)super__init__raw_key)selfr   options	__class__s      X/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/jose/rfc7518/oct_key.pyr   zOctKey.__init__   s    !    c                      y)NF r   s    r   public_onlyzOctKey.public_only   s    r   c                 t    | j                  |       | j                  s| j                          | 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                 P    t        t        | j                  d               | _        y )Nr   )r   r   tokensr   r   s    r   r   zOctKey.load_raw_key.   s    ($++c2B)CDr   c                 h    t        t        | j                              }| j                  |d| _        y )N)ktyr   )r   r   r   r#   
_dict_data)r   r   s     r   load_dict_keyzOctKey.load_dict_key1   s&    (67"&((3r   c                 n    | j                   }d|vr| j                         |d<   |j                  |       |S )Nkid)r!   
thumbprintupdate)r   
is_privateparamsr!   s       r   as_dictzOctKey.as_dict5   s4     OO-F5Mfr   c                 "    t        |t              S r   )
isinstancebytes)clskeys     r   validate_raw_keyzOctKey.validate_raw_key=   s    #u%%r   c                 ,   t        ||       r||j                  j                  |       |S t        |t              r#| j	                  |        | |      }||_        |S t        |      }|j                  t              rt        d       | ||      }|S )z.Import a key from bytes, string, or dict data.)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)r0   rawr   r1   r   s        r   
import_keyzOctKey.import_keyA   s     c3"""7+Jc4 %%c*g&C CN 
 smG !!"67 !EFFgw7C
r   c                     |st        d      |dz  dk7  rt        d      | j                  t        j                  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)r8   r:   secretstoken_bytesint)r0   key_sizer   r*   s       r   generate_keyzOctKey.generate_keyW   sP     EFFa<1;<<~~g11#hl2CDgNNr   )NN)Fr   )   NT)__name__
__module____qualname____doc__r#   REQUIRED_JSON_FIELDSr   propertyr   r   r   r%   r,   classmethodr2   r:   rA   __classcell__)r   s   @r   r
   r
      s    ,
C5  
E4 & &  * O Or   r
   )
r=   authlib.common.encodingr   r   r   r   rfc7517r   r7   r
   r   r   r   <module>rM      s/     , . 5 5  LOS LOr   