purify
C++ Purify implementation with native circuit and BPP support
Loading...
Searching...
No Matches
field.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 <stdint.h>
8
9#include "purify/uint.h"
10#include "purify/secp_bridge.h"
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
19
21void purify_fe_set_u64(purify_fe* out, uint64_t value);
22void purify_fe_set_i64(purify_fe* out, int64_t value);
23int purify_fe_set_b32(purify_fe* out, const unsigned char input32[32]);
24int purify_fe_set_u256(purify_fe* out, const uint64_t value[4]);
25void purify_fe_get_b32(unsigned char output32[32], const purify_fe* value);
26void purify_fe_get_u256(uint64_t out[4], const purify_fe* value);
27
28int purify_fe_is_zero(const purify_fe* value);
29int purify_fe_is_one(const purify_fe* value);
30int purify_fe_is_odd(const purify_fe* value);
31int purify_fe_eq(const purify_fe* lhs, const purify_fe* rhs);
32
33void purify_fe_negate(purify_fe* out, const purify_fe* value);
34void purify_fe_cmov(purify_fe* dst, const purify_fe* src, int flag);
35void purify_fe_inverse(purify_fe* out, const purify_fe* value);
36void purify_fe_inverse_var(purify_fe* out, const purify_fe* value);
37void purify_fe_add(purify_fe* out, const purify_fe* lhs, const purify_fe* rhs);
38void purify_fe_sub(purify_fe* out, const purify_fe* lhs, const purify_fe* rhs);
39void purify_fe_mul(purify_fe* out, const purify_fe* lhs, const purify_fe* rhs);
40void purify_fe_square(purify_fe* out, const purify_fe* value);
41void purify_fe_pow(purify_fe* out, const purify_fe* value, const uint64_t exponent[4]);
42
43int purify_fe_is_square(const purify_fe* value);
44int purify_fe_legendre_symbol(const purify_fe* value);
45int purify_fe_sqrt(purify_fe* out, const purify_fe* value);
46
47#ifdef __cplusplus
48}
49#endif
int purify_fe_is_square(const purify_fe *value)
Definition field.c:139
int purify_fe_legendre_symbol(const purify_fe *value)
Definition field.c:154
void purify_fe_set_zero(purify_fe *out)
Definition field.c:25
int purify_fe_set_u256(purify_fe *out, const uint64_t value[4])
Definition field.c:49
void purify_fe_inverse(purify_fe *out, const purify_fe *value)
Definition field.c:90
int purify_fe_sqrt(purify_fe *out, const purify_fe *value)
Definition field.c:161
int purify_fe_is_zero(const purify_fe *value)
Definition field.c:65
void purify_fe_pow(purify_fe *out, const purify_fe *value, const uint64_t exponent[4])
Definition field.c:122
int purify_fe_is_one(const purify_fe *value)
Definition field.c:69
void purify_fe_inverse_var(purify_fe *out, const purify_fe *value)
Definition field.c:95
void purify_fe_get_b32(unsigned char output32[32], const purify_fe *value)
Definition field.c:55
void purify_fe_mul(purify_fe *out, const purify_fe *lhs, const purify_fe *rhs)
Definition field.c:112
void purify_fe_square(purify_fe *out, const purify_fe *value)
Definition field.c:118
void purify_fe_add(purify_fe *out, const purify_fe *lhs, const purify_fe *rhs)
Definition field.c:100
void purify_fe_sub(purify_fe *out, const purify_fe *lhs, const purify_fe *rhs)
Definition field.c:106
int purify_fe_set_b32(purify_fe *out, const unsigned char input32[32])
Definition field.c:43
void purify_fe_set_i64(purify_fe *out, int64_t value)
Definition field.c:33
void purify_fe_cmov(purify_fe *dst, const purify_fe *src, int flag)
Definition field.c:86
void purify_fe_get_u256(uint64_t out[4], const purify_fe *value)
Definition field.c:59
int purify_fe_eq(const purify_fe *lhs, const purify_fe *rhs)
Definition field.c:77
void purify_fe_set_u64(purify_fe *out, uint64_t value)
Definition field.c:29
int purify_fe_is_odd(const purify_fe *value)
Definition field.c:73
void purify_fe_negate(purify_fe *out, const purify_fe *value)
Definition field.c:81
Narrow C ABI exposing secp256k1 scalar and HMAC helpers to the C++ headers.
purify_scalar value
Definition field.h:17
Opaque scalar storage compatible with secp256k1-zkp internal scalar storage.
Definition secp_bridge.h:22
Fixed-width unsigned integer helpers implemented in C for Purify.