#include <stdio.h>
#include <mLib/bits.h>
+#include <mLib/macros.h>
#include "blkc.h"
#include "gcipher.h"
#include "paranoia.h"
#include "square.h"
-#include "square-tab.h"
/*----- Global variables --------------------------------------------------*/
/*----- Constant tables ---------------------------------------------------*/
-static const octet S[256] = SQUARE_S, SI[256] = SQUARE_SI;
-static const uint32 T[4][256] = SQUARE_T, TI[4][256] = SQUARE_TI;
-static const uint32 U[4][256] = SQUARE_U;
-static const octet rcon[] = SQUARE_RCON;
+extern const octet square_s[256], square_si[256];
+extern const uint32 square_t[4][256], square_ti[4][256];
+extern const uint32 square_u[4][256];
+extern const octet square_rcon[32];
+
+#define S square_s
+#define SI square_si
+#define T square_t
+#define TI square_ti
+#define U square_u
+#define RCON square_rcon
/*----- Main code ---------------------------------------------------------*/
}
nr = 8;
+ /* --- GCC complains about an out-of-bounds subscript here --- *
+ *
+ * This is impossible. Thanks to @KSZ_ASSERT@, we know that @4 <= sz <=
+ * 16@ and hence @1 <= i <= nk <= 4@; but @SQUARE_KWORDS == 36@.
+ */
+
+ ww = MUFFLE_WARNINGS_EXPR(GCC_WARNING("-Warray-bounds"), kk[i - 1]);
+
/* --- Expand this material to fill the rest of the table --- */
nw = (nr + 1) * 4;
- ww = kk[i - 1];
- p = rcon;
+ p = RCON;
for (; i < nw; i++) {
uint32 w = kk[i - nk];
if (i % nk == 0) {