格密码开源库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_GREEN
和COLOR_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可以测试
格密码开源库PALISADE的使用相关推荐
- 10、格密码-抗量子计算
目录 格密码 格的定义 格密码背景 格问题 格密码发展 格密码特点 LLL算法 LWE(Learning With Errors) 参考推荐: ***格密码学习笔记(一)_中科院大学网安学院五班的博客 ...
- NTL密码算法开源库--综述
2021SC@SDUSC NTL密码算法开源库--综述 项目综述 NTL算法库是开放源码的自由软件,具有专业处理任意精度大整数.实数的计算数论与计算代数的高性能可移植c++库,提供了任意大整数.任意精 ...
- NTL密码算法开源库-大整数ZZ类(一)
2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(一) 本章综述 代码分析 贝祖公式 本章综述 大整数ZZ类主要实现了任意长度大整数表示.最大公因数.Jacobi符号和素性检验.笔者将通过 ...
- NTL密码算法开源库-大整数ZZ类(三)
2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(三) 中国剩余定理 一次同余式 乘法逆元 简化剩余的等价描述 二次同余式 雅可比符号 中国剩余定理 //中国剩余定理模板代码 typede ...
- NTL密码算法开源库(数论库)代码分析项目--综述
2021SC@SDUSC NTL密码算法开源库(数论库)代码分析项目--综述 项目综述 NTL开源代码库的安装和使用 NTL代码开源库主要解决的问题 项目分工以及核心代码的分配 项目综述 NTL算法库 ...
- Miracle密码算法开源库(一)源码分析 :mraes.c
2021SC@SDUSC 山东大学软件学院软件工程应用与实践 一.mraes.c结构 mraec.c的总体结构如下,具有fbsub.ftable1等数组,主要实现了aes_decrypt .aes_e ...
- SEAL全同态加密开源库(十二) CKKS-源码浅析
2021SC@SDUSC 2021-12-19 前言 前两篇我们讨论了SEAL对于BFV的实现.本篇开始我将开始讨论SEAL对于CKKS的实现. 照例我会先补充理论知识,然后分析源码native/ex ...
- iOS可能用到的开源库和第三方组件
1.通过CocoaPods安装 [AFNetworking](https://github.com/AFNetworking/AFNetworking) 网络请求组件[FMDB](https://gi ...
- IOS常用开源库(转)
1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是 ...
最新文章
- HTTP Continuation or non-HTTP traffic
- 详解python实现FP-TREE进行关联规则挖掘(带有FP树显示功能)附源代码下载(3)
- 使用Jupyter notebook,按下ctrl+enter后,一直出现In[*]呢?
- python心得体会200字_50行代码让python自动生成文章
- 微软电脑适合什么人用_#微软surface pro使用心得# 大学生挑电脑参考/平板与电脑二合一到底买的是什么...
- 数据结构探险系列—栈篇-学习笔记
- ssh远程登录Jupyter notebook(七月GPU服务器)
- 页面局部ajax文件上传,页面通过ajax实现文件上传功能
- 人肉搜索、人肉语言及人肉程序设计
- 【测试理论】如何做好探索性测试(二)—增加维度
- master matlab,MOEA-master
- Python流程控制
- 数学函数在线绘图方法—geogebra3D、2D
- android windows 分区大小,真正的安卓Windows双系统,RemixOS Windows共存系统安装+附带ROOT+大分区...
- 蓝桥杯2013年第四届C++B组省赛真题
- 联想服务器 操作系统,联想服务器的raid配置及Server2012操作系统的安装.pdf
- Python pycharm一个文件夹如何变成一个model
- 基于Android的聊天系统
- 小米AX1800开SSH权限
- 嵌入式开发中的防御性C语言编程
热门文章
- arcgis唯一值数已达到默认限制(大于3365536).
- Rxjava源码分析之IO.Reactivex.Observable
- Ubuntu 14.04下Gedit编辑器设置为多语言编辑及集成开发环境
- 世界主要的大半岛有哪些?
- 元宵爬虫-YuanXiaoSpider
- DeepMind最新研究:AI击败了人类,设计了更好的经济机制
- 移动端之在不同尺寸大小的手机上展示同一效果解决方案(修正二) by FungLeo
- 为啥人类从1970年1月1日开始计时?
- Type-c 充电听歌二合一转接器方案
- 短信验证码、手机验证码等为什么是6位?