
    ([f                         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 eeee
d	Zeeeed	Z G 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   )AsymmetricKey)Ed25519Ed448X25519X448c                       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 Zed             Zd	 Zd
 Zd ZddZeddd            ZdS )OKPKeyz"Key class of the ``OKP`` key type.OKPcrvxds   ssh-ed25519c                     |                                  }|r1t          |t          t          f          r|                    |          S t          d          )Nz%Invalid key for exchanging shared key)get_private_key
isinstancer   r
   exchange
ValueError)selfpubkeyprivate_keys      P/var/www/piapp/venv/lib/python3.11/site-packages/authlib/jose/rfc8037/okp_key.pyexchange_shared_keyzOKPKey.exchange_shared_key0   sU    **,, 	0:k4Dn3UVV 	0''///@AAA    c                     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
   )keys    r'   get_key_curvezOKPKey.get_key_curve7   s    c,.?@AA 	9no>?? 	7o/?@AA 	8m^<== 	6	 	r)   c                     t           | j        d                  }t          t          | j        d                             }|                    |          S )Nr   r   )PRIVATE_KEYS_MAP
_dict_datar   r   from_private_bytes)r$   crv_keyd_bytess      r'   load_private_keyzOKPKey.load_private_keyB   sC    "4?5#9:#HT_S-A$B$BCC))'222r)   c                     t           | j        d                  }t          t          | j        d                             }|                    |          S )Nr   r   )PUBLIC_KEYS_MAPr/   r   r   from_public_bytes)r$   r1   x_bytess      r'   load_public_keyzOKPKey.load_public_keyG   sC    !$/%"89#HT_S-A$B$BCC((111r)   c                    |                      | j                                                  }| j                            t          j        t          j        t                                }t          t          |                    |d<   |S )Nr   )
dumps_public_keyr&   
public_keyprivate_bytesr   Rawr   r   r   r   )r$   objr2   s      r'   dumps_private_keyzOKPKey.dumps_private_keyL   so    ##D$4$?$?$A$ABB"00LNN
 

 /8899C
r)   Nc                     || j         }|                    t          j        t          j                  }|                     |          t          t          |                    dS )N)r   r   )r;   public_bytesr   r=   r   r,   r   r   )r$   r;   r7   s      r'   r:   zOKPKey.dumps_public_keyV   s]    J))(,8HII%%j11-g6677
 
 	
r)   r   Freturnc                     |t           vrt          d| d          t           |         }|                                }|s|                                }|                     ||          S )NzInvalid crv value: "")options)r.   r#   generater;   
import_key)clsr   rE   
is_privateprivate_key_clsraw_keys         r'   generate_keyzOKPKey.generate_key_   sr    &&&:C:::;;;*3/!**,, 	+((**G~~gw~777r)   )N)r   NF)rB   r   )__name__
__module____qualname____doc__ktyREQUIRED_JSON_FIELDSPUBLIC_KEY_FIELDSPRIVATE_KEY_FIELDStupler5   valuesPUBLIC_KEY_CLSr.   PRIVATE_KEY_CLSSSH_PUBLIC_PREFIXr(   staticmethodr,   r3   r8   r?   r:   classmethodrL    r)   r'   r   r   %   s	       ,,
C!3<,U?113344Ne,335566O&B B B   \3 3 3
2 2 2
  
 
 
 
 8 8 8 8 [8 8 8r)   r   N)1cryptography.hazmat.primitives.asymmetric.ed25519r   r   /cryptography.hazmat.primitives.asymmetric.ed448r   r   0cryptography.hazmat.primitives.asymmetric.x25519r   r   .cryptography.hazmat.primitives.asymmetric.x448r	   r
   ,cryptography.hazmat.primitives.serializationr   r   r   r   authlib.common.encodingr   r   r   r   rfc7517r   r5   r.   r   r\   r)   r'   <module>rd      s                                                     $ # # # # #  	  !	  B8 B8 B8 B8 B8] B8 B8 B8 B8 B8r)   