电路自举: TLWE——> TRGSW
原理简单讲是:
-
TRGSW密文的每一行其实是TRLWE密文, 分析每个TRLWE加密的消息(利用b-as):
-
分析出每个TRLWE内部的消息后,利用TLWE分别构造相应消息的TRLWE密文,最后“组装”所有的TRLWE,得到TRGSW密文。其中需要密钥切换、门自举、隐私密钥切换等基本模块。
cd circuit-bootstrapping
cd src
make
spqlios/spqlios-fft-impl.cpp:350:8: error: passing argument 1 to restrict-qualified parameter aliases with argument 2 [-Werror=restrict]
sub4(tmp0,tmp0,tmp3); // re2
^~~~ ~~~~
spqlios/spqlios-fft-impl.cpp:351:8: error: passing argument 1 to restrict-qualified parameter aliases with argument 2 [-Werror=restrict]
add4(tmp1,tmp1,tmp2); // im2
^~~~ ~~~~
spqlios/spqlios-fft-impl.cpp:354:8: error: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Werror=restrict]
sub4(tmp0,re0,tmp0); // re - re
^~~~ ~~~~
spqlios/spqlios-fft-impl.cpp:355:8: error: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Werror=restrict]
sub4(tmp1,im0,tmp1); // im - im
^~~~ ~~~~
cc1plus: all warnings being treated as errors
make: *** [Makefile:23:spqlios/spqlios-fft-impl.o] 错误
如果出现上述问题,我把-Werror给去掉了
-Werror,它要求GCC将所有的警告当成错误进行处理
g++ -c -std=gnu++11 -g3 -Ofast -Wall -DUSE_FFT -DNDEBUG -o spqlios/fft_processor_spqlios.o spqlios/fft_processor_spqlios.cpp
gcc -c -g3 -Ofast -Wall -DUSE_FFT -DNDEBUG -o spqlios/lagrangehalfc_impl_fma.o spqlios/lagrangehalfc_impl_fma.s
g++ -c -std=gnu++11 -g3 -Ofast -Wall -DUSE_FFT -DNDEBUG -o poc_CircuitBootstrapping.o poc_CircuitBootstrapping.cpp
g++ -c -std=gnu++11 -g3 -Ofast -Wall -DUSE_FFT -DNDEBUG -o poc_karatsuba_optim.o poc_karatsuba.cpp
g++ -std=gnu++11 -g3 -Ofast -Wall -DUSE_FFT -DNDEBUG spqlios/spqlios-fft-fma.o spqlios/spqlios-ifft-fma.o spqlios/spqlios-fft-impl.o spqlios/fft_processor_spqlios.o spqlios/lagrangehalfc_impl_fma.o poc_CircuitBootstrapping.o poc_karatsuba_optim.o -o poc_CircuitBootstrapping
/usr/bin/ld: spqlios/spqlios-fft-fma.o: relocation R_X86_64_32S against `.text' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: spqlios/spqlios-ifft-fma.o: relocation R_X86_64_32S against `.text' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
make: *** [Makefile:29:poc_CircuitBootstrapping] 错误 1
如果又出现这种错误,relocation R_X86_64_32S against .text' can not be used when making a PIE object; recompile with -fPIE
, 我的解决办法是:Makefile文件中第一行 CFLAGS 后面添加了 -no-pie
这样就可以运行成功了:
generating the keys
generating preKS...
generating bk...
generating bkFFT...
generating privKS...
Input message: 1610612736, phase: 1594822302
starting circuit bootstrapping
finished circuit bootstrapping
total time (microsecs for 10 TRIALS)... 2321459