欢迎光临散文网 会员登陆 & 注册

【密码学编程·Miracl函数库】生成静态库miracl.lib

2020-09-19 19:18 作者:C语言实验室  | 我要投稿

MIRACL(Multiprecision Integer and Rational Arithmetic C/c++ Library)是一套由Shamus Software Ltd.所开发的一套关于大数运算函数库,用来设计与大数运算相关的密码学之应用,包含了RSA 公开密码学、Diffie-Hellman密钥交换(Key Exchange)、AES、DSA数字签名,还包含了较新的椭圆曲线密码学(Elliptic Curve Cryptography)等等。

准备工作

下载Miracl:https://github.com/miracl/MIRACL

解压后,显示共44个项目(文件和文件夹一共44个)

解压后的文件

拿到源文件后,编译生成静态文件miracl.lib,具体编译方法稍后介绍。

编译环境采用:Visio Studio 2017

编译静态库文件.lib

打开lib文件夹下的bc32doit.bat文件(以文本格式打开)

bc32doit.bat

根据要求,将下列文件全部复制到一个文件夹中(新建一个文件夹存储),这些文件可能分布在不同文件夹中

mirdef.h32

mirdef.h

添加 big.h, ec2.h, ecn.h, flash.h, zzn.h(非必须,可以没有)

 mrcore.c

 mrarth0.c

 mrarth1.c

 mrarth2.c

mralloc.c

mrsmall.c

mrio1.c

 mrio2.c

 mrgcd.c

 mrjack.c

 mrxgcd.c

 mrarth3.c

 mrbits.c

 mrrand.c

 mrprime.c

 mrcrt.c

 mrscrt.c

 mrmonty.c

 mrpower.c

 mrsroot.c

 mrcurve.c

 mrfast.c

 mrshs.c

 mrshs256.c

 mrshs512.c

 mrsha3.c

 mrfpe.c

 mraes.c

 mrgcm.c

 mrstrong.c

 mrlucas.c

 mrzzn2.c

 mrzzn2b.c

 mrzzn3.c

 mrzzn4.c

 mrbrick.c

 mrebrick.c

 mrec2m.c

mrecn2.c

 mrgf2m.c

 mrflash.c

 mrfrnd.c

 mrdouble.c

 mrround.c

 mrbuild.c

 mrflsh1.c

 mrpi.c

mrflsh2.c

 mrflsh3.c

mrflsh4.c

打开Visual stadio 2017,选择【文件】-【新建】-【项目】-【Visual C++】-【空项目】,项目名称随便取

新建空项目

将miracl文件夹下的文件放到新项目的工程目录下,和工程源文件在同一级

复制所有选中的文件到工程目录

在项目名称上右键-选择【添加】-【现有项】,将复制过来的所有文件都添加进来

添加所有文件

添加进来的文件如图所示

添加文件效果

在项目名称上右键-选择【属性】,修改参数内容,然后【应用】-【确定】

修改参数

在项目名称上右键-选择【生成】或者【重新生成】

生成后的结果

至此编译完成,编译后的文件存在debug文件夹下

编译后的文件

测试静态库文件

重新打开VS2017,选择【文件】-【新建】-【项目】-【Visual C++】-【空项目】,并为项目命名

将编译好的静态文件和前面用到的所有头文件全部复制到新的测试工程源文件中,并将静态库文件的名称改为miracl(重命名"CompileMiracl.lib" 为 "miracl.lib" ,"CompileMiracl.pdb" 为 "miracl.pdb")

测试项目中添加静态文件和头文件

在项目名上右键-现在【添加】-【现有项】,将前面添加到源文件加下的所有文件都添加到工程中

添加所有复制过来的文件

在项目名上右键-【添加】-【新建项】-【C++文件】,新建一个main.c文件(源文件),将下面的代码,然后点击运行即可

extern "C"

{

#include "miracl.h"

#include "mirdef.h"

}

#pragma comment(lib,"miracl.lib")

int main()

{

miracl *mip = mirsys(500, 16); //初始化miracl系统

 

big n = mirvar(8); //初始化n,必须有

 

cotnum(n, stdout); //打印n

cinnum(n, stdin); //输入n

cotnum(n, stdout); //再次打印n

return 0;

}

代码

至此,测试成功输出

【密码学编程·Miracl函数库】生成静态库miracl.lib的评论 (共 条)

分享到微博请遵守国家法律