
    ~hQ                         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  G d de      Zy)    )default_backend)ec)	SECP256K1)	SECP256R1)	SECP384R1)	SECP521R1)(EllipticCurvePrivateKeyWithSerialization)EllipticCurvePrivateNumbers)EllipticCurvePublicKey)EllipticCurvePublicNumbers)base64_to_int)int_to_base64   )AsymmetricKeyc                       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 Zed        Zd Zd Zd Zd Zeddd       Zy)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                     | j                         }|r$|j                  t        j                         |      S t	        d      )Nz%Invalid key for exchanging shared key)get_private_keyexchanger   ECDH
ValueError)selfpubkeyprivate_keys      W/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/jose/rfc7518/ec_key.pyexchange_shared_keyzECKey.exchange_shared_key.   s8    **,''	6::@AA    c                 j    | j                         }|s| j                  }|j                  j                  S )N)r   
public_keycurvekey_size)r"   raw_keys     r%   curve_key_sizezECKey.curve_key_size5   s,    &&(ooG}}%%%r'   c                 ,    | j                   | j                  d             }t        t        | j                  d         t        | j                  d         |      }t	        t        | j
                  d         |      }|j                  t                     S )Nr   r   r   r   )
DSS_CURVES
_dict_datar   r   r
   tokensr$   r   )r"   r*   public_numbersprivate_numberss       r%   load_private_keyzECKey.load_private_key<   s    7 6793$//#./$//#./

 6$++c*+^
 **?+<==r'   c                      | j                   | j                  d             }t        t        | j                  d         t        | j                  d         |      }|j	                  t                     S )Nr   r   r   )r/   r0   r   r   r)   r   )r"   r*   r2   s      r%   load_public_keyzECKey.load_public_keyH   sc    7 6793$//#./$//#./

 (():;;r'   c                 4   | j                   j                         }| j                  | j                   j                  j                     t        |j                  j                        t        |j                  j                        t        |j                        dS )N)r   r   r   r   )
r$   r3   
CURVES_DSSr*   namer   r2   r   r   private_valuer"   numberss     r%   dumps_private_keyzECKey.dumps_private_keyQ   st    ""224??4#3#3#9#9#>#>?w55778w55778w445	
 	
r'   c                     | j                   j                         }| j                  |j                  j                     t        |j                        t        |j                        dS )Nr   )r)   r2   r8   r*   r9   r   r   r   r;   s     r%   dumps_public_keyzECKey.dumps_public_keyZ   sL    //002??7==#5#56wyy)wyy)
 	
r'   Nc                     || j                   vrt        d| d      t        j                   | j                   |          t	                     }|s|j                         }| j                  ||      S )NzInvalid crv value: "")r*   backend)options)r/   r!   r   generate_private_keyr   r)   
import_key)clsr   rC   
is_privater,   s        r%   generate_keyzECKey.generate_keyb   sp    cnn$3C5:;;))%#..%'#%
 ((*G~~gw~77r'   )r   NF)returnr   )__name__
__module____qualname____doc__ktyr   r   r   r   r/   r9   r8   REQUIRED_JSON_FIELDSPUBLIC_KEY_FIELDSPRIVATE_KEY_FIELDSr   PUBLIC_KEY_CLSr	   PRIVATE_KEY_CLSSSH_PUBLIC_PREFIXr&   propertyr-   r4   r6   r=   r?   classmethodrH    r'   r%   r   r      s    +
CJ 		J -,/+N>O&B & &
><

 	8 	8r'   r   N)cryptography.hazmat.backendsr   )cryptography.hazmat.primitives.asymmetricr   ,cryptography.hazmat.primitives.asymmetric.ecr   r   r   r   r	   r
   r   r   authlib.common.encodingr   r   rfc7517r   r   rW   r'   r%   <module>r]      s?    8 8 B B B B U O S 1 1 #X8M X8r'   