|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.