o
    ^[2h›  ã                   @   sü   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„ deƒZdS )é    )Ú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                   @   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$   úm/home/skpark/git/infrasmart_work/infrasmart/venv/lib/python3.10/site-packages/authlib/jose/rfc8037/okp_key.pyÚexchange_shared_key.   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_curve5   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_key@   ó   
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_keyE   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_keyJ   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   R   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)Ú/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   r1   r*   r   r$   r$   r$   r%   Ú<module>   s8    üü