1. HElib简介
HElib是一个基于C++语言的同态加密开源软件库,底层依赖于NTL数论运算库和GMP多精度运算库实现,下载地址在:github HElib。
2. HElib安装的前期准备
HElib可以在Ubuntu、CentOS、Fedora和macOS上安装,本篇博客以 CentOS 为例。安装HElib的方法有两种,其中博客:Hang Shao HElib 详细讲解了HElib的第二种安装方法,本篇博客就不重复啰嗦,我们来讲讲 第一种 安装方法,也是较为简单的一种。
第一种安装方法不需要自己配置安装:NTL(https://libntl.org/) 和 GMP(https://gmplib.org/) 两个库,相对轻松一些。
HElib在CentOS上安装所需要的环境:
git >= 2.27 GNU make >= 4.2 g++ >= 9.3.0 (建议使用 g++ 10.3.0) cmake >= 3.16 m4 >= 1.4.16 patchelf >= 0.9
2.1. git 安装/升级
首先使用命令查看当前的git版本:
git --version
若版本小于2.27,则升级:
yum install git
2.2. GNU make 安装/升级
首先使用命令查看当前的make 版本:
make -v
若版本小于4.2,则升级:
yum install make
2.3. g++ 安装/升级
g++的安装和升级与其他库不同,由于系统中不同的软件可能需要不同的g++版本,所以不能直接覆盖安装g++。
这里,我们使用devtoolset来对g++的版本进行控制:
更新yum:yum update;
安装centos-release-scl:yum install centos-release-scl;
安装devtoolset:yum install devtoolset-10-gcc*(若要安装其他版本的gcc/g++,可以把10换成其他版本号);
将g++10加入scl进行控制:scl enable devtoolset-10 bash(要使用scl来控制其他版本的gcc/g++,只需要把10换成对应版本号即可);
激活g++10环境:source /opt/rh/devtoolset-10/enable(要激活其他版本的gcc/g++,只需要把10换成对应版本号即可);
查看g++版本:gcc -v
2.4. cmake 安装/升级
首先使用命令查看当前的cmake 版本:
cmake -version
若版本小于3.16,则升级(直接升级):
yum install cmake
如果直接升级的方法不成功,那就只好编译安装了:
在官网:https://cmake.org/files/ 选择版本大于3.16的cmake并复制链接,例如我们选择:cmake-3.22.2.tar.gz;
下载cmake:wget https://cmake.org/files/v3.22/cmake-3.22.2.tar.gz;
解压缩cmake:tar zxvf cmake-3.22.2.tar.gz,然后打开目录:cd cmake-3.22.2;
删除低版本的cmake:yum remove cmake -y;
编译cmake:./configure --prefix=/usr/local/cmake;
安装cmake:make && make install;
创建软连接:ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake;
修改环境变量:vim /etc/profile,在文件末尾加入两行(注意检查是否之前已存在):export CMAKE_HOME=/usr/local/cmake、export PATH=$PATH:$CMAKE_HOME/bin;
刷新配置文件:source /etc/profile。
2.5. m4和patchelf 安装/升级
直接安装即可:
yum install m4
yum install patchelf
3. HElib的下载和安装
(1) 上面已经说过,HElib的主页在:https://github.com/homenc/HElib,那么我们直接git下来就好了:
git clone https://github.com/homenc/HElib
(2) 然后在HElib目录内创建一个build目录,用于构建项目:
cd HElib
mkdir build
cd build
(3) 在build目录内构建项目:
cmake -DPACKAGE_BUILD=ON -DENABLE_TEST=ON ..
这里有必要说一下,HElib的作者在cmake时提供了-DCMAKE_INSTALL_PREFIX选择用于改变项目构建的路径,但是如果你已经有root权限了,就不需要这个步骤了。如果你没有root权限,那就要改成:
cmake -DPACKAGE_BUILD=ON -DENABLE_TEST=ON -DCMAKE_INSTALL_PREFIX=/home/alice/helib_install ..
其中,/home/alice/helib_install是一个自定义的路径,你想把HElib安装在哪里,就把这个路径改成那里的路径。
(4) 编译
cmake结束后,就进行编译:
make -j16
这里的16是指启用16个线程进行编译,可以改多,不建议改得太少,否则这个步骤会进行地很慢。
(5) 进行测试,这个步骤可以省略:
ctest
说一下,这个命令只有在cmake步骤时设置了-DENABLE_TEST=ON时有用,否则是执行不了的。
(6) 安装HElib
make install
如果在cmake时没有设置-DCMAKE_INSTALL_PREFIX,那么HElib默认安装在/usr/local/helib_pack下。
我们打开这个目录:
cd /usr/local/helib_pack
目录中有4个子目录:include、lib、lib64和share
drwxr-xr-x. 4 root root 43 Jan 28 05:34 include lrwxrwxrwx. 1 root root 5 Jan 28 05:34 lib -> lib64 drwxr-xr-x. 3 root root 184 Jan 28 05:42 lib64 drwxr-xr-x. 5 root root 42 Jan 28 05:34 share
分别把它们复制到/usr/local的对应位置:
cp -r ./include/* /usr/local/include/ cp -r ./lib/lib* /usr/local/lib/ cp -r ./lib/pkgconfig/* /usr/local/lib/pkgconfig/ cp -r ./lib64/lib* /usr/local/lib64/ cp -r ./lib64/pkgconfig/* /usr/local/lib64/pkgconfig/ cp -r ./share/cmake/ /usr/local/share/ cp -r ./share/doc/* /usr/local/share/doc/ cp -r ./share/info/* /usr/local/share/info/
(7) 更新lib文件
ldconfig
如果共享库文件安装到了/lib或/usr/lib目录下,那么需执行一下ldconfig命令。
ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,
搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。
到此为止,HElib就安装好啦。
4. 运行HElib示例程序
让我们回到之前git clone下来的HElib目录,里面有个examples子目录,进入它:
cd ./examples
和上面的步骤一样,我们需要创建一个build目录,用于构建项目:
mkdir build
cd build
由于我们已经把HElib安装到/usr/local/下了,所以可以直接进行cmake:
cmake -Dhelib_DIR=/usr/local/share/cmake/helib/ ..
然后make:
make -j16
完成后,在build目录内会生成一个bin目录,打开它:
cd ./bin
运行其中一个示例程序试试看:
cp ../../BGV_country_db_lookup/countries_dataset.csv ./ ./BGV_country_db_lookup
注意,cp ../../BGV_country_db_lookup/countries_dataset.csv ./是BGV_country_db_lookup特有的命令,因为这是一个查找程序,而供其查找的数据表就是countries_dataset.csv,所以需要复制过来。
执行了./BGV_country_db_lookup之后,出现如下界面:
输入一个国家名字,例如China,然后按回车:
啥也没查着,没有China的数据,不过这个示例程序依然运行成功了。完成。