o
    b[                     @   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 dd	lmZmZ eeee
d
Zeeeed
Zee Zee 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)Key   )
import_key
export_key)Ed25519Ed448X25519X448c                   @   s   e Zd ZdZdZddgZeeee	e
eeefZdddZd	d
 Zedd Zedd Zedd Zedd Zedd Zedd ZedddZedddZdS )OKPKeyz"Key class of the ``OKP`` key type.ZOKPcrvxFNc                 C   s   t | ||dS )zExport key into PEM format bytes.

        :param is_private: export private key or public key
        :param password: encrypt private key with password
        :return: bytes
        )
is_privatepassword)r   )selfr   r    r    [/var/www/secure340b-portal/env/lib/python3.10/site-packages/authlib/jose/rfc8037/okp_key.pyas_pem4   s   zOKPKey.as_pemc                 C   s$   t | jttfr| j|S td)Nz%Invalid key for exchanging shared key)
isinstanceraw_keyr   r	   Zexchange
ValueError)r   Zpubkeyr    r    r!   exchange_shared_key=   s   zOKPKey.exchange_shared_keyc                 C   s   t  N)NotImplementedError)r   r    r    r!   curve_key_sizeC   s   zOKPKey.curve_key_sizec                 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_curveG   s   zOKPKey.get_key_curvec                 C   &   t | d  }tt| d }||S )Nr   d)PRIVATE_KEYS_MAPr   r   Zfrom_private_bytes)objcrv_keyd_bytesr    r    r!   loads_private_keyR      
zOKPKey.loads_private_keyc                 C   r,   )Nr   r   )PUBLIC_KEYS_MAPr   r   Zfrom_public_bytes)r/   r0   x_bytesr    r    r!   loads_public_keyX   r3   zOKPKey.loads_public_keyc                 C   s6   t |  }| tjtjt }tt	||d< |S )Nr-   )
r   dumps_public_key
public_keyZprivate_bytesr
   Rawr   r   r   r   )r$   r/   r1   r    r    r!   dumps_private_key^   s   zOKPKey.dumps_private_keyc                 C   s(   |  tjtj}t| tt|dS )N)r   r   )public_bytesr
   r9   r   r   r+   r   r   )r$   r5   r    r    r!   r7   i   s   
zOKPKey.dumps_public_keyc                 C   s   t | |ttd|S )z#Import a key from PEM or dict data.s   ssh-ed25519)r   PUBLIC_KEY_TUPLEPRIVATE_KEY_TUPLE)clsrawoptionsr    r    r!   r   q   s
   zOKPKey.import_keyr   c                 C   s@   |t vrtd|t | }| }|s| }| j||dS )NzInvalid crv value: "{}")r@   )r.   r%   formatgenerater8   r   )r>   r   r@   r   Zprivate_key_clsr$   r    r    r!   generate_keyz   s   zOKPKey.generate_key)FNr'   )r   NF)__name__
__module____qualname____doc__ZktyZREQUIRED_JSON_FIELDSr   r   r   r   r   r   r   r	   ZRAW_KEY_CLSr"   r&   propertyr)   staticmethodr+   r2   r6   r:   r7   classmethodr   rC   r    r    r    r!   r   (   s6    
	







r   N)"Z1cryptography.hazmat.primitives.asymmetric.ed25519r   r   Z/cryptography.hazmat.primitives.asymmetric.ed448r   r   Z0cryptography.hazmat.primitives.asymmetric.x25519r   r   Z.cryptography.hazmat.primitives.asymmetric.x448r   r	   Z,cryptography.hazmat.primitives.serializationr
   r   r   r   Zauthlib.common.encodingr   r   r   r   Zauthlib.jose.rfc7517r   Zrfc7518r   r   r4   r.   tuplevaluesr<   r=   r   r    r    r    r!   <module>   s*    