【5】Miracl大数库的编译及Ubuntu/子系统中搭建交叉编译环境

好久没有写博文了,也怪自己没有养成好的习惯…
最近在做论文中的实验,需要使用Miracl大数库,这是我初入信息安全领域第一次接触它,并利用miracl编程。这里首先总结几种环境下的Miracl库编译:

VS2019

VS2019下编译miracl库很简单,网上相关帖子也很多,我是参考https://blog.csdn.net/qq_36290650/article/details/83421230编译的,不多说了,没遇到什么问题。

Ubuntu18.04及子系统

我首先安装了虚拟机,在安装虚拟机及Ubuntu时遇到了很多问题,一开始安装的VMware15.0+Ubuntu16,结果装不上去,“黑屏”、“虚拟机繁忙”等问题,我尝试了很多博主说的方法,都装不上去,后来见有的博主说降低虚拟机的版本可行,于是我换了vm12,结果还是黑屏,重启,就这么卸载、重启了几次,电脑还差点gg,我偶然见到一帖子说,VMware很多版本与win10的最新版本是不兼容的,最好安装较新的版本,于是,我搭配了VMware15.5+Ubuntu18.04,非常顺利地安装好了,也没出现卡机、黑屏等问题。

Win10 Ubuntu18.04安装教程也有一堆的帖子,不做介绍。

一切就绪后,就开始编译miracl库了……

  • 新建文件夹miracl
$ mkdir miracl
  • 解压
    将miracl文件夹下的miracl.zip进行解压
miracl$ unzip -j -aa -L miracl.zip
  • 编译
miracl$ bash linux64 (注意,如果是32位ubuntu,则是bash linux)

编译完成后,就可以在miracl文件夹中看到生成的miracl.a了,然后就可以编写C程序了,并用gcc -O2 main.c -o main -I./ -L./ miracl.a来编译了。

Ubuntu子系统中,可以直接进入windows盘进行操作,比如/mnt/e/miracl

接下来,开始搭建交叉编译环境了……

Ubuntu18.04

  • 安装交叉编译工具
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabi
  • 检查是否安装好
arm-linux-gnueabi-gcc -v

成功打印出版本信息就OK了。

Ubuntu18.04子系统

在子系统中安装时将apt-get替换成aptitude即可,至于apt-get和aptitude之间的区别可以自行百度。

安装adb

这次实验我使用的是Ubuntu子系统,需要使用手机真机测试,所以下载了adb工具,解压到C盘根目录下,此处需要添加一下adb的环境变量。
【5】Miracl大数库的编译及Ubuntu/子系统中搭建交叉编译环境_第1张图片

arm编译miracl库

参考文档中arm.txt,首先将mirdef.h替换成

/*
 *   MIRACL compiler/hardware definitions - mirdef.h
 */


#define MIRACL 32
#define MR_LITTLE_ENDIAN      

/* or possibly 
#define MR_BIG_ENDIAN      
*/

#define mr_utype int
#define MR_IBITS 32
#define MR_LBITS 32
#define mr_dltype long long
#define mr_unsign32 unsigned int
#define mr_unsign64 unsigned long long
#define MAXBASE ((mr_small)1<<(MIRACL-1))


#define MR_NOASM

进而在shell中对以下c文件进行编译

armcc -I. -c -O2 mrcore.c
armcc -I. -c -O2 mrarth0.c
armcc -I. -c -O2 mrarth1.c
armcc -I. -c -O2 mrarth2.c
armcc -I. -c -O2 mralloc.c
armcc -I. -c -O2 mrsmall.c
armcc -I. -c -O2 mrio1.c
armcc -I. -c -O2 mrio2.c
armcc -I. -c -O2 mrgcd.c
armcc -I. -c -O2 mrjack.c
armcc -I. -c -O2 mrbits.c
armcc -I. -c -O2 mrxgcd.c
armcc -I. -c -O2 mrarth3.c
armcc -I. -c -O2 mrrand.c
armcc -I. -c -O2 mrprime.c
armcc -I. -c -O2 mrcrt.c
armcc -I. -c -O2 mrscrt.c
armcc -I. -c -O2 mrmonty.c
armcc -I. -c -O2 mrpower.c
armcc -I. -c -O2 mrsroot.c
armcc -I. -c -O2 mrcurve.c
armcc -I. -c -O2 mrfast.c
armcc -I. -c -O2 mrshs.c
armcc -I. -c -O2 mrshs256.c
armcc -I. -c -O2 mrshs512.c
armcc -I. -c -O2 mraes.c
armcc -I. -c -O2 mrgcm.c
armcc -I. -c -O2 mrlucas.c
armcc -I. -c -O2 mrstrong.c
armcc -I. -c -O2 mrbrick.c
armcc -I. -c -O2 mrebrick.c
armcc -I. -c -O2 mrgf2m.c
armcc -I. -c -O2 mrec2m.c
armcc -I. -c -O2 mrzzn2.c
armcc -I. -c -O2 mrzzn2b.c
armcc -I. -c -O2 mrzzn3.c
armcc -I. -c -O2 mrecn2.c

注意:以上是文档中的内容,我们需要将文档中armcc替换成arm-linux-gnueabi-gcc

接着,按照文档中说的,生成静态库miarcl.a

armar -rc miracl.a mrcore.o mrarth0.o mrarth1.o mrarth2.o mralloc.o mrsmall.o
armar -r  miracl.a mrio1.o mrio2.o mrjack.o mrgcd.o mrxgcd.o mrarth3.o mrgcm.o
armar -r  miracl.a mrrand.o mrprime.o mrcrt.o mrscrt.o mrmonty.o mrcurve.o 
armar -r  miracl.a mrfast.o mrshs.o mraes.o mrlucas.o mrstrong.o mrbrick.o 
armar -r  miracl.a mrebrick.o mrec2m.o mrgf2m.o mrpower.o mrsroot.o mrzzn2b.o
armar -r  miracl.a mrshs256.o mrshs512.o mrbits.o mrzzn2.o mrzzn3.o mrecn2.o

注意:同样需要将文档中armar替换成arm-linux-gnueabi-ar

例程测试:

arm-linux-gnueabi-gcc -static -o pk-demo.out pk-demo.c -I./ -L./ miracl.a

我们可以在e盘看到编译好的pk-demo.out文件了。

真机测试

USB连接电脑和手机,传输文件模式,并打开开发者工具,将刚才编译生成的pk-demo.out文件复制到sdcard下(可以新建个文件夹比如我的myadb)。
运行C盘adb文件夹中的cmd.exe,输入adb devices,若打印出如下图:
【5】Miracl大数库的编译及Ubuntu/子系统中搭建交叉编译环境_第2张图片
说明已经连接上手机了,再输入adb shell,如图:【5】Miracl大数库的编译及Ubuntu/子系统中搭建交叉编译环境_第3张图片
便可对手机进行操作了。
找到pk-demo.out文件,复制到**/data/local/tmp**下(该位置可以修改权限),修改权限即可运行.out:
【5】Miracl大数库的编译及Ubuntu/子系统中搭建交叉编译环境_第4张图片
运行结果如下:
【5】Miracl大数库的编译及Ubuntu/子系统中搭建交叉编译环境_第5张图片
我在编写自己的例程编译运行时还遇到了打印乱码的问题,此时需要退出手机连接,输入命令adb> chcp 65001改一下编码再重新连接就可以了。

也有使用arm-linux-androideabi-gcc工具的,打算回学校后在老机子上尝试一下,接下来就要进行论文的其他工作了。

你可能感兴趣的:(Miracl)