Annotation of truecrypt/crypto/aessmall.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  ---------------------------------------------------------------------------
                      3:  Copyright (c) 1998-2006, Brian Gladman, Worcester, UK. All rights reserved.
                      4: 
                      5:  LICENSE TERMS
                      6: 
                      7:  The free distribution and use of this software in both source and binary
                      8:  form is allowed (with or without changes) provided that:
                      9: 
                     10:    1. distributions of this source code include the above copyright
                     11:       notice, this list of conditions and the following disclaimer;
                     12: 
                     13:    2. distributions in binary form include the above copyright
                     14:       notice, this list of conditions and the following disclaimer
                     15:       in the documentation and/or other associated materials;
                     16: 
                     17:    3. the copyright holder's name is not used to endorse products
                     18:       built using this software without specific written permission.
                     19: 
                     20:  ALTERNATIVELY, provided that this notice is retained in full, this product
                     21:  may be distributed under the terms of the GNU General Public License (GPL),
                     22:  in which case the provisions of the GPL apply INSTEAD OF those given above.
                     23: 
                     24:  DISCLAIMER
                     25: 
                     26:  This software is provided 'as is' with no explicit or implied warranties
                     27:  in respect of its properties, including, but not limited to, correctness
                     28:  and/or fitness for purpose.
                     29:  ---------------------------------------------------------------------------
                     30:  Issue 09/09/2006
                     31: 
                     32:  This is an AES implementation that uses only 8-bit byte operations on the
                     33:  cipher state.
                     34:  */
                     35: 
                     36: #ifndef AES_H
                     37: #define AES_H
                     38: 
                     39: #if defined(__cplusplus)
                     40: extern "C"
                     41: {
                     42: #endif
                     43: 
                     44: /*  This provides speed optimisation opportunities if 32-bit word
                     45:     operations are available
                     46: */
                     47: #if 1
                     48: #  define HAVE_UINT_32T
                     49: #endif
                     50: 
                     51: #if 1
                     52: #  define AES_ENC_PREKEYED  /* AES encryption with a precomputed key schedule  */
                     53: #endif
                     54: #if 1
                     55: #  define AES_DEC_PREKEYED  /* AES decryption with a precomputed key schedule  */
                     56: #endif
                     57: #if 0
                     58: #  define AES_ENC_128_OTFK  /* AES encryption with 'on the fly' 128 bit keying */
                     59: #endif
                     60: #if 0
                     61: #  define AES_DEC_128_OTFK  /* AES decryption with 'on the fly' 128 bit keying */
                     62: #endif
                     63: #if 0
                     64: #  define AES_ENC_256_OTFK  /* AES encryption with 'on the fly' 256 bit keying */
                     65: #endif
                     66: #if 0
                     67: #  define AES_DEC_256_OTFK  /* AES decryption with 'on the fly' 256 bit keying */
                     68: #endif
                     69: 
                     70: #define N_ROW                   4
                     71: #define N_COL                   4
                     72: #define N_BLOCK   (N_ROW * N_COL)
                     73: #define N_MAX_ROUNDS           14
                     74: 
                     75: typedef unsigned char uint_8t;
                     76: 
                     77: typedef uint_8t return_type;
                     78: typedef uint_8t length_type;
                     79: typedef uint_8t uint_type;
                     80: 
                     81: typedef unsigned char uint_8t;
                     82: 
                     83: typedef struct
                     84: {   uint_8t ksch[(N_MAX_ROUNDS + 1) * N_BLOCK];
                     85:     uint_8t rnd;
                     86: } aes_context;
                     87: 
                     88: /*  The following calls are for a precomputed key schedule
                     89: 
                     90:     NOTE: If the length_type used for the key length is an
                     91:     unsigned 8-bit character, a key length of 256 bits must
                     92:     be entered as a length in bytes (valid inputs are hence
                     93:     128, 192, 16, 24 and 32).
                     94: */
                     95: 
                     96: #if defined( AES_ENC_PREKEYED ) || defined( AES_DEC_PREKEYED )
                     97: 
                     98: return_type aes_set_key( const unsigned char key[],
                     99:                          length_type keylen,
                    100:                          aes_context ctx[1] );
                    101: #endif
                    102: 
                    103: #if defined( AES_ENC_PREKEYED )
                    104: 
                    105: return_type aes_encrypt( const unsigned char in[N_BLOCK],
                    106:                          unsigned char out[N_BLOCK],
                    107:                          const aes_context ctx[1] );
                    108: #endif
                    109: 
                    110: #if defined( AES_DEC_PREKEYED )
                    111: 
                    112: return_type aes_decrypt( const unsigned char in[N_BLOCK],
                    113:                          unsigned char out[N_BLOCK],
                    114:                          const aes_context ctx[1] );
                    115: #endif
                    116: 
                    117: /*  The following calls are for 'on the fly' keying.  In this case the
                    118:     encryption and decryption keys are different.
                    119: 
                    120:     The encryption subroutines take a key in an array of bytes in
                    121:     key[L] where L is 16, 24 or 32 bytes for key lengths of 128,
                    122:     192, and 256 bits respectively.  They then encrypts the input
                    123:     data, in[] with this key and put the reult in the output array
                    124:     out[].  In addition, the second key array, o_key[L], is used
                    125:     to output the key that is needed by the decryption subroutine
                    126:     to reverse the encryption operation.  The two key arrays can
                    127:     be the same array but in this case the original key will be
                    128:     overwritten.
                    129: 
                    130:     In the same way, the decryption subroutines output keys that
                    131:     can be used to reverse their effect when used for encryption.
                    132: 
                    133:     Only 128 and 256 bit keys are supported in these 'on the fly'
                    134:     modes.
                    135: */
                    136: 
                    137: #if defined( AES_ENC_128_OTFK )
                    138: void aes_encrypt_128( const unsigned char in[N_BLOCK],
                    139:                       unsigned char out[N_BLOCK],
                    140:                       const unsigned char key[N_BLOCK],
                    141:                       uint_8t o_key[N_BLOCK] );
                    142: #endif
                    143: 
                    144: #if defined( AES_DEC_128_OTFK )
                    145: void aes_decrypt_128( const unsigned char in[N_BLOCK],
                    146:                       unsigned char out[N_BLOCK],
                    147:                       const unsigned char key[N_BLOCK],
                    148:                       unsigned char o_key[N_BLOCK] );
                    149: #endif
                    150: 
                    151: #if defined( AES_ENC_256_OTFK )
                    152: void aes_encrypt_256( const unsigned char in[N_BLOCK],
                    153:                       unsigned char out[N_BLOCK],
                    154:                       const unsigned char key[2 * N_BLOCK],
                    155:                       unsigned char o_key[2 * N_BLOCK] );
                    156: #endif
                    157: 
                    158: #if defined( AES_DEC_256_OTFK )
                    159: void aes_decrypt_256( const unsigned char in[N_BLOCK],
                    160:                       unsigned char out[N_BLOCK],
                    161:                       const unsigned char key[2 * N_BLOCK],
                    162:                       unsigned char o_key[2 * N_BLOCK] );
                    163: #endif
                    164: 
                    165: #if defined(__cplusplus)
                    166: }
                    167: #endif
                    168: 
                    169: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.