编译可用于嵌入式平台STM32的Miracl库

        最近需要用到Miracl库在stm32板子上实现国密算法,Miracl库针对不同的机器,需要用到的文件不同,然而现成的经验贴编译用于PC上的库,所以就只好自己摸索着尝试,终于编译成功,在此也把经验分享给大家。

        我用的板子是stm32F1系列,在此也将我编译好的.lib文件作为资源分享给大家:https://download.csdn.net/download/xianmie/87261619?spm=1001.2014.3001.5503

一、下载Miracl包

        Miracl在github上是开源的,进入链接下载即可:https://github.com/miracl/MIRACL

        接下来,最最最最重要的!自己一定!一定!把installation.md读一遍!之前就是因为懒得读英文,也搞不懂很多文件是干什么用的,如何修改,就只知道看经验贴,然而不同机器需要的配置是不一样的,所以老踩坑!读一遍之后立马就明白了!

二、运行config.c文件

        这一步,有两种方法。

        第一种,在板子上运行config.c。这就需要你配置好串口的输入输出,实现printf和scanf的重定向以及有关文件操作的代码(看看config.c的内容就知道为什么了),这部分的内容稍有点复杂,我就不说了,大家可以一边试着跑一边查资料。

        运行成功后,会在串口打印出信息,大家就根据在installation.md了解到的信息进行选择就好。运行结束后,config.c会根据你机器的信息以及你的选择生成mirdef.h和miracl.lst。mirdef.h是使用Miracl库需要的头文件,miracl.lst列出了编译Miracl库需要的文件。

        第二种,在大脑运行config.c!哈哈哈哈哈!就是自己读代码啦!如果你懒得配置重定义,自己读代码也不是不可以啦!config.c这个文件挺好懂的,就是根据你机器的配置(包括各种数据类型占的位数等)、以及你自己的选择来写两个文件,当然要做出正确的选择需要你读过installtion.md。

        那在这里,如此贴心的我就给把我生成的mirdef.h和miracl.lst放在这里啦!注意我用的板子是STM32F1系列哦(我这么贴心不给我点个赞莫 >3<

mirdef.h

/* 
 *   MIRACL compiler/hardware definitions - mirdef.h
 *   This version suitable for use with most 32-bit computers
 *   e.g. 80386+ PC, VAX, ARM etc. Assembly language versions of muldiv,
 *   muldvm, muldvd and muldvd2 will be necessary. See mrmuldv.any 
 *
 *   Also suitable for DJGPP GNU C Compiler
 *   ... but change __int64 to long long
 */


/*
 *   MIRACL compiler/hardware definitions - mirdef.h
 */


#define MIRACL 32
#define MR_LITTLE_ENDIAN      

/* or possibly 
#define MR_BIG_ENDIAN      
*/

#define mr_utype int
#define MR_IBITS 32
#define mr_dltype __int64
#define mr_unsign32 unsigned int
#define mr_unsign64 unsigned __int64
#define MAXBASE ((mr_small)1<<(MIRACL-1))
#define MR_STATIC 20
#define MR_NOASM
#define MR_GENERIC_MT
#define MR_LBITS 32

miracl.lst

mrcore.c
mrarth0.c
mrarth1.c
mrarth2.c
mrsmall.c
mrio1.c
mrio2.c
mrgcd.c
mrjack.c
mrxgcd.c
mrarth3.c
mrbits.c
mrrand.c
mrprime.c
mrcrt.c
mrscrt.c
mrmonty.c
mrpower.c
mrsroot.c
mrlucas.c
mrshs.c
mrshs256.c
mraes.c
mrgcm.c
mrfpe.c
mrstrong.c
mrcurve.c
mrbrick.c
mrebrick.c
mrzzn2.c
mrzzn2b.c
mrzzn3.c
mrecn2.c
mrfast.c
mralloc.c
mrshs512.c
mrsha3.c
mrec2m.c
mrgf2m.c
mrmuldv.c

三、生成Miracl.lib

        上面生成的.lst文件所列出来的文件即是我们生成Miracl.lib需要的全部.c文件啦!加上下列这些头文件,就可以生成.lib文件了!

        PS:注意,我们所需要的所有文件,除了 mirdef.h是我们前一步生成的以外,其他的所有文件都在我们下载的MIRACL-master里。关于如何把位于MIRACL-master各个文件夹里的我们需要的文件移出,可以自己写个批处理文件来帮忙,当然你愿意一个一个找,当我妹说!    

        做好了所有的准备,现在就可以新建一个keil工程用于生成Miracl.lib了!将.lst里列出的文件+上图列出的头文件,全部放入工程目录下,我这里是在工程目录下新建了一个文件夹MIRACL。

        然后点击魔术棒,修改一下配置:

        再无脑点击Build,下面的Build output不报错就OK啦!进入工程文件下的OBJ,就可以看到生成的miracl.lib了!

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值