
    ~h                        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 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 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 dlmZ ddlmZ eeeedZeee
edZ G d de      Zy)    )Ed448PrivateKey)Ed448PublicKey)Ed25519PrivateKey)Ed25519PublicKey)X448PrivateKey)X448PublicKey)X25519PrivateKey)X25519PublicKey)Encoding)NoEncryption)PrivateFormat)PublicFormat)to_bytes)
to_unicode)urlsafe_b64decode)urlsafe_b64encode   )AsymmetricKey)Ed25519Ed448X25519X448c                       e Zd ZdZdZddgZeZddgZ ee	j                               Z eej                               ZdZd Zed        Zd	 Zd
 Zd ZddZeddd       Zy)OKPKeyz"Key class of the ``OKP`` key type.OKPcrvxds   ssh-ed25519c                     | j                         }|r't        |t        t        f      r|j	                  |      S t        d      )Nz%Invalid key for exchanging shared key)get_private_key
isinstancer	   r   exchange
ValueError)selfpubkeyprivate_keys      X/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/jose/rfc8037/okp_key.pyexchange_shared_keyzOKPKey.exchange_shared_key.   s?    **,:k4Dn3UV''//@AA    c                     t        | t        t        f      ryt        | t        t        f      ryt        | t
        t        f      ryt        | t        t        f      ryy )Nr   r   r   r   )	r!   r   r   r   r   r
   r	   r   r   )keys    r'   get_key_curvezOKPKey.get_key_curve5   sR    c,.?@Ano>?o/?@Am^<= >r)   c                     t         | j                  d      }t        t        | j                  d               }|j	                  |      S )Nr   r   )PRIVATE_KEYS_MAP
_dict_datar   r   from_private_bytes)r$   crv_keyd_bytess      r'   load_private_keyzOKPKey.load_private_key@   s>    "4??5#9:#HT__S-A$BC))'22r)   c                     t         | j                  d      }t        t        | j                  d               }|j	                  |      S )Nr   r   )PUBLIC_KEYS_MAPr/   r   r   from_public_bytes)r$   r1   x_bytess      r'   load_public_keyzOKPKey.load_public_keyE   s>    !$//%"89#HT__S-A$BC((11r)   c                    | j                  | j                  j                               }| j                  j                  t        j
                  t        j
                  t                     }t        t        |            |d<   |S )Nr   )
dumps_public_keyr&   
public_keyprivate_bytesr   Rawr   r   r   r   )r$   objr2   s      r'   dumps_private_keyzOKPKey.dumps_private_keyJ   se    ##D$4$4$?$?$AB""00LL-++\^
 /89C
r)   Nc                     || j                   }|j                  t        j                  t        j                        }| j                  |      t        t        |            dS )N)r   r   )r;   public_bytesr   r=   r   r,   r   r   )r$   r;   r7   s      r'   r:   zOKPKey.dumps_public_keyR   sS    J))(,,8H8HI%%j1-g67
 	
r)   c                     |t         vrt        d| d      t         |   }|j                         }|s|j                         }| j	                  ||      S )NzInvalid crv value: "")options)r.   r#   generater;   
import_key)clsr   rD   
is_privateprivate_key_clsraw_keys         r'   generate_keyzOKPKey.generate_key[   s\    &&3C5:;;*3/!**,((*G~~gw~77r)   )N)r   NF)returnr   )__name__
__module____qualname____doc__ktyREQUIRED_JSON_FIELDSPUBLIC_KEY_FIELDSPRIVATE_KEY_FIELDStupler5   valuesPUBLIC_KEY_CLSr.   PRIVATE_KEY_CLSSSH_PUBLIC_PREFIXr(   staticmethodr,   r3   r8   r?   r:   classmethodrK    r)   r'   r   r   #   s    ,
C!3<,?1134N,3356O&B  3
2

 8 8r)   r   N)/cryptography.hazmat.primitives.asymmetric.ed448r   r   1cryptography.hazmat.primitives.asymmetric.ed25519r   r   .cryptography.hazmat.primitives.asymmetric.x448r   r   0cryptography.hazmat.primitives.asymmetric.x25519r	   r
   ,cryptography.hazmat.primitives.serializationr   r   r   r   authlib.common.encodingr   r   r   r   rfc7517r   r5   r.   r   r\   r)   r'   <module>rd      sq    K J O N I H M L A E F E , . 5 5 #  	 !	 @8] @8r)   