• 大小: 7.54MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-17
  • 语言: 其他
  • 标签: 同态加密  

资源简介

基于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个文件信息

评论

共有 条评论