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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
};