参考: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. 2018-2019-20175334实验四《Android程序设计》实验报告

    2018-2019-20175334实验四<Android程序设计>实验报告 一.实验内容及步骤 实验四 Android程序设计-1 Android Stuidio的安装测试: 参考< ...

  2. mysql 原有的主键情况下设置自增字段

    mysql 的自增字段只能是主键,如果原表已经有主键,需要设置自增字段应该怎么做呢? 1.alter table bu_staff  drop primary key;  先删除表的主键  id为原表 ...

  3. 直接打印类,调用toString()方法

    直接打印类,调用的是继承的Object类的toString()方法,Object类的toString()方法是这样实现的:getClass().getName() + "@" + ...

  4. BigInteger和BigDecimal的基本用法

    整型大数 BigInteger: import java.math.BigInteger; import java.util.Scanner; public class Main { public s ...

  5. HIT大作业——hello的一生

    hello的一生 关键词:计算机系统:功能:流程:P2P;O2O;hello                              目  录   第1章 概述- 4 - 1.1 Hello简介 - ...

  6. input输入框在ios手机上获取焦点后有一个灰色阴影

    遇到的场景: 有一个输入框 设置 outline:none 然后我又想给他设置获取焦点的颜色 然后 我给input 设置 border 为 1px t透明的 然后 获取焦点的时候 重新设置border ...

  7. 计算系数(NOIP2011提高LuoguP1313)

    一道数论好题,知识点涉及扩展欧几里得,快速幂,逆元,二项式定理,模运算,组合数等. (别问为啥打了快速幂不用费马小求逆元...我就练习下扩欧) (数据就应该再加大些卡掉n^2递推求组合数的) #inc ...

  8. TCL create list from file

    proc create_list {filename {prompt verbose} {opts "" }} { set list_return {} if {[file exi ...

  9. Mobius反演定理-BZOJ2154

    This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 莫比乌斯定理(未 ...

  10. Spark编程基础_RDD初级编程

    摘要:Spark编程基础_RDD初级编程 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素 ...