purify
C++ Purify implementation with native circuit and BPP support
Loading...
Searching...
No Matches
purify.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
10#pragma once
11
12#include <stddef.h>
13#include <stdint.h>
14
15#include "purify/secp_context.h"
16
17#define PURIFY_SECRET_KEY_BYTES 64u
18#define PURIFY_PUBLIC_KEY_BYTES 64u
19#define PURIFY_FIELD_ELEMENT_BYTES 32u
20#define PURIFY_BIP340_SECRET_KEY_BYTES 32u
21#define PURIFY_BIP340_XONLY_PUBKEY_BYTES 32u
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
60
66
72
74const char* purify_error_name(purify_error_code code);
75
78
85purify_error_code purify_fill_secure_random(unsigned char* bytes, size_t bytes_len);
86
93
100
107
116purify_error_code purify_generate_key_from_seed(purify_generated_key* out, const unsigned char* seed, size_t seed_len);
117
126 const unsigned char secret_key[PURIFY_SECRET_KEY_BYTES]);
127
137 const unsigned char secret_key[PURIFY_SECRET_KEY_BYTES],
138 purify_secp_context* secp_context);
139
149purify_error_code purify_eval(unsigned char out_field_element[PURIFY_FIELD_ELEMENT_BYTES],
150 const unsigned char secret_key[PURIFY_SECRET_KEY_BYTES],
151 const unsigned char* message,
152 size_t message_len);
153
154#ifdef __cplusplus
155}
156#endif
#define PURIFY_SECRET_KEY_BYTES
Definition purify.h:17
#define PURIFY_PUBLIC_KEY_BYTES
Definition purify.h:18
purify_error_code purify_generate_key(purify_generated_key *out)
Generates one random Purify keypair.
Definition c_api.cpp:134
purify_error_code purify_fill_secure_random(unsigned char *bytes, size_t bytes_len)
Fills a caller-owned buffer with secure operating-system randomness.
Definition core.c:260
purify_error_code
Machine-readable status code returned by the Purify C core.
Definition purify.h:28
@ PURIFY_ERROR_IO_WRITE_FAILED
Definition purify.h:51
@ PURIFY_ERROR_HASH_TO_CURVE_EXHAUSTED
Definition purify.h:54
@ PURIFY_ERROR_MISSING_VALUE
Definition purify.h:41
@ PURIFY_ERROR_OK
Definition purify.h:29
@ PURIFY_ERROR_BIT_INDEX_OUT_OF_RANGE
Definition purify.h:37
@ PURIFY_ERROR_GENERATOR_ORDER_CHECK_FAILED
Definition purify.h:56
@ PURIFY_ERROR_INVALID_SYMBOL
Definition purify.h:42
@ PURIFY_ERROR_OVERFLOW
Definition purify.h:33
@ PURIFY_ERROR_EMPTY_INPUT
Definition purify.h:39
@ PURIFY_ERROR_INVALID_DIMENSIONS
Definition purify.h:46
@ PURIFY_ERROR_INVALID_HEX_LENGTH
Definition purify.h:31
@ PURIFY_ERROR_DIVISION_BY_ZERO
Definition purify.h:36
@ PURIFY_ERROR_UNDERFLOW
Definition purify.h:34
@ PURIFY_ERROR_NARROWING_OVERFLOW
Definition purify.h:35
@ PURIFY_ERROR_IO_OPEN_FAILED
Definition purify.h:50
@ PURIFY_ERROR_TRANSCRIPT_CHECK_FAILED
Definition purify.h:58
@ PURIFY_ERROR_EQUATION_MISMATCH
Definition purify.h:48
@ PURIFY_ERROR_ENTROPY_UNAVAILABLE
Definition purify.h:52
@ PURIFY_ERROR_INVALID_FIXED_SIZE
Definition purify.h:32
@ PURIFY_ERROR_SIZE_MISMATCH
Definition purify.h:40
@ PURIFY_ERROR_UNSUPPORTED_SYMBOL
Definition purify.h:43
@ PURIFY_ERROR_INTERNAL_MISMATCH
Definition purify.h:57
@ PURIFY_ERROR_BINDING_MISMATCH
Definition purify.h:49
@ PURIFY_ERROR_RANGE_VIOLATION
Definition purify.h:38
@ PURIFY_ERROR_BACKEND_REJECTED_INPUT
Definition purify.h:53
@ PURIFY_ERROR_NON_BOOLEAN_VALUE
Definition purify.h:47
@ PURIFY_ERROR_UNINITIALIZED_STATE
Definition purify.h:44
@ PURIFY_ERROR_INDEX_OUT_OF_RANGE
Definition purify.h:45
@ PURIFY_ERROR_UNEXPECTED_SIZE
Definition purify.h:55
@ PURIFY_ERROR_INVALID_HEX
Definition purify.h:30
const char * purify_error_message(purify_error_code code)
Returns a human-facing description for one status code.
Definition core.c:251
purify_error_code purify_generate_key_from_seed(purify_generated_key *out, const unsigned char *seed, size_t seed_len)
Deterministically derives one Purify keypair from seed material.
Definition c_api.cpp:161
purify_error_code purify_eval(unsigned char out_field_element[PURIFY_FIELD_ELEMENT_BYTES], const unsigned char secret_key[PURIFY_SECRET_KEY_BYTES], const unsigned char *message, size_t message_len)
Evaluates the Purify PRF for one packed secret and message.
Definition c_api.cpp:263
const char * purify_error_name(purify_error_code code)
Returns a stable programmatic name for one status code.
Definition core.c:242
purify_error_code purify_derive_public_key(unsigned char out_public_key[PURIFY_PUBLIC_KEY_BYTES], const unsigned char secret_key[PURIFY_SECRET_KEY_BYTES])
Derives the packed public key corresponding to one packed Purify secret.
Definition c_api.cpp:196
purify_error_code purify_validate_secret_key(const unsigned char secret_key[PURIFY_SECRET_KEY_BYTES])
Validates one packed Purify secret key.
Definition core.c:307
#define PURIFY_FIELD_ELEMENT_BYTES
Definition purify.h:19
purify_error_code purify_derive_bip340_key(purify_bip340_key *out, const unsigned char secret_key[PURIFY_SECRET_KEY_BYTES], purify_secp_context *secp_context)
Derives one canonical BIP340 keypair from one packed Purify secret.
Definition c_api.cpp:217
#define PURIFY_BIP340_SECRET_KEY_BYTES
Definition purify.h:20
#define PURIFY_BIP340_XONLY_PUBKEY_BYTES
Definition purify.h:21
purify_error_code purify_validate_public_key(const unsigned char public_key[PURIFY_PUBLIC_KEY_BYTES])
Validates one packed Purify public key.
Definition core.c:311
Shared public declaration of Purify's reusable secp256k1 context handle.
Canonical BIP340 keypair derived from one packed Purify secret.
Definition purify.h:68
unsigned char secret_key[PURIFY_BIP340_SECRET_KEY_BYTES]
Definition purify.h:69
unsigned char xonly_public_key[PURIFY_BIP340_XONLY_PUBKEY_BYTES]
Definition purify.h:70
Seed/public-key bundle returned by the C core key-generation entry points.
Definition purify.h:62
unsigned char secret_key[PURIFY_SECRET_KEY_BYTES]
Definition purify.h:63
unsigned char public_key[PURIFY_PUBLIC_KEY_BYTES]
Definition purify.h:64