树莓派下编译并使用miracl密码库
MIRACL用户手册:https://wenku.baidu.com/view/d542f2ed0975f46527d3e1dc.html
具体过程。
1、 从https://github.com/miracl/MIRACL/archive/master.zip下载github下的项目源码。我下载的是.zip压缩包,名字为MIRACL-master.zip。
2、 建立一个目录miracl用来放置源码
mkdir miracl
3、 将下载成功的MIRACL-mater.zip放到上述创建的miracl目录
cd /path/to/miracl
cp /path/to/MIRACL-mater.zip ./
4、 解压zip包,把所有独立的文件都放在这个目录,即将所有非目录的文件解压在当前目录下
unzip -j -aa -L MIRACL-master.zip
5、 用shell文件编译。由于树莓派采用的是arm版处理器,用linux-arm(参考linux64改造的,代码在文末)。执行如下命令
bash linux-arm
如果提示没有安装g++,请使用 sudo apt-get install g++ 进行安装。
6、 运行源码提供的示例代码 pk-demo,测试一下是否编译成功。
./pk-demo
这个程序是个简单检验,迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange)协议的正确性,如果输出无错误则表示编译完成


编译完了,自然是要用的,下面介绍两种在C程序中使用miracl库的方法。
方法一:
1、 源码编译完后的必需的文件是两个头文件miracl.h和mirdef.h以及编译后的静态函数库miracl.a,需要在自己写的C程序中使用。
2、 输入如下代码,命名为main.c
mkdir miracl-test
cd miracl-test
nano main.c
#include "miracl.h" void main()
{
big a, b, c;
miracl *mip = mirsys(5000, 16);
a=mirvar(8);
b=mirvar(7);
c=mirvar(0);
add(a, b, c);
cotnum(c, stdout);
}
将miracl.a, miracl.h, mirdef.h拷贝到与main.c所在目录,浏览一下当前项目目录下的文件
cp ../miracl/miracl.a miracl.a
cp ../miracl/miracl.h miracl.h
cp ../miracl/mirdef.h mirdef.h
ls
3、 gcc编译并输出main执行程序
gcc main.c miracl.a -o main
./main

方法二:
1、 将miracl.a放在系统对应的/usr/lib
sudo cp ../miracl/miracl.a /usr/lib/libmiracl.a
2、 在/usr/include下面建立文件夹miracl
sudo mkdir /usr/include/miracl
3、 将miracl下的所有头文件拷贝到/usr/include/miracl
sudo cp ../miracl/*.h /usr/include/miracl
4、 调用miracl时便可直接在自己的程序头文件中加入
#include <miracl/miracl.h>
使用方法一中的例子,即将main.c中的第一行改为include
5、 gcc编译并输出main执行程序
gcc main1.c -lmiracl -o main1
./main1

linux-arm编译代码如下:
rm *.exe
rm miracl.a
cp mirdef.arm mirdef.h
gcc -c -marm -O2 mrcore.c
gcc -c -marm -O2 mrarth0.c
gcc -c -marm -O2 mrarth1.c
gcc -c -marm -O2 mrarth2.c
gcc -c -marm -O2 mralloc.c
gcc -c -marm -O2 mrsmall.c
gcc -c -marm -O2 mrio1.c
gcc -c -marm -O2 mrio2.c
gcc -c -marm -O2 mrgcd.c
gcc -c -marm -O2 mrjack.c
gcc -c -marm -O2 mrxgcd.c
gcc -c -marm -O2 mrarth3.c
gcc -c -marm -O2 mrbits.c
gcc -c -marm -O2 mrrand.c
gcc -c -marm -O2 mrprime.c
gcc -c -marm -O2 mrcrt.c
gcc -c -marm -O2 mrscrt.c
gcc -c -marm -O2 mrmonty.c
gcc -c -marm -O2 mrpower.c
gcc -c -marm -O2 mrsroot.c
gcc -c -marm -O2 mrcurve.c
gcc -c -marm -O2 mrfast.c
gcc -c -marm -O2 mrshs.c
gcc -c -marm -O2 mrshs256.c
gcc -c -marm -O2 mrshs512.c
gcc -c -marm -O2 mrsha3.c
gcc -c -marm -O2 mrfpe.c
gcc -c -marm -O2 mraes.c
gcc -c -marm -O2 mrgcm.c
gcc -c -marm -O2 mrlucas.c
gcc -c -marm -O2 mrzzn2.c
gcc -c -marm -O2 mrzzn2b.c
gcc -c -marm -O2 mrzzn3.c
gcc -c -marm -O2 mrzzn4.c
gcc -c -marm -O2 mrecn2.c
gcc -c -marm -O2 mrstrong.c
gcc -c -marm -O2 mrbrick.c
gcc -c -marm -O2 mrebrick.c
gcc -c -marm -O2 mrec2m.c
gcc -c -marm -O2 mrgf2m.c
gcc -c -marm -O2 mrflash.c
gcc -c -marm -O2 mrfrnd.c
gcc -c -marm -O2 mrdouble.c
gcc -c -marm -O2 mrround.c
gcc -c -marm -O2 mrbuild.c
gcc -c -marm -O2 mrflsh1.c
gcc -c -marm -O2 mrpi.c
gcc -c -marm -O2 mrflsh2.c
gcc -c -marm -O2 mrflsh3.c
gcc -c -marm -O2 mrflsh4.c
cp mrmuldv.ccc mrmuldv.c
gcc -c -marm -O2 mrmuldv.c
ar rc miracl.a mrcore.o mrarth0.o mrarth1.o mrarth2.o mralloc.o mrsmall.o mrzzn2.o mrzzn3.o
ar r miracl.a mrio1.o mrio2.o mrjack.o mrgcd.o mrxgcd.o mrarth3.o mrbits.o mrecn2.o mrzzn4.o
ar r miracl.a mrrand.o mrprime.o mrcrt.o mrscrt.o mrmonty.o mrcurve.o mrsroot.o mrzzn2b.o
ar r miracl.a mrpower.o mrfast.o mrshs.o mrshs256.o mraes.o mrlucas.o mrstrong.o mrgcm.o
ar r miracl.a mrflash.o mrfrnd.o mrdouble.o mrround.o mrbuild.o
ar r miracl.a mrflsh1.o mrpi.o mrflsh2.o mrflsh3.o mrflsh4.o
ar r miracl.a mrbrick.o mrebrick.o mrec2m.o mrgf2m.o mrmuldv.o mrshs512.o mrsha3.o mrfpe.o
rm mr*.o
gcc -marm -O2 bmark.c miracl.a -o bmark
gcc -marm -O2 fact.c miracl.a -o fact
g++ -c -marm -O2 big.cpp
g++ -c -marm -O2 zzn.cpp
g++ -c -marm -O2 ecn.cpp
g++ -c -marm -O2 ec2.cpp
g++ -c -marm -O2 crt.cpp
g++ -marm -O2 mersenne.cpp big.o miracl.a -o mersenne
g++ -marm -O2 brent.cpp big.o zzn.o miracl.a -o brent
g++ -c -marm -O2 flash.cpp
#g++ -marm -O2 sample.cpp flash.o miracl.a -o sample(该行编译有问题,暂放以待后续解决!!)
g++ -marm -O2 ecsgen.cpp ecn.o big.o miracl.a -o ecsgen
g++ -marm -O2 ecsign.cpp ecn.o big.o miracl.a -o ecsign
g++ -marm -O2 ecsver.cpp ecn.o big.o miracl.a -o ecsver
g++ -marm -O2 pk-demo.cpp ecn.o big.o miracl.a -o pk-demo
g++ -c -marm -O2 polymod.cpp
g++ -c -marm -O2 poly.cpp
g++ -marm -O2 schoof.cpp polymod.o poly.o ecn.o crt.o zzn.o big.o miracl.a -o schoof
将mrmuldv.g64换为mrmuldv.ccc

树莓派下编译并使用miracl密码库的更多相关文章
- Linux下编译并使用miracl密码库
参考:http://blog.sina.com.cn/s/blog_53fdf1590102y9ox.html MIRACL(Multiprecision Integer and RationalAr ...
- linux下编译qt5.6.0静态库——configure配置
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件)
Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件) https://blog.csdn.net/woainishifu/article/details/79712110 我们在做项 ...
- vs2015下编译免费开源的jpeg库,ijg的jpeg.lib
vs2015下编译免费开源的jpeg库,ijg的jpeg.lib 1. 去Independent JPEG Group官网www.ijg.org下载jpegsrc,我下载的版本是jpegsrc9c.z ...
- centos7.2下编译安装&&使用-git代码库
centos7.2下编译安装git Git简介 Git是一个分布式版本控制系统 Git vs SVN SVN是典型的集中式版本控制起,版本库集中存放在服务器,当我们用自己的电脑干活儿的时候,需要先从中 ...
- mysql5.6.34-debug Source distribution在树莓派下编译的几个错误
raspberrypi下编译mysql5.6 debug版源码. 1. 启动错误 和mysqld相关的文件及文件夹权限必须设置为mysql用户可读可写可执行,特别是/var/run/mysqld/目录 ...
- 嵌入式 Linux下编译并使用curl静态库
#x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...
随机推荐
- linux交互执行命令,expect
转载 http://donex.blog.51cto.com/2005970/834467 原文比较乱,只能参考 本地交互执行: 1. 修改shell#!/usr/bin/expectset USER ...
- SQL With As的用法
WITH AS,也叫子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到.可以使SQL语句的可读性更高,也可以在UNION ALL的不同部分, ...
- [HNOI2014] 道路堵塞 - 最短路,线段树
对不起对不起,辣鸡蒟蒻又来用核弹打蚊子了 完全ignore了题目给出的最短路,手工搞出一个最短路,发现对答案没什么影响 所以干脆转化为经典问题:每次询问删掉一条边后的最短路 如果删掉的是非最短路边,那 ...
- k线、指标绘制
我接触的绘制有两种:gdi+和qt绘图.可以灵活的绘制任何想要的东西. 先上效果图吧. 如下:基于gdi+的股指和股票的绘制.上面是沪深成分股实时生成的股票指数走势,下面是IF主力走势和开平仓位置. ...
- IntelliJ IDEA 2017.3尚硅谷-----配置 Tomcat
- python UI自动化之切换iframe
python+selenium写UI自动化的时候,经常会遇到需要切换iframe的情况,这里介绍几种切换iframe的方式 1.使用id定位 driver.switch_to.frame(" ...
- ajax post
前端 $.post("url",JSON.stringify({ a:a, ... }), function(data){ }, 'json'); 后端 @PostMapping( ...
- Light Up Your Business Promotions With LED Keychain
Imagine you want to insert the car key into the keyhole in the dark. What would you do? You will def ...
- DSP---TI CCSv5.5.x-Windows安装
TI CCSv5.5.x(正式版)-Windows版本 国内2013年9月13日首发安装CCSv5.5图示 *请关掉防火墙及杀毒软件进行安装 第一步 第二步 安装程序检测到挂起的重新启动,这可能在安装 ...
- c#项目调用Python模块的方法
将Python模块用pyinstaller打包成exe程序 下载安装UPX((http://upx.sourceforge.net/)) ,并把路径加到环境变量中. UPX是开源的加壳和压缩exe的程 ...