AES bar
AES bar

Errata and Notes
for the
AES CD-ROMs and Documentation

Last Modified: January 26, 2001
AES bar
AES bar

AES CD Errata and Notes

This is a list of all known errors on CD-1 and CD-2, which are being distributed by NIST for Round 1 of the AES Development Effort. In addition, this section includes notes that should be helpful to those using the code. Errors in the documentation given to NIST by submitters are listed in the Documentation Errata section below.

Errata and Notes for "CD-1: Documentation"

  1. \AESAlgs\Rc6\cipher.pdf
  2.  There is an error which occurs when viewing or printing page 10 of this file. After this error occurs, page 10 appears blank when viewed or printed. The error is corrected in the corresponding file found here. The corrected file is also included in the ZIP file for RC6, and on CD-2.


Errata and Notes for "CD-2: Algorithm Code"

  1. \RefCode\Hpc and \OptCCode\Hpc
  2. In each of these directories, we accidentally omitted a header file, hpc.h. A printout of this short file (2 pages) is being provided with all copies of CD-2.

     

  3. Comments and Helpful Hints for running the code found on CD-2:
  4.  

    1. Crypton - in the \RefCode\Crypton and \OptCCode\Crypton directories
    2.  Crypton uses additional data storage for the Intermediate Values (IV) test. This and other additional code for IV's gets include during compilation when CheckInterValue is defined in crypton.h. Be sure that this is undefined during normal operation.

       

    3. DEAL - in the \RefCode\Deal and \OptCCode\Deal directories
    4.  DEAL uses additional data storage for the key schedule. This storage space must be allocated and assigned for proper execution. Storage space for the key schedule is allocated with a statement similar to the following:
        UNIT precomp[MAX_KSS];
      And is assigned to the keyInstance structure as follows:
        key.kss = precomp;
      This statement must be performed before the call to makeKey().

       

    5. DFC - in the \RefCode\Dfc and \OptCCode\Dfc directories
    6.  The Initialization Vector to cipherInit() must have storage space defined. You cannot pass a NULL pointer to cipherInit(). The inputLen parameter to blockEncrypt() and blockDecrypt() refer to the number of bytes to be processed not the number of bits. The functions do however return the number of bits processed.

       

    7. FROG - in the \RefCode\Frog and \OptCCode\Frog directories
    8.  blockEncrypt() and blockDecrypt() only handle 128 bits at a time (inputlen=128). Additionally, blockEncrypt() and blockDecrypt() return TRUE on success instead of the number of bits ciphered.

       

    9. HPC - in the \RefCode\Hpc and \OptCCode\Hpc directories
    10.  Aside from the missing header file (noted in item #1 above), the algorithm code is contained in one file, either hpc-ansi.c or hpc-gcc.c. This makes it difficult to add test code in additional files. Some of the "defines" and structure definitions in the top of the hpc-ansi.c file are needed in the hpc.h file.

       In order to make things more simple, we recommend cutting and pasting code from hpc-ansi.c to a file called hpc-defs.h (hpc-defs.h will be a new file). The code that needs to be transfered from hpc-ansi.c to hpc-defs.h is found on lines 89-102 and line 425-530. Once the file hpc-defs.h is created, place a #include statement in hpc-ansi.c at line 89 (#include "hpc-defs.h"). A copy of what hpc-defs.h should look like is also being included with the CD-2 mailing.

       

    11. LOKI97 - in the \RefCode\Loki97 and \OptCCode\Loki97 directories
    12.  blockEncrypt() and blockDecrypt() return TRUE on success instead of the number of bits ciphered.

       

    13. MARS - in the \RefCode\Mars and \OptCCode\Mars directories
    14.  cipherInit() and makeKey() return 0 on success instead of TRUE.

       

    15. RIJNDAEL - in the \RefCode\Rijndael and \OptCCode\Rijndael directories
    16.  Rijndael accepts input lengths greater than BLOCK_SIZE (128 bits), but seems to only cipher the first block (128 bits) properly. Additionally, there is an extra parameter, blocklen, to both cipherInit() and makeKey().

       

    17. SAFER+ - in the \RefCode\Saferpls and \OptCCode\Saferpls directories
    18.  blockEncrypt() and blockDecrypt() return TRUE on success instead of the number of bits ciphered.

       

    19. TWOFISH
    20.  In the \RefCode\Twofish directory:

       Twofish needs several routines that are found in the file tst2fish.c. (tst2fish.c is a standalone program for generating the KAT and MCT data files.) Instead of copying the needed routines from tst2fish.c to twofish.c, simply delete the main program at the bottom of tst2fish.c and link with your main program.

       In the \OptCCode\Twofish directory:

       Twofish needs the routine called Here() - located in the file tst2fish.c - to be placed in the file twofish2.c. (tst2fish.c is a standalone program for generating the KAT and MCT data files.)

  5. \RefCode\Saferpls\katmct.c and \OptCCode\Saferpls\katmct.c
  6. In each of these files, on line 783, "26" should be changed to "16". This should eliminate any errors that might have occurred from faulty memory allocation.

AES bar

Documentation Errata

For a list of any errata contained within the algorithm documentation provided by the submitters, please look at each submitter's web page. Links to those pages are included below:

 

AES bar


Technical contact: Morris Dworkin
Administrative/process questions: Elaine Barker, Bill Burr