📄 aes.h
字号:
#ifndef __AESH__
#define __AESH__
#ifdef __cplusplus
extern "C" {
#endif
/* Macros */
#define MAXCKEY 8 /* Maximum length of user key in 4-byte words */
#define MAXNCOL 8 /* Maximum blocklength in 4-byte words */
#define MAXNRND 14 /* Maximum number of rounds */
#define BITSPERBLOCK 128 /* Default number of bits in a cipher block */
#define AES_ENC 0
#define AES_DEC 1
#define AES_ECB 10
#define AES_CBC 11
#define AES_OK 0
#define AES_ERR_INIT -1
#define AES_ERR_MODE -2
#define AES_ERR_BLKLENGTH -4
#define AES_ERR_KEYLENGTH -8
#define AES_ERR_DIRECTION -16
#if !(defined AES_SECURE || defined AES_UNSECURE)
#define AES_SECURE
#endif
/* Macros maintaining FLINT/C namespace */
#define AESInit AESInit_l
#define AESKeySched AESKeySched_l
#define AESCrypt AESCrypt_l
#define AESPurge AESPurge_l
#define AESKeyExpansion AESKeyExpansion_l
#define AESInvKeyExpansion AESInvKeyExpansion_l
#define AESEncryptBlock AESEncryptBlock_l
#define AESDecryptBlock AESDecryptBlock_l
#define AESEncBlock AESEncBlock_l
#define AESDecBlock AESDecBlock_l
#define AESEncState AESEncState_l
#define AESDecState AESDecState_l
#define AESEncBlockRounds AESEncBlockRounds_l
#define AESDecBlockRounds AESDecBlockRounds_l
/* Conversion of a vector of type UCHAR into ULONG word */
#if !defined AES_BIGENDIAN
#define UC2UL(ucptr) *(unsigned long *)((ucptr))
#else
#define UC2UL(ucptr) \
(((unsigned long) *((ucptr)+3) << 24) | \
((unsigned long) *((ucptr)+2) << 16) | \
((unsigned long) *((ucptr)+1) << 8) | \
((unsigned long) *(ucptr)))
#endif
/* AES specific types */
typedef unsigned long AESXPKEY[(MAXNRND+1)*MAXNCOL];
typedef unsigned long AESSTATE[MAXNCOL];
typedef unsigned long AESROUNDKEY[MAXNCOL];
typedef unsigned char AESBLOCK[4*MAXNCOL];
typedef unsigned char AESKEY[4*MAXCKEY];
typedef struct
{
AESXPKEY ExpandedKey;
int mode; /* Mode of Operation: AES_ECB, AES_CBC */
int KeyLength; /* 128, 192, 256 */
int BlkLength; /* 128, 192, 256 */
int DFlag; /* AES_ENC, AES_DEC */
} AESKEYSCHED;
typedef struct
{
int mode; /* Mode of Operation: AES_ECB, AES_CBC */
int BlkLength; /* 128, 192, 256 */
AESBLOCK IV; /* Initialization Vector for CBC Mode */
AESSTATE State; /* State Buffer */
AESSTATE Block; /* Previous State Buffer for CBC Decryption */
} AESWORKSPACE;
/******************************************************************************/
/* AES API: Public Functions */
#ifndef __FLINT_API
#ifdef FLINT_USEDLL
#define __FLINT_API __cdecl
#else
#define __FLINT_API /**/
#endif /* FLINT_USEDLL */
#endif /* !defined __FLINT_API */
#if !defined __FLINT_API_A
#if defined __GNUC__ && !defined __cdecl
#define __FLINT_API_A /**/
#else
#define __FLINT_API_A __cdecl
#endif /* !defined __GNUC__ */
#endif /* !defined __FLINT_API_A */
/* If the FLINT/C-Package is used under MS Visual C/C++ as DLL, */
/* all modules accessing data nul_l, one_l, two_l or smallprimes from outside */
/* the DLL must be compiled with -D__FLINT_API_DATA=__declspec(dllimport) */
#ifndef __FLINT_API_DATA
#if (defined _MSC_VER && _MSC_VER >= 11) && defined FLINT_USEDLL
#define __FLINT_API_DATA __declspec(dllimport)
#else
#define __FLINT_API_DATA /**/
#endif /* MSC_VER && FLINT_USEDLL */
#endif /* !defined __FLINT_API_DATA */
int __FLINT_API
AESInit_l (AESWORKSPACE * ws,
int mode,
int BlkLength,
AESBLOCK IV,
AESKEYSCHED * AESKey,
AESKEY RawKey,
int KeyLength,
int DFlag);
int __FLINT_API
AESCrypt_l (AESBLOCK OutBlock,
AESWORKSPACE * ws,
AESKEYSCHED * ks,
AESBLOCK Inblock,
int InLength);
int __FLINT_API
AESKeySched_l (AESKEYSCHED *AESKey,
AESKEY RawKey,
int KeyLength,
int BlkLength,
int DFlag,
int mode);
void __FLINT_API
AESPurge_l (AESWORKSPACE * ws,
AESKEYSCHED * ks);
/******************************************************************************/
/* AES public kernel functions */
/* Key expansion for encryption / decryption */
int __FLINT_API
AESKeyExpansion_l (AESXPKEY ExpandedKey, AESKEY RawKey, int KeyLength, int BlockLength);
int __FLINT_API
AESInvKeyExpansion_l (AESXPKEY InvExpandedKey, AESKEY RawKey, int KeyLength, int BlockLength);
/* Encryption of a single block w/ KeyExpansion */
int __FLINT_API
AESEncryptBlock_l (AESBLOCK CipherBlock, AESBLOCK MessBlock, AESKEY RawKey, int KeyLength, int BlockLength);
/* decryption of a single block w/ InvKeyExpansion */
int __FLINT_API
AESDecryptBlock_l (AESBLOCK MessBlock, AESBLOCK CipherBlock, AESKEY RawKey, int KeyLength, int BlockLength);
/* Encryption of a single block w/o KeyExpansion */
int __FLINT_API
AESEncBlock_l (AESBLOCK CipherBlock, AESBLOCK MessBlock, AESXPKEY ExpandedKey, int KeyLength, int BlockLength);
/* Decryption of a single block w/o InvKeyExpansion */
int __FLINT_API
AESDecBlock_l (AESBLOCK MessBlock, AESBLOCK CipherBlock, AESXPKEY ExpandedKey, int KeyLength, int BlockLength);
/* State encryption */
int __FLINT_API
AESEncState_l (AESSTATE State, AESXPKEY ExpandedKey, int Nk, int Nb);
/* State decryption */
int __FLINT_API
AESDecState_l (AESSTATE State, AESXPKEY InvExpandedKey, int Nk, int Nb);
/* Block encryption w/ variable number of rounds */
int __FLINT_API
AESEncBlockRounds_l (AESBLOCK CipherBlock, AESBLOCK MessBlock, AESXPKEY ExpandedKey, int KeyLength, int BlockLength, int Rounds);
/* Block decryption w/ variable number of rounds */
int __FLINT_API
AESDecBlockRounds_l (AESBLOCK CipherBlock, AESBLOCK MessBlock, AESXPKEY ExpandedKey, int KeyLength, int BlockLength, int Rounds);
#ifdef __cplusplus
}
#endif
#endif /* __AESH__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -