purify
C++ Purify implementation with native circuit and BPP support
Loading...
Searching...
No Matches
curve.h
Go to the documentation of this file.
1// Copyright (c) 2026 Judica, Inc.
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or https://opensource.org/license/mit/.
4
5#pragma once
6
7#include <stddef.h>
8#include <stdint.h>
9
10#include "field.h"
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
22
28
34
35typedef struct purify_curve {
38 uint64_t n[4];
40
41void purify_curve_prime_p(uint64_t out[4]);
42void purify_curve_order_n1(uint64_t out[4]);
43void purify_curve_order_n2(uint64_t out[4]);
44void purify_curve_half_n1(uint64_t out[4]);
45void purify_curve_half_n2(uint64_t out[4]);
48void purify_curve_two_p(uint64_t out[5]);
49
54
58int purify_curve_is_x_coord(const purify_curve* curve, const purify_fe* x);
59int purify_curve_lift_x(purify_jacobian_point* out, const purify_curve* curve, const purify_fe* x);
62 const purify_jacobian_point* lhs, const purify_affine_point* rhs);
64 const purify_jacobian_point* lhs, const purify_jacobian_point* rhs);
66 const purify_jacobian_point* point, const uint64_t scalar[4]);
68 const purify_jacobian_point* point, const uint64_t scalar[4]);
70 const unsigned char* data, size_t data_len);
71
72int purify_curve_is_valid_secret_key(const uint64_t value[8]);
73int purify_curve_is_valid_public_key(const uint64_t value[8]);
74int purify_curve_unpack_secret(uint64_t first[4], uint64_t second[4], const uint64_t value[8]);
75int purify_curve_unpack_public(uint64_t first[4], uint64_t second[4], const uint64_t value[8]);
76void purify_curve_pack_public(uint64_t out[8], const uint64_t x1[4], const uint64_t x2[4]);
77void purify_curve_combine(purify_fe* out, const purify_fe* x1, const purify_fe* x2);
78int purify_curve_key_to_bits(int* out_bits, size_t out_len, const uint64_t value[4], const uint64_t max_value[4]);
79
80#ifdef __cplusplus
81}
82#endif
void purify_curve_half_n1(uint64_t out[4])
Definition curve.c:404
int purify_curve_is_x_coord(const purify_curve *curve, const purify_fe *x)
Definition curve.c:482
void purify_curve_jacobian_infinity(purify_jacobian_point *out)
Definition curve.c:443
void purify_curve_pack_public(uint64_t out[8], const uint64_t x1[4], const uint64_t x2[4])
Definition curve.c:897
int purify_curve_is_valid_public_key(const uint64_t value[8])
Definition curve.c:837
void purify_curve_order_n2(uint64_t out[4])
Definition curve.c:400
void purify_curve_packed_public_key_space_size(uint64_t out[8])
Definition curve.c:416
void purify_curve_order_n1(uint64_t out[4])
Definition curve.c:396
void purify_curve_packed_secret_key_space_size(uint64_t out[8])
Definition curve.c:412
int purify_curve_unpack_public(uint64_t first[4], uint64_t second[4], const uint64_t value[8])
Definition curve.c:878
void purify_curve_double(purify_jacobian_point *out, const purify_curve *curve, const purify_jacobian_point *point)
Definition curve.c:517
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 curve.c:937
void purify_curve_field_a(purify_fe *out)
Definition curve.c:425
void purify_curve_two_p(uint64_t out[5])
Definition curve.c:420
void purify_curve_negate(purify_jacobian_point *out, const purify_jacobian_point *point)
Definition curve.c:471
void purify_curve_half_n2(uint64_t out[4])
Definition curve.c:408
int purify_curve_lift_x(purify_jacobian_point *out, const purify_curve *curve, const purify_fe *x)
Definition curve.c:496
int purify_curve_is_valid_secret_key(const uint64_t value[8])
Definition curve.c:831
void purify_curve_combine(purify_fe *out, const purify_fe *x1, const purify_fe *x2)
Definition curve.c:904
void purify_curve_field_di(purify_fe *out)
Definition curve.c:437
void purify_curve_field_d(purify_fe *out)
Definition curve.c:433
int purify_curve_hash_to_curve(purify_jacobian_point *out, const purify_curve *curve, const unsigned char *data, size_t data_len)
Definition curve.c:778
void purify_curve_field_b(purify_fe *out)
Definition curve.c:429
int purify_curve_mul_secret_affine(purify_affine_point *out, const purify_curve *curve, const purify_jacobian_point *point, const uint64_t scalar[4])
Definition curve.c:759
void purify_curve_mul(purify_jacobian_point *out, const purify_curve *curve, const purify_jacobian_point *point, const uint64_t scalar[4])
Definition curve.c:697
void purify_curve_add(purify_jacobian_point *out, const purify_curve *curve, const purify_jacobian_point *lhs, const purify_jacobian_point *rhs)
Definition curve.c:619
void purify_curve_add_mixed(purify_jacobian_point *out, const purify_curve *curve, const purify_jacobian_point *lhs, const purify_affine_point *rhs)
Definition curve.c:566
void purify_curve_affine(purify_affine_point *out, const purify_curve *curve, const purify_jacobian_point *point)
Definition curve.c:450
void purify_curve_prime_p(uint64_t out[4])
Definition curve.c:392
int purify_curve_unpack_secret(uint64_t first[4], uint64_t second[4], const uint64_t value[8])
Definition curve.c:863
Scalar32 scalar
Definition bppp.cpp:119
purify_fe y
Definition curve.h:25
purify_fe x
Definition curve.h:24
purify_fe b
Definition curve.h:37
purify_fe a
Definition curve.h:36
uint64_t n[4]
Definition curve.h:38