|
|
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: ---------------------------------------------------------------------------
1.1.1.2 ! root 30: Issue 01/08/2005
1.1 root 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)
1.1.1.2 ! root 81: #define CONST const
1.1 root 82: #else
1.1.1.2 ! root 83: #define CONST
1.1 root 84: #endif
85:
86: #if defined(DO_TABLES)
1.1.1.2 ! root 87: #define EXTERN
1.1 root 88: #else
1.1.1.2 ! root 89: #define EXTERN extern
1.1 root 90: #endif
91:
92: #if defined(_MSC_VER) && defined(TABLE_ALIGN)
1.1.1.2 ! root 93: #define ALIGN __declspec(align(TABLE_ALIGN))
1.1 root 94: #else
1.1.1.2 ! root 95: #define ALIGN
1.1 root 96: #endif
97:
98: #if defined(__cplusplus)
99: extern "C"
100: {
101: #endif
102:
103: #if defined(DO_TABLES) && defined(FIXED_TABLES)
1.1.1.2 ! root 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 uint_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 uint_32t t_dec(r,c)[RC_LENGTH];
1.1 root 111: #endif
112:
113: #if defined( SBX_SET )
1.1.1.2 ! root 114: d_1(uint_8t, t_dec(s,box), sb_data, h0);
1.1 root 115: #endif
116: #if defined( ISB_SET )
1.1.1.2 ! root 117: d_1(uint_8t, t_dec(i,box), isb_data, h0);
1.1 root 118: #endif
119:
120: #if defined( FT1_SET )
1.1.1.2 ! root 121: d_1(uint_32t, t_dec(f,n), sb_data, u0);
1.1 root 122: #endif
123: #if defined( FT4_SET )
1.1.1.2 ! root 124: d_4(uint_32t, t_dec(f,n), sb_data, u0, u1, u2, u3);
1.1 root 125: #endif
126:
127: #if defined( FL1_SET )
1.1.1.2 ! root 128: d_1(uint_32t, t_dec(f,l), sb_data, w0);
1.1 root 129: #endif
130: #if defined( FL4_SET )
1.1.1.2 ! root 131: d_4(uint_32t, t_dec(f,l), sb_data, w0, w1, w2, w3);
1.1 root 132: #endif
133:
134: #if defined( IT1_SET )
1.1.1.2 ! root 135: d_1(uint_32t, t_dec(i,n), isb_data, v0);
1.1 root 136: #endif
137: #if defined( IT4_SET )
1.1.1.2 ! root 138: d_4(uint_32t, t_dec(i,n), isb_data, v0, v1, v2, v3);
1.1 root 139: #endif
140:
141: #if defined( IL1_SET )
1.1.1.2 ! root 142: d_1(uint_32t, t_dec(i,l), isb_data, w0);
1.1 root 143: #endif
144: #if defined( IL4_SET )
1.1.1.2 ! root 145: d_4(uint_32t, t_dec(i,l), isb_data, w0, w1, w2, w3);
1.1 root 146: #endif
147:
148: #if defined( LS1_SET )
149: #if defined( FL1_SET )
150: #undef LS1_SET
151: #else
1.1.1.2 ! root 152: d_1(uint_32t, t_dec(l,s), sb_data, w0);
1.1 root 153: #endif
154: #endif
155:
156: #if defined( LS4_SET )
157: #if defined( FL4_SET )
158: #undef LS4_SET
159: #else
1.1.1.2 ! root 160: d_4(uint_32t, t_dec(l,s), sb_data, w0, w1, w2, w3);
1.1 root 161: #endif
162: #endif
163:
164: #if defined( IM1_SET )
1.1.1.2 ! root 165: d_1(uint_32t, t_dec(i,m), mm_data, v0);
1.1 root 166: #endif
167: #if defined( IM4_SET )
1.1.1.2 ! root 168: d_4(uint_32t, t_dec(i,m), mm_data, v0, v1, v2, v3);
1.1 root 169: #endif
170:
171: #if defined(__cplusplus)
172: }
173: #endif
174:
175: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.