OpenZWave Library  1.2
aestab.h
Go to the documentation of this file.
1 /*
2 ---------------------------------------------------------------------------
3 Copyright (c) 1998-2013, Brian Gladman, Worcester, UK. All rights reserved.
4 
5 The redistribution and use of this software (with or without changes)
6 is allowed without the payment of fees or royalties provided that:
7 
8  source code distributions include the above copyright notice, this
9  list of conditions and the following disclaimer;
10 
11  binary distributions include the above copyright notice, this list
12  of conditions and the following disclaimer in their documentation.
13 
14 This software is provided 'as is' with no explicit or implied warranties
15 in respect of its operation, including, but not limited to, correctness
16 and fitness for purpose.
17 ---------------------------------------------------------------------------
18 Issue Date: 20/12/2007
19 
20  This file contains the code for declaring the tables needed to implement
21  AES. The file aesopt.h is assumed to be included before this header file.
22  If there are no global variables, the definitions here can be used to put
23  the AES tables in a structure so that a pointer can then be added to the
24  AES context to pass them to the AES routines that need them. If this
25  facility is used, the calling program has to ensure that this pointer is
26  managed appropriately. In particular, the value of the t_dec(in,it) item
27  in the table structure must be set to zero in order to ensure that the
28  tables are initialised. In practice the three code sequences in aeskey.c
29  that control the calls to aes_init() and the aes_init() routine itself will
30  have to be changed for a specific implementation. If global variables are
31  available it will generally be preferable to use them with the precomputed
32  FIXED_TABLES option that uses static global tables.
33 
34  The following defines can be used to control the way the tables
35  are defined, initialised and used in embedded environments that
36  require special features for these purposes
37 
38  the 't_dec' construction is used to declare fixed table arrays
39  the 't_set' construction is used to set fixed table values
40  the 't_use' construction is used to access fixed table values
41 
42  256 byte tables:
43 
44  t_xxx(s,box) => forward S box
45  t_xxx(i,box) => inverse S box
46 
47  256 32-bit word OR 4 x 256 32-bit word tables:
48 
49  t_xxx(f,n) => forward normal round
50  t_xxx(f,l) => forward last round
51  t_xxx(i,n) => inverse normal round
52  t_xxx(i,l) => inverse last round
53  t_xxx(l,s) => key schedule table
54  t_xxx(i,m) => key schedule table
55 
56  Other variables and tables:
57 
58  t_xxx(r,c) => the rcon table
59 */
60 
61 #if !defined( _AESTAB_H )
62 #define _AESTAB_H
63 
64 #if defined(__cplusplus)
65 extern "C" {
66 #endif
67 
68 #define t_dec(m,n) t_##m##n
69 #define t_set(m,n) t_##m##n
70 #define t_use(m,n) t_##m##n
71 
72 #if defined(FIXED_TABLES)
73 # if !defined( __GNUC__ ) && (defined( __MSDOS__ ) || defined( __WIN16__ ))
74 /* make tables far data to avoid using too much DGROUP space (PG) */
75 # define CONST const far
76 # else
77 # define CONST const
78 # endif
79 #else
80 # define CONST
81 #endif
82 
83 #if defined(DO_TABLES)
84 # define EXTERN
85 #else
86 # define EXTERN extern
87 #endif
88 
89 #if defined(_MSC_VER) && defined(TABLE_ALIGN)
90 #define ALIGN __declspec(align(TABLE_ALIGN))
91 #else
92 #define ALIGN
93 #endif
94 
95 #if defined( __WATCOMC__ ) && ( __WATCOMC__ >= 1100 )
96 # define XP_DIR __cdecl
97 #else
98 # define XP_DIR
99 #endif
100 
101 #if defined(DO_TABLES) && defined(FIXED_TABLES)
102 #define d_1(t,n,b,e) EXTERN ALIGN CONST XP_DIR t n[256] = b(e)
103 #define d_4(t,n,b,e,f,g,h) EXTERN ALIGN CONST XP_DIR t n[4][256] = { b(e), b(f), b(g), b(h) }
104 EXTERN ALIGN CONST uint32_t t_dec(r,c)[RC_LENGTH] = rc_data(w0);
105 #else
106 #define d_1(t,n,b,e) EXTERN ALIGN CONST XP_DIR t n[256]
107 #define d_4(t,n,b,e,f,g,h) EXTERN ALIGN CONST XP_DIR t n[4][256]
108 EXTERN ALIGN CONST uint32_t t_dec(r,c)[RC_LENGTH];
109 #endif
110 
111 #if defined( SBX_SET )
112  d_1(uint8_t, t_dec(s,box), sb_data, h0);
113 #endif
114 #if defined( ISB_SET )
115  d_1(uint8_t, t_dec(i,box), isb_data, h0);
116 #endif
117 
118 #if defined( FT1_SET )
119  d_1(uint32_t, t_dec(f,n), sb_data, u0);
120 #endif
121 #if defined( FT4_SET )
122  d_4(uint32_t, t_dec(f,n), sb_data, u0, u1, u2, u3);
123 #endif
124 
125 #if defined( FL1_SET )
126  d_1(uint32_t, t_dec(f,l), sb_data, w0);
127 #endif
128 #if defined( FL4_SET )
129  d_4(uint32_t, t_dec(f,l), sb_data, w0, w1, w2, w3);
130 #endif
131 
132 #if defined( IT1_SET )
133  d_1(uint32_t, t_dec(i,n), isb_data, v0);
134 #endif
135 #if defined( IT4_SET )
136  d_4(uint32_t, t_dec(i,n), isb_data, v0, v1, v2, v3);
137 #endif
138 
139 #if defined( IL1_SET )
140  d_1(uint32_t, t_dec(i,l), isb_data, w0);
141 #endif
142 #if defined( IL4_SET )
143  d_4(uint32_t, t_dec(i,l), isb_data, w0, w1, w2, w3);
144 #endif
145 
146 #if defined( LS1_SET )
147 #if defined( FL1_SET )
148 #undef LS1_SET
149 #else
150  d_1(uint32_t, t_dec(l,s), sb_data, w0);
151 #endif
152 #endif
153 
154 #if defined( LS4_SET )
155 #if defined( FL4_SET )
156 #undef LS4_SET
157 #else
158  d_4(uint32_t, t_dec(l,s), sb_data, w0, w1, w2, w3);
159 #endif
160 #endif
161 
162 #if defined( IM1_SET )
163  d_1(uint32_t, t_dec(i,m), mm_data, v0);
164 #endif
165 #if defined( IM4_SET )
166  d_4(uint32_t, t_dec(i,m), mm_data, v0, v1, v2, v3);
167 #endif
168 
169 #if defined(__cplusplus)
170 }
171 #endif
172 
173 #endif
isb_data
#define isb_data(w)
Definition: aestab.c:62
ALIGN
#define ALIGN
Definition: aestab.h:92
v0
#define v0(p)
Definition: aestab.c:146
CONST
#define CONST
Definition: aestab.h:80
h0
#define h0(x)
Definition: aestab.c:134
u0
#define u0(p)
Definition: aestab.c:141
v2
#define v2(p)
Definition: aestab.c:148
u3
#define u3(p)
Definition: aestab.c:144
d_4
#define d_4(t, n, b, e, f, g, h)
Definition: aestab.h:107
rc_data
#define rc_data(w)
Definition: aestab.c:130
u1
#define u1(p)
Definition: aestab.c:142
RC_LENGTH
#define RC_LENGTH
Definition: aesopt.h:520
v3
#define v3(p)
Definition: aestab.c:149
w3
#define w3(p)
Definition: aestab.c:139
sb_data
#define sb_data(w)
Definition: aestab.c:28
EXTERN
#define EXTERN
Definition: aestab.h:86
t_dec
#define t_dec(m, n)
Definition: aestab.h:68
s
#define s(x, c)
Definition: aesopt.h:483
w2
#define w2(p)
Definition: aestab.c:138
v1
#define v1(p)
Definition: aestab.c:147
u2
#define u2(p)
Definition: aestab.c:143
mm_data
#define mm_data(w)
Definition: aestab.c:96
d_1
#define d_1(t, n, b, e)
Definition: aestab.h:106
w0
#define w0(p)
Definition: aestab.c:136
w1
#define w1(p)
Definition: aestab.c:137