格密码开源库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可以测试

格密码开源库PALISADE的使用相关推荐

  1. 10、格密码-抗量子计算

    目录 格密码 格的定义 格密码背景 格问题 格密码发展 格密码特点 LLL算法 LWE(Learning With Errors) 参考推荐: ***格密码学习笔记(一)_中科院大学网安学院五班的博客 ...

  2. NTL密码算法开源库--综述

    2021SC@SDUSC NTL密码算法开源库--综述 项目综述 NTL算法库是开放源码的自由软件,具有专业处理任意精度大整数.实数的计算数论与计算代数的高性能可移植c++库,提供了任意大整数.任意精 ...

  3. NTL密码算法开源库-大整数ZZ类(一)

    2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(一) 本章综述 代码分析 贝祖公式 本章综述 大整数ZZ类主要实现了任意长度大整数表示.最大公因数.Jacobi符号和素性检验.笔者将通过 ...

  4. NTL密码算法开源库-大整数ZZ类(三)

    2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(三) 中国剩余定理 一次同余式 乘法逆元 简化剩余的等价描述 二次同余式 雅可比符号 中国剩余定理 //中国剩余定理模板代码 typede ...

  5. NTL密码算法开源库(数论库)代码分析项目--综述

    2021SC@SDUSC NTL密码算法开源库(数论库)代码分析项目--综述 项目综述 NTL开源代码库的安装和使用 NTL代码开源库主要解决的问题 项目分工以及核心代码的分配 项目综述 NTL算法库 ...

  6. Miracle密码算法开源库(一)源码分析 :mraes.c

    2021SC@SDUSC 山东大学软件学院软件工程应用与实践 一.mraes.c结构 mraec.c的总体结构如下,具有fbsub.ftable1等数组,主要实现了aes_decrypt .aes_e ...

  7. SEAL全同态加密开源库(十二) CKKS-源码浅析

    2021SC@SDUSC 2021-12-19 前言 前两篇我们讨论了SEAL对于BFV的实现.本篇开始我将开始讨论SEAL对于CKKS的实现. 照例我会先补充理论知识,然后分析源码native/ex ...

  8. iOS可能用到的开源库和第三方组件

    1.通过CocoaPods安装 [AFNetworking](https://github.com/AFNetworking/AFNetworking) 网络请求组件[FMDB](https://gi ...

  9. IOS常用开源库(转)

    1.  AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是 ...

最新文章

  1. HTTP Continuation or non-HTTP traffic
  2. 详解python实现FP-TREE进行关联规则挖掘(带有FP树显示功能)附源代码下载(3)
  3. 使用Jupyter notebook,按下ctrl+enter后,一直出现In[*]呢?
  4. python心得体会200字_50行代码让python自动生成文章
  5. 微软电脑适合什么人用_#微软surface pro使用心得# 大学生挑电脑参考/平板与电脑二合一到底买的是什么...
  6. 数据结构探险系列—栈篇-学习笔记
  7. ssh远程登录Jupyter notebook(七月GPU服务器)
  8. 页面局部ajax文件上传,页面通过ajax实现文件上传功能
  9. 人肉搜索、人肉语言及人肉程序设计
  10. 【测试理论】如何做好探索性测试(二)—增加维度
  11. master matlab,MOEA-master
  12. Python流程控制
  13. 数学函数在线绘图方法—geogebra3D、2D
  14. android windows 分区大小,真正的安卓Windows双系统,RemixOS Windows共存系统安装+附带ROOT+大分区...
  15. 蓝桥杯2013年第四届C++B组省赛真题
  16. 联想服务器 操作系统,联想服务器的raid配置及Server2012操作系统的安装.pdf
  17. Python pycharm一个文件夹如何变成一个model
  18. 基于Android的聊天系统
  19. 小米AX1800开SSH权限
  20. 嵌入式开发中的防御性C语言编程

热门文章

  1. arcgis唯一值数已达到默认限制(大于3365536).
  2. Rxjava源码分析之IO.Reactivex.Observable
  3. Ubuntu 14.04下Gedit编辑器设置为多语言编辑及集成开发环境
  4. 世界主要的大半岛有哪些?
  5. 元宵爬虫-YuanXiaoSpider
  6. DeepMind最新研究:AI击败了人类,设计了更好的经济机制
  7. 移动端之在不同尺寸大小的手机上展示同一效果解决方案(修正二) by FungLeo
  8. 为啥人类从1970年1月1日开始计时?
  9. Type-c 充电听歌二合一转接器方案
  10. 短信验证码、手机验证码等为什么是6位?