mirror of
https://github.com/zama-ai/concrete.git
synced 2026-02-09 12:15:09 -05:00
- add concrete_cpu_decrypt_glwe_ciphertext_u64 - add a C entry point to encrypt values as GGSWs - add a C entry point to init GLWE secret keys
303 lines
18 KiB
C
303 lines
18 KiB
C
// Copyright © 2022 ZAMA.
|
|
// All rights reserved.
|
|
|
|
#ifndef CONCRETE_CPU_FFI_H
|
|
#define CONCRETE_CPU_FFI_H
|
|
|
|
// Warning, this file is autogenerated by cbindgen. Do not modify this manually.
|
|
|
|
#include <stdarg.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
|
|
|
|
enum Parallelism
|
|
#ifdef __cplusplus
|
|
: uint32_t
|
|
#endif // __cplusplus
|
|
{
|
|
No = 0,
|
|
Rayon = 1,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint32_t Parallelism;
|
|
#endif // __cplusplus
|
|
|
|
enum ScratchStatus
|
|
#ifdef __cplusplus
|
|
: uint32_t
|
|
#endif // __cplusplus
|
|
{
|
|
Valid = 0,
|
|
SizeOverflow = 1,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint32_t ScratchStatus;
|
|
#endif // __cplusplus
|
|
|
|
typedef struct Csprng Csprng;
|
|
|
|
typedef struct Fft Fft;
|
|
|
|
typedef struct Uint128 {
|
|
uint8_t little_endian_bytes[16];
|
|
} Uint128;
|
|
|
|
typedef struct CsprngVtable {
|
|
struct Uint128 (*remaining_bytes)(const struct Csprng *csprng);
|
|
size_t (*next_bytes)(struct Csprng *csprng, uint8_t *byte_array, size_t byte_count);
|
|
} CsprngVtable;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
extern const size_t CONCRETE_CSPRNG_ALIGN;
|
|
|
|
extern const size_t CONCRETE_CSPRNG_SIZE;
|
|
|
|
extern const struct CsprngVtable CONCRETE_CSPRNG_VTABLE;
|
|
|
|
extern const size_t CONCRETE_FFT_ALIGN;
|
|
|
|
extern const size_t CONCRETE_FFT_SIZE;
|
|
|
|
void concrete_cpu_add_lwe_ciphertext_u64(uint64_t *ct_out,
|
|
const uint64_t *ct_in0,
|
|
const uint64_t *ct_in1,
|
|
size_t lwe_dimension);
|
|
|
|
void concrete_cpu_add_plaintext_lwe_ciphertext_u64(uint64_t *ct_out,
|
|
const uint64_t *ct_in,
|
|
uint64_t plaintext,
|
|
size_t lwe_dimension);
|
|
|
|
void concrete_cpu_bootstrap_key_convert_u64_to_fourier(const uint64_t *standard_bsk,
|
|
double *fourier_bsk,
|
|
size_t decomposition_level_count,
|
|
size_t decomposition_base_log,
|
|
size_t glwe_dimension,
|
|
size_t polynomial_size,
|
|
size_t input_lwe_dimension,
|
|
const struct Fft *fft,
|
|
uint8_t *stack,
|
|
size_t stack_size);
|
|
|
|
ScratchStatus concrete_cpu_bootstrap_key_convert_u64_to_fourier_scratch(size_t *stack_size,
|
|
size_t *stack_align,
|
|
const struct Fft *fft);
|
|
|
|
size_t concrete_cpu_bootstrap_key_size_u64(size_t decomposition_level_count,
|
|
size_t glwe_dimension,
|
|
size_t polynomial_size,
|
|
size_t input_lwe_dimension);
|
|
|
|
void concrete_cpu_bootstrap_lwe_ciphertext_u64(uint64_t *ct_out,
|
|
const uint64_t *ct_in,
|
|
const uint64_t *accumulator,
|
|
const double *fourier_bsk,
|
|
size_t decomposition_level_count,
|
|
size_t decomposition_base_log,
|
|
size_t glwe_dimension,
|
|
size_t polynomial_size,
|
|
size_t input_lwe_dimension,
|
|
const struct Fft *fft,
|
|
uint8_t *stack,
|
|
size_t stack_size);
|
|
|
|
ScratchStatus concrete_cpu_bootstrap_lwe_ciphertext_u64_scratch(size_t *stack_size,
|
|
size_t *stack_align,
|
|
size_t glwe_dimension,
|
|
size_t polynomial_size,
|
|
const struct Fft *fft);
|
|
|
|
void concrete_cpu_circuit_bootstrap_boolean_vertical_packing_lwe_ciphertext_u64(uint64_t *ct_out_vec,
|
|
const uint64_t *ct_in_vec,
|
|
const uint64_t *lut,
|
|
const double *fourier_bsk,
|
|
const uint64_t *fpksk,
|
|
size_t ct_out_dimension,
|
|
size_t ct_out_count,
|
|
size_t ct_in_dimension,
|
|
size_t ct_in_count,
|
|
size_t lut_size,
|
|
size_t lut_count,
|
|
size_t bsk_decomposition_level_count,
|
|
size_t bsk_decomposition_base_log,
|
|
size_t bsk_glwe_dimension,
|
|
size_t bsk_polynomial_size,
|
|
size_t bsk_input_lwe_dimension,
|
|
size_t fpksk_decomposition_level_count,
|
|
size_t fpksk_decomposition_base_log,
|
|
size_t fpksk_input_dimension,
|
|
size_t fpksk_output_glwe_dimension,
|
|
size_t fpksk_output_polynomial_size,
|
|
size_t fpksk_count,
|
|
size_t cbs_decomposition_level_count,
|
|
size_t cbs_decomposition_base_log,
|
|
const struct Fft *fft,
|
|
uint8_t *stack,
|
|
size_t stack_size);
|
|
|
|
ScratchStatus concrete_cpu_circuit_bootstrap_boolean_vertical_packing_lwe_ciphertext_u64_scratch(size_t *stack_size,
|
|
size_t *stack_align,
|
|
size_t ct_out_count,
|
|
size_t ct_in_dimension,
|
|
size_t ct_in_count,
|
|
size_t lut_size,
|
|
size_t lut_count,
|
|
size_t bsk_glwe_dimension,
|
|
size_t bsk_polynomial_size,
|
|
size_t fpksk_output_polynomial_size,
|
|
size_t cbs_decomposition_level_count,
|
|
const struct Fft *fft);
|
|
|
|
void concrete_cpu_construct_concrete_csprng(struct Csprng *mem, struct Uint128 seed);
|
|
|
|
void concrete_cpu_construct_concrete_fft(struct Fft *mem, size_t polynomial_size);
|
|
|
|
int concrete_cpu_crypto_secure_random_128(struct Uint128 *u128);
|
|
|
|
void concrete_cpu_decrypt_glwe_ciphertext_u64(const uint64_t *glwe_sk,
|
|
uint64_t *polynomial_out,
|
|
const uint64_t *glwe_ct_in,
|
|
size_t glwe_dimension,
|
|
size_t polynomial_size);
|
|
|
|
void concrete_cpu_decrypt_lwe_ciphertext_u64(const uint64_t *lwe_sk,
|
|
const uint64_t *lwe_ct_in,
|
|
size_t lwe_dimension,
|
|
uint64_t *plaintext);
|
|
|
|
void concrete_cpu_destroy_concrete_csprng(struct Csprng *mem);
|
|
|
|
void concrete_cpu_destroy_concrete_fft(struct Fft *mem);
|
|
|
|
void concrete_cpu_encrypt_ggsw_ciphertext_u64(const uint64_t *glwe_sk,
|
|
uint64_t *ggsw_out,
|
|
uint64_t input,
|
|
size_t glwe_dimension,
|
|
size_t polynomial_size,
|
|
size_t level,
|
|
size_t base_log,
|
|
double variance,
|
|
struct Csprng *csprng,
|
|
const struct CsprngVtable *csprng_vtable);
|
|
|
|
void concrete_cpu_encrypt_lwe_ciphertext_u64(const uint64_t *lwe_sk,
|
|
uint64_t *lwe_out,
|
|
uint64_t input,
|
|
size_t lwe_dimension,
|
|
double variance,
|
|
struct Csprng *csprng,
|
|
const struct CsprngVtable *csprng_vtable);
|
|
|
|
void concrete_cpu_extract_bit_lwe_ciphertext_u64(uint64_t *ct_vec_out,
|
|
const uint64_t *ct_in,
|
|
const double *fourier_bsk,
|
|
const uint64_t *ksk,
|
|
size_t ct_out_dimension,
|
|
size_t ct_out_count,
|
|
size_t ct_in_dimension,
|
|
size_t number_of_bits,
|
|
size_t delta_log,
|
|
size_t bsk_decomposition_level_count,
|
|
size_t bsk_decomposition_base_log,
|
|
size_t bsk_glwe_dimension,
|
|
size_t bsk_polynomial_size,
|
|
size_t bsk_input_lwe_dimension,
|
|
size_t ksk_decomposition_level_count,
|
|
size_t ksk_decomposition_base_log,
|
|
size_t ksk_input_dimension,
|
|
size_t ksk_output_dimension,
|
|
const struct Fft *fft,
|
|
uint8_t *stack,
|
|
size_t stack_size);
|
|
|
|
ScratchStatus concrete_cpu_extract_bit_lwe_ciphertext_u64_scratch(size_t *stack_size,
|
|
size_t *stack_align,
|
|
size_t ct_out_dimension,
|
|
size_t ct_in_dimension,
|
|
size_t bsk_glwe_dimension,
|
|
size_t bsk_polynomial_size,
|
|
const struct Fft *fft);
|
|
|
|
void concrete_cpu_init_lwe_bootstrap_key_u64(uint64_t *lwe_bsk,
|
|
const uint64_t *input_lwe_sk,
|
|
const uint64_t *output_glwe_sk,
|
|
size_t input_lwe_dimension,
|
|
size_t output_polynomial_size,
|
|
size_t output_glwe_dimension,
|
|
size_t decomposition_level_count,
|
|
size_t decomposition_base_log,
|
|
double variance,
|
|
Parallelism parallelism,
|
|
struct Csprng *csprng,
|
|
const struct CsprngVtable *csprng_vtable);
|
|
|
|
void concrete_cpu_init_lwe_circuit_bootstrap_private_functional_packing_keyswitch_keys_u64(uint64_t *lwe_pksk,
|
|
const uint64_t *input_lwe_sk,
|
|
const uint64_t *output_glwe_sk,
|
|
size_t input_lwe_dimension,
|
|
size_t output_polynomial_size,
|
|
size_t output_glwe_dimension,
|
|
size_t decomposition_level_count,
|
|
size_t decomposition_base_log,
|
|
double variance,
|
|
Parallelism parallelism,
|
|
struct Csprng *csprng,
|
|
const struct CsprngVtable *csprng_vtable);
|
|
|
|
void concrete_cpu_init_lwe_keyswitch_key_u64(uint64_t *lwe_ksk,
|
|
const uint64_t *input_lwe_sk,
|
|
const uint64_t *output_lwe_sk,
|
|
size_t input_lwe_dimension,
|
|
size_t output_lwe_dimension,
|
|
size_t decomposition_level_count,
|
|
size_t decomposition_base_log,
|
|
double variance,
|
|
struct Csprng *csprng,
|
|
const struct CsprngVtable *csprng_vtable);
|
|
|
|
void concrete_cpu_init_secret_key_u64(uint64_t *sk,
|
|
size_t dimension,
|
|
struct Csprng *csprng,
|
|
const struct CsprngVtable *csprng_vtable);
|
|
|
|
size_t concrete_cpu_keyswitch_key_size_u64(size_t decomposition_level_count,
|
|
size_t _decomposition_base_log,
|
|
size_t input_dimension,
|
|
size_t output_dimension);
|
|
|
|
void concrete_cpu_keyswitch_lwe_ciphertext_u64(uint64_t *ct_out,
|
|
const uint64_t *ct_in,
|
|
const uint64_t *keyswitch_key,
|
|
size_t decomposition_level_count,
|
|
size_t decomposition_base_log,
|
|
size_t input_dimension,
|
|
size_t output_dimension);
|
|
|
|
size_t concrete_cpu_lwe_packing_keyswitch_key_size(size_t glwe_dimension,
|
|
size_t polynomial_size,
|
|
size_t decomposition_level_count,
|
|
size_t input_dimension);
|
|
|
|
void concrete_cpu_mul_cleartext_lwe_ciphertext_u64(uint64_t *ct_out,
|
|
const uint64_t *ct_in,
|
|
uint64_t cleartext,
|
|
size_t lwe_dimension);
|
|
|
|
void concrete_cpu_negate_lwe_ciphertext_u64(uint64_t *ct_out,
|
|
const uint64_t *ct_in,
|
|
size_t lwe_dimension);
|
|
|
|
size_t concrete_cpu_secret_key_size_u64(size_t lwe_dimension);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif // __cplusplus
|
|
|
|
#endif /* CONCRETE_CPU_FFI_H */
|