186d7f5d3SJohn Marino /* $FreeBSD: src/sys/crypto/rijndael/rijndael-api-fst.h,v 1.7 2005/03/11 16:26:10 ume Exp $ */ 286d7f5d3SJohn Marino /* $KAME: rijndael-api-fst.h,v 1.6 2001/05/27 00:23:23 itojun Exp $ */ 386d7f5d3SJohn Marino 486d7f5d3SJohn Marino /* 586d7f5d3SJohn Marino * rijndael-api-fst.h v2.3 April '2000 686d7f5d3SJohn Marino * 786d7f5d3SJohn Marino * Optimised ANSI C code 886d7f5d3SJohn Marino * 986d7f5d3SJohn Marino */ 1086d7f5d3SJohn Marino 1186d7f5d3SJohn Marino #ifndef __RIJNDAEL_API_FST_H 1286d7f5d3SJohn Marino #define __RIJNDAEL_API_FST_H 1386d7f5d3SJohn Marino 1486d7f5d3SJohn Marino #include <crypto/rijndael/rijndael.h> 1586d7f5d3SJohn Marino 1686d7f5d3SJohn Marino /* Generic Defines */ 1786d7f5d3SJohn Marino #define DIR_ENCRYPT 0 /* Are we encrpyting? */ 1886d7f5d3SJohn Marino #define DIR_DECRYPT 1 /* Are we decrpyting? */ 1986d7f5d3SJohn Marino #define MODE_ECB 1 /* Are we ciphering in ECB mode? */ 2086d7f5d3SJohn Marino #define MODE_CBC 2 /* Are we ciphering in CBC mode? */ 2186d7f5d3SJohn Marino #define MODE_CFB1 3 /* Are we ciphering in 1-bit CFB mode? */ 2286d7f5d3SJohn Marino #define BITSPERBLOCK 128 /* Default number of bits in a cipher block */ 2386d7f5d3SJohn Marino 2486d7f5d3SJohn Marino /* Error Codes */ 2586d7f5d3SJohn Marino #define BAD_KEY_DIR -1 /* Key direction is invalid, e.g., unknown value */ 2686d7f5d3SJohn Marino #define BAD_KEY_MAT -2 /* Key material not of correct length */ 2786d7f5d3SJohn Marino #define BAD_KEY_INSTANCE -3 /* Key passed is not valid */ 2886d7f5d3SJohn Marino #define BAD_CIPHER_MODE -4 /* Params struct passed to cipherInit invalid */ 2986d7f5d3SJohn Marino #define BAD_CIPHER_STATE -5 /* Cipher in wrong state (e.g., not initialized) */ 3086d7f5d3SJohn Marino #define BAD_BLOCK_LENGTH -6 3186d7f5d3SJohn Marino #define BAD_CIPHER_INSTANCE -7 3286d7f5d3SJohn Marino #define BAD_DATA -8 /* Data contents are invalid, e.g., invalid padding */ 3386d7f5d3SJohn Marino #define BAD_OTHER -9 /* Unknown error */ 3486d7f5d3SJohn Marino 3586d7f5d3SJohn Marino /* Algorithm-specific Defines */ 3686d7f5d3SJohn Marino #define RIJNDAEL_MAX_KEY_SIZE 64 /* # of ASCII char's needed to represent a key */ 3786d7f5d3SJohn Marino #define RIJNDAEL_MAX_IV_SIZE 16 /* # bytes needed to represent an IV */ 3886d7f5d3SJohn Marino 3986d7f5d3SJohn Marino /* Typedefs */ 4086d7f5d3SJohn Marino 4186d7f5d3SJohn Marino /* The structure for key information */ 4286d7f5d3SJohn Marino typedef struct { 4386d7f5d3SJohn Marino u_int8_t direction; /* Key used for encrypting or decrypting? */ 4486d7f5d3SJohn Marino int keyLen; /* Length of the key */ 4586d7f5d3SJohn Marino char keyMaterial[RIJNDAEL_MAX_KEY_SIZE+1]; /* Raw key data in ASCII, e.g., user input or KAT values */ 4686d7f5d3SJohn Marino int Nr; /* key-length-dependent number of rounds */ 4786d7f5d3SJohn Marino u_int32_t rk[4*(RIJNDAEL_MAXNR + 1)]; /* key schedule */ 4886d7f5d3SJohn Marino u_int32_t ek[4*(RIJNDAEL_MAXNR + 1)]; /* CFB1 key schedule (encryption only) */ 4986d7f5d3SJohn Marino } keyInstance; 5086d7f5d3SJohn Marino 5186d7f5d3SJohn Marino /* The structure for cipher information */ 5286d7f5d3SJohn Marino typedef struct { /* changed order of the components */ 5386d7f5d3SJohn Marino u_int8_t mode; /* MODE_ECB, MODE_CBC, or MODE_CFB1 */ 5486d7f5d3SJohn Marino u_int8_t IV[RIJNDAEL_MAX_IV_SIZE]; /* A possible Initialization Vector for ciphering */ 5586d7f5d3SJohn Marino } cipherInstance; 5686d7f5d3SJohn Marino 5786d7f5d3SJohn Marino /* Function prototypes */ 5886d7f5d3SJohn Marino 5986d7f5d3SJohn Marino int rijndael_makeKey(keyInstance *, u_int8_t, int, char *); 6086d7f5d3SJohn Marino 6186d7f5d3SJohn Marino int rijndael_cipherInit(cipherInstance *, u_int8_t, char *); 6286d7f5d3SJohn Marino 6386d7f5d3SJohn Marino int rijndael_blockEncrypt(cipherInstance *, keyInstance *, u_int8_t *, int, 6486d7f5d3SJohn Marino u_int8_t *); 6586d7f5d3SJohn Marino int rijndael_padEncrypt(cipherInstance *, keyInstance *, u_int8_t *, int, 6686d7f5d3SJohn Marino u_int8_t *); 6786d7f5d3SJohn Marino 6886d7f5d3SJohn Marino int rijndael_blockDecrypt(cipherInstance *, keyInstance *, u_int8_t *, int, 6986d7f5d3SJohn Marino u_int8_t *); 7086d7f5d3SJohn Marino int rijndael_padDecrypt(cipherInstance *, keyInstance *, u_int8_t *, int, 7186d7f5d3SJohn Marino u_int8_t *); 7286d7f5d3SJohn Marino 7386d7f5d3SJohn Marino #endif /* __RIJNDAEL_API_FST_H */ 74