资源简介
国密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端微信扫码关注公众号登陆
相关资源
- gmssl 2.0测试sm2加解密、签名 sm3摘要
- 基于miracl库的椭圆曲线算法实现
- openssl_sm2_sm3_c.zip
- 国密SM2文档详细
- ilasm2.0 用于将ildasm生成的il文件重新编
- Unicode串口通信Demo
- 国密SM2算法基于Openssl实现
- sm2、sm3源代码,openssl可直接调用
- SM2 加密解密
- 国密SM2算法规范
- YaChangeSplit.zip
- 国密 SM2 SM3 签名 验签 加解密 公私钥
- 国密SM2SM3SM4计算工具
- 典型密码算法FPGA实现-DESAES3DESECCSM2,
- security-sm2-sm3.zip
- sm2签名验签解压公钥sm.zip
- 使用openssl 1.1.1版本调试国密SM2 P7 Si
- 使用openssl 1.1.1版本调试国密SM2签名、
- hp_s700开卡工具SM2258XT_PKGR1026A_FWR0831B
- SM2258XT_HY3D-V4_PKGS0402A_FWS0330B0-海力士
- VC6 多tab页显示插件
- SM2258XT_Q 刷黑片 自动选片.rar
- 算法工具集合 智能卡
- SSD SM2258XT FW固件
- 大宝CA版本的国密算法DoubleCA-JCE实现,
- SM2256AB_Dramless_MPP0617B_FWP0617A_RDTP0627A0
- 串口调试助手 SComAssistant V2.3
- 台电科技 SD120GBS500 固态硬盘量产工具
- miracl_demo
- miracl.lib库
评论
共有 条评论