资源简介
基于RWLE假设的同态加密算法的实现,简单易懂,自己写的。
代码片段和文件信息
#include “FHE.h“
void uniform_rand(int maxint sk[]int n) //uniform random in [-maxmax]
{
srand((int)time(0));
for(int i=0; i sk[i] = rand()%(2*max+1)-max;
}
void uniform_rand2(ZZ maxZZ a[]int n) //uniform random in (-max/2max/2]Rq
{
ZZ tmp;
SetSeed(to_ZZ(int(time(0))));
for(int i=0; i {
RandomLen(tmp170);
a[i] = (tmp%max + 1); //(0max]
if(abs(a[i]) > abs(a[i]-max))
a[i] = a[i] - max; //(-max/2max/2]
}
}
void uniform_rand3(int maxint e[]int n) //uniform random in [0max)Gaussian
{
srand((int)time(0));
for(int i=0; i e[i] = rand()%max;
}
void error(ZZ_pE &exint max)
{
int e[N];
uniform_rand3(maxeN);
ZZ_pX tmpx;
tmpx.rep.SetLength(N);
for(int i=0; i tmpx.rep[i] = to_ZZ_p(e[i]);
ex._ZZ_pE__rep = tmpx;
}
void error(ZZ_pE &uxZZ_pE &fxZZ_pE &gxint max) //3*N
{
int e[3*N];
uniform_rand3(maxe3*N);
ZZ_pX tmpxtmpx2tmpx3;
tmpx.rep.SetLength(N);
tmpx2.rep.SetLength(N);
tmpx3.rep.SetLength(N);
for(int i=0; i {
tmpx.rep[i] = to_ZZ_p(e[i]);
tmpx2.rep[i] = to_ZZ_p(e[i+N]);
tmpx3.rep[i] = to_ZZ_p(e[i+2*N]);
}
ux._ZZ_pE__rep = tmpx;
fx._ZZ_pE__rep = tmpx2;
gx._ZZ_pE__rep = tmpx3;
}
void ufg(ZZ_pE &uxZZ_pE &fxZZ_pE &gxint max)
{
//error(uxmax); //ux
//sleep(1);
//error(fxmax); //fx
//sleep(1);
//error(gxmax); //gx
error(uxfxgxmax);
}
void readVni(mat_ZZ_p& Vni)
{
ifstream fin_Vni(“Vni.txt“);
fin_Vni>>Vni;
fin_Vni.close();
}
void readV(mat_ZZ_p& V)
{
ifstream fin_V(“V.txt“);
fin_V>>V;
fin_V.close();
}
void mapToPlain(const mat_ZZ_p &Vniconst vec_ZZ_p &vec_mx_crt_pZZ_pE &m) //crt to plain
{
//mat_ZZ_p Vni; //V^{-1}
//Vni.SetDims(NN);
//ifstream fin_Vni(“Vni.txt“);
//fin_Vni>>Vni;
//fin_Vni.close();
vec_ZZ_p vec_mx_p;
vec_mx_p.SetLength(N);
vec_mx_p = Vni*vec_mx_crt_p;
//mul_mat_vec(vec_mx_pVnivec_mx_crt_p);
m._ZZ_pE__rep.rep = vec_mx_p;
}
void mapToSlots(const mat_ZZ_p &Vconst ZZX &mxvec_ZZ_p &vec_result)
{
vec_ZZ_p mx2;
mx2.SetLength(N);
for(int i=0; i mx2[i] = to_ZZ_p(mx.rep[i]);
vec_result = V*mx2;
//mul_mat_vec(vec_resultVmx2);
}
void fileToPoly(char* fileint *data)
{
FILE *fp;
if((fp=fopen(file“r“)) == NULL)
{
cout<<“cannot open the file :“< exit(0);
}
int i = 0;
while(!feof(fp))
{
for(int j = 0; j < DIM; j++)
fscanf(fp“%d “data+i*DIM+j);
i++;
}
}
bool fileExist(char* file)
{
fstream _file;
_file.open(fileios::in);
if(!_file)
{
return false;
}
else
{
return true;
}
}
void FHE::secretKeyGen()
{
int max = 2; //01
int sk[N];
uniform_rand3(maxskN);
ZZ_pX tmpx;
tmpx.rep.SetLength(N);
for(int i=0; i tmpx.rep[i] = to_ZZ_p(sk[i]);
skx._ZZ_pE__rep = tmpx;
ofstream fout_sk(“.\\key\\skx.txt“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 329450 2014-06-09 23:31 HOM\HE\ciphertexts\add0.txt
文件 329614 2014-06-09 23:31 HOM\HE\ciphertexts\add1.txt
文件 329409 2014-06-09 23:31 HOM\HE\ciphertexts\c0x.txt
文件 329414 2014-06-09 23:31 HOM\HE\ciphertexts\c0x2.txt
文件 331001 2014-06-09 23:31 HOM\HE\ciphertexts\c1x.txt
文件 327778 2014-06-09 23:31 HOM\HE\ciphertexts\c1x2.txt
文件 329500 2014-06-09 23:31 HOM\HE\ciphertexts\mult0.txt
文件 329531 2014-06-09 23:31 HOM\HE\ciphertexts\mult1.txt
文件 329481 2014-06-09 23:31 HOM\HE\ciphertexts\mult2.txt
文件 329435 2014-06-09 23:29 HOM\HE\ciphertexts\sub0.txt
文件 328912 2014-06-09 23:29 HOM\HE\ciphertexts\sub1.txt
文件 2055808 2014-06-09 21:55 HOM\HE\data\100k4d.txt
文件 8411 2014-06-09 23:30 HOM\HE\FHE.cpp
文件 3564 2014-06-09 23:08 HOM\HE\FHE.h
文件 60165 2014-06-09 23:31 HOM\HE\FHE.o
文件 1149 2014-06-09 21:50 HOM\HE\he.dev
文件 1174723 2014-06-09 23:36 HOM\HE\he.exe
文件 327212 2014-06-09 21:58 HOM\HE\key\pk0.txt
文件 312681 2014-06-09 21:58 HOM\HE\key\pk1.txt
文件 11877 2014-06-09 21:58 HOM\HE\key\skx.txt
文件 1048 2014-06-09 23:36 HOM\HE\Makefile.win
文件 4787 2014-06-09 23:31 HOM\HE\test.cpp
文件 20979 2014-06-09 23:31 HOM\HE\test.o
文件 967 2009-08-14 20:53 HOM\ntl-5.5.2\doc\arrow1.gif
文件 942 2009-08-14 20:53 HOM\ntl-5.5.2\doc\arrow2.gif
文件 955 2009-08-14 20:53 HOM\ntl-5.5.2\doc\arrow3.gif
文件 18494 2009-08-14 20:53 HOM\ntl-5.5.2\doc\config.txt
文件 3603 2009-08-14 20:53 HOM\ntl-5.5.2\doc\conversions.txt
文件 18180 2009-08-14 20:53 HOM\ntl-5.5.2\doc\copying.txt
文件 1379 2009-08-14 20:53 HOM\ntl-5.5.2\doc\flags.txt
............此处省略762个文件信息
评论
共有 条评论