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
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.hls
3、 gcc编译并输出main执行程序
gcc main.c miracl.a -o main./main
方法二:
1、 将miracl.a放在系统对应的/usr/lib
cp /miracl/miracl.a /usr/lib/libmiracl.a
2、 在/usr/include下面建立文件夹miracl
mkdir /usr/include/miracl
3、 将miracl下的所有头文件拷贝到/usr/include/miracl
cp ./miracl/*.h /usr/include/miracl
4、 调用miracl时便可直接在自己的程序头文件中加入
#include <miracl/miracl.h>
使用方法一中的例子,即将main.c中的第一行改为include
5、 gcc编译并输出main执行程序
gcc main.c -lmiracl -o main ./main
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.ccp mrmuldv.ccc mrmuldv.cgcc -c -marm -O2 mrmuldv.car 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 factg++ -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
来源:https://www.cnblogs.com/little-kwy/p/12285955.html