133841545SHajimu UMEMOTO /* $FreeBSD$ */ 29132d507SHajimu UMEMOTO /* $KAME: rijndael-api-fst.h,v 1.6 2001/05/27 00:23:23 itojun Exp $ */ 3fe2869c8SKris Kennaway 49132d507SHajimu UMEMOTO /* 59132d507SHajimu UMEMOTO * rijndael-api-fst.h v2.3 April '2000 6fe2869c8SKris Kennaway * 79132d507SHajimu UMEMOTO * Optimised ANSI C code 8fe2869c8SKris Kennaway * 9fe2869c8SKris Kennaway */ 10fe2869c8SKris Kennaway 11fe2869c8SKris Kennaway #ifndef __RIJNDAEL_API_FST_H 12fe2869c8SKris Kennaway #define __RIJNDAEL_API_FST_H 13fe2869c8SKris Kennaway 14fe2869c8SKris Kennaway #include <crypto/rijndael/rijndael-alg-fst.h> 15fe2869c8SKris Kennaway 165129dcfcSHajimu UMEMOTO /* Generic Defines */ 17fe2869c8SKris Kennaway #define DIR_ENCRYPT 0 /* Are we encrpyting? */ 18fe2869c8SKris Kennaway #define DIR_DECRYPT 1 /* Are we decrpyting? */ 19fe2869c8SKris Kennaway #define MODE_ECB 1 /* Are we ciphering in ECB mode? */ 20fe2869c8SKris Kennaway #define MODE_CBC 2 /* Are we ciphering in CBC mode? */ 21fe2869c8SKris Kennaway #define MODE_CFB1 3 /* Are we ciphering in 1-bit CFB mode? */ 22fe2869c8SKris Kennaway #define BITSPERBLOCK 128 /* Default number of bits in a cipher block */ 23fe2869c8SKris Kennaway 245129dcfcSHajimu UMEMOTO /* Error Codes */ 25fe2869c8SKris Kennaway #define BAD_KEY_DIR -1 /* Key direction is invalid, e.g., unknown value */ 26fe2869c8SKris Kennaway #define BAD_KEY_MAT -2 /* Key material not of correct length */ 27fe2869c8SKris Kennaway #define BAD_KEY_INSTANCE -3 /* Key passed is not valid */ 28fe2869c8SKris Kennaway #define BAD_CIPHER_MODE -4 /* Params struct passed to cipherInit invalid */ 29fe2869c8SKris Kennaway #define BAD_CIPHER_STATE -5 /* Cipher in wrong state (e.g., not initialized) */ 30fe2869c8SKris Kennaway #define BAD_BLOCK_LENGTH -6 31fe2869c8SKris Kennaway #define BAD_CIPHER_INSTANCE -7 32fe2869c8SKris Kennaway #define BAD_DATA -8 /* Data contents are invalid, e.g., invalid padding */ 33fe2869c8SKris Kennaway #define BAD_OTHER -9 /* Unknown error */ 34fe2869c8SKris Kennaway 355129dcfcSHajimu UMEMOTO /* Algorithm-specific Defines */ 365129dcfcSHajimu UMEMOTO #define RIJNDAEL_MAX_KEY_SIZE 64 /* # of ASCII char's needed to represent a key */ 375129dcfcSHajimu UMEMOTO #define RIJNDAEL_MAX_IV_SIZE 16 /* # bytes needed to represent an IV */ 38fe2869c8SKris Kennaway 395129dcfcSHajimu UMEMOTO /* Typedefs */ 40fe2869c8SKris Kennaway 41fe2869c8SKris Kennaway /* The structure for key information */ 42fe2869c8SKris Kennaway typedef struct { 439132d507SHajimu UMEMOTO u_int8_t direction; /* Key used for encrypting or decrypting? */ 44fe2869c8SKris Kennaway int keyLen; /* Length of the key */ 455129dcfcSHajimu UMEMOTO char keyMaterial[RIJNDAEL_MAX_KEY_SIZE+1]; /* Raw key data in ASCII, e.g., user input or KAT values */ 465129dcfcSHajimu UMEMOTO int Nr; /* key-length-dependent number of rounds */ 475129dcfcSHajimu UMEMOTO u_int32_t rk[4*(RIJNDAEL_MAXNR + 1)]; /* key schedule */ 485129dcfcSHajimu UMEMOTO u_int32_t ek[4*(RIJNDAEL_MAXNR + 1)]; /* CFB1 key schedule (encryption only) */ 49fe2869c8SKris Kennaway } keyInstance; 50fe2869c8SKris Kennaway 51fe2869c8SKris Kennaway /* The structure for cipher information */ 52fe2869c8SKris Kennaway typedef struct { /* changed order of the components */ 539132d507SHajimu UMEMOTO u_int8_t mode; /* MODE_ECB, MODE_CBC, or MODE_CFB1 */ 545129dcfcSHajimu UMEMOTO u_int8_t IV[RIJNDAEL_MAX_IV_SIZE]; /* A possible Initialization Vector for ciphering */ 55fe2869c8SKris Kennaway } cipherInstance; 56fe2869c8SKris Kennaway 57fe2869c8SKris Kennaway /* Function prototypes */ 58fe2869c8SKris Kennaway 595129dcfcSHajimu UMEMOTO int rijndael_makeKey(keyInstance *, u_int8_t, int, char *); 60fe2869c8SKris Kennaway 615129dcfcSHajimu UMEMOTO int rijndael_cipherInit(cipherInstance *, u_int8_t, char *); 62fe2869c8SKris Kennaway 635129dcfcSHajimu UMEMOTO int rijndael_blockEncrypt(cipherInstance *, keyInstance *, u_int8_t *, int, 645129dcfcSHajimu UMEMOTO u_int8_t *); 655129dcfcSHajimu UMEMOTO int rijndael_padEncrypt(cipherInstance *, keyInstance *, u_int8_t *, int, 665129dcfcSHajimu UMEMOTO u_int8_t *); 67fe2869c8SKris Kennaway 685129dcfcSHajimu UMEMOTO int rijndael_blockDecrypt(cipherInstance *, keyInstance *, u_int8_t *, int, 695129dcfcSHajimu UMEMOTO u_int8_t *); 705129dcfcSHajimu UMEMOTO int rijndael_padDecrypt(cipherInstance *, keyInstance *, u_int8_t *, int, 715129dcfcSHajimu UMEMOTO u_int8_t *); 72fe2869c8SKris Kennaway 73fe2869c8SKris Kennaway #endif /* __RIJNDAEL_API_FST_H */ 74