Files
concrete/backends/concrete-cpu/include/concrete-cpu.h
Pedro Alves 9462cdd924 feat(concrete_cpu): update with latest concrete-cpu main
- 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
2023-03-13 17:29:29 +01:00

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 */