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