00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _CRYPTO__RIJNDAEL_H
00011 #define _CRYPTO__RIJNDAEL_H
00012
00013
00014 #define RD_BAD_KEY_MAT -1
00015 #define RD_BAD_BLOCK_LENGTH -2
00016 #define RD_BAD_DATA -3
00017
00018
00019 #define RD_KEY_HEX -1
00020 #define RD_MAXROUNDS 14
00021
00022 typedef struct {
00023 int rounds;
00024 unsigned char encsched[RD_MAXROUNDS+1][4][4];
00025 unsigned char decsched[RD_MAXROUNDS+1][4][4];
00026 } rd_keyinstance;
00027
00028 #define AES_BLOCKSIZE 16
00029
00030
00031
00032 int rijndael_makekey(rd_keyinstance *_key,
00033 size_t _keylen, const void *_keymaterial);
00034
00035 ssize_t rijndael_ecb_encrypt(rd_keyinstance *_key,
00036 const void *_input, void *_output, size_t _length, void *_dummyIV);
00037
00038 ssize_t rijndael_ecb_decrypt(rd_keyinstance *_key,
00039 const void *_input, void *_output, size_t _length, void *_dummyIV);
00040
00041 ssize_t rijndael_cbc_encrypt(rd_keyinstance *_key,
00042 const void *_input, void *_output, size_t _length, void *_IV);
00043
00044 ssize_t rijndael_cbc_decrypt(rd_keyinstance *_key,
00045 const void *_input, void *_output, size_t _length, void *_IV);
00046
00047 ssize_t rijndael_cfb1_encrypt(rd_keyinstance *_key,
00048 const void *_input, void *_output, size_t _length, void *_IV);
00049
00050 ssize_t rijndael_cfb1_decrypt(rd_keyinstance *_key,
00051 const void *_input, void *_output, size_t _length, void *_IV);
00052
00053 ssize_t rijndael_cfb8_encrypt(rd_keyinstance *_key,
00054 const void *_input, void *_output, size_t _length, void *_IV);
00055
00056 ssize_t rijndael_cfb8_decrypt(rd_keyinstance *_key,
00057 const void *_input, void *_output, size_t _length, void *_IV);
00058
00059 ssize_t rijndael_pad(void *_input, size_t _length);
00060
00061 ssize_t rijndael_unpad(const void *_input, size_t _length);
00062
00063 typedef ssize_t (*rd_function)(rd_keyinstance *_key,
00064 const void *_input, void *_output, size_t _length, void *_IV);
00065
00066 #ifdef INTERMEDIATE_VALUE_KAT
00067
00068 void cipherEncryptUpdateRounds(rd_keyinstance *key,
00069 const void *input, void *output, int rounds);
00070
00071 void cipherDecryptUpdateRounds(rd_keyinstance *key,
00072 const void *input, void *output, int rounds);
00073
00074 #endif
00075
00076 #endif
00077
00078
00079
00080