charm-crypto安装记录

一、安装基础依赖

1.检查gcc、make、perl

gcc -v
make -v
perl -v

对应版本信息:
在这里插入图片描述
附安装指令

sudo apt-get install gcc make perl

2.安装依赖库m4、flex、bison

sudo apt-get update
sudo apt-get install m4 flex bison

3.安装python依赖包

运行以下指令进行安装:

sudo apt-get install python3-setuptools python3-dev libssl-dev

4.安装Python第三方包pyparsing

首先安装python3-pip:

 sudo apt-get install python3-pip

然后通过pip3指令安装pyparsing,这里最好指定一下版本。(推荐2.4.6)

pip3 install pyparsing==2.4.6

二、编译安装OpenSSL1.0.0

Charm-Crypto官网上可以看到,该框架原先的编译安装依赖于OpenSSL 1.0.0环境。0.50版本的更新记录显示,目前已经修复了在OpenSSL 1.1.0环境下引起编译错误的问题。所以不管你的OpenSSL版本是1.0.0还是1.1.0,应该都是可以顺利完成编译安装的。我为了保险起见还是更换了OpenSSL版本,如果有出现编译不成功可以参考这里的步骤。

openssl version

查看Ubuntu20.04自带的openssl版本为
在这里插入图片描述
如果后续实验有问题,可以考虑更换1.0.0s版本
附上OpenSSL官网的下载链接

下载完成后按照下面的步骤一步步进行:

1、将压缩包openssl-1.0.0s.tar.gz解压至/usr/local/src/目录

cd ~/Downloads/
sudo tar -zxvf openssl-1.0.0s.tar.gz -C /usr/local/src/

2、写入编译配置

cd /usr/local/src/openssl-1.0.0s/
sudo ./config shared --prefix=/usr/local/openssl --openssldir=/usr/lib/openssl

其中:
shared:表示生成动态库,这个字段一定不要忘了,后面会对生成的动态库做进一步的操作。
prefix:表示安装路径,为了避免各种软件混杂在一起,我就为OpenSSL单独创建了路径/usr/local/openssl
openssldir:表示配置文件目录(Ubuntu默认是/usr/lib/openssl,若设置其他目录,执行openssl命令时会有警告)
配置写入成功的话会显示如下的信息:

3、编译

成功写入配置后,执行以下指令进行编译:

cd /usr/local/src/openssl-1.0.0s/
sudo make

指令执行完毕如果显示如下信息就表示编译成功:

4、安装

成功编译后,执行以下指令进行安装:

cd /usr/local/src/openssl-1.0.0s/
sudo make install

指令执行完毕如果显示如下信息就表示安装成功:

我们根据先前配置的安装路径,ls就能看到OpenSSL已经顺利安装好了:
接下来要做的就是用OpenSSL 1.0.0s去替换自带的OpenSSL 1.1.1。

5、创建软链接

执行以下指令,通过软链接将OpenSSL 1.0.0s的命令和库文件链接到系统:

sudo mv /usr/bin/openssl /usr/bin/openssl.bak
sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/openssl/include/openssl /usr/include/openssl

6、动态库相关配置:

配置动态库软链接:

sudo ln -s /usr/local/openssl/lib/libssl.so.1.0.0 /usr/lib/libssl.so
sudo ln -s /usr/local/openssl/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so

刷新动态库配置/etc/ld.so.conf

sudo gedit /etc/ld.so.conf

在配置末尾增加一行,写入include /usr/local/openssl/lib然后保存退出。

7、测试

openssl version

如果安装成功,执行以上命令后会显示此时OpenSSL的版本号已经变为1.0.0s:

三、编译安装GMP

GMP是一个提供高精度算术的开源软件库,支持对有符号整数、有理数和浮点数进行运算。目前GMP官网提供的版本是6.2.1,我在下载链接中找到了历史版本的索引仓库,最终选择的版本是5.1.3:
在这里插入图片描述

1、下载好之后先解压到/usr/local/src路径下

cd ~/Downloads
sudo tar -jxvf gmp_5.1.3.tar.bz2 -C /usr/local/src

2、写入配置

cd /usr/local/src/gmp-5.1.3
sudo ./configure

写入后会显示如下信息:
在这里插入图片描述

3、编译

执行下面的指令进行编译:

cd /usr/local/src/gmp-5.1.3
sudo make

编译一会儿就能结束,会显示如下信息:
在这里插入图片描述

4、安装

执行下面的指令:

cd /usr/local/src/gmp-5.1.3
sudo make install

安装成功后会显示如下信息:
在这里插入图片描述

四、编译安装PBC

PBC全称是Pairing-Based Cryptography library,是一个基于GMP构造的C语言库。PBC支持创建各类离线椭圆曲线并建立例如双线性配对和多线性配对运算。我在PBC官网下载的是最新版本0.5.14:
在这里插入图片描述

1、下载好之后解压到/usr/local/src路径下

cd ./Downloads
sudo tar -zxvf pbc-0.5.14.tar.gz -C /usr/local/src/

2、写入配置

这里也不需要修改配置,直接执行以下命令即可:

cd /usr/local/src/pbc-0.5.14/
sudo ./configure

写入成功后显示如下信息:
在这里插入图片描述

3、编译

执行以下指令进行编译:

cd /usr/local/src/pbc-0.5.14/
sudo make

编译成功会显示如下信息:
在这里插入图片描述

4、安装

cd /usr/local/src/pbc-0.5.14/
sudo make install

安装成功后可以在终端里找到这样的显示信息:
在这里插入图片描述
注意此处信息
如果后续出现动态库的问题,可以参照此处提示处理
在这里插入图片描述

五、编译安装Charm-Crypto

经过以上的部署工作,终于可以进行Charm-Crypto的安装了。在Charm-Crypto官网上看到的安装教程只能支持到Ubuntu13.04。但Ubuntu官方早就不维护13.04版本。此处我采用的最新教程,利用GitHub上0.50版本的dev源码进行安装。

1、下载并解压到/usr/local/src路径下

直接选择dev版本。

下载后还是解压到/usr/local/src路径下:

cd ~/Downloads
sudo mv ./charm-dev.zip /usr/local/src/
cd /usr/local/src/
sudo unzip ./charm-dev.zip

2、写入编译配置

直接执行以下命令写入编译配置,不需要任何修改:

cd /usr/local/src/charm-dev/
sudo ./configure.sh

写入成功后会显示如下信息:
在这里插入图片描述

3、编译

成功写入编译配置后,执行以下命令进行编译:

# 目录/usr/local/src/charm-dev/
sudo make

这一步应该没什么问题,编译完成后会显示如下信息:
在这里插入图片描述

4、安装

执行以下命令进行最后的安装:

# 目录/usr/local/src/charm-dev/
sudo make install

顺利安装完应该可以看到以下信息:
在这里插入图片描述

六、启动Python验证安装

进行到这里,部署工作就基本完成了。下面验证一下安装成果,在pycharm中尝试import charm(需要先完成pycharm的python环境设置):
在这里插入图片描述

后续问题(已解决)

1.from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,pair,GT报错

问题如图:
在这里插入图片描述
解决方案:更换python3.7版本,重新对相应的库进行安装。
重要提示:在更换python版本前,可以先简单测试以下charm-crypto安装是否有问题。可以运行下面的一个简单例子:

from charm.toolbox.pairinggroup import PairingGroup,G1
group = PairingGroup('SS512')
data = 'just for test'
h = group.hash(data)
print(type(h),h)

如果代码运行结果未报错,说明charm的安装并没有问题。实际上这只是pycharm对G1等类型的一个错误判定。

另外不推荐卸载ubuntu自带的python(原始python为系统非常重要的组件),破坏了系统原有python很可能产生对系统不可逆的损害而需要重装。

一、查看当前系统python的指向

在这里插入图片描述
python3指向为python3.8

二、安装指定版本的python(3.7.9)

python下载网址
下载好安装包后解压到特定位置

tar -zxvf Python-3.7.9.tgz -C /home/cxx/
cd /home/cxx/Python-3.7.9

依次进行./configuremakesudo make install
make test结果如下:
make test结果
安装结果:
安装结果
更新默认python执行为Python3.7

 mv /usr/bin/python3 /usr/bin/python.bak
 # 注释条目不建议运行,存在问题
 # ln -s /usr/local/bin/python3 /usr/bin/python
 mv /usr/bin/pip /usr/bin/pip.bak
 ln -s /usr/local/bin/pip3 /usr/bin/pip

在这里插入图片描述
接着在3.7的环境下重新安装charm-crypto即可。

其他问题

1.apt-get update 报错

E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code

根据python社区的相关问题的解释,实际上是python版本替换导致的。此处可以修改/usr/lib/cnf-update-db

sudo vim /usr/lib/cnf-update-db

将文件的首行中的python3改为系统最初默认的python3.8,问题就解决了(有点治标不治本的意思)

2.无法打开软件与更新

这个问题本质还是python版本更换时指向导致的

解决方法:恢复Python 3.X指向原系统默认的版本,命令如下

rm /usr/bin/python3
ln -s /usr/bin/python3.8 /usr/bin/python3

参考汇总

Charm-Crypto开发框架保姆级搭建教程
ubuntu20.04中 Python的多版本管理
解决ModuleNotFoundError: No module named ‘CommandNotFound’问题
Ubuntu 16.04 LTS无法打开“系统设置”(System settings)中的“软件和更新”(Software & Updates)选项

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐