参考:Linux下编译并使用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密码库的更多相关文章

  1. Linux下编译并使用miracl密码库

    参考:http://blog.sina.com.cn/s/blog_53fdf1590102y9ox.html MIRACL(Multiprecision Integer and RationalAr ...

  2. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  3. linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  4. linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  5. Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件)

    Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件) https://blog.csdn.net/woainishifu/article/details/79712110 我们在做项 ...

  6. vs2015下编译免费开源的jpeg库,ijg的jpeg.lib

    vs2015下编译免费开源的jpeg库,ijg的jpeg.lib 1. 去Independent JPEG Group官网www.ijg.org下载jpegsrc,我下载的版本是jpegsrc9c.z ...

  7. centos7.2下编译安装&&使用-git代码库

    centos7.2下编译安装git Git简介 Git是一个分布式版本控制系统 Git vs SVN SVN是典型的集中式版本控制起,版本库集中存放在服务器,当我们用自己的电脑干活儿的时候,需要先从中 ...

  8. mysql5.6.34-debug Source distribution在树莓派下编译的几个错误

    raspberrypi下编译mysql5.6 debug版源码. 1. 启动错误 和mysqld相关的文件及文件夹权限必须设置为mysql用户可读可写可执行,特别是/var/run/mysqld/目录 ...

  9. 嵌入式 Linux下编译并使用curl静态库

    #x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...

随机推荐

  1. java web HttpServletRequest

    一.HttpServletRequest介绍 HttpServletRequest 对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,通过这个对象提供的方法,可以获得客户端请求的所有信息. ...

  2. 微信公众号h5页面alert去掉域名

    h5页面内嵌到微信公众号提示信息alert的时候会显示域名,去掉域名显示重写alert方法: window.alert = function(name){ var iframe = document. ...

  3. 微信小程序 selectComponent 值为null

    这个东西的执行时间感觉有点迷, 我遇到的情况是在page 的onReady  onShow 当中 使用 selectComponent 无法获取到子组件的对象 只好退而求其次  在需要触发的方法当中 ...

  4. VScode 编辑器快捷键被占用

    在家办公这个开发环境实在是让人受不鸟 .mysql .vscode 对连QQ都没有运行还是不行.排查最终发现了这个家伙—搜狗输入法.微软输入法 这两个把系统快捷键占得那个全 我这个全局搜索死活用不了, ...

  5. Spring核心知识

    目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spri ...

  6. django入门与实践(续)

    完善博客 博客页面设计 页面概要 1.博客主页面 主页面内容 文章标题列表,超链接 发表博客按钮(超链接) 列表编写思路 取出数据库中所有文章对象 将文章对象们打包成列表,传递到前端 前端页面把文章以 ...

  7. 大数据-Storm

    Storm 流式处理框架 Storm是实时的,分布式,高容错的计算系统.java+cljoure Storm常驻内存,数据在内存中处理不经过磁盘,数据通过网络传输. 底层java+cljoure构成, ...

  8. 【sql】sql必知必会_01

    数据: /* Navicat Premium Data Transfer Source Server : localhost_3306 Source Server Type : MySQL Sourc ...

  9. 4.用springboot写的第一个程序--helloworld

    这是我自己在controller层建的hello类 运行,选画方框的那个.我查了一晚上,可算知道为啥运行不了了. 然后再浏览器输入网址就ok了 为了大力!好好学习!

  10. 【14】 DFS 机器人活动范围 (static插曲)

    题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动到方格外),也不能进入行坐 ...