資源簡介
基于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? 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個文件信息
評論
共有 條評論