www.pudn.com > aes-src-22-11-16.zip > tablegen.c


/* 
 --------------------------------------------------------------------------- 
 Copyright (c) 1998-2006, Brian Gladman, Worcester, UK. All rights reserved. 
 
 LICENSE TERMS 
 
 The free distribution and use of this software in both source and binary 
 form is allowed (with or without changes) provided that: 
 
   1. distributions of this source code include the above copyright 
      notice, this list of conditions and the following disclaimer; 
 
   2. distributions in binary form include the above copyright 
      notice, this list of conditions and the following disclaimer 
      in the documentation and/or other associated materials; 
 
   3. the copyright holder's name is not used to endorse products 
      built using this software without specific written permission. 
 
 ALTERNATIVELY, provided that this notice is retained in full, this product 
 may be distributed under the terms of the GNU General Public License (GPL), 
 in which case the provisions of the GPL apply INSTEAD OF those given above. 
 
 DISCLAIMER 
 
 This software is provided 'as is' with no explicit or implied warranties 
 in respect of its properties, including, but not limited to, correctness 
 and/or fitness for purpose. 
 --------------------------------------------------------------------------- 
 Issue 09/09/2006 
*/ 
 
#define DO_TABLES 
 
#include  
#include "aesopt.h" 
 
#define sb_data(w) {\ 
    w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5),\ 
    w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76),\ 
    w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0),\ 
    w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0),\ 
    w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc),\ 
    w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15),\ 
    w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a),\ 
    w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75),\ 
    w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0),\ 
    w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84),\ 
    w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b),\ 
    w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf),\ 
    w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85),\ 
    w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8),\ 
    w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5),\ 
    w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2),\ 
    w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17),\ 
    w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73),\ 
    w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88),\ 
    w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb),\ 
    w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c),\ 
    w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79),\ 
    w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9),\ 
    w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08),\ 
    w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6),\ 
    w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a),\ 
    w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e),\ 
    w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e),\ 
    w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94),\ 
    w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf),\ 
    w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68),\ 
    w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16) } 
 
#define isb_data(w) {\ 
    w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), w(0x38),\ 
    w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), w(0xd7), w(0xfb),\ 
    w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), w(0x2f), w(0xff), w(0x87),\ 
    w(0x34), w(0x8e), w(0x43), w(0x44), w(0xc4), w(0xde), w(0xe9), w(0xcb),\ 
    w(0x54), w(0x7b), w(0x94), w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d),\ 
    w(0xee), w(0x4c), w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e),\ 
    w(0x08), w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2),\ 
    w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), w(0x25),\ 
    w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), w(0x98), w(0x16),\ 
    w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), w(0x65), w(0xb6), w(0x92),\ 
    w(0x6c), w(0x70), w(0x48), w(0x50), w(0xfd), w(0xed), w(0xb9), w(0xda),\ 
    w(0x5e), w(0x15), w(0x46), w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84),\ 
    w(0x90), w(0xd8), w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a),\ 
    w(0xf7), w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06),\ 
    w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), w(0x02),\ 
    w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), w(0x8a), w(0x6b),\ 
    w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), w(0x67), w(0xdc), w(0xea),\ 
    w(0x97), w(0xf2), w(0xcf), w(0xce), w(0xf0), w(0xb4), w(0xe6), w(0x73),\ 
    w(0x96), w(0xac), w(0x74), w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85),\ 
    w(0xe2), w(0xf9), w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e),\ 
    w(0x47), w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89),\ 
    w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), w(0x1b),\ 
    w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), w(0x79), w(0x20),\ 
    w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), w(0xcd), w(0x5a), w(0xf4),\ 
    w(0x1f), w(0xdd), w(0xa8), w(0x33), w(0x88), w(0x07), w(0xc7), w(0x31),\ 
    w(0xb1), w(0x12), w(0x10), w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f),\ 
    w(0x60), w(0x51), w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d),\ 
    w(0x2d), w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef),\ 
    w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), w(0xb0),\ 
    w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), w(0x99), w(0x61),\ 
    w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), w(0x77), w(0xd6), w(0x26),\ 
    w(0xe1), w(0x69), w(0x14), w(0x63), w(0x55), w(0x21), w(0x0c), w(0x7d) } 
 
#define mm_data(w) {\ 
    w(0x00), w(0x01), w(0x02), w(0x03), w(0x04), w(0x05), w(0x06), w(0x07),\ 
    w(0x08), w(0x09), w(0x0a), w(0x0b), w(0x0c), w(0x0d), w(0x0e), w(0x0f),\ 
    w(0x10), w(0x11), w(0x12), w(0x13), w(0x14), w(0x15), w(0x16), w(0x17),\ 
    w(0x18), w(0x19), w(0x1a), w(0x1b), w(0x1c), w(0x1d), w(0x1e), w(0x1f),\ 
    w(0x20), w(0x21), w(0x22), w(0x23), w(0x24), w(0x25), w(0x26), w(0x27),\ 
    w(0x28), w(0x29), w(0x2a), w(0x2b), w(0x2c), w(0x2d), w(0x2e), w(0x2f),\ 
    w(0x30), w(0x31), w(0x32), w(0x33), w(0x34), w(0x35), w(0x36), w(0x37),\ 
    w(0x38), w(0x39), w(0x3a), w(0x3b), w(0x3c), w(0x3d), w(0x3e), w(0x3f),\ 
    w(0x40), w(0x41), w(0x42), w(0x43), w(0x44), w(0x45), w(0x46), w(0x47),\ 
    w(0x48), w(0x49), w(0x4a), w(0x4b), w(0x4c), w(0x4d), w(0x4e), w(0x4f),\ 
    w(0x50), w(0x51), w(0x52), w(0x53), w(0x54), w(0x55), w(0x56), w(0x57),\ 
    w(0x58), w(0x59), w(0x5a), w(0x5b), w(0x5c), w(0x5d), w(0x5e), w(0x5f),\ 
    w(0x60), w(0x61), w(0x62), w(0x63), w(0x64), w(0x65), w(0x66), w(0x67),\ 
    w(0x68), w(0x69), w(0x6a), w(0x6b), w(0x6c), w(0x6d), w(0x6e), w(0x6f),\ 
    w(0x70), w(0x71), w(0x72), w(0x73), w(0x74), w(0x75), w(0x76), w(0x77),\ 
    w(0x78), w(0x79), w(0x7a), w(0x7b), w(0x7c), w(0x7d), w(0x7e), w(0x7f),\ 
    w(0x80), w(0x81), w(0x82), w(0x83), w(0x84), w(0x85), w(0x86), w(0x87),\ 
    w(0x88), w(0x89), w(0x8a), w(0x8b), w(0x8c), w(0x8d), w(0x8e), w(0x8f),\ 
    w(0x90), w(0x91), w(0x92), w(0x93), w(0x94), w(0x95), w(0x96), w(0x97),\ 
    w(0x98), w(0x99), w(0x9a), w(0x9b), w(0x9c), w(0x9d), w(0x9e), w(0x9f),\ 
    w(0xa0), w(0xa1), w(0xa2), w(0xa3), w(0xa4), w(0xa5), w(0xa6), w(0xa7),\ 
    w(0xa8), w(0xa9), w(0xaa), w(0xab), w(0xac), w(0xad), w(0xae), w(0xaf),\ 
    w(0xb0), w(0xb1), w(0xb2), w(0xb3), w(0xb4), w(0xb5), w(0xb6), w(0xb7),\ 
    w(0xb8), w(0xb9), w(0xba), w(0xbb), w(0xbc), w(0xbd), w(0xbe), w(0xbf),\ 
    w(0xc0), w(0xc1), w(0xc2), w(0xc3), w(0xc4), w(0xc5), w(0xc6), w(0xc7),\ 
    w(0xc8), w(0xc9), w(0xca), w(0xcb), w(0xcc), w(0xcd), w(0xce), w(0xcf),\ 
    w(0xd0), w(0xd1), w(0xd2), w(0xd3), w(0xd4), w(0xd5), w(0xd6), w(0xd7),\ 
    w(0xd8), w(0xd9), w(0xda), w(0xdb), w(0xdc), w(0xdd), w(0xde), w(0xdf),\ 
    w(0xe0), w(0xe1), w(0xe2), w(0xe3), w(0xe4), w(0xe5), w(0xe6), w(0xe7),\ 
    w(0xe8), w(0xe9), w(0xea), w(0xeb), w(0xec), w(0xed), w(0xee), w(0xef),\ 
    w(0xf0), w(0xf1), w(0xf2), w(0xf3), w(0xf4), w(0xf5), w(0xf6), w(0xf7),\ 
    w(0xf8), w(0xf9), w(0xfa), w(0xfb), w(0xfc), w(0xfd), w(0xfe), w(0xff) } 
 
#define rc_data(w) {\ 
    w(0x01), w(0x02), w(0x04), w(0x08), w(0x10),w(0x20), w(0x40), w(0x80),\ 
    w(0x1b), w(0x36) } 
 
#define h0(x)   (x) 
 
#define w0(p)   bytes2word(p, 0, 0, 0) 
#define w1(p)   bytes2word(0, p, 0, 0) 
#define w2(p)   bytes2word(0, 0, p, 0) 
#define w3(p)   bytes2word(0, 0, 0, p) 
 
#define u0(p)   bytes2word(f2(p), p, p, f3(p)) 
#define u1(p)   bytes2word(f3(p), f2(p), p, p) 
#define u2(p)   bytes2word(p, f3(p), f2(p), p) 
#define u3(p)   bytes2word(p, p, f3(p), f2(p)) 
 
#define v0(p)   bytes2word(fe(p), f9(p), fd(p), fb(p)) 
#define v1(p)   bytes2word(fb(p), fe(p), f9(p), fd(p)) 
#define v2(p)   bytes2word(fd(p), fb(p), fe(p), f9(p)) 
#define v3(p)   bytes2word(f9(p), fd(p), fb(p), fe(p)) 
 
#define f2(x)   ((x<<1) ^ (((x>>7) & 1) * WPOLY)) 
#define f4(x)   ((x<<2) ^ (((x>>6) & 1) * WPOLY) ^ (((x>>6) & 2) * WPOLY)) 
#define f8(x)   ((x<<3) ^ (((x>>5) & 1) * WPOLY) ^ (((x>>5) & 2) * WPOLY) \ 
                        ^ (((x>>5) & 4) * WPOLY)) 
#define f3(x)   (f2(x) ^ x) 
#define f9(x)   (f8(x) ^ x) 
#define fb(x)   (f8(x) ^ f2(x) ^ x) 
#define fd(x)   (f8(x) ^ f4(x) ^ x) 
#define fe(x)   (f8(x) ^ f4(x) ^ f2(x)) 
 
#include "aestab.h" 
 
#define t_parm(m,n) "t_"#m#n, t_##m##n 
 
void rtab(FILE *f, unsigned char *h, const unsigned int t[RC_LENGTH]) 
{   int i; 
 
    fprintf(f, "\nuint_32t %s[RC_LENGTH] = \n{", h); 
 
    for(i = 0; i < RC_LENGTH; ++i) 
    { 
        if(i % 4 == 0) 
            fprintf(f, "\n        "); 
        if(i != RC_LENGTH - 1) 
            fprintf(f, "0x%08x, ", t[i]); 
        else 
            fprintf(f, "0x%08x ", t[i]); 
    } 
 
    fprintf(f, "\n};\n"); 
} 
 
void btab_1(FILE *f, unsigned char *h, const unsigned char t[256]) 
{   int i; 
 
    fprintf(f, "\nuint_8t %s[256] = \n{", h); 
 
    for(i = 0; i < 256; ++i) 
    { 
        if(i % 8 == 0) 
            fprintf(f, "\n        "); 
        if(i != 255) 
            fprintf(f, "0x%02x, ", t[i]); 
        else 
            fprintf(f, "0x%02x ", t[i]); 
    } 
 
    fprintf(f, "\n};\n"); 
} 
 
void wtab_1(FILE *f, unsigned char *h, const unsigned int t[256]) 
{   int i; 
 
    fprintf(f, "\nuint_32t %s[256] = \n{", h); 
 
    for(i = 0; i < 256; ++i) 
    { 
        if(i % 4 == 0) 
            fprintf(f, "\n        "); 
        if(i != 255) 
            fprintf(f, "0x%08x, ", t[i]); 
        else 
            fprintf(f, "0x%08x ", t[i]); 
    } 
 
    fprintf(f, "\n};\n"); 
} 
 
void wtab_4(FILE *f, unsigned char *h, const unsigned int t[4][256]) 
{   int i, j; 
 
    fprintf(f, "\nuint_32t %s[4][256] = \n{", h); 
 
    for(i = 0; i < 4; ++i) 
    { 
        fprintf(f, "\n    {"); 
 
        for(j = 0; j < 256; ++j) 
        { 
            if(j % 4 == 0) 
                fprintf(f, "\n        "); 
            if(j != 255) 
                fprintf(f, "0x%08x, ", t[i][j]); 
            else 
                fprintf(f, "0x%08x ", t[i][j]); 
        } 
 
        if(i != 3) 
            fprintf(f, "\n    },"); 
        else 
            fprintf(f, "\n    }"); 
    } 
 
    fprintf(f, "\n};\n"); 
} 
 
int main(void) 
{   FILE *f; 
 
    f = fopen("aestab2.c", "w"); 
 
    fprintf(f, "\n#include \"aes.h\"\n"); 
    fprintf(f, "\n#define RC_LENGTH   (5 * (AES_BLOCK_SIZE / 4 - 2))\n"); 
    fprintf(f, "\nvoid gen_tabs() \n{ \n}\n"); 
 
    rtab(f, t_parm(r,c)); 
 
#if defined( SBX_SET ) 
    btab_1(f, t_parm(s,box)); 
#endif 
 
#if defined( ISB_SET ) 
    btab_1(f, t_parm(i,box)); 
#endif 
 
#if defined( FT1_SET ) 
    wtab_1(f, t_parm(f,n)); 
#endif 
#if defined( FT4_SET ) 
    wtab_4(f, t_parm(f,n)); 
#endif 
 
#if defined( FL1_SET ) 
    wtab_1(f, t_parm(f,l)); 
#endif 
#if defined( FL4_SET ) 
    wtab_4(f, t_parm(f,l)); 
#endif 
 
#if defined( IT1_SET ) 
    wtab_1(f, t_parm(i,n)); 
#endif 
#if defined( IT4_SET ) 
    wtab_4(f, t_parm(i,n)); 
#endif 
 
#if defined( IL1_SET ) 
    wtab_1(f, t_parm(i,l)); 
#endif 
#if defined( IL4_SET ) 
    wtab_4(f, t_parm(i,l)); 
#endif 
 
#if defined( LS1_SET ) 
#if !defined( FL1_SET ) 
    wtab_1(f, t_parm(l,s)); 
#endif 
#endif 
#if defined( LS4_SET ) 
#if !defined( FL4_SET ) 
    wtab_4(f, t_parm(l,s)); 
#endif 
#endif 
 
#if defined( IM1_SET ) 
    wtab_1(f, t_parm(i,m)); 
#endif 
#if defined( IM4_SET ) 
    wtab_4(f, t_parm(i,m)); 
#endif 
 
    fclose(f); 
    return 0; 
}