mirror of
https://github.com/data61/MP-SPDZ.git
synced 2026-01-08 21:18:03 -05:00
66 lines
1.5 KiB
C++
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_ */
|