资源简介
SM4分组密码算法是一个迭代分组密码算法,由加解密算法和密钥扩展算法组成。SM4分组密码算法采用非平衡Feistel结构,分组长度为128b密钥长度为128b。加密算法与密钥扩展算法均采用非线性迭代结构。加密运算和解密运算的算法结构相同,解密运算的轮密钥的使用顺序与加密运算相反。
代码片段和文件信息
#include
#include
#ifndef XYSSL_SM4_H
#define XYSSL_SM4_H
#define SM4_ENCRYPT 1
#define SM4_DECRYPT 0
/**
* \brief SM4 context structure
*/
typedef struct{
int mode; /*!< encrypt/decrypt */
unsigned long sk[32]; /*!< SM4 subkeys */
}sm4_context;
#ifdef __cplusplus
extern “C“ {
#endif
/**
* \brief SM4 key schedule (128-bit encryption)
*
* \param ctx SM4 context to be initialized
* \param key 16-byte secret key
*/
void sm4_setkey_enc( sm4_context *ctx unsigned char key[16] );
/**
* \brief SM4 key schedule (128-bit decryption)
*
* \param ctx SM4 context to be initialized
* \param key 16-byte secret key
*/
void sm4_setkey_dec( sm4_context *ctx unsigned char key[16] );
/**
* \brief SM4-ECB block encryption/decryption
* \param ctx SM4 context
* \param mode SM4_ENCRYPT or SM4_DECRYPT
* \param length length of the input data
* \param input input block
* \param output output block
*/
void sm4_crypt_ecb( sm4_context *ctx
int mode int length unsigned char *input unsigned char *output);
#ifdef __cplusplus
}
#endif
#endif
/*
* 32-bit integer manipulation macros (big endian)
*/
#ifndef GET_ULONG_BE
#define GET_ULONG_BE(nbi) \
{ \
(n) = ( (unsigned long) (b)[(i) ] << 24 ) \
| ( (unsigned long) (b)[(i) + 1] << 16 ) \
| ( (unsigned long) (b)[(i) + 2] << 8 ) \
| ( (unsigned long) (b)[(i) + 3] ); \
}
#endif
#ifndef PUT_ULONG_BE
#define PUT_ULONG_BE(nbi) \
{ \
(b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
(b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
(b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
(b)[(i) + 3] = (unsigned char) ( (n) ); \
}
#endif
/*
*rotate shift left marco definition
*
*/
#define SHL(xn) (((x) & 0xFFFFFFFF) << n)
#define ROTL(xn) (SHL((x)n) | ((x) >> (32 - n)))
#define SWAP(ab) { unsigned long t = a; a = b; b = t; t = 0; }
/*
* Expanded SM4 S-boxes
/* Sbox table: 8bits input convert to 8 bits output*/
static const unsigned char SboxTable[16][16] =
{
{0xd60x900xe90xfe0xcc0xe10x3d0xb70x160xb60x140xc20x280xfb0x2c0x05}
{0x2b0x670x9a0x760x2a0xbe0x040xc30xaa0x440x130x260x490x860x060x99}
{0x9c0x420x500xf40x910xef0x980x7a0x330x540x0b0x430xed0xcf0xac0x62}
{0xe40xb30x1c0xa90xc90x080xe80x950x800xdf0x940xfa0x750x8f0x3f0xa6}
{0x470x070xa70xfc0xf30x730x170xba0x830x590x3c0x190xe60x850x4f0xa8}
{0x680x6b0x810xb20x710x640xda0x8b0xf80xeb0x0f0x4b0x700x560x9d0x35}
{0x1e0x240x0e0x5e0x63
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9467 2018-06-07 13:29 SM4.c
- 上一篇:SHA-1算法实现源代码
- 下一篇:基于哈夫曼编码的文件压缩解压程序的C语言实现
相关资源
- 基于哈夫曼编码的文件压缩解压程序
- Bezier曲线MFC实现源代码
- 用C实现二分查找演示
- 进程调度的设计与实现图形界面c++
- 利用MFC实现的停车场模拟仿真程序
- 任务管理器MFC实现
- 国密SM4的5中模式C语言实现,vs工程,
- 将彩色图片转换为灰度图片mfc实现
- 银行家算法 MFC实现
- MFC实现可拖动的按钮
- 酒店管理系统 VC++ MFC实现)
- 哈夫曼编码
- 一个MFC实现的简单的记事本程序
- SM2_SM3_SM4_C语言实现+SM3_C++实现+国家密
- 原创modbus 协议c实现 C 语言 实现功能
- MFC实现图形放大缩小
- 如何用VC实现对超长数据库字段操作
- MFC实现PopStar小游戏
- MFC实现数据绘图显示示波器界面
- 门限秘密分享算法C实现
- c++ MFC实现文件合成器功能,实现多种
- mfc实现多线程工程代码和线程进程查
- 国密SM4加密解密51单片机版C源程序.
- 产生式系统反向推理算法的设计与实
- C实现基于Socket实现自定义协议通信
- C实现数字转Unicode码
- 罗马尼亚度假问题MFC实现
- 博弈树树的c实现
- VC/MFC实现简单的Http服务器可访问图片
- 梁友栋-Barsky直线裁剪算法 VC实现
评论
共有 条评论