rs_tfhe 0.2.0

A high-performance Rust implementation of TFHE (Torus Fully Homomorphic Encryption) with advanced programmable bootstrapping capabilities
Documentation
#include "spqlios-fft.h"
#include <stdio.h>
#include <array>

extern "C" {
    typedef struct {
       FFT_Processor_Spqlios impl;
    } SpqliosImpl;

    SpqliosImpl* Spqlios_new(const int32_t N) {
        FFT_Processor_Spqlios *spqlios = new FFT_Processor_Spqlios(N);
        return (SpqliosImpl *)spqlios;
    }

    void Spqlios_destructor(SpqliosImpl *si) {
        si->impl.~FFT_Processor_Spqlios();
    }

    void Spqlios_ifft_lv1(SpqliosImpl *si, double *res, const uint32_t *src) {
        si->impl.execute_reverse_torus32(res, src);
    }

    void Spqlios_fft_lv1(SpqliosImpl *si, uint32_t *res, const double *src) {
        si->impl.execute_direct_torus32(res, src);
    }

    void Spqlios_poly_mul_1024(SpqliosImpl *si, uint32_t *res, const uint32_t *src_a, const uint32_t *src_b) {
        std::array<double, 1024> tmp_a;
        std::array<double, 1024> tmp_b;
        Spqlios_ifft_lv1(si, tmp_a.data(), src_a);
        Spqlios_ifft_lv1(si, tmp_b.data(), src_b);

        for (int i=0;i<512;i++){
            double aimbim = tmp_a[i + 512] * tmp_b[i + 512];
            double arebim = tmp_a[i] * tmp_b[i + 512];
            tmp_a[i] = tmp_a[i] * tmp_b[i] - aimbim;
            tmp_a[i + 512] = tmp_a[i + 512] * tmp_b[i] + arebim;
        }

        Spqlios_fft_lv1(si, res, tmp_a.data());
    }
}