aesengine1.h

来自「algorithm provide basic encryption/decry」· C头文件 代码 · 共 118 行

H
118
字号

#include <stdio.h>

#ifndef AFX_AESENGINE_H__
#define AFX_AESENGINE_H__

typedef	unsigned char byte;
typedef	unsigned int uint;


#define	MAXROUNDS	14
#define	MAXKC		64
#define BLOCK_SIZE	64
#define BLOCK_BITS	128

#define AES_BLOCK_SIZE 16

#define CBC_MODE	151
#define ECB_MODE	152


class AESEngine1 
{
public:
 	AESEngine1();

	~AESEngine1();
	
	int encrypt( byte plainData[], int plainDataLength, byte*& encryptedData );

	int decrypt( byte encryptedData[], int encryptedDataLength, byte*& decryptedData );

	void init( byte key[], int keyLength, int mode );

private:

//--------------------------------------------------------------------------
// cipher params
//--------------------------------------------------------------------------
    static const byte Logtable[];

	static const byte Alogtable[];

	static const byte S[]; 

	static const byte Si[];

	static const int rcon[];

//--------------------------------------------------------------------------
// instance variables
//--------------------------------------------------------------------------
	
    int			ROUNDS;
    int			workingKey_[ MAXROUNDS + 1 ] [ 4 ];
    int			A0;
    int			A1;
    int			A2;
    int			A3;
    bool	    forEncryption_;
	int			keyLength_;
	byte		cbcV_[ AES_BLOCK_SIZE ];
	int			mode_;
//--------------------------------------------------------------------------

private:

//--------------------------------------------------------------------------
// cipher methods
//--------------------------------------------------------------------------

	byte mul0x2( int b );

	byte mul0x3( int b );

	byte mul0x9( int b );

	byte mul0xb( int b );

	byte mul0xd( int b );

	byte mul0xe( int b );

	void KeyAddition( int rk[] );
	
	int  shift( int r, int shift );
	
	void ShiftRow();
	
	void InvShiftRow();

	int  applyS( int r, const byte* box );
	
	void Substitution( const byte* box );
	
	void MixColumn();

	void InvMixColumn();
	
	void generateWorkingKey( byte key[] );

	int processBlock( byte in[], int inOff, byte out[], int outOff);

	void unpackBlock( byte bytes[], int off );
	
	void packBlock( byte bytes[], int off );

	void encryptBlock( int rk[][4] );

	void decryptBlock( int rk[][4] );

};

#endif // AFX_AESENGINE_H__



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?