windows环境下安装charm-crypto(python版本)_未完全完成

本人是密码学小白,但最近需要用到相关的算法,遂需要安装charm-cyrpto库,但是电脑磁盘空间又不太够了,不太想再装一个ubuntu18.04,于是尝试在windows下进行安装,有点费劲,记录如下:

参考链接:

1.Windows 上安装charm-crypto - 代码先锋网

2.indy-anoncreds/windows-installation-guide.md at master · hyperledger-indy/indy-anoncreds · GitHub

具体步骤:

一、预制包装

1. 为windows x64安装python3.5(我自己的windows是win11,我新建了一个python=3.5的conda虚拟环境)

2. 下载charm-crypto-win-x64.7z(在github链接里面有这个文件),将其中所有的.dll文件复制到C:\Windows\System32

3. easy_install的安装https://pypi.python.org/pypi/ez_setup,这一步我没有成功,只是升级了环境里的setuptools

pip install --upgrade setuptools

4. 在"...\indy-anoncreds-master\charm-crypto-win-x64\charm-crypto\Charm_Crypto-0.43-py3.5-win-amd64.egg"同级地址下打开命令行终端,安装charm-crypto:

easy_install Charm_Crypto-0.43-py3.5-win-amd64.egg

二、使用Mingw64和Python64位手动安装

1. 安装MYS2 MSYS2_64_installer

 

2.  打开MSYS2,更新软件包

pacman -Sy pacman
pacman -Syu
pacman -Su

MSYS2界面如下:

 3. 安装Mingw64工具链(从MSYS2 shell)

pacman -S mingw-w64-x86_64-gcc
pacman -S make

4. 安装charm-crypto依赖关系(从MSYS2 shell)

pacman -S bison
pacman -S openssl-devel
pacman -S gmp-devel

插播一条:(安装gcc其他依赖项)

pacman -S mingw-w64-x86_64-make
pacman -S mingw-w64-x86_64-gmp
pacman -S mingw-w64-x86_64-flint
pacman -S flex(应该是必须要安装这个,否则后面的./configure ...命令那里不能成功执行完)
pacman -S make

通过'which make'和'which gcc'确认make和gcc是否安装成功,如果已经安装,那么说明环境变量PATH没有添加,可以在MSYS2 shell中执行添加PATH的命令:

export PATH=/d/Softwares/Others/msys64/mingw64/bin:$PATH(注意替换成自己的路径)

查看PATH:

echo $PATH

tip:安装库之前可以把pacman的镜像源文件(pacman.conf中有提到它的镜像源文件在哪,可以据此查找)进行微调,即把国内的某个或某些源放在更前面(比如中科大ustc的源),这样某些库装起来会顺利一些

5. 构建PBC库(charm-crypto依赖项)

tip:在构建PBC库之前,注意把pbc解压到全英文路径下,否则make的时候可能会报错

 将文件解压,然后在MSYS2中进入解压后的文件路径,执行命令:

 ./configure --prefix=/mingw64 --disable-static --enable-shared
 make
 make install

 ./configure命令的结果:

 make命令的结果:

make install命令的结果:

6. 将mingw64/bin(我的是D:\Softwares\Others\msys64\mingw64\bin)添加到PATH中

7. 从gendef下载并提取gendef.exe,将gendef.exe复制到mingw64/bin下面

 8. 找到自己的python35安装的路径(我使用的是conda虚拟环境,其路径是D:\Softwares\Others\anaconda3\envs\encryption(一开始搞错了-D:\Softwares\Others\anaconda3\pkgs\python-3.5.6-he025d50_0)),将python35.dll复制到python路径下的libs下面

9. 在MSYS2 shell中,修补libpython35.a

cd cd /d/Softwares/Others/anaconda3/envs/encryption/libs(注意替换)
rename python35.lib old_python35.lib
gendef python35.dll
dlltool --dllname python35.dll --def python35.def --output-lib libpython35.a

执行命令:

得到结果:

 10. 修补python路径下/include/pyconfig.h,将其中的以下部分剪切:

然后将其粘贴到“#ifdef _MSC_VER”上面:

11. 打开python路径下/Lib/distutils/cygwinccompiler.py,将调用get_msvcr()的语句注释掉,有需要可以替换为pass

12. 将Charm-Crypto-0.43压缩包进行解压,在其中的以下文件顶部添加#include <stdint.h> (后来我又试验了0.50,程序还是比较旧,可能确实需要降低openssl版本)

Charm-Crypto-0.43\charm\core\math\integer\integermodule.h
Charm-Crypto-0.43\charm\core\math\elliptic_curve\ecmodule.h
Charm-Crypto-0.43\charm\core\math\pairing\pairingmodule.h

13. 打开Mingw64 shell("D:\Softwares\Others\msys64\mingw64.exe")

tip: 执行./configure命令时遇到了sphinx找不到、python-config找不到、libcrypto找不到的问题,

对于第一个问题,在虚拟环境encryption下安装sphinx,即conda install sphinx

对于第二个问题,我没解决,这个问题可能是因为windows下的python就没有这个东西(不确定)

对于第三个问题,是openssl的缘故,之前我们已经在MSYS shell中安装了openssl-dev,但是在mingw中找不到,于是我们可以继续为mingw安装pacman -S mingw-w64-x86_64-openssl,然后我们在Mingw64 shell中把conda路径添加到环境变量中,然后激活conda虚拟环境encryption:

# 1. 初始化 Conda
source /d/Softwares/Others/anaconda3/etc/profile.d/conda.sh
# 2. 激活环境
conda activate encryption

然后我们再看./configure是否顺利。

进入解压的Charm-Crypto-0.43文件夹,进行build,注意指定python.exe解释器(刚刚我们改动的那个python35对应的解释器)

 ./configure.sh --prefix=/mingw64 --python=/d/Softwares/Others/anaconda3/envs/encryption/python.exe
 make
 make install

到这里应该就差不多了,无奈openssl的版本可能和当前的程序有点差距,make总报错,需要改的内容比较多,由于时间有限,这里暂时不再继续尝试(我也试了降低openssl版本,即进行了openssl-1.0.2u版本的安装,但未成功编译安装1.0.2u的openssl)

我还是在虚拟机上整Ubuntu18.04吧

posted @ 2025-07-17 02:22  战神FGH  阅读(318)  评论(0)    收藏  举报