00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __RIJNDAEL_API_H
00011 #define __RIJNDAEL_API_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
00029
00030 int rijndael_makekey(rd_keyinstance *_key,
00031 size_t _keylen, const void *_keymaterial);
00032
00033 ssize_t rijndael_ecb_encrypt(rd_keyinstance *_key,
00034 const void *_input, void *_output, size_t _length, void *_dummyIV);
00035
00036 ssize_t rijndael_ecb_decrypt(rd_keyinstance *_key,
00037 const void *_input, void *_output, size_t _length, void *_dummyIV);
00038
00039 ssize_t rijndael_cbc_encrypt(rd_keyinstance *_key,
00040 const void *_input, void *_output, size_t _length, void *_IV);
00041
00042 ssize_t rijndael_cbc_decrypt(rd_keyinstance *_key,
00043 const void *_input, void *_output, size_t _length, void *_IV);
00044
00045 ssize_t rijndael_cfb1_encrypt(rd_keyinstance *_key,
00046 const void *_input, void *_output, size_t _length, void *_IV);
00047
00048 ssize_t rijndael_cfb1_decrypt(rd_keyinstance *_key,
00049 const void *_input, void *_output, size_t _length, void *_IV);
00050
00051 ssize_t rijndael_cfb8_encrypt(rd_keyinstance *_key,
00052 const void *_input, void *_output, size_t _length, void *_IV);
00053
00054 ssize_t rijndael_cfb8_decrypt(rd_keyinstance *_key,
00055 const void *_input, void *_output, size_t _length, void *_IV);
00056
00057 ssize_t rijndael_pad(void *_input, size_t _length);
00058
00059 ssize_t rijndael_unpad(const void *_input, size_t _length);
00060
00061 typedef ssize_t (*rd_function)(rd_keyinstance *_key,
00062 const void *_input, void *_output, size_t _length, void *_IV);
00063
00064 #ifdef INTERMEDIATE_VALUE_KAT
00065
00066 void cipherEncryptUpdateRounds(rd_keyinstance *key,
00067 const void *input, void *output, int rounds);
00068
00069 void cipherDecryptUpdateRounds(rd_keyinstance *key,
00070 const void *input, void *output, int rounds);
00071
00072 #endif
00073
00074 #endif
00075
00076
00077
00078