资源简介
国密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 < buflen; 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 < buflen; 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 < m; 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端微信扫码关注公众号登陆
相关资源
- SM2国密算法实现基于mircal的实现
- SM2椭圆曲线算法软件.rar
- SM2_SM3_SM4计算常用工具
- SM2258东芝颗粒
- SM2椭圆曲线门限方案
- UBNT NSM2 官方5.3.5固件
- 密码函数库miracle的visual studio 2017可用
- miracl库-32位-64位
- 商密SM4-SM3-SM2FPGA实现源码.rar
- 国密SM2 / SM3 / SM4 / SM9 / ZUC算法的官方
- 国密算法SM2 SM3 SM4相关算法及推荐参数
- SM2椭圆曲线公钥密码算法
- iOS国密demoSM2 SM3 SM4 ZUC EEA3 EIA3
- GM T 0009-2012 SM2密码算法使用规范
- miracl库及使用手册和头文件miracl.lb及
- 密码学库 miracle库
- 基于MIRACL库下的SM2密钥交换的实现
- UDP socket 多线程
- miracl_5.5.4_包含vs工程
- 大数库miracl 7.0.1 附带vs2010编译工程及
- 慧荣SM2256主控开卡工具包
- 慧荣SMI SM2246ENAA_2246AB芯片量产工具V
- miracl库以及编译的会用到两个lib库
- SM2椭圆曲线公钥密码算法(完整)
- AB modbus通讯模块手册
- Miracle.rar
- 基于SM2密码算法的证书认证系统密码
- openssl1.1.1RSA、ECC、SM2身份认证Demo及文
- sm2_ssl.rar
- 一个可以解码并实时播放H264的播放器
评论
共有 条评论