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

1.1       root        1: /*
                      2:  ---------------------------------------------------------------------------
                      3:  Copyright (c) 2003, Dr 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 28/01/2004
                     31: 
                     32:  This file contains the code for declaring the tables needed to implement
                     33:  AES. The file aesopt.h is assumed to be included before this header file.
                     34:  If there are no global variables, the definitions here can be used to put
                     35:  the AES tables in a structure so that a pointer can then be added to the
                     36:  AES context to pass them to the AES routines that need them.   If this
                     37:  facility is used, the calling program has to ensure that this pointer is
                     38:  managed appropriately.  In particular, the value of the t_dec(in,it) item
                     39:  in the table structure must be set to zero in order to ensure that the
                     40:  tables are initialised. In practice the three code sequences in aeskey.c
                     41:  that control the calls to gen_tabs() and the gen_tabs() routine itself will
                     42:  have to be changed for a specific implementation. If global variables are
                     43:  available it will generally be preferable to use them with the precomputed
                     44:  FIXED_TABLES option that uses static global tables.
                     45: 
                     46:  The following defines can be used to control the way the tables
                     47:  are defined, initialised and used in embedded environments that
                     48:  require special features for these purposes
                     49: 
                     50:     the 't_dec' construction is used to declare fixed table arrays
                     51:     the 't_set' construction is used to set fixed table values
                     52:     the 't_use' construction is used to access fixed table values
                     53: 
                     54:     256 byte tables:
                     55: 
                     56:         t_xxx(s,box)    => forward S box
                     57:         t_xxx(i,box)    => inverse S box
                     58: 
                     59:     256 32-bit word OR 4 x 256 32-bit word tables:
                     60: 
                     61:         t_xxx(f,n)      => forward normal round
                     62:         t_xxx(f,l)      => forward last round
                     63:         t_xxx(i,n)      => inverse normal round
                     64:         t_xxx(i,l)      => inverse last round
                     65:         t_xxx(l,s)      => key schedule table
                     66:         t_xxx(i,m)      => key schedule table
                     67: 
                     68:     Other variables and tables:
                     69: 
                     70:         t_xxx(r,c)      => the rcon table
                     71: */
                     72: 
                     73: #if !defined( _AESTAB_H )
                     74: #define _AESTAB_H
                     75: 
                     76: #define t_dec(m,n) t_##m##n
                     77: #define t_set(m,n) t_##m##n
                     78: #define t_use(m,n) t_##m##n
                     79: 
                     80: #if defined(FIXED_TABLES)
                     81: #define Const const
                     82: #else
                     83: #define Const
                     84: #endif
                     85: 
                     86: #if defined(DO_TABLES)
                     87: #define Extern
                     88: #else
                     89: #define Extern extern
                     90: #endif
                     91: 
                     92: #if defined(_MSC_VER) && defined(TABLE_ALIGN)
                     93: #define Align __declspec(align(TABLE_ALIGN))
                     94: #else
                     95: #define Align
                     96: #endif
                     97: 
                     98: #if defined(__cplusplus)
                     99: extern "C"
                    100: {
                    101: #endif
                    102: 
                    103: #if defined(DO_TABLES) && defined(FIXED_TABLES)
                    104: #define d_1(t,n,b,e)       Align Const t n[256]    =   b(e)
                    105: #define d_4(t,n,b,e,f,g,h) Align Const t n[4][256] = { b(e), b(f), b(g), b(h) }
                    106: Extern Align Const aes_32t t_dec(r,c)[RC_LENGTH] = rc_data(w0);
                    107: #else
                    108: #define d_1(t,n,b,e)       Extern Align Const t n[256]
                    109: #define d_4(t,n,b,e,f,g,h) Extern Align Const t n[4][256]
                    110: Extern Align Const aes_32t t_dec(r,c)[RC_LENGTH];
                    111: #endif
                    112: 
                    113: #if defined( SBX_SET )
                    114:     d_1(aes_08t, t_dec(s,box), sb_data, h0);
                    115: #endif
                    116: #if defined( ISB_SET )
                    117:     d_1(aes_08t, t_dec(i,box), isb_data, h0);
                    118: #endif
                    119: 
                    120: #if defined( FT1_SET )
                    121:     d_1(aes_32t, t_dec(f,n), sb_data, u0);
                    122: #endif
                    123: #if defined( FT4_SET )
                    124:     d_4(aes_32t, t_dec(f,n), sb_data, u0, u1, u2, u3);
                    125: #endif
                    126: 
                    127: #if defined( FL1_SET )
                    128:     d_1(aes_32t, t_dec(f,l), sb_data, w0);
                    129: #endif
                    130: #if defined( FL4_SET )
                    131:     d_4(aes_32t, t_dec(f,l), sb_data, w0, w1, w2, w3);
                    132: #endif
                    133: 
                    134: #if defined( IT1_SET )
                    135:     d_1(aes_32t, t_dec(i,n), isb_data, v0);
                    136: #endif
                    137: #if defined( IT4_SET )
                    138:     d_4(aes_32t, t_dec(i,n), isb_data, v0, v1, v2, v3);
                    139: #endif
                    140: 
                    141: #if defined( IL1_SET )
                    142:     d_1(aes_32t, t_dec(i,l), isb_data, w0);
                    143: #endif
                    144: #if defined( IL4_SET )
                    145:     d_4(aes_32t, t_dec(i,l), isb_data, w0, w1, w2, w3);
                    146: #endif
                    147: 
                    148: #if defined( LS1_SET )
                    149: #if defined( FL1_SET )
                    150: #undef  LS1_SET
                    151: #else
                    152:     d_1(aes_32t, t_dec(l,s), sb_data, w0);
                    153: #endif
                    154: #endif
                    155: 
                    156: #if defined( LS4_SET )
                    157: #if defined( FL4_SET )
                    158: #undef  LS4_SET
                    159: #else
                    160:     d_4(aes_32t, t_dec(l,s), sb_data, w0, w1, w2, w3);
                    161: #endif
                    162: #endif
                    163: 
                    164: #if defined( IM1_SET )
                    165:     d_1(aes_32t, t_dec(i,m), mm_data, v0);
                    166: #endif
                    167: #if defined( IM4_SET )
                    168:     d_4(aes_32t, t_dec(i,m), mm_data, v0, v1, v2, v3);
                    169: #endif
                    170: 
                    171: #if defined(__cplusplus)
                    172: }
                    173: #endif
                    174: 
                    175: #endif

unix.superglobalmegacorp.com

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