/** Compile SBOXes */

function toHex(n) {
    n = n >>> 0;
    return (n < 0) ? ("-0x" + (-n).toString(16)) : ("0x" + n.toString(16));
}

/**
 * The bits the SBOXes operate upon
 */
var SBOX_BITS = new Array(8);
SBOX_BITS[0] = [ 0x10000000, 0x20000000, 0x40000000, 0x80000000, 0x08000000,
        0x00000001 ];
SBOX_BITS[1] = [ 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x00800000,
        0x10000000 ];
SBOX_BITS[2] = [ 0x00100000, 0x00200000, 0x00400000, 0x00800000, 0x00080000,
        0x01000000 ];
SBOX_BITS[3] = [ 0x00010000, 0x00020000, 0x00040000, 0x00080000, 0x00008000,
        0x00100000 ];
SBOX_BITS[4] = [ 0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00000800,
        0x00010000 ];
SBOX_BITS[5] = [ 0x00000100, 0x00000200, 0x00000400, 0x00000800, 0x00000080,
        0x00001000 ];
SBOX_BITS[6] = [ 0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x00000008,
        0x00000100 ];
SBOX_BITS[7] = [ 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x80000000,
        0x00000010 ];

/** The raw SBOXes */
var SBOX = new Array(8);
SBOX[0] = [ 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4,
        14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15,
        12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0,
        6, 13 ];

SBOX[1] = [ 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7,
        15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5,
        8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5,
        14, 9 ];

SBOX[2] = [ 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0, 9,
        3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15, 3, 0, 11,
        1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5,
        2, 12 ];

SBOX[3] = [ 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8, 11, 5,
        6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12, 11, 7, 13, 15,
        1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2,
        14 ];

SBOX[4] = [ 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11, 2,
        12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10, 13, 7, 8,
        15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10,
        4, 5, 3 ];

SBOX[5] = [ 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15, 4, 2,
        7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2, 8, 12, 3, 7,
        0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0,
        8, 13 ];

SBOX[6] = [ 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0, 11, 7,
        4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13, 12, 3, 7, 14, 10,
        15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3,
        12 ];

SBOX[7] = [ 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15, 13, 8,
        10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9, 12, 14, 2, 0,
        6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5,
        6, 11 ];

/**
 * Post SBOX permutation. This calls the MSB bit 1 and the LSB bit 32.
 */
var PERM1 = [ 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2,
        8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25 ];

// invert the permutation
var PERM = new Array(32);
for ( var i = 0; i < 32; i++) {
    PERM[PERM1[i] - 1] = i;
}

// this produces:
//  8,16,22,30 box 0
// 12,27, 1,17 box 1
// 23,15,29, 5 box 2
// 25,19, 9, 0 box 3
//  7,13,24, 2 box 4
//  3,28,10,18 box 5
// 31,11,21, 6 box 6
//  4,26,14,20 box 7

for ( var box = 0; box <= 7; box++) {
    print("\nSBOX[" + box + "] = new Array();");
    for ( var ind = 0; ind <= 63; ind++) {
        var n = ind;
        var match = 0;
        for ( var i = 0; i < 6; i++) {
            if (n & 1) {
                match = match + SBOX_BITS[box][i];
            }
            n = n >> 1;
        }

        var res = 0;
        var n = SBOX[box][ind];
        var b = 1;
        for ( var i = 0; i < 4; i++) {
            if (n & b) {
                var bit = box * 4 + (3 - i);
                bit = PERM[bit];
                bit = 31 - bit;
                res += Math.pow(2, bit);
            }
            b *= 2;
        }
        var mm = match;
        match = (match ^ 1) ^ 1;
        print("SBOX[" + box + "][" + match + "]= 0x" + res.toString(16)
                + ";    // " + mm.toString(16) + " (" + (ind >> 4) + ", "
                + (ind & 15) + ") = " + n);
    }
}

exit;
