U
    g{                     @   s@   d dl mZ ddlmZ ddlmZmZmZ dd Zdd Z	d	S )
   )_Curve    )Integer)load_pycryptodome_raw_libVoidPointerSmartPointerc                     sb   dd} t dd G  fdddt}fdd}ttd t| td	d d d
dd dd ||}|S )Nl   l   S9i@eM^w|o                z Cryptodome.PublicKey._curve25519a  
typedef void Point;

int curve25519_new_point(Point **out,
                         const uint8_t x[32],
                         size_t modsize,
                         const void* context);
int curve25519_clone(Point **P, const Point *Q);
void curve25519_free_point(Point *p);
int curve25519_get_x(uint8_t *xb, size_t modsize, Point *p);
int curve25519_scalar(Point *P, const uint8_t *scalar, size_t scalar_len, uint64_t seed);
int curve25519_cmp(const Point *ecp1, const Point *ecp2);
c                       s0   e Zd Z jZ jZ jZ j	Z
 jZ jZdS )zcurve25519_curve.<locals>.EcLibN)__name__
__module____qualname__Zcurve25519_new_point	new_pointZcurve25519_clonecloneZcurve25519_free_point
free_pointZcurve25519_get_xget_xZcurve25519_scalarscalarZcurve25519_cmpcmp )_curve25519_libr   D/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/PublicKey/_montgomery.pyEcLib   s   r   c                    s|    d }d}d}dd|| d   d  |  | |d ||d f}z| j |k}W n tk
rj   d}Y nX |sxtdd S )N   l   kxujaj\~|ObjZs	oP,E$ l   _+yBb$:6gw[8cph[DS7OWr   r   FzInvalid Curve25519 public keyx
ValueError)pointp2x1Zx2	deny_listvalidpr   r   _validate_x25519_point$   s,    
z0curve25519_curve.<locals>._validate_x25519_point	      z1.3.101.110Z
Curve25519)r   objectr   r   )orderr   r    Z
curve25519r   )r   r   r   curve25519_curve
   s(    
r%   c                     s   dd} t dd G  fdddt}t }|| }|rJtd| fdd	}ttd t| td
d d ddt|	 |j
dd ||}|S )Nl   ?l   DVJ
Ru8a6!m,&vD}D2_zCryptodome.PublicKey._curve448a  
typedef void Curve448Context;
typedef void Curve448Point;

int curve448_new_context(Curve448Context **pec_ctx);
void curve448_free_context(Curve448Context *ec_ctx);
int curve448_new_point(Curve448Point **out,
                       const uint8_t *x,
                       size_t len,
                       const Curve448Context *ec_ctx);
void curve448_free_point(Curve448Point *p);
int curve448_clone(Curve448Point **P, const Curve448Point *Q);
int curve448_get_x(uint8_t *xb, size_t modsize, const Curve448Point *p);
int curve448_scalar(Curve448Point *P, const uint8_t *scalar, size_t scalar_len, uint64_t seed);
int curve448_cmp(const Curve448Point *ecp1, const Curve448Point *ecp2);
c                       s<   e Zd Z jZ jZ jZ j	Z
 jZ jZ jZ jZdS )zcurve448_curve.<locals>.EcLibN)r   r	   r
   Zcurve448_new_contextnew_contextZcurve448_free_contextfree_contextZcurve448_new_pointr   Zcurve448_cloner   Zcurve448_free_pointr   Zcurve448_get_xr   Zcurve448_scalarr   Zcurve448_cmpr   r   )_curve448_libr   r   r   i   s   r   z&Error %d initializing Curve448 contextc                    sN   dd d   d f}z| j |k}W n tk
r<   d}Y nX |sJtdd S )Nr   r   FzInvalid Curve448 public keyr   )r   r   r   r   r   r   _validate_x448_pointx   s    
z,curve448_curve.<locals>._validate_x448_point   i  z1.3.101.111ZCurve448)r   r#   r   r&   Z
address_ofImportErrorr   r   r   getr'   )r$   r   Zcurve448_contextresultr)   Zcurve448r   )r(   r   r   curve448_curveT   s0    

r.   N)
Z_curver   ZCryptodome.Math.Numbersr   ZCryptodome.Util._raw_apir   r   r   r%   r.   r   r   r   r   <module>   s   J