The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/crypto/rijndael/rijndael-api-fst.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: f985d9023b657300440d77b1d41fbad1


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.