Rijndael
Joan Daemen

Optimised ANSI C  v2.4
-----------------------------------------------------------

This archive contains the following files:

Makefile:	A file that allows for easy compiling of the code with
		Unix `make' (tested with GNU make).
README: 	This file.
boxes-fst.dat:	Tables that are needed by the reference implementation.
		The tables implement the S-box and its inverse, and also
		some temporary tables needed for multiplying in the finite
		field GF(2^8).
rijndael-alg-fst.c:
rijndael-alg-fst.h:
		Algorithm implementation.
rijndael-api-fst.c:
rijndael-api-fst.h:
		Interface to the C API.
rijndaeltest-fst.c:
		Implementation of the KAT and MCT.
table.128:
table.192:
table.256:
		Files needed for the KAT (for the Table Known Answer Test).



Instructions for the KAT and MCT software:

1) Compile the C code and put the executable in the same directory as the
   table.??? files.
2) Run the executable. It generates all the tables in the NIST format.
3) Compare the generated tables with the original provided tables, e.g.
   in Unix, with `diff'. 
4) The code is independent of the ENDIANness of the machine.
   However, the code casts char pointers to int pointers.
   On some platforms, this casting can cause problems. 
   This will cause malfunctioning of the CBC Monte Carlo tests.
   In this case, the compile parameter STRICT_ALIGN should be set to 1. 
   (Of course this results in slower code.) 


Changes with respect to v1.0 (= round 1 submission)
---------------------------------------------------

1) Removed the parameter blockLen from makeKey() and cipherInit().
   The parameter is still present in the structures keyInstance and
   cipherInstance.
2) Removed some calls to sscan().
3) Corrected the CBC decryption Monte Carlo test code.
4) Provided code for platforms with pointer alignment problems.
 
----------------------------------------------------------------------

Changes from v2.0 (= round 2 submission)
----------------------------------------

Various bug fixes in CBC encryption and decryption mode.

----------------------------------------------------------------------

Changes from v2.2
-----------------

--  Moved number of rounds to the keyInstance structure
    to make implementation thread-safe
--  Functions used only to generate the Intermediate Value
    Known Answer Test are now conditionally compiled
    via #define INTERMEDIATE_VALUE_KAT
--  Further optimized for the default 128-bit block size
--  Fixed CBC decryption bug (chained IV was lost if input
    and outBuffer were the same)
--  Added padding capability to CBC mode (allows encryption
    of any number of octets, not only full blocks)

----------------------------------------------------------------------

Changes from v2.3
-----------------

Fixed a small bug in CBC mode.
