rijndael-api.h

Go to the documentation of this file.
00001 /*      rijndael-api.h - Rijndael encryption programming interface.
00002  *                                                      Author: Kees J. Bot
00003  *                                                              3 Nov 2000
00004  * Heavily based on the original API code by Antoon Bosselaers,
00005  * Vincent Rijmen, and Paulo Barreto, but with a different interface.
00006  *
00007  * This code (.h and .c) is in the public domain.
00008  */
00009 
00010 #ifndef __RIJNDAEL_API_H
00011 #define __RIJNDAEL_API_H
00012 
00013 /* Error codes. */
00014 #define RD_BAD_KEY_MAT      -1  /* Key material not of correct length */
00015 #define RD_BAD_BLOCK_LENGTH -2  /* Data is not a block multiple */
00016 #define RD_BAD_DATA         -3  /* Data contents are invalid (bad padding?) */
00017 
00018 /* Key information. */
00019 #define RD_KEY_HEX          -1  /* Key is in hex (otherwise octet length) */
00020 #define RD_MAXROUNDS        14  /* Max number of encryption rounds. */
00021 
00022 typedef struct {
00023         int     rounds;         /* Key-length-dependent number of rounds */
00024         unsigned char encsched[RD_MAXROUNDS+1][4][4];   /* Encr key schedule */
00025         unsigned char decsched[RD_MAXROUNDS+1][4][4];   /* Decr key schedule */
00026 } rd_keyinstance;
00027 
00028 /* Function prototypes. */
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 /* INTERMEDIATE_VALUE_KAT */
00073 
00074 #endif /* __RIJNDAEL_API_H */
00075 
00076 /*
00077  * $PchId: rijndael-api.h,v 1.2 2001/01/10 22:02:21 philip Exp $
00078  */

Generated on Fri Apr 14 22:57:17 2006 for minix by  doxygen 1.4.6