上一篇文章中我們?yōu)榇蠹医榻B了嵌入式設(shè)備中支持國(guó)密算法的幾種方法。本篇我們?cè)敿?xì)的介紹一下第一種方法:移植Miracl庫(kù)的具體操作步驟。
第一步獲取源碼
MIRACL密碼庫(kù)是開源軟件,可以直接到官網(wǎng)下載,也可在csdn等論壇中獲取。
第二步 利用MIRACL庫(kù)函數(shù)實(shí)現(xiàn)SM2算法
實(shí)現(xiàn)sm2的功能需要用到MIRACL庫(kù)中的36個(gè)源文件,例如mraes.c、mrec2.c、mrarth0.c、mrcore.c、mrshs.c、mezzn2.c、mrxgcd.c、mrgcm.c、mrio1.c等。
然后需要新建一個(gè)sm2.c文件、sm2.h,用于實(shí)現(xiàn)sm2功能函數(shù);一個(gè)sm3.c文件、一個(gè)sm3.h文件,用于實(shí)現(xiàn)sm3功能函數(shù)(之所以要增加sm3的功能是因?yàn)閟m2算法中需要sm3計(jì)算hash值功能。
下面給出生成密鑰對(duì)的示例,具體的函數(shù)定義可以聯(lián)系凌科芯安獲取。
現(xiàn)在給出實(shí)現(xiàn)的函數(shù)接口功能,
sm3_e
sm2_keygen 生成密鑰對(duì)
sm2_sign 簽名函數(shù)
sm2_verify 驗(yàn)證簽名
sm2_encrypt 加密函數(shù)
sm2_decrypt 解密函數(shù)
void sm2_keyagreement_a1_3密鑰協(xié)商的發(fā)起方調(diào)用此函數(shù)產(chǎn)生一對(duì)臨時(shí)公鑰(kx1, ky1)和相應(yīng)的隨機(jī)數(shù)
sm2_keyagreement_b1_9
密鑰協(xié)商的接收方調(diào)用此函數(shù)協(xié)商出密鑰kbbuf
第三步編譯動(dòng)態(tài)庫(kù)
在linux環(huán)境下,需要先制作makefile文件,針對(duì)特定的編譯器環(huán)境,只需要修改cc等命令的定義來支持指定編譯器即可。以arm-linux-gcc編譯工具為例器編譯文件,其編譯指令如下圖
之后運(yùn)行指令腳本,./armlinux即可得到動(dòng)態(tài)庫(kù)文件。
在windows環(huán)境下,直接在VS項(xiàng)目中選擇編譯成動(dòng)態(tài)庫(kù)即可,配置生成動(dòng)態(tài)庫(kù)如下圖

第四步測(cè)試功能
最后,需要驗(yàn)證一下SM2.dll鎖提供的SM2接口函數(shù)運(yùn)算結(jié)果的正確性。
在工程中添加動(dòng)態(tài)庫(kù)的支持,即可調(diào)用功能并測(cè)試了。
下圖在為輸出顯示測(cè)試結(jié)果,測(cè)試通過。
