
    k7i
                     b    S SK r S SKJr  S SKJr  S SKJr  S SKJr  SSKJr  Sr " S	 S
\5      r	g)    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                      ^  \ rS rSrSrSrS/rSU 4S jjr\S 5       r	S r
S rS	 rSS
 jr\S 5       r\SS j5       r\SS j5       rSrU =r$ )OctKey   z"Key class of the ``oct`` key type.octkc                 0   > [         TU ]  U5        Xl        g N)super__init__raw_key)selfr   options	__class__s      V/home/james-whalen/.local/lib/python3.13/site-packages/authlib/jose/rfc7518/oct_key.pyr   OctKey.__init__   s    !    c                     g)NF r   s    r   public_onlyOctKey.public_only   s    r   c                 ~    U R                  U5        U R                  (       d  U R                  5         U R                  $ )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_keyOctKey.get_op_key"   s/     	)$||||r   c                 P    [        [        U R                  S   5      5      U l        g )Nr   )r   r   tokensr   r   s    r   r    OctKey.load_raw_key.   s    ($++c2B)CDr   c                 h    [        [        U R                  5      5      nU R                  US.U l        g )N)ktyr   )r   r   r   r(   
_dict_data)r   r   s     r   load_dict_keyOctKey.load_dict_key1   s&    (67"&((3r   c                 r    U R                   nSU;  a  U R                  5       US'   UR                  U5        U$ )Nkid)r%   
thumbprintupdate)r   
is_privateparamsr%   s       r   as_dictOctKey.as_dict5   s4     OO-F5Mfr   c                 "    [        U[        5      $ r   )
isinstancebytes)clskeys     r   validate_raw_keyOctKey.validate_raw_key=   s    #u%%r   c                 :   [        X5      (       a   Ub  UR                  R                  U5        U$ [        U[        5      (       a  U R	                  U5        U " US9nXl        U$ [        U5      nUR                  [        5      (       a  [        S5      eU " XBS9nU$ )z.Import a key from bytes, string, or dict data.)r   z"This key may not be safe to import)r   r   )
r5   r   r/   dictcheck_required_fieldsr)   r   
startswithPOSSIBLE_UNSAFE_KEYS
ValueError)r7   rawr   r8   r   s        r   
import_keyOctKey.import_keyA   s     c"""7+Jc4  %%c*g&C N 
 smG !!"677 !EFFg7C
r   c                     U(       d  [        S5      eUS-  S:w  a  [        S5      eU R                  [        R                  " [	        US-  5      5      U5      $ )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@   rB   secretstoken_bytesint)r7   key_sizer   r0   s       r   generate_keyOctKey.generate_keyW   sP     EFFa<1;<<~~g11#hl2CDgNNr   )r)   r   )NN)Fr   )   NT)__name__
__module____qualname____firstlineno____doc__r(   REQUIRED_JSON_FIELDSr   propertyr   r"   r    r*   r2   classmethodr9   rB   rJ   __static_attributes____classcell__)r   s   @r   r
   r
      s    ,
C5  
E4 & &  * O Or   r
   )
rF   authlib.common.encodingr   r   r   r   rfc7517r   r?   r
   r   r   r   <module>rY      s/     , . 5 5  LOS LOr   