• Linux下编译并使用miracl密码库


    参考:http://blog.sina.com.cn/s/blog_53fdf1590102y9ox.html

    MIRACL(Multiprecision Integer and RationalArithmetic C/c++ Library)是一套由Shamus Software Ltd.所开发的一套关于大数运算函数库,用来设计与大数运算相关的密码学之应用,包含了RSA 公开密码学、Diffie-Hellman密钥交换(Key Exchange)、AES、DSA数字签名,还包含了较新的椭圆曲线密码学(Elliptic CurveCryptography)等等。运算速度快,并提供源代码。

    经过实验,Kali-Linux和Ubuntu 16.04都可成功编译与运行!!!

    最近做一道CTF题,里面用到了椭圆曲线加密算法,为了了解它的处理流程,特意下载了MIRACL源码准备使用。刚开始用windows平台下VS 2008编译,可以生成库文件miracl.lib。但新建项目写一个测试程序并添加该miracl.lib编译出现了一堆错误,总也找不到原因,只好转到Kali Linux下试试,下面是具体过程。

    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文件编译。如果是64位系统用linux64,如果是32位系统用linux。由于我的系统为64位Kali Linux,因此执行如下命令

    bash linux64

    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

    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

    linux64编译代码如下:

    rm *.exe
    rm miracl.a
    cp mirdef.h64 mirdef.h
    gcc -c -m64 -O2 mrcore.c
    gcc -c -m64 -O2 mrarth0.c
    gcc -c -m64 -O2 mrarth1.c
    gcc -c -m64 -O2 mrarth2.c
    gcc -c -m64 -O2 mralloc.c
    gcc -c -m64 -O2 mrsmall.c
    gcc -c -m64 -O2 mrio1.c
    gcc -c -m64 -O2 mrio2.c
    gcc -c -m64 -O2 mrgcd.c
    gcc -c -m64 -O2 mrjack.c
    gcc -c -m64 -O2 mrxgcd.c
    gcc -c -m64 -O2 mrarth3.c
    gcc -c -m64 -O2 mrbits.c
    gcc -c -m64 -O2 mrrand.c
    gcc -c -m64 -O2 mrprime.c
    gcc -c -m64 -O2 mrcrt.c
    gcc -c -m64 -O2 mrscrt.c
    gcc -c -m64 -O2 mrmonty.c
    gcc -c -m64 -O2 mrpower.c
    gcc -c -m64 -O2 mrsroot.c
    gcc -c -m64 -O2 mrcurve.c
    gcc -c -m64 -O2 mrfast.c
    gcc -c -m64 -O2 mrshs.c
    gcc -c -m64 -O2 mrshs256.c
    gcc -c -m64 -O2 mrshs512.c
    gcc -c -m64 -O2 mrsha3.c
    gcc -c -m64 -O2 mrfpe.c
    gcc -c -m64 -O2 mraes.c
    gcc -c -m64 -O2 mrgcm.c
    gcc -c -m64 -O2 mrlucas.c
    gcc -c -m64 -O2 mrzzn2.c
    gcc -c -m64 -O2 mrzzn2b.c
    gcc -c -m64 -O2 mrzzn3.c
    gcc -c -m64 -O2 mrzzn4.c
    gcc -c -m64 -O2 mrecn2.c
    gcc -c -m64 -O2 mrstrong.c
    gcc -c -m64 -O2 mrbrick.c
    gcc -c -m64 -O2 mrebrick.c
    gcc -c -m64 -O2 mrec2m.c
    gcc -c -m64 -O2 mrgf2m.c
    gcc -c -m64 -O2 mrflash.c
    gcc -c -m64 -O2 mrfrnd.c
    gcc -c -m64 -O2 mrdouble.c
    gcc -c -m64 -O2 mrround.c
    gcc -c -m64 -O2 mrbuild.c
    gcc -c -m64 -O2 mrflsh1.c
    gcc -c -m64 -O2 mrpi.c
    gcc -c -m64 -O2 mrflsh2.c
    gcc -c -m64 -O2 mrflsh3.c
    gcc -c -m64 -O2 mrflsh4.c
    cp mrmuldv.g64 mrmuldv.c
    gcc -c -m64 -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 -m64 -O2 bmark.c miracl.a -o bmark
    gcc -m64 -O2 fact.c miracl.a -o fact
    g++ -c -m64 -O2 big.cpp
    g++ -c -m64 -O2 zzn.cpp
    g++ -c -m64 -O2 ecn.cpp
    g++ -c -m64 -O2 ec2.cpp
    g++ -c -m64 -O2 crt.cpp
    g++ -m64 -O2 mersenne.cpp big.o miracl.a -o mersenne
    g++ -m64 -O2 brent.cpp big.o zzn.o miracl.a -o brent
    g++ -c -m64 -O2 flash.cpp
    g++ -m64 -O2 sample.cpp flash.o miracl.a -o sample
    g++ -m64 -O2 ecsgen.cpp ecn.o big.o miracl.a -o ecsgen
    g++ -m64 -O2 ecsign.cpp ecn.o big.o miracl.a -o ecsign
    g++ -m64 -O2 ecsver.cpp ecn.o big.o miracl.a -o ecsver
    g++ -m64 -O2 pk-demo.cpp ecn.o big.o miracl.a -o pk-demo
    g++ -c -m64 -O2 polymod.cpp
    g++ -c -m64 -O2 poly.cpp
    g++ -m64 -O2 schoof.cpp polymod.o poly.o ecn.o crt.o zzn.o big.o miracl.a -o schoof
     
  • 相关阅读:
    RecyclerView用法
    POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】
    Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】
    ACM-ICPC 2017 Asia Xi'an J LOL 【暴力 && 排列组合】
    2016 ACM/ICPC亚洲区大连站 F
    2016 ACM/ICPC亚洲区大连站-重现赛 解题报告
    ACM-ICPC 2017 Asia HongKong 解题报告
    Codeforces Round #515 (Div. 3) B. Heaters【 贪心 区间合并细节 】
    POJ 1984 Navigation Nightmare 【经典带权并查集】
    树的直径的求法即相关证明【树形DP || DFS】
  • 原文地址:https://www.cnblogs.com/little-kwy/p/12285747.html
Copyright © 2020-2023  润新知