
    i                     L    S SK Jr  S SKJrJrJrJr  S rS rS r	S r
S rS rg	)
    )long_to_bytes)EccKey	construct_import_curve25519_public_key_import_curve448_public_keyc                    UR                   U R                  -  nUR                  5       (       a  [        S5      eU R                  S:X  a%  [        UR                  R                  SSS95      nU$ U R                  S:X  a%  [        UR                  R                  SSS95      nU$ [        UR                  UR                  5       5      nU$ )NzInvalid ECDH point
Curve25519    little)	byteorderCurve4488   )
pointQdis_point_at_infinity
ValueErrorcurve	bytearrayxto_bytesr   size_in_bytes)key_privkey_pubpointPzs       M/var/www/html/trading/venv/lib/python3.13/site-packages/Crypto/Protocol/DH.py_compute_ecdhr      s    ^^hjj(F""$$./	/~~%fhh''h'?@ H 
:	%fhh''h'?@ H &((F$8$8$:;H    c                 ,    [        U 5      n[        SUS9$ )aT  Create a new X25519 public key object,
starting from the key encoded as raw ``bytes``,
in the format described in RFC7748.

Args:
  encoded (bytes):
    The x25519 public key to import.
    It must be 32 bytes.

Returns:
  :class:`Crypto.PublicKey.EccKey` : a new ECC key object.

Raises:
  ValueError: when the given key cannot be parsed.
r	   r   point_x)r   r   encodedr   s     r   import_x25519_public_keyr$      s    " 	&g.A<33r   c                     [        U SS9$ )aV  Create a new X25519 private key object,
starting from the key encoded as raw ``bytes``,
in the format described in RFC7748.

Args:
  encoded (bytes):
    The X25519 private key to import.
    It must be 32 bytes.

Returns:
  :class:`Crypto.PublicKey.EccKey` : a new ECC key object.

Raises:
  ValueError: when the given key cannot be parsed.
r	   seedr   r   r#   s    r   import_x25519_private_keyr*   ,   s    " '66r   c                 ,    [        U 5      n[        SUS9$ )aP  Create a new X448 public key object,
starting from the key encoded as raw ``bytes``,
in the format described in RFC7748.

Args:
  encoded (bytes):
    The x448 public key to import.
    It must be 56 bytes.

Returns:
  :class:`Crypto.PublicKey.EccKey` : a new ECC key object.

Raises:
  ValueError: when the given key cannot be parsed.
r   r    )r   r   r"   s     r   import_x448_public_keyr,   @   s    " 	$G,A:q11r   c                     [        U SS9$ )aR  Create a new X448 private key object,
starting from the key encoded as raw ``bytes``,
in the format described in RFC7748.

Args:
  encoded (bytes):
    The X448 private key to import.
    It must be 56 bytes.

Returns:
  :class:`Crypto.PublicKey.EccKey` : a new ECC key object.

Raises:
  ValueError: when the given key cannot be parsed.
r   r&   r(   r)   s    r   import_x448_private_keyr.   U   s    " '44r   c                     U R                  SS5      nU R                  SS5      nU R                  SS5      nU R                  SS5      nU R                  SS5      nUc  [        S5      eSnSnSnS	 n	Ub  U	" XSS
5      nUS-  nUb  U	" XSS5      nUS-  nUb  U	" XSS
5      nUS-  nUb  U	" XSS5      nUS-  nXg-   S:  d  US:X  d  US:X  a  [        S5      eSn
SnU(       a  U(       a  [        X5      n
U(       a6  U(       a/  [        U5      [        U5      :w  a  [        S5      e[        X45      nO3U(       a  U(       a  [        X25      nOU(       a  U(       a  [        X5      nX-   nU" U5      $ )a  Perform a Diffie-Hellman key agreement.

Keywords:
  kdf (callable):
    A key derivation function that accepts ``bytes`` as input and returns
    ``bytes``.
  static_priv (EccKey):
    The local static private key. Optional.
  static_pub (EccKey):
    The static public key that belongs to the peer. Optional.
  eph_priv (EccKey):
    The local ephemeral private key, generated for this session. Optional.
  eph_pub (EccKey):
    The ephemeral public key, received from the peer for this session. Optional.

At least two keys must be passed, of which one is a private key and one
a public key.

Returns (bytes):
  The derived secret key material.
static_privN
static_pubeph_priveph_pubkdfz'kdf' is mandatoryr   c                     [        U[        5      (       d  [        SU-  5      eU(       a#  UR                  5       (       d  [        SU-  5      eU c  UR                  n U $ XR                  :w  a  [        SU-  5      eU $ )Nz'%s' must be an ECC keyz'%s' must be a private ECC keyz('%s' is defined on an incompatible curve)
isinstancer   	TypeErrorhas_privater   )r   keynameprivates       r   check_curve"key_agreement.<locals>.check_curve   sw    #v&&5<==3??,,<tCDD=IIE  iiFMNNr   T   F   z'Too few keys for the ECDH key agreementr   z"DH mode C(2e, 1s) is not supported)getr   r   bool)kwargsr0   r1   r2   r3   r4   
count_priv	count_pubr   r<   ZsZeZs                r   key_agreementrH   i   s   . **]D1KL$/Jzz*d+HjjD)G
**UD
!C
{-..JIE	 EtDa
E|UCQ	EZ>a
EIu=Q	!#zQ)q.BCC	B	Bz;3GZ 00ABB8-	j80	[;0
Aq6Mr   N)Crypto.Util.numberr   Crypto.PublicKey.ECCr   r   r   r   r   r$   r*   r,   r.   rH    r   r   <module>rL      s1    ,? ?4*7(2*5(Wr   