purify
C++ Purify implementation with native circuit and BPP support
Loading...
Searching...
No Matches
curve.h File Reference
#include <stddef.h>
#include <stdint.h>
#include "field.h"

Go to the source code of this file.

Data Structures

struct  purify_jacobian_point
 
struct  purify_affine_point
 
struct  purify_complete_projective_point
 
struct  purify_curve
 

Typedefs

typedef struct purify_jacobian_point purify_jacobian_point
 
typedef struct purify_affine_point purify_affine_point
 
typedef struct purify_complete_projective_point purify_complete_projective_point
 
typedef struct purify_curve purify_curve
 

Functions

void purify_curve_prime_p (uint64_t out[4])
 
void purify_curve_order_n1 (uint64_t out[4])
 
void purify_curve_order_n2 (uint64_t out[4])
 
void purify_curve_half_n1 (uint64_t out[4])
 
void purify_curve_half_n2 (uint64_t out[4])
 
void purify_curve_packed_secret_key_space_size (uint64_t out[8])
 
void purify_curve_packed_public_key_space_size (uint64_t out[8])
 
void purify_curve_two_p (uint64_t out[5])
 
void purify_curve_field_a (purify_fe *out)
 
void purify_curve_field_b (purify_fe *out)
 
void purify_curve_field_d (purify_fe *out)
 
void purify_curve_field_di (purify_fe *out)
 
void purify_curve_jacobian_infinity (purify_jacobian_point *out)
 
void purify_curve_affine (purify_affine_point *out, const purify_curve *curve, const purify_jacobian_point *point)
 
void purify_curve_negate (purify_jacobian_point *out, const purify_jacobian_point *point)
 
int purify_curve_is_x_coord (const purify_curve *curve, const purify_fe *x)
 
int purify_curve_lift_x (purify_jacobian_point *out, const purify_curve *curve, const purify_fe *x)
 
void purify_curve_double (purify_jacobian_point *out, const purify_curve *curve, const purify_jacobian_point *point)
 
void purify_curve_add_mixed (purify_jacobian_point *out, const purify_curve *curve, const purify_jacobian_point *lhs, const purify_affine_point *rhs)
 
void purify_curve_add (purify_jacobian_point *out, const purify_curve *curve, const purify_jacobian_point *lhs, const purify_jacobian_point *rhs)
 
void purify_curve_mul (purify_jacobian_point *out, const purify_curve *curve, const purify_jacobian_point *point, const uint64_t scalar[4])
 
int purify_curve_mul_secret_affine (purify_affine_point *out, const purify_curve *curve, const purify_jacobian_point *point, const uint64_t scalar[4])
 
int purify_curve_hash_to_curve (purify_jacobian_point *out, const purify_curve *curve, const unsigned char *data, size_t data_len)
 
int purify_curve_is_valid_secret_key (const uint64_t value[8])
 
int purify_curve_is_valid_public_key (const uint64_t value[8])
 
int purify_curve_unpack_secret (uint64_t first[4], uint64_t second[4], const uint64_t value[8])
 
int purify_curve_unpack_public (uint64_t first[4], uint64_t second[4], const uint64_t value[8])
 
void purify_curve_pack_public (uint64_t out[8], const uint64_t x1[4], const uint64_t x2[4])
 
void purify_curve_combine (purify_fe *out, const purify_fe *x1, const purify_fe *x2)
 
int purify_curve_key_to_bits (int *out_bits, size_t out_len, const uint64_t value[4], const uint64_t max_value[4])
 

Typedef Documentation

◆ purify_affine_point

◆ purify_complete_projective_point

◆ purify_curve

typedef struct purify_curve purify_curve

◆ purify_jacobian_point

Function Documentation

◆ purify_curve_add()

◆ purify_curve_add_mixed()

◆ purify_curve_affine()

◆ purify_curve_combine()

void purify_curve_combine ( purify_fe out,
const purify_fe x1,
const purify_fe x2 
)

◆ purify_curve_double()

◆ purify_curve_field_a()

void purify_curve_field_a ( purify_fe out)

Definition at line 425 of file curve.c.

References purify_fe_set_u64().

Referenced by purify::field_a(), and purify_curve_combine().

◆ purify_curve_field_b()

void purify_curve_field_b ( purify_fe out)

Definition at line 429 of file curve.c.

References purify_fe_set_u64().

Referenced by purify::field_b(), and purify_curve_combine().

◆ purify_curve_field_d()

void purify_curve_field_d ( purify_fe out)

Definition at line 433 of file curve.c.

References purify_fe_set_u64().

Referenced by purify::field_d().

◆ purify_curve_field_di()

void purify_curve_field_di ( purify_fe out)

Definition at line 437 of file curve.c.

References kPurifyFieldDi, and purify_fe_set_u256().

Referenced by purify::field_di(), and purify_curve_combine().

◆ purify_curve_half_n1()

void purify_curve_half_n1 ( uint64_t  out[4])

Definition at line 404 of file curve.c.

References kPurifyHalfN1, and purify_curve_copy_u256().

Referenced by purify::half_n1().

◆ purify_curve_half_n2()

void purify_curve_half_n2 ( uint64_t  out[4])

Definition at line 408 of file curve.c.

References kPurifyHalfN2, and purify_curve_copy_u256().

Referenced by purify::half_n2().

◆ purify_curve_hash_to_curve()

int purify_curve_hash_to_curve ( purify_jacobian_point out,
const purify_curve curve,
const unsigned char *  data,
size_t  data_len 
)

◆ purify_curve_is_valid_public_key()

int purify_curve_is_valid_public_key ( const uint64_t  value[8])

◆ purify_curve_is_valid_secret_key()

int purify_curve_is_valid_secret_key ( const uint64_t  value[8])

◆ purify_curve_is_x_coord()

int purify_curve_is_x_coord ( const purify_curve curve,
const purify_fe x 
)

◆ purify_curve_jacobian_infinity()

◆ purify_curve_key_to_bits()

int purify_curve_key_to_bits ( int *  out_bits,
size_t  out_len,
const uint64_t  value[4],
const uint64_t  max_value[4] 
)

Definition at line 937 of file curve.c.

References purify_curve_copy_u256().

Referenced by purify::key_to_bits().

◆ purify_curve_lift_x()

◆ purify_curve_mul()

void purify_curve_mul ( purify_jacobian_point out,
const purify_curve curve,
const purify_jacobian_point point,
const uint64_t  scalar[4] 
)

◆ purify_curve_mul_secret_affine()

◆ purify_curve_negate()

◆ purify_curve_order_n1()

void purify_curve_order_n1 ( uint64_t  out[4])

Definition at line 396 of file curve.c.

References kPurifyOrderN1, and purify_curve_copy_u256().

Referenced by purify::order_n1().

◆ purify_curve_order_n2()

void purify_curve_order_n2 ( uint64_t  out[4])

Definition at line 400 of file curve.c.

References kPurifyOrderN2, and purify_curve_copy_u256().

Referenced by purify::order_n2().

◆ purify_curve_pack_public()

void purify_curve_pack_public ( uint64_t  out[8],
const uint64_t  x1[4],
const uint64_t  x2[4] 
)

Definition at line 897 of file curve.c.

References kPurifyPrimeP, purify_u512_multiply_u256(), and purify_u512_widen_u256().

Referenced by purify::pack_public().

◆ purify_curve_packed_public_key_space_size()

void purify_curve_packed_public_key_space_size ( uint64_t  out[8])

◆ purify_curve_packed_secret_key_space_size()

void purify_curve_packed_secret_key_space_size ( uint64_t  out[8])

◆ purify_curve_prime_p()

void purify_curve_prime_p ( uint64_t  out[4])

Definition at line 392 of file curve.c.

References kPurifyPrimeP, and purify_curve_copy_u256().

Referenced by purify::prime_p().

◆ purify_curve_two_p()

void purify_curve_two_p ( uint64_t  out[5])

Definition at line 420 of file curve.c.

References kPurifyPrimeP, and purify_u320_widen_u256().

Referenced by purify_curve_hash_to_curve(), and purify::two_p().

◆ purify_curve_unpack_public()

int purify_curve_unpack_public ( uint64_t  first[4],
uint64_t  second[4],
const uint64_t  value[8] 
)

◆ purify_curve_unpack_secret()

int purify_curve_unpack_secret ( uint64_t  first[4],
uint64_t  second[4],
const uint64_t  value[8] 
)