o
    Df                     @   sp   d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZ ddlmZ G dd deZd	S )
    )ec)EllipticCurvePublicKey(EllipticCurvePrivateKeyWithSerializationEllipticCurvePrivateNumbersEllipticCurvePublicNumbers	SECP256R1	SECP384R1	SECP521R1	SECP256K1)default_backend)base64_to_intint_to_base64   )AsymmetricKeyc                   @   s   e Zd ZdZdZeeeedZ	ej
dej
dej
dej
diZg dZeZg d	ZeZeZd
Zdd Zedd Zdd Zdd Zdd Zdd ZeddddZdS )ECKeyz!Key class of the ``EC`` key type.EC)P-256P-384P-521	secp256k1r   r   r   r   crvxy)r   dr   r   s   ecdsa-sha2-c                 C   s$   |   }|r|t |S td)Nz%Invalid key for exchanging shared key)get_private_keyexchanger   ECDH
ValueError)selfpubkeyprivate_key r"   T/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/jose/rfc7518/ec_key.pyexchange_shared_key&   s   zECKey.exchange_shared_keyc                 C   s   |   }|s	| j}|jjS )N)r   
public_keycurvekey_size)r   raw_keyr"   r"   r#   curve_key_size-   s   zECKey.curve_key_sizec                 C   sR   | j | jd   }tt| jd t| jd |}tt| jd |}|t S )Nr   r   r   r   )
DSS_CURVES
_dict_datar   r   r   tokensr!   r   )r   r&   public_numbersprivate_numbersr"   r"   r#   load_private_key4   s   zECKey.load_private_keyc                 C   s>   | j | jd   }tt| jd t| jd |}|t S )Nr   r   r   )r*   r+   r   r   r%   r   )r   r&   r-   r"   r"   r#   load_public_keyA   s   zECKey.load_public_keyc                 C   s:   | j  }| j| j jj t|jjt|jjt|j	dS )N)r   r   r   r   )
r!   r.   
CURVES_DSSr&   namer   r-   r   r   private_valuer   numbersr"   r"   r#   dumps_private_keyJ   s   


zECKey.dumps_private_keyc                 C   s,   | j  }| j|jj t|jt|jdS )Nr   )r%   r-   r1   r&   r2   r   r   r   r4   r"   r"   r#   dumps_public_keyS   s
   
zECKey.dumps_public_keyNFreturnc                 C   sL   || j vrtd| dtj| j |  t d}|s| }| j||dS )NzInvalid crv value: "")r&   backend)options)r*   r   r   generate_private_keyr   r%   
import_key)clsr   r;   
is_privater(   r"   r"   r#   generate_key[   s   

zECKey.generate_key)r   NF)r8   r   )__name__
__module____qualname____doc__ktyr   r   r	   r
   r*   r2   r1   REQUIRED_JSON_FIELDSPUBLIC_KEY_FIELDSPRIVATE_KEY_FIELDSr   PUBLIC_KEY_CLSr   PRIVATE_KEY_CLSSSH_PUBLIC_PREFIXr$   propertyr)   r/   r0   r6   r7   classmethodr@   r"   r"   r"   r#   r      s8    
		r   N))cryptography.hazmat.primitives.asymmetricr   ,cryptography.hazmat.primitives.asymmetric.ecr   r   r   r   r   r   r	   r
   cryptography.hazmat.backendsr   authlib.common.encodingr   r   rfc7517r   r   r"   r"   r"   r#   <module>   s    (