Annotation of embedaddon/ipsec-tools/src/racoon/missing/crypto/rijndael/rijndael-api-fst.h, revision 1.1

1.1     ! misho       1: /*     $NetBSD: rijndael-api-fst.h,v 1.4 2006/09/09 16:22:36 manu Exp $        */
        !             2: 
        !             3: /*     $KAME: rijndael-api-fst.h,v 1.1.1.1 2001/08/08 09:56:27 sakane Exp $    */
        !             4: 
        !             5: /*
        !             6:  * rijndael-api-fst.h   v2.3   April '2000
        !             7:  *
        !             8:  * Optimised ANSI C code
        !             9:  *
        !            10:  * #define INTERMEDIATE_VALUE_KAT to generate the Intermediate Value Known Answer Test.
        !            11:  */
        !            12: 
        !            13: #ifndef __RIJNDAEL_API_FST_H
        !            14: #define __RIJNDAEL_API_FST_H
        !            15: 
        !            16: #include <crypto/rijndael/rijndael-alg-fst.h>
        !            17: 
        !            18: /*  Defines:
        !            19:        Add any additional defines you need
        !            20: */
        !            21: 
        !            22: #define     DIR_ENCRYPT           0 /*  Are we encrpyting?  */
        !            23: #define     DIR_DECRYPT           1 /*  Are we decrpyting?  */
        !            24: #define     MODE_ECB              1 /*  Are we ciphering in ECB mode?   */
        !            25: #define     MODE_CBC              2 /*  Are we ciphering in CBC mode?   */
        !            26: #define     MODE_CFB1             3 /*  Are we ciphering in 1-bit CFB mode? */
        !            27: #define     TRUE                  1
        !            28: #define     FALSE                 0
        !            29: #define     BITSPERBLOCK        128 /* Default number of bits in a cipher block */
        !            30: 
        !            31: /*  Error Codes - CHANGE POSSIBLE: inclusion of additional error codes  */
        !            32: #define     BAD_KEY_DIR          -1 /*  Key direction is invalid, e.g., unknown value */
        !            33: #define     BAD_KEY_MAT          -2 /*  Key material not of correct length */
        !            34: #define     BAD_KEY_INSTANCE     -3 /*  Key passed is not valid */
        !            35: #define     BAD_CIPHER_MODE      -4 /*  Params struct passed to cipherInit invalid */
        !            36: #define     BAD_CIPHER_STATE     -5 /*  Cipher in wrong state (e.g., not initialized) */
        !            37: #define     BAD_BLOCK_LENGTH     -6
        !            38: #define     BAD_CIPHER_INSTANCE  -7
        !            39: #define     BAD_DATA             -8 /*  Data contents are invalid, e.g., invalid padding */
        !            40: #define     BAD_OTHER            -9 /*  Unknown error */
        !            41: 
        !            42: /*  CHANGE POSSIBLE:  inclusion of algorithm specific defines  */
        !            43: #define     MAX_KEY_SIZE         64 /* # of ASCII char's needed to represent a key */
        !            44: #define     MAX_IV_SIZE          16 /* # bytes needed to represent an IV  */
        !            45: 
        !            46: /*  Typedefs:
        !            47: 
        !            48:        Typedef'ed data storage elements.  Add any algorithm specific 
        !            49: parameters at the bottom of the structs as appropriate.
        !            50: */
        !            51: 
        !            52: /*  The structure for key information */
        !            53: typedef struct {
        !            54:     u_int8_t  direction;            /* Key used for encrypting or decrypting? */
        !            55:     int   keyLen;                   /* Length of the key  */
        !            56:     char  keyMaterial[MAX_KEY_SIZE+1];  /* Raw key data in ASCII, e.g., user input or KAT values */
        !            57:         /*  The following parameters are algorithm dependent, replace or add as necessary  */
        !            58:        int   ROUNDS;                   /* key-length-dependent number of rounds */
        !            59:     int   blockLen;                 /* block length */
        !            60:     union {
        !            61:        u_int8_t xkS8[RIJNDAEL_MAXROUNDS+1][4][4];      /* key schedule         */
        !            62:        u_int32_t xkS32[RIJNDAEL_MAXROUNDS+1][4];       /* key schedule         */
        !            63:     } xKeySched;
        !            64: #define        keySched        xKeySched.xkS8
        !            65: } keyInstance;
        !            66: 
        !            67: /*  The structure for cipher information */
        !            68: typedef struct {                    /* changed order of the components */
        !            69:     u_int8_t mode;                  /* MODE_ECB, MODE_CBC, or MODE_CFB1 */
        !            70:     u_int8_t IV[MAX_IV_SIZE];       /* A possible Initialization Vector for ciphering */
        !            71:         /*  Add any algorithm specific parameters needed here  */
        !            72:     int   blockLen;                 /* Sample: Handles non-128 bit block sizes (if available) */
        !            73: } cipherInstance;
        !            74: 
        !            75: /*  Function prototypes  */
        !            76: /*  CHANGED: nothing
        !            77:        TODO: implement the following extensions to setup 192-bit and 256-bit block lengths:
        !            78:         makeKeyEx():    parameter blockLen added
        !            79:                         -- this parameter is absolutely necessary if you want to
        !            80:                         setup the round keys in a variable block length setting 
        !            81:            cipherInitEx(): parameter blockLen added (for obvious reasons)              
        !            82:  */
        !            83: 
        !            84: int rijndael_makeKey(keyInstance *key, u_int8_t direction, int keyLen, char *keyMaterial);
        !            85: 
        !            86: int rijndael_cipherInit(cipherInstance *cipher, u_int8_t mode, char *IV);
        !            87: 
        !            88: int rijndael_blockEncrypt(cipherInstance *cipher, keyInstance *key,
        !            89:         u_int8_t *input, int inputLen, u_int8_t *outBuffer);
        !            90: 
        !            91: int rijndael_padEncrypt(cipherInstance *cipher, keyInstance *key,
        !            92:                u_int8_t *input, int inputOctets, u_int8_t *outBuffer);
        !            93: 
        !            94: int rijndael_blockDecrypt(cipherInstance *cipher, keyInstance *key,
        !            95:         u_int8_t *input, int inputLen, u_int8_t *outBuffer);
        !            96: 
        !            97: int rijndael_padDecrypt(cipherInstance *cipher, keyInstance *key,
        !            98:                u_int8_t *input, int inputOctets, u_int8_t *outBuffer);
        !            99: 
        !           100: #ifdef INTERMEDIATE_VALUE_KAT
        !           101: int rijndael_cipherUpdateRounds(cipherInstance *cipher, keyInstance *key,
        !           102:         u_int8_t *input, int inputLen, u_int8_t *outBuffer, int Rounds);
        !           103: #endif /* INTERMEDIATE_VALUE_KAT */
        !           104: 
        !           105: #endif /*  __RIJNDAEL_API_FST_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>