C语言实现SM3

参考文章

SMx
SM3国家标准文档
sm2,sm3,sm4国密算法的纯c语言版本
SM3密码杂凑算法实现及说明
SM3密码杂凑算法源码解析

代码

代码已上传至github

sm3.h
#ifndef SM3_H
#define SM3_H

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void out_hex();
void intToString(unsigned char *out_hash);
int SM3(unsigned char *msg, unsigned int msglen, unsigned char *out_hash);

#endif
sm3.c
  1. 定义三个全局变量
    message_buffer存放消息分组
static unsigned char message_buffer[64] = {
   0};
static unsigned int hash[8] = {
   0};
static unsigned int T[64] = {
   0};
  1. 常数与函数
    初始值IV=7380166f 4914b2b9 1724422d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e
void SM3_Init(){
   
	init_T();
	hash[0] = 0x7380166f;
	hash[1] = 0x4914b2b9;
	hash[2] = 0x172442d7;
	hash[3] = 0xda8a0600;
	hash[4] = 0xa96f30bc;
	hash[5] = 0x163138aa;
	hash[6] = 0xe38dee4d;
	hash[7] = 0xb0fb0e4e;
}

常量在这里插入图片描述

int init_T(){
   
	int i = 0;
	for (i = 0; i < 16; i++)
		T[i] = 0x79cc4519;
	for (i = 16; i < 64; i++)
		T[i] = 0x7a879d8a
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值