格密码开源库PALISADE的使用

格密码开源库PALISADE

PALISADE是新泽西理工学院的一个格密码开源项目,也是现在少有的成熟稳定的格密码开源库,这篇文章主要介绍该库的使用与构建。

事实上该库的ReadMe文档介绍的十分详细,但是如果不熟悉C++开源项目的构建和make命令,可能自己使用的时候会非常折磨,因为网上关于这方面的知识少之又少。

项目地址
项目主页

根据文档构建项目

文档中介绍了PALISADE在Ubuntu、CentOS、Windows中的构建。很不幸,在三个系统中我都构建了一遍,三个系统都构建成功,但开发过程并不顺利,不然谁又想要被折磨三遍呢…

主要构建过程根据项目文档来做大体相似;

首先clone该项目
git clone https://gitlab.com/palisade/palisade-release.git
下载项目的第三方依赖
git submodule sync --recursive
git submodule update --init  --recursive

这一步可能会出现问题,首先是centos可能会无法识别这个命令,即便在ubuntu或者Windows中识别成功,也会显示

翻译过来就是===>
子依赖项目注册成功    
开始clone.....

然后开始漫长地等待…
后面我发现这样下载是肯定没法成功的,这两句命令就是下载依赖的第三方库,在项目主页中可以看到有一个third-party文件夹,里面有四个文件夹长的不太一样,点其中一个可以发现会跳转到一个GitHub开源库,所以该文件夹就是一个第三方依赖的链接,我们要做的就是把四个依赖下载下来;作者在ReadMe也说了:
PALISADE downloads submodules for cereal, google-benchmark, google-test, and gperftools open-source libraries

所以干脆开四个终端,把四个依赖项目一个一个git clone 下来;

注意!下载下来的文件夹名字是GitHub上的项目名,要按照作者设定的文件夹名字放,不然待会儿make的时候会找不到文件;

我的习惯是把四个空文件夹删掉,然后下载四个项目,再把两个google的开源库文件夹重命名

构建项目

当你直接在palisade中运行make,他会提醒你按照他的方式build,正如其MakeFile所言:

	@echo "PALISADE has converted to CMake"
	@echo "Try this:"
	@echo mkdir build
	@echo cd build
	@echo cmake ..
	@echo make
	@echo make install \(to install in 'installed'\)

所以按照他要求命令运行就行了;

mkdir build
cd build
cmake ..

这里的cmake是把外层的CMakeLists.txt构建到build文件夹内,会下载和检查系统的依赖,这一步应该是为了保护项目的完整性,反正要是你环境不对或者自己瞎弄,顶多也就是build文件夹内文件混乱,删了重来就行;
注意如果这里报错,他也是正常的打印内容,要注意去看她有没有说,类似要求GCC版本超过6.1这样的话,如果有就代表下载失败,你需要按照他的要求更新环境再cmake

然后继续操作

make

这一步到33%左右大概率会报错,会提示你test/Main_TestAll.cpp中的COLOR_GREENCOLOR_RED无法识别,我不认识这两个是什么关键字,简单看了一下代码,出现这两个关键字的几行代码都是打印内容的,没有什么用处,所以我把代码里的这几行都注释掉再make就可以正常构建了;
在这里插入图片描述
这一步时间有点久。

make install

正式构建项目生成库文件
Linux路径就是默认的/usr/local/include/usr/local/lib,Windows的在C:\Program Files (x86)\PALISADE里,Windows的路径我也找了好久,而且这路径带空格带全角括号,之后使用的时候非常非常难受…

至此,项目构建完毕

构建测试用例
make testall
bin/examples/pke/simple-integers

印象中没什么坑,这两步是把几个库的examples的cpp文件构建了一遍,bin/examples里全是可执行程序,跑一下结果正常就行了;

Tip

Windows
如作者所言,Windows中需要安装MSYS2【http://www.msys2.org/】去构建项目;
这个网站要翻墙,本来做一个免费的CSDN下载链接的,但他说资源已存在上传不了,那就算了;
这个软件需要先把依赖和MinGW啥的都下好,然后就可以直接用make命令打包编译了;
其实这个命令行里cd /;再ls可以看到是一个模拟的Linux系统,就在你自己的安装目录,他模拟了一个Linux文件系统,所以你要是不想上传这个项目,就直接把项目拖拽到Windows里的该目录里;
在这里插入图片描述
但是虽然打包生成了dll和头文件,可能也无法使用,我查了一晚上看源码搜bug,有一些问题我觉得很奇怪…
“__int128” , “DoubleNativeInt” , “__uint128_t” , “attribute” cannot be recognized
比如这个__int128在Windows中是无效的,但是宏定义中if条件为true,是会运行的,就很奇怪…

我虽然打包编译测试都成功了,但是在自己项目中运行是失败的,所以最终我放弃了Windows系统.

后面的之后填坑…

库文件的使用

lib更新过要sudo ldconfig使其生效

g++ -o main simple-integers.cpp -L. -lPALISADEpke -lPALISADEsignature -lPALISADEcore -lPALISADEbinfhe -lPALISADEabe

echo $LD_LIBRARY_PATH
vim ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/local/lib

生成库文件并使用

g++ palisadeuse.cpp -fPIC -shared -o libpause.so

复制libpause过去

编写头文件

#ifndef pause_H_
#define pause_H_
int test();
#endif /* MAX_H_ */

调用
g++ -o mainxy usedemo.cpp -L. -lpause -lPALISADEpke -lPALISADEsignature -lPALISADEcore -lPALISADEbinfhe -lPALISADEabe

然后就有mainxy了

琢磨了一下,可以换一种方式实现
直接用python调so太麻烦了,可以直接生成可执行文件,通过传参和输出的值实现效果;

第二种方法可以用:https://blog.csdn.net/u013066730/article/details/104838191?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control

关于这个subprocess这个库有很多函数可以用:https://www.cnblogs.com/zhou2019/p/10582716.html

subprocess.check_output()

亲测可以传参并拿到out值

vv.exe可以测试

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值