You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Include/iAlg/iAlgEnc/zxAes.h

67 lines
1.9 KiB
C

#pragma once
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "iAlgEnc_global.h"
typedef unsigned long DWORD;
typedef unsigned char UCHAR,*PUCHAR;
typedef void *PVOID,*LPVOID;
typedef unsigned char byte;
typedef DWORD *PDWORD,*LPDWORD;
// AES算法实现
class I_ALGENC_EXPORT zxAes
{
public:
zxAes(int nKeySize, unsigned char* pKeyBytes);
~zxAes();
// 入口函数
void enc(unsigned char* input, unsigned char* output);
void dec(unsigned char* input, unsigned char* output);
private:
void initParas(int nKeySize, unsigned char* pKeyBytes);//设置初始参数
void addRoundKey(int round); //轮密钥加
void replaceSubBytes(); //S盒字节代换
void replaceInvSubBytes(); //逆S盒字节代换
void shiftRows(); //行移位
void shiftInvRows();
void mixColumns(); //列混淆
void mixInvColumns();
// 内部转换函数
unsigned char _runMultiBy01(unsigned char b);
unsigned char _runMultiBy02(unsigned char b);
unsigned char _runMultiBy03(unsigned char b);
unsigned char _runMultiBy09(unsigned char b);
unsigned char _runMultiBy0b(unsigned char b);
unsigned char _runMultiBy0d(unsigned char b);
unsigned char _runMultiBy0e(unsigned char b);
void enpandKey(); //密钥扩展
unsigned char* replaceSubWord(unsigned char* word); //密钥代换
unsigned char* shiftWord(unsigned char* word); //密钥移位
private:
unsigned char m_arrStates[4][4];//状态缓存
int m_nSizeBlock; //块大小32-bits
int m_nSizeKey; //秘钥大小
int m_nSizeRound; //轮大小
// 内部局部变量
unsigned char* m_pArrKeys;
unsigned char* m_pArrChars;
unsigned char* m_pArrSBox;
unsigned char* m_pArrISBox;
unsigned char* m_pArrRcon;
};