o
    Df                     @   s   d dl mZmZ d dlmZmZ d dlmZmZ d dl	m
Z
mZ d dlmZmZmZmZ d dlmZmZmZmZ ddlmZ eeee
d	Zeeeed	ZG d
d deZdS )    )Ed25519PublicKeyEd25519PrivateKey)Ed448PublicKeyEd448PrivateKey)X25519PublicKeyX25519PrivateKey)X448PublicKeyX448PrivateKey)EncodingPublicFormatPrivateFormatNoEncryption)
to_unicodeto_bytesurlsafe_b64decodeurlsafe_b64encode   )AsymmetricKey)Ed25519Ed448X25519X448c                   @   s   e Zd ZdZdZddgZeZddgZee	
 Zee
 ZdZdd Zed	d
 Zdd Zdd Zdd ZdddZeddddZdS )OKPKeyz"Key class of the ``OKP`` key type.OKPcrvxds   ssh-ed25519c                 C   s,   |   }|rt|ttfr||S td)Nz%Invalid key for exchanging shared key)get_private_key
isinstancer   r	   exchange
ValueError)selfpubkeyprivate_key r$   U/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/jose/rfc8037/okp_key.pyexchange_shared_key0   s   
zOKPKey.exchange_shared_keyc                 C   sL   t | ttfr	dS t | ttfrdS t | ttfrdS t | ttfr$dS d S )Nr   r   r   r   )	r   r   r   r   r   r   r   r   r	   )keyr$   r$   r%   get_key_curve7   s   zOKPKey.get_key_curvec                 C   *   t | jd  }tt| jd }||S )Nr   r   )PRIVATE_KEYS_MAP
_dict_datar   r   from_private_bytes)r!   crv_keyd_bytesr$   r$   r%   load_private_keyB      
zOKPKey.load_private_keyc                 C   r)   )Nr   r   )PUBLIC_KEYS_MAPr+   r   r   from_public_bytes)r!   r-   x_bytesr$   r$   r%   load_public_keyG   r0   zOKPKey.load_public_keyc                 C   s:   |  | j }| jtjtjt }tt	||d< |S )Nr   )
dumps_public_keyr#   
public_keyprivate_bytesr
   Rawr   r   r   r   )r!   objr.   r$   r$   r%   dumps_private_keyL   s   zOKPKey.dumps_private_keyNc                 C   s6   |d u r| j }|tjtj}| |tt|dS )N)r   r   )r6   public_bytesr
   r8   r   r(   r   r   )r!   r6   r3   r$   r$   r%   r5   V   s   
zOKPKey.dumps_public_keyr   Freturnc                 C   sB   |t vrtd| dt | }| }|s| }| j||dS )NzInvalid crv value: "")options)r*   r    generater6   
import_key)clsr   r>   
is_privateprivate_key_clsraw_keyr$   r$   r%   generate_key_   s   zOKPKey.generate_key)N)r   NF)r<   r   )__name__
__module____qualname____doc__ktyREQUIRED_JSON_FIELDSPUBLIC_KEY_FIELDSPRIVATE_KEY_FIELDStupler1   valuesPUBLIC_KEY_CLSr*   PRIVATE_KEY_CLSSSH_PUBLIC_PREFIXr&   staticmethodr(   r/   r4   r:   r5   classmethodrE   r$   r$   r$   r%   r   %   s$    



	r   N)1cryptography.hazmat.primitives.asymmetric.ed25519r   r   /cryptography.hazmat.primitives.asymmetric.ed448r   r   0cryptography.hazmat.primitives.asymmetric.x25519r   r   .cryptography.hazmat.primitives.asymmetric.x448r   r	   ,cryptography.hazmat.primitives.serializationr
   r   r   r   authlib.common.encodingr   r   r   r   rfc7517r   r1   r*   r   r$   r$   r$   r%   <module>   s$    