
    !<i
                     j    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	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                        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      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.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_key1   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_dict5   s>     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                 h   t          ||           r||j                            |           |S t          |t                    r)|                     |            | |          }||_        nEt          |          }|                    t                    rt          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)r0   rawr   r1   r   s        r   
import_keyzOctKey.import_keyA   s     c3 	"""7+++Jc4   	8%%c***#g&&&C CNNsmmG !!"677 G !EFFF#gw777C
r      Tc                     |st          d          |dz  dk    rt          d          |                     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   se      	GEFFFa<1;<<<~~g1#hl2C2CDDgNNNr   )NN)Fr   )r;   NT)__name__
__module____qualname____doc__r#   REQUIRED_JSON_FIELDSr   propertyr   r   r   r%   r,   classmethodr2   r:   rB   __classcell__)r   s   @r   r
   r
      s       ,,
C5        X
 
 
E E E4 4 4    & & [&    [* O O O [O O O O Or   r
   )
r>   authlib.common.encodingr   r   r   r   rfc7517r   r7   r
   r   r   r   <module>rM      s     , , , , , , . . . . . . 5 5 5 5 5 5 5 5 5 5 5 5       LO LO LO LO LOS LO LO LO LO LOr   