資源簡介
國密SM2是非對稱密碼算法,是基于ECC算法的非對稱算法(需要添加miracle庫)

代碼片段和文件信息
#include?
#include?
#include
#include?
#include?
#include?“sm2.h“
#define?SM2_PAD_ZERO?TRUE
#define?SM2_DEBUG???0
struct?FPECC{
char?*p;
char?*a;
char?*b;
char?*n;
char?*x;
char?*y;
};
/*SM2*/
struct?FPECC?Ecc256?=?{
“8542D69E4C044F18E8B92435BF6FF7DE457283915C45517D722EDB8B08F1DFC3“
“787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E498“
“63E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A“
“8542D69E4C044F18E8B92435BF6FF7DD297720630485628D5AE74EE7C32E79B7“
“421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D“
“0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A2“
};
unsigned?char?radom1[]?=?{?0x4C0x620xEE0xFD0x6E0xCF0xC20xB90x5B0x920xFD0x6C0x3D0x950x750x140x8A0xFA0x170x420x550x460xD40x900x180xE50x380x8D0x490xDD0x7B0x4F?};
void?PrintBuf(unsigned?char?*buf?int buflen)
{
int?i;
for?(i?=?0;?i? if?(i?%?32?!=?31)
printf(“%02x“?buf[i]);
else
printf(“%02x\n“?buf[i]);
}
printf(“\n“);
//return?0;
}
void?Printch(unsigned?char?*buf?int buflen)
{
int?i;
for?(i?=?0;?i? if?(i?%?32?!=?31)
printf(“%c“?buf[i]);
else
printf(“%c\n“?buf[i]);
}
printf(“\n“);
//return?0;
}
void?sm2_keygen(unsigned?char?*wx?int?*wxlen?unsigned?char?*wy?int?*wylenunsigned?char?*privkey?int?*privkeylen)
{
struct?FPECC?*cfig?=?&Ecc256;
epoint?*g;
????big?abpnxykey1;
????miracl?*mip?=?mirsys(200);
????mip->IObase?=?16;
????p?=?mirvar(0);
a?=?mirvar(0);
????b?=?mirvar(0);
????n?=?mirvar(0);
????x?=?mirvar(0);
????y?=?mirvar(0);
????key1?=?mirvar(0);
????cinstr(pcfig->p);
cinstr(acfig->a);
????cinstr(bcfig->b);
cinstr(ncfig->n);
cinstr(xcfig->x);
????cinstr(ycfig->y);
ecurve_init(abpMR_PROJECTIVE);
????g?=?epoint_init();
????epoint_set(xy0g);?
????irand(time(NULL));
????bigrand(nkey1);???////私鑰db
????ecurve_mult(key1gg);?//計算Pb
????epoint_get(gxy);
????*wxlen?=?big_to_bytes(32?x?(char?*)wx?TRUE);
??? *wylen?=?big_to_bytes(32?y?(char?*)wy?TRUE);
*privkeylen?=?big_to_bytes(32?key1?(char?*)privkey?TRUE);
mirkill(key1);
mirkill(p);
mirkill(a);
mirkill(b);
mirkill(n);
mirkill(x);
mirkill(y);
epoint_free(g);
mirexit();
}
int?kdf(unsigned?char?*zl?unsigned?char?*zr?int?klen?unsigned?char?*kbuf)
{
/*
return?0:?kbuf?=?0?不可
???1:?kbuf?可
*/
unsigned?char?buf[70];
unsigned?char?digest[32];
unsigned?int?ct?=?0x00000001;?//初始化一個32比特構成的計數器ct=0x00000001
int?i?m?n;
unsigned?char?*p;
memcpy(buf?zl?32);
memcpy(buf+32?zr?32);
m?=?klen?/?32;
n?=?klen?%?32;
p?=?kbuf;
for(i?=?0;?i? {
buf[64]?=?(ct?>>?24)?&?0xFF;
buf[65]?=?(ct?>>?16)?&?0xFF;
buf[66]?=?(ct?>>?8)?&?0xFF;
buf[67]?=?ct?&?0xFF;
sm3(buf?68?p);
p?+=?32;
ct++;
}
/*對i從1到?klen/v?執行:b.1)計算Hai=Hv(Z?∥?ct);b.2)?ct++*/
if(n?!=?0)
{
b
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1591??2019-01-05?14:25??sm2.h
?????文件????????5431??2019-01-05?14:27??sm3.c
?????文件?????????960??2019-01-05?14:26??sm3.h
?????文件????????9093??2019-01-05?14:56??sm2.c
- 上一篇:動真格AE腳本真貨不欺詐
- 下一篇:PC端微信掃碼關注公眾號登陸
評論
共有 條評論