X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/3a65506d4df316377c9b838ef5954b5d856215ee..45c0fd363937c6e9b05da04a9167e9912c05ca0c:/rijndael-mktab.c diff --git a/rijndael-mktab.c b/rijndael-mktab.c index f5df965..0ecdfcd 100644 --- a/rijndael-mktab.c +++ b/rijndael-mktab.c @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: rijndael-mktab.c,v 1.1 2000/06/17 11:56:07 mdw Exp $ + * $Id: rijndael-mktab.c,v 1.4 2004/04/08 01:36:15 mdw Exp $ * * Build precomputed tables for the Rijndael block cipher * * (c) 2000 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Catacomb. * @@ -15,26 +15,18 @@ * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * Catacomb is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with Catacomb; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: rijndael-mktab.c,v $ - * Revision 1.1 2000/06/17 11:56:07 mdw - * New cipher. - * - */ - /*----- Header files ------------------------------------------------------*/ #include @@ -54,7 +46,7 @@ static octet rc[32]; /* --- @mul@ --- * * - * Arguments: @unsigned x, y@ = polynomials over %$\mathrm{GF}(2^8)$% + * Arguments: @unsigned x, y@ = polynomials over %$\gf{2^8}$% * @unsigned m@ = modulus * * Returns: The product of two polynomials. @@ -83,16 +75,16 @@ static unsigned mul(unsigned x, unsigned y, unsigned m) * * Build the S-box. * - * This is built from multiplicative inversion in the group - * %$\mathrm{GF}(2^8)[x]/p(x)$%, where %$p(x) = x^8 + x^4 + x^3 + x + 1$%, - * followed by an affine transformation treating inputs as vectors over - * %$\mathrm{GF}(2)$%. The result is a horrible function. + * This is built from inversion in the multiplicative group of + * %$\gf{2^8}[x]/(p(x))$%, where %$p(x) = x^8 + x^4 + x^3 + x + 1$%, followed + * by an affine transformation treating inputs as vectors over %$\gf{2}$%. + * The result is a horrible function. * * The inversion is done slightly sneakily, by building log and antilog * tables. Let %$a$% be an element of the finite field. If the inverse of * %$a$% is %$a^{-1}$%, then %$\log a a^{-1} = 0$%. Hence * %$\log a = -\log a^{-1}$%. This saves fiddling about with Euclidean - * algorithm. + * algorithm. */ #define S_MOD 0x11b @@ -169,11 +161,11 @@ static void tbox(void) a = s[i]; b = a << 1; if (b & 0x100) b ^= S_MOD; c = a ^ b; - w = (b << 0) | (a << 8) | (a << 16) | (c << 24); + w = (c << 0) | (a << 8) | (a << 16) | (b << 24); t[0][i] = w; - t[1][i] = ROL32(w, 8); - t[2][i] = ROL32(w, 16); - t[3][i] = ROL32(w, 24); + t[1][i] = ROR32(w, 8); + t[2][i] = ROR32(w, 16); + t[3][i] = ROR32(w, 24); /* --- Build a backwards t-box entry --- */ @@ -181,11 +173,11 @@ static void tbox(void) b = mul(si[i], 0x09, S_MOD); c = mul(si[i], 0x0d, S_MOD); d = mul(si[i], 0x0b, S_MOD); - w = (a << 0) | (b << 8) | (c << 16) | (d << 24); + w = (d << 0) | (c << 8) | (b << 16) | (a << 24); ti[0][i] = w; - ti[1][i] = ROL32(w, 8); - ti[2][i] = ROL32(w, 16); - ti[3][i] = ROL32(w, 24); + ti[1][i] = ROR32(w, 8); + ti[2][i] = ROR32(w, 16); + ti[3][i] = ROR32(w, 24); } } @@ -205,17 +197,17 @@ static void ubox(void) b = mul(i, 0x09, S_MOD); c = mul(i, 0x0d, S_MOD); d = mul(i, 0x0b, S_MOD); - w = (a << 0) | (b << 8) | (c << 16) | (d << 24); + w = (d << 0) | (c << 8) | (b << 16) | (a << 24); u[0][i] = w; - u[1][i] = ROL32(w, 8); - u[2][i] = ROL32(w, 16); - u[3][i] = ROL32(w, 24); + u[1][i] = ROR32(w, 8); + u[2][i] = ROR32(w, 16); + u[3][i] = ROR32(w, 24); } } /* --- Round constants --- */ -void rcon(void) +static void rcon(void) { unsigned r = 1; int i; @@ -285,7 +277,7 @@ int main(void) { ", stdout); for (j = 0; j < 4; j++) { for (i = 0; i < 256; i++) { - printf("0x%08x", t[j][i]); + printf("0x%08lx", (unsigned long)t[j][i]); if (i == 255) { if (j == 3) fputs(" } \\\n}\n\n", stdout); @@ -294,18 +286,18 @@ int main(void) \\\n\ { ", stdout); } else if (i % 4 == 3) - fputs(", \\\n ", stdout); + fputs(", \\\n ", stdout); else fputs(", ", stdout); } - } + } fputs("\ #define RIJNDAEL_TI { \\\n\ { ", stdout); for (j = 0; j < 4; j++) { for (i = 0; i < 256; i++) { - printf("0x%08x", ti[j][i]); + printf("0x%08lx", (unsigned long)ti[j][i]); if (i == 255) { if (j == 3) fputs(" } \\\n}\n\n", stdout); @@ -314,7 +306,7 @@ int main(void) \\\n\ { ", stdout); } else if (i % 4 == 3) - fputs(", \\\n ", stdout); + fputs(", \\\n ", stdout); else fputs(", ", stdout); } @@ -330,7 +322,7 @@ int main(void) { ", stdout); for (j = 0; j < 4; j++) { for (i = 0; i < 256; i++) { - printf("0x%08x", u[j][i]); + printf("0x%08lx", (unsigned long)u[j][i]); if (i == 255) { if (j == 3) fputs(" } \\\n}\n\n", stdout); @@ -339,11 +331,11 @@ int main(void) \\\n\ { ", stdout); } else if (i % 4 == 3) - fputs(", \\\n ", stdout); + fputs(", \\\n ", stdout); else fputs(", ", stdout); } - } + } /* --- Round constants --- */ @@ -361,7 +353,7 @@ int main(void) fputs(", \\\n ", stdout); else fputs(", ", stdout); - } + } /* --- Done --- */