00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #ifndef _AES_H
00050 #define _AES_H
00051
00052
00053 #include "limits.h"
00054
00055 #if defined(__cplusplus)
00056 extern "C"
00057 {
00058 #endif
00059
00060 #define AES_128
00061 #undef AES_192
00062 #undef AES_256
00063 #undef AES_VAR
00064
00065
00066
00067 #define AES_ENCRYPT
00068 #define AES_DECRYPT
00069 #define AES_ERR_CHK
00070
00071 #if UCHAR_MAX == 0xff
00072 typedef unsigned char aes_08t;
00073 #else
00074 #error Please define aes_08t as an 8-bit unsigned integer type in aes.h
00075 #endif
00076
00077 #if UINT_MAX == 0xffffffff
00078 typedef unsigned int aes_32t;
00079 #elif ULONG_MAX == 0xffffffff
00080 typedef unsigned long aes_32t;
00081 #else
00082 #error Please define aes_32t as a 32-bit unsigned integer type in aes.h
00083 #endif
00084
00085 #define AES_BLOCK_SIZE 16
00086 #define N_COLS 4
00087
00088
00089
00090
00091
00092 #define KS_LENGTH 64
00093
00094 #ifdef AES_ERR_CHK
00095 #define aes_ret int
00096 #define aes_good 0
00097 #define aes_error -1
00098 #else
00099 #define aes_ret void
00100 #endif
00101
00102 #ifndef AES_DLL
00103 #define aes_rval aes_ret
00104 #else
00105 #define aes_rval aes_ret __declspec(dllexport) _stdcall
00106 #endif
00107
00108
00109
00110
00111 void gen_tabs(void);
00112
00113
00114
00115
00116 #ifdef AES_ENCRYPT
00117
00118 typedef struct
00119 { aes_32t ks[KS_LENGTH];
00120 } aes_encrypt_ctx;
00121
00122 #if defined(AES_128) || defined(AES_VAR)
00123 aes_rval aes_encrypt_key128(const void *in_key, aes_encrypt_ctx cx[1]);
00124 #endif
00125
00126 #if defined(AES_192) || defined(AES_VAR)
00127 aes_rval aes_encrypt_key192(const void *in_key, aes_encrypt_ctx cx[1]);
00128 #endif
00129
00130 #if defined(AES_256) || defined(AES_VAR)
00131 aes_rval aes_encrypt_key256(const void *in_key, aes_encrypt_ctx cx[1]);
00132 #endif
00133
00134 #if defined(AES_VAR)
00135 aes_rval aes_encrypt_key(const void *in_key, int key_len, aes_encrypt_ctx cx[1]);
00136 #endif
00137
00138 aes_rval aes_encrypt(const void *in_blk, void *out_blk, const aes_encrypt_ctx cx[1]);
00139 #endif
00140
00141 #ifdef AES_DECRYPT
00142
00143 typedef struct
00144 { aes_32t ks[KS_LENGTH];
00145 } aes_decrypt_ctx;
00146
00147 #if defined(AES_128) || defined(AES_VAR)
00148 aes_rval aes_decrypt_key128(const void *in_key, aes_decrypt_ctx cx[1]);
00149 #endif
00150
00151 #if defined(AES_192) || defined(AES_VAR)
00152 aes_rval aes_decrypt_key192(const void *in_key, aes_decrypt_ctx cx[1]);
00153 #endif
00154
00155 #if defined(AES_256) || defined(AES_VAR)
00156 aes_rval aes_decrypt_key256(const void *in_key, aes_decrypt_ctx cx[1]);
00157 #endif
00158
00159 #if defined(AES_VAR)
00160 aes_rval aes_decrypt_key(const void *in_key, int key_len, aes_decrypt_ctx cx[1]);
00161 #endif
00162
00163 aes_rval aes_decrypt(const void *in_blk, void *out_blk, const aes_decrypt_ctx cx[1]);
00164 #endif
00165
00166 #if defined(__cplusplus)
00167 }
00168 #endif
00169
00170 #endif