Files
MP-SPDZ/FHE/NoiseBounds.h
2021-07-02 15:50:34 +10:00

66 lines
1.5 KiB
C++

/*
* NoiseBound.h
*
*/
#ifndef FHE_NOISEBOUNDS_H_
#define FHE_NOISEBOUNDS_H_
#include "Math/bigint.h"
int phi_N(int N);
class FHE_Params;
class SemiHomomorphicNoiseBounds
{
protected:
static const int FHE_epsilon = 55;
const bigint p;
const int phi_m;
const int n;
const int sec;
int slack;
mpf_class sigma;
bigint B_clean;
bigint B_scale;
bigint drown;
mpf_class c1, c2;
mpf_class V_s;
void produce_epsilon_constants();
public:
SemiHomomorphicNoiseBounds(const bigint& p, int phi_m, int n, int sec,
int slack, bool extra_h, const FHE_Params& params);
// with scaling
bigint min_p0(const bigint& p1);
// without scaling
bigint min_p0();
bigint min_p0(bool scale, const bigint& p1) { return scale ? min_p0(p1) : min_p0(); }
static double min_phi_m(int log_q, double sigma);
static double min_phi_m(int log_q, const FHE_Params& params);
};
// as per ePrint 2012:642 for slack = 0
class NoiseBounds : public SemiHomomorphicNoiseBounds
{
bigint B_KS;
public:
NoiseBounds(const bigint& p, int phi_m, int n, int sec, int slack,
const FHE_Params& params);
bigint U1(const bigint& p0, const bigint& p1);
bigint U2(const bigint& p0, const bigint& p1);
bigint min_p0(const bigint& p0, const bigint& p1);
bigint min_p0(const bigint& p1);
bigint min_p1();
bigint opt_p1();
bigint opt_p0() { return min_p0(opt_p1()); }
double optimize(int& lg2p0, int& lg2p1);
};
#endif /* FHE_NOISEBOUNDS_H_ */