// // This implementation of DecSS is written in Verilog 2000 (a varient of the // popular chip design language - I used this because generate makes it easy to // unroll the original C without working hard - it may not compile // in your favorite synthesis tool). The table implementations (arrays // of wires) are very tacky - but should open them to optimization // during synthesis (if your tool supports arrays of wires yet :-). // // There are two main modules here - CSSdecrypttitlekey is purely // combinatorial while CSSdescramble is clock based - you assert // 'start' and give it a clock to drop in the initial keys, then // with 'start' deasserted on every clock a byte 'sec' is fed in // and on the following clock the result appears on 'out' // // Warning: this is a toy implementation, not really tested well // in the real world you'd use the clock-based CSSdescramble to // do the title keys as well // // T // // Note: look down at the bottom of each module (search for // 'endmodule') for the meat of this work // module CSSdescramble(input clock, start, output reg [7:0]out, input [7:0]sec, input [6*8-1:0]key, sec_key); wire [7:0]CSStab1[0:255]; assign CSStab1[0] = 8'h33; assign CSStab1[1] = 8'h73; assign CSStab1[2] = 8'h3b; assign CSStab1[3] = 8'h26; assign CSStab1[4] = 8'h63; assign CSStab1[5] = 8'h23; assign CSStab1[6] = 8'h6b; assign CSStab1[7] = 8'h76; assign CSStab1[8] = 8'h3e; assign CSStab1[9] = 8'h7e; assign CSStab1[10] = 8'h36; assign CSStab1[11] = 8'h2b; assign CSStab1[12] = 8'h6e; assign CSStab1[13] = 8'h2e; assign CSStab1[14] = 8'h66; assign CSStab1[15] = 8'h7b; assign CSStab1[16] = 8'hd3; assign CSStab1[17] = 8'h93; assign CSStab1[18] = 8'hdb; assign CSStab1[19] = 8'h06; assign CSStab1[20] = 8'h43; assign CSStab1[21] = 8'h03; assign CSStab1[22] = 8'h4b; assign CSStab1[23] = 8'h96; assign CSStab1[24] = 8'hde; assign CSStab1[25] = 8'h9e; assign CSStab1[26] = 8'hd6; assign CSStab1[27] = 8'h0b; assign CSStab1[28] = 8'h4e; assign CSStab1[29] = 8'h0e; assign CSStab1[30] = 8'h46; assign CSStab1[31] = 8'h9b; assign CSStab1[32] = 8'h57; assign CSStab1[33] = 8'h17; assign CSStab1[34] = 8'h5f; assign CSStab1[35] = 8'h82; assign CSStab1[36] = 8'hc7; assign CSStab1[37] = 8'h87; assign CSStab1[38] = 8'hcf; assign CSStab1[39] = 8'h12; assign CSStab1[40] = 8'h5a; assign CSStab1[41] = 8'h1a; assign CSStab1[42] = 8'h52; assign CSStab1[43] = 8'h8f; assign CSStab1[44] = 8'hca; assign CSStab1[45] = 8'h8a; assign CSStab1[46] = 8'hc2; assign CSStab1[47] = 8'h1f; assign CSStab1[48] = 8'hd9; assign CSStab1[49] = 8'h99; assign CSStab1[50] = 8'hd1; assign CSStab1[51] = 8'h00; assign CSStab1[52] = 8'h49; assign CSStab1[53] = 8'h09; assign CSStab1[54] = 8'h41; assign CSStab1[55] = 8'h90; assign CSStab1[56] = 8'hd8; assign CSStab1[57] = 8'h98; assign CSStab1[58] = 8'hd0; assign CSStab1[59] = 8'h01; assign CSStab1[60] = 8'h48; assign CSStab1[61] = 8'h08; assign CSStab1[62] = 8'h40; assign CSStab1[63] = 8'h91; assign CSStab1[64] = 8'h3d; assign CSStab1[65] = 8'h7d; assign CSStab1[66] = 8'h35; assign CSStab1[67] = 8'h24; assign CSStab1[68] = 8'h6d; assign CSStab1[69] = 8'h2d; assign CSStab1[70] = 8'h65; assign CSStab1[71] = 8'h74; assign CSStab1[72] = 8'h3c; assign CSStab1[73] = 8'h7c; assign CSStab1[74] = 8'h34; assign CSStab1[75] = 8'h25; assign CSStab1[76] = 8'h6c; assign CSStab1[77] = 8'h2c; assign CSStab1[78] = 8'h64; assign CSStab1[79] = 8'h75; assign CSStab1[80] = 8'hdd; assign CSStab1[81] = 8'h9d; assign CSStab1[82] = 8'hd5; assign CSStab1[83] = 8'h04; assign CSStab1[84] = 8'h4d; assign CSStab1[85] = 8'h0d; assign CSStab1[86] = 8'h45; assign CSStab1[87] = 8'h94; assign CSStab1[88] = 8'hdc; assign CSStab1[89] = 8'h9c; assign CSStab1[90] = 8'hd4; assign CSStab1[91] = 8'h05; assign CSStab1[92] = 8'h4c; assign CSStab1[93] = 8'h0c; assign CSStab1[94] = 8'h44; assign CSStab1[95] = 8'h95; assign CSStab1[96] = 8'h59; assign CSStab1[97] = 8'h19; assign CSStab1[98] = 8'h51; assign CSStab1[99] = 8'h80; assign CSStab1[100] = 8'hc9; assign CSStab1[101] = 8'h89; assign CSStab1[102] = 8'hc1; assign CSStab1[103] = 8'h10; assign CSStab1[104] = 8'h58; assign CSStab1[105] = 8'h18; assign CSStab1[106] = 8'h50; assign CSStab1[107] = 8'h81; assign CSStab1[108] = 8'hc8; assign CSStab1[109] = 8'h88; assign CSStab1[110] = 8'hc0; assign CSStab1[111] = 8'h11; assign CSStab1[112] = 8'hd7; assign CSStab1[113] = 8'h97; assign CSStab1[114] = 8'hdf; assign CSStab1[115] = 8'h02; assign CSStab1[116] = 8'h47; assign CSStab1[117] = 8'h07; assign CSStab1[118] = 8'h4f; assign CSStab1[119] = 8'h92; assign CSStab1[120] = 8'hda; assign CSStab1[121] = 8'h9a; assign CSStab1[122] = 8'hd2; assign CSStab1[123] = 8'h0f; assign CSStab1[124] = 8'h4a; assign CSStab1[125] = 8'h0a; assign CSStab1[126] = 8'h42; assign CSStab1[127] = 8'h9f; assign CSStab1[128] = 8'h53; assign CSStab1[129] = 8'h13; assign CSStab1[130] = 8'h5b; assign CSStab1[131] = 8'h86; assign CSStab1[132] = 8'hc3; assign CSStab1[133] = 8'h83; assign CSStab1[134] = 8'hcb; assign CSStab1[135] = 8'h16; assign CSStab1[136] = 8'h5e; assign CSStab1[137] = 8'h1e; assign CSStab1[138] = 8'h56; assign CSStab1[139] = 8'h8b; assign CSStab1[140] = 8'hce; assign CSStab1[141] = 8'h8e; assign CSStab1[142] = 8'hc6; assign CSStab1[143] = 8'h1b; assign CSStab1[144] = 8'hb3; assign CSStab1[145] = 8'hf3; assign CSStab1[146] = 8'hbb; assign CSStab1[147] = 8'ha6; assign CSStab1[148] = 8'he3; assign CSStab1[149] = 8'ha3; assign CSStab1[150] = 8'heb; assign CSStab1[151] = 8'hf6; assign CSStab1[152] = 8'hbe; assign CSStab1[153] = 8'hfe; assign CSStab1[154] = 8'hb6; assign CSStab1[155] = 8'hab; assign CSStab1[156] = 8'hee; assign CSStab1[157] = 8'hae; assign CSStab1[158] = 8'he6; assign CSStab1[159] = 8'hfb; assign CSStab1[160] = 8'h37; assign CSStab1[161] = 8'h77; assign CSStab1[162] = 8'h3f; assign CSStab1[163] = 8'h22; assign CSStab1[164] = 8'h67; assign CSStab1[165] = 8'h27; assign CSStab1[166] = 8'h6f; assign CSStab1[167] = 8'h72; assign CSStab1[168] = 8'h3a; assign CSStab1[169] = 8'h7a; assign CSStab1[170] = 8'h32; assign CSStab1[171] = 8'h2f; assign CSStab1[172] = 8'h6a; assign CSStab1[173] = 8'h2a; assign CSStab1[174] = 8'h62; assign CSStab1[175] = 8'h7f; assign CSStab1[176] = 8'hb9; assign CSStab1[177] = 8'hf9; assign CSStab1[178] = 8'hb1; assign CSStab1[179] = 8'ha0; assign CSStab1[180] = 8'he9; assign CSStab1[181] = 8'ha9; assign CSStab1[182] = 8'he1; assign CSStab1[183] = 8'hf0; assign CSStab1[184] = 8'hb8; assign CSStab1[185] = 8'hf8; assign CSStab1[186] = 8'hb0; assign CSStab1[187] = 8'ha1; assign CSStab1[188] = 8'he8; assign CSStab1[189] = 8'ha8; assign CSStab1[190] = 8'he0; assign CSStab1[191] = 8'hf1; assign CSStab1[192] = 8'h5d; assign CSStab1[193] = 8'h1d; assign CSStab1[194] = 8'h55; assign CSStab1[195] = 8'h84; assign CSStab1[196] = 8'hcd; assign CSStab1[197] = 8'h8d; assign CSStab1[198] = 8'hc5; assign CSStab1[199] = 8'h14; assign CSStab1[200] = 8'h5c; assign CSStab1[201] = 8'h1c; assign CSStab1[202] = 8'h54; assign CSStab1[203] = 8'h85; assign CSStab1[204] = 8'hcc; assign CSStab1[205] = 8'h8c; assign CSStab1[206] = 8'hc4; assign CSStab1[207] = 8'h15; assign CSStab1[208] = 8'hbd; assign CSStab1[209] = 8'hfd; assign CSStab1[210] = 8'hb5; assign CSStab1[211] = 8'ha4; assign CSStab1[212] = 8'hed; assign CSStab1[213] = 8'had; assign CSStab1[214] = 8'he5; assign CSStab1[215] = 8'hf4; assign CSStab1[216] = 8'hbc; assign CSStab1[217] = 8'hfc; assign CSStab1[218] = 8'hb4; assign CSStab1[219] = 8'ha5; assign CSStab1[220] = 8'hec; assign CSStab1[221] = 8'hac; assign CSStab1[222] = 8'he4; assign CSStab1[223] = 8'hf5; assign CSStab1[224] = 8'h39; assign CSStab1[225] = 8'h79; assign CSStab1[226] = 8'h31; assign CSStab1[227] = 8'h20; assign CSStab1[228] = 8'h69; assign CSStab1[229] = 8'h29; assign CSStab1[230] = 8'h61; assign CSStab1[231] = 8'h70; assign CSStab1[232] = 8'h38; assign CSStab1[233] = 8'h78; assign CSStab1[234] = 8'h30; assign CSStab1[235] = 8'h21; assign CSStab1[236] = 8'h68; assign CSStab1[237] = 8'h28; assign CSStab1[238] = 8'h60; assign CSStab1[239] = 8'h71; assign CSStab1[240] = 8'hb7; assign CSStab1[241] = 8'hf7; assign CSStab1[242] = 8'hbf; assign CSStab1[243] = 8'ha2; assign CSStab1[244] = 8'he7; assign CSStab1[245] = 8'ha7; assign CSStab1[246] = 8'hef; assign CSStab1[247] = 8'hf2; assign CSStab1[248] = 8'hba; assign CSStab1[249] = 8'hfa; assign CSStab1[250] = 8'hb2; assign CSStab1[251] = 8'haf; assign CSStab1[252] = 8'hea; assign CSStab1[253] = 8'haa; assign CSStab1[254] = 8'he2; assign CSStab1[255] = 8'hff; wire [7:0]CSStab2[0:255]; assign CSStab2[0] = 8'h00; assign CSStab2[1] = 8'h01; assign CSStab2[2] = 8'h02; assign CSStab2[3] = 8'h03; assign CSStab2[4] = 8'h04; assign CSStab2[5] = 8'h05; assign CSStab2[6] = 8'h06; assign CSStab2[7] = 8'h07; assign CSStab2[8] = 8'h09; assign CSStab2[9] = 8'h08; assign CSStab2[10] = 8'h0b; assign CSStab2[11] = 8'h0a; assign CSStab2[12] = 8'h0d; assign CSStab2[13] = 8'h0c; assign CSStab2[14] = 8'h0f; assign CSStab2[15] = 8'h0e; assign CSStab2[16] = 8'h12; assign CSStab2[17] = 8'h13; assign CSStab2[18] = 8'h10; assign CSStab2[19] = 8'h11; assign CSStab2[20] = 8'h16; assign CSStab2[21] = 8'h17; assign CSStab2[22] = 8'h14; assign CSStab2[23] = 8'h15; assign CSStab2[24] = 8'h1b; assign CSStab2[25] = 8'h1a; assign CSStab2[26] = 8'h19; assign CSStab2[27] = 8'h18; assign CSStab2[28] = 8'h1f; assign CSStab2[29] = 8'h1e; assign CSStab2[30] = 8'h1d; assign CSStab2[31] = 8'h1c; assign CSStab2[32] = 8'h24; assign CSStab2[33] = 8'h25; assign CSStab2[34] = 8'h26; assign CSStab2[35] = 8'h27; assign CSStab2[36] = 8'h20; assign CSStab2[37] = 8'h21; assign CSStab2[38] = 8'h22; assign CSStab2[39] = 8'h23; assign CSStab2[40] = 8'h2d; assign CSStab2[41] = 8'h2c; assign CSStab2[42] = 8'h2f; assign CSStab2[43] = 8'h2e; assign CSStab2[44] = 8'h29; assign CSStab2[45] = 8'h28; assign CSStab2[46] = 8'h2b; assign CSStab2[47] = 8'h2a; assign CSStab2[48] = 8'h36; assign CSStab2[49] = 8'h37; assign CSStab2[50] = 8'h34; assign CSStab2[51] = 8'h35; assign CSStab2[52] = 8'h32; assign CSStab2[53] = 8'h33; assign CSStab2[54] = 8'h30; assign CSStab2[55] = 8'h31; assign CSStab2[56] = 8'h3f; assign CSStab2[57] = 8'h3e; assign CSStab2[58] = 8'h3d; assign CSStab2[59] = 8'h3c; assign CSStab2[60] = 8'h3b; assign CSStab2[61] = 8'h3a; assign CSStab2[62] = 8'h39; assign CSStab2[63] = 8'h38; assign CSStab2[64] = 8'h49; assign CSStab2[65] = 8'h48; assign CSStab2[66] = 8'h4b; assign CSStab2[67] = 8'h4a; assign CSStab2[68] = 8'h4d; assign CSStab2[69] = 8'h4c; assign CSStab2[70] = 8'h4f; assign CSStab2[71] = 8'h4e; assign CSStab2[72] = 8'h40; assign CSStab2[73] = 8'h41; assign CSStab2[74] = 8'h42; assign CSStab2[75] = 8'h43; assign CSStab2[76] = 8'h44; assign CSStab2[77] = 8'h45; assign CSStab2[78] = 8'h46; assign CSStab2[79] = 8'h47; assign CSStab2[80] = 8'h5b; assign CSStab2[81] = 8'h5a; assign CSStab2[82] = 8'h59; assign CSStab2[83] = 8'h58; assign CSStab2[84] = 8'h5f; assign CSStab2[85] = 8'h5e; assign CSStab2[86] = 8'h5d; assign CSStab2[87] = 8'h5c; assign CSStab2[88] = 8'h52; assign CSStab2[89] = 8'h53; assign CSStab2[90] = 8'h50; assign CSStab2[91] = 8'h51; assign CSStab2[92] = 8'h56; assign CSStab2[93] = 8'h57; assign CSStab2[94] = 8'h54; assign CSStab2[95] = 8'h55; assign CSStab2[96] = 8'h6d; assign CSStab2[97] = 8'h6c; assign CSStab2[98] = 8'h6f; assign CSStab2[99] = 8'h6e; assign CSStab2[100] = 8'h69; assign CSStab2[101] = 8'h68; assign CSStab2[102] = 8'h6b; assign CSStab2[103] = 8'h6a; assign CSStab2[104] = 8'h64; assign CSStab2[105] = 8'h65; assign CSStab2[106] = 8'h66; assign CSStab2[107] = 8'h67; assign CSStab2[108] = 8'h60; assign CSStab2[109] = 8'h61; assign CSStab2[110] = 8'h62; assign CSStab2[111] = 8'h63; assign CSStab2[112] = 8'h7f; assign CSStab2[113] = 8'h7e; assign CSStab2[114] = 8'h7d; assign CSStab2[115] = 8'h7c; assign CSStab2[116] = 8'h7b; assign CSStab2[117] = 8'h7a; assign CSStab2[118] = 8'h79; assign CSStab2[119] = 8'h78; assign CSStab2[120] = 8'h76; assign CSStab2[121] = 8'h77; assign CSStab2[122] = 8'h74; assign CSStab2[123] = 8'h75; assign CSStab2[124] = 8'h72; assign CSStab2[125] = 8'h73; assign CSStab2[126] = 8'h70; assign CSStab2[127] = 8'h71; assign CSStab2[128] = 8'h92; assign CSStab2[129] = 8'h93; assign CSStab2[130] = 8'h90; assign CSStab2[131] = 8'h91; assign CSStab2[132] = 8'h96; assign CSStab2[133] = 8'h97; assign CSStab2[134] = 8'h94; assign CSStab2[135] = 8'h95; assign CSStab2[136] = 8'h9b; assign CSStab2[137] = 8'h9a; assign CSStab2[138] = 8'h99; assign CSStab2[139] = 8'h98; assign CSStab2[140] = 8'h9f; assign CSStab2[141] = 8'h9e; assign CSStab2[142] = 8'h9d; assign CSStab2[143] = 8'h9c; assign CSStab2[144] = 8'h80; assign CSStab2[145] = 8'h81; assign CSStab2[146] = 8'h82; assign CSStab2[147] = 8'h83; assign CSStab2[148] = 8'h84; assign CSStab2[149] = 8'h85; assign CSStab2[150] = 8'h86; assign CSStab2[151] = 8'h87; assign CSStab2[152] = 8'h89; assign CSStab2[153] = 8'h88; assign CSStab2[154] = 8'h8b; assign CSStab2[155] = 8'h8a; assign CSStab2[156] = 8'h8d; assign CSStab2[157] = 8'h8c; assign CSStab2[158] = 8'h8f; assign CSStab2[159] = 8'h8e; assign CSStab2[160] = 8'hb6; assign CSStab2[161] = 8'hb7; assign CSStab2[162] = 8'hb4; assign CSStab2[163] = 8'hb5; assign CSStab2[164] = 8'hb2; assign CSStab2[165] = 8'hb3; assign CSStab2[166] = 8'hb0; assign CSStab2[167] = 8'hb1; assign CSStab2[168] = 8'hbf; assign CSStab2[169] = 8'hbe; assign CSStab2[170] = 8'hbd; assign CSStab2[171] = 8'hbc; assign CSStab2[172] = 8'hbb; assign CSStab2[173] = 8'hba; assign CSStab2[174] = 8'hb9; assign CSStab2[175] = 8'hb8; assign CSStab2[176] = 8'ha4; assign CSStab2[177] = 8'ha5; assign CSStab2[178] = 8'ha6; assign CSStab2[179] = 8'ha7; assign CSStab2[180] = 8'ha0; assign CSStab2[181] = 8'ha1; assign CSStab2[182] = 8'ha2; assign CSStab2[183] = 8'ha3; assign CSStab2[184] = 8'had; assign CSStab2[185] = 8'hac; assign CSStab2[186] = 8'haf; assign CSStab2[187] = 8'hae; assign CSStab2[188] = 8'ha9; assign CSStab2[189] = 8'ha8; assign CSStab2[190] = 8'hab; assign CSStab2[191] = 8'haa; assign CSStab2[192] = 8'hdb; assign CSStab2[193] = 8'hda; assign CSStab2[194] = 8'hd9; assign CSStab2[195] = 8'hd8; assign CSStab2[196] = 8'hdf; assign CSStab2[197] = 8'hde; assign CSStab2[198] = 8'hdd; assign CSStab2[199] = 8'hdc; assign CSStab2[200] = 8'hd2; assign CSStab2[201] = 8'hd3; assign CSStab2[202] = 8'hd0; assign CSStab2[203] = 8'hd1; assign CSStab2[204] = 8'hd6; assign CSStab2[205] = 8'hd7; assign CSStab2[206] = 8'hd4; assign CSStab2[207] = 8'hd5; assign CSStab2[208] = 8'hc9; assign CSStab2[209] = 8'hc8; assign CSStab2[210] = 8'hcb; assign CSStab2[211] = 8'hca; assign CSStab2[212] = 8'hcd; assign CSStab2[213] = 8'hcc; assign CSStab2[214] = 8'hcf; assign CSStab2[215] = 8'hce; assign CSStab2[216] = 8'hc0; assign CSStab2[217] = 8'hc1; assign CSStab2[218] = 8'hc2; assign CSStab2[219] = 8'hc3; assign CSStab2[220] = 8'hc4; assign CSStab2[221] = 8'hc5; assign CSStab2[222] = 8'hc6; assign CSStab2[223] = 8'hc7; assign CSStab2[224] = 8'hff; assign CSStab2[225] = 8'hfe; assign CSStab2[226] = 8'hfd; assign CSStab2[227] = 8'hfc; assign CSStab2[228] = 8'hfb; assign CSStab2[229] = 8'hfa; assign CSStab2[230] = 8'hf9; assign CSStab2[231] = 8'hf8; assign CSStab2[232] = 8'hf6; assign CSStab2[233] = 8'hf7; assign CSStab2[234] = 8'hf4; assign CSStab2[235] = 8'hf5; assign CSStab2[236] = 8'hf2; assign CSStab2[237] = 8'hf3; assign CSStab2[238] = 8'hf0; assign CSStab2[239] = 8'hf1; assign CSStab2[240] = 8'hed; assign CSStab2[241] = 8'hec; assign CSStab2[242] = 8'hef; assign CSStab2[243] = 8'hee; assign CSStab2[244] = 8'he9; assign CSStab2[245] = 8'he8; assign CSStab2[246] = 8'heb; assign CSStab2[247] = 8'hea; assign CSStab2[248] = 8'he4; assign CSStab2[249] = 8'he5; assign CSStab2[250] = 8'he6; assign CSStab2[251] = 8'he7; assign CSStab2[252] = 8'he0; assign CSStab2[253] = 8'he1; assign CSStab2[254] = 8'he2; assign CSStab2[255] = 8'he3; wire [7:0]CSStab3[0:7]; assign CSStab3[0] = 8'h00; assign CSStab3[1] = 8'h24; assign CSStab3[2] = 8'h49; assign CSStab3[3] = 8'h6d; assign CSStab3[4] = 8'h92; assign CSStab3[5] = 8'hb6; assign CSStab3[6] = 8'hdb; assign CSStab3[7] = 8'hff; wire [7:0]CSStab4[0:255]; assign CSStab4[0] = 8'h00; assign CSStab4[1] = 8'h80; assign CSStab4[2] = 8'h40; assign CSStab4[3] = 8'hc0; assign CSStab4[4] = 8'h20; assign CSStab4[5] = 8'ha0; assign CSStab4[6] = 8'h60; assign CSStab4[7] = 8'he0; assign CSStab4[8] = 8'h10; assign CSStab4[9] = 8'h90; assign CSStab4[10] = 8'h50; assign CSStab4[11] = 8'hd0; assign CSStab4[12] = 8'h30; assign CSStab4[13] = 8'hb0; assign CSStab4[14] = 8'h70; assign CSStab4[15] = 8'hf0; assign CSStab4[16] = 8'h08; assign CSStab4[17] = 8'h88; assign CSStab4[18] = 8'h48; assign CSStab4[19] = 8'hc8; assign CSStab4[20] = 8'h28; assign CSStab4[21] = 8'ha8; assign CSStab4[22] = 8'h68; assign CSStab4[23] = 8'he8; assign CSStab4[24] = 8'h18; assign CSStab4[25] = 8'h98; assign CSStab4[26] = 8'h58; assign CSStab4[27] = 8'hd8; assign CSStab4[28] = 8'h38; assign CSStab4[29] = 8'hb8; assign CSStab4[30] = 8'h78; assign CSStab4[31] = 8'hf8; assign CSStab4[32] = 8'h04; assign CSStab4[33] = 8'h84; assign CSStab4[34] = 8'h44; assign CSStab4[35] = 8'hc4; assign CSStab4[36] = 8'h24; assign CSStab4[37] = 8'ha4; assign CSStab4[38] = 8'h64; assign CSStab4[39] = 8'he4; assign CSStab4[40] = 8'h14; assign CSStab4[41] = 8'h94; assign CSStab4[42] = 8'h54; assign CSStab4[43] = 8'hd4; assign CSStab4[44] = 8'h34; assign CSStab4[45] = 8'hb4; assign CSStab4[46] = 8'h74; assign CSStab4[47] = 8'hf4; assign CSStab4[48] = 8'h0c; assign CSStab4[49] = 8'h8c; assign CSStab4[50] = 8'h4c; assign CSStab4[51] = 8'hcc; assign CSStab4[52] = 8'h2c; assign CSStab4[53] = 8'hac; assign CSStab4[54] = 8'h6c; assign CSStab4[55] = 8'hec; assign CSStab4[56] = 8'h1c; assign CSStab4[57] = 8'h9c; assign CSStab4[58] = 8'h5c; assign CSStab4[59] = 8'hdc; assign CSStab4[60] = 8'h3c; assign CSStab4[61] = 8'hbc; assign CSStab4[62] = 8'h7c; assign CSStab4[63] = 8'hfc; assign CSStab4[64] = 8'h02; assign CSStab4[65] = 8'h82; assign CSStab4[66] = 8'h42; assign CSStab4[67] = 8'hc2; assign CSStab4[68] = 8'h22; assign CSStab4[69] = 8'ha2; assign CSStab4[70] = 8'h62; assign CSStab4[71] = 8'he2; assign CSStab4[72] = 8'h12; assign CSStab4[73] = 8'h92; assign CSStab4[74] = 8'h52; assign CSStab4[75] = 8'hd2; assign CSStab4[76] = 8'h32; assign CSStab4[77] = 8'hb2; assign CSStab4[78] = 8'h72; assign CSStab4[79] = 8'hf2; assign CSStab4[80] = 8'h0a; assign CSStab4[81] = 8'h8a; assign CSStab4[82] = 8'h4a; assign CSStab4[83] = 8'hca; assign CSStab4[84] = 8'h2a; assign CSStab4[85] = 8'haa; assign CSStab4[86] = 8'h6a; assign CSStab4[87] = 8'hea; assign CSStab4[88] = 8'h1a; assign CSStab4[89] = 8'h9a; assign CSStab4[90] = 8'h5a; assign CSStab4[91] = 8'hda; assign CSStab4[92] = 8'h3a; assign CSStab4[93] = 8'hba; assign CSStab4[94] = 8'h7a; assign CSStab4[95] = 8'hfa; assign CSStab4[96] = 8'h06; assign CSStab4[97] = 8'h86; assign CSStab4[98] = 8'h46; assign CSStab4[99] = 8'hc6; assign CSStab4[100] = 8'h26; assign CSStab4[101] = 8'ha6; assign CSStab4[102] = 8'h66; assign CSStab4[103] = 8'he6; assign CSStab4[104] = 8'h16; assign CSStab4[105] = 8'h96; assign CSStab4[106] = 8'h56; assign CSStab4[107] = 8'hd6; assign CSStab4[108] = 8'h36; assign CSStab4[109] = 8'hb6; assign CSStab4[110] = 8'h76; assign CSStab4[111] = 8'hf6; assign CSStab4[112] = 8'h0e; assign CSStab4[113] = 8'h8e; assign CSStab4[114] = 8'h4e; assign CSStab4[115] = 8'hce; assign CSStab4[116] = 8'h2e; assign CSStab4[117] = 8'hae; assign CSStab4[118] = 8'h6e; assign CSStab4[119] = 8'hee; assign CSStab4[120] = 8'h1e; assign CSStab4[121] = 8'h9e; assign CSStab4[122] = 8'h5e; assign CSStab4[123] = 8'hde; assign CSStab4[124] = 8'h3e; assign CSStab4[125] = 8'hbe; assign CSStab4[126] = 8'h7e; assign CSStab4[127] = 8'hfe; assign CSStab4[128] = 8'h01; assign CSStab4[129] = 8'h81; assign CSStab4[130] = 8'h41; assign CSStab4[131] = 8'hc1; assign CSStab4[132] = 8'h21; assign CSStab4[133] = 8'ha1; assign CSStab4[134] = 8'h61; assign CSStab4[135] = 8'he1; assign CSStab4[136] = 8'h11; assign CSStab4[137] = 8'h91; assign CSStab4[138] = 8'h51; assign CSStab4[139] = 8'hd1; assign CSStab4[140] = 8'h31; assign CSStab4[141] = 8'hb1; assign CSStab4[142] = 8'h71; assign CSStab4[143] = 8'hf1; assign CSStab4[144] = 8'h09; assign CSStab4[145] = 8'h89; assign CSStab4[146] = 8'h49; assign CSStab4[147] = 8'hc9; assign CSStab4[148] = 8'h29; assign CSStab4[149] = 8'ha9; assign CSStab4[150] = 8'h69; assign CSStab4[151] = 8'he9; assign CSStab4[152] = 8'h19; assign CSStab4[153] = 8'h99; assign CSStab4[154] = 8'h59; assign CSStab4[155] = 8'hd9; assign CSStab4[156] = 8'h39; assign CSStab4[157] = 8'hb9; assign CSStab4[158] = 8'h79; assign CSStab4[159] = 8'hf9; assign CSStab4[160] = 8'h05; assign CSStab4[161] = 8'h85; assign CSStab4[162] = 8'h45; assign CSStab4[163] = 8'hc5; assign CSStab4[164] = 8'h25; assign CSStab4[165] = 8'ha5; assign CSStab4[166] = 8'h65; assign CSStab4[167] = 8'he5; assign CSStab4[168] = 8'h15; assign CSStab4[169] = 8'h95; assign CSStab4[170] = 8'h55; assign CSStab4[171] = 8'hd5; assign CSStab4[172] = 8'h35; assign CSStab4[173] = 8'hb5; assign CSStab4[174] = 8'h75; assign CSStab4[175] = 8'hf5; assign CSStab4[176] = 8'h0d; assign CSStab4[177] = 8'h8d; assign CSStab4[178] = 8'h4d; assign CSStab4[179] = 8'hcd; assign CSStab4[180] = 8'h2d; assign CSStab4[181] = 8'had; assign CSStab4[182] = 8'h6d; assign CSStab4[183] = 8'hed; assign CSStab4[184] = 8'h1d; assign CSStab4[185] = 8'h9d; assign CSStab4[186] = 8'h5d; assign CSStab4[187] = 8'hdd; assign CSStab4[188] = 8'h3d; assign CSStab4[189] = 8'hbd; assign CSStab4[190] = 8'h7d; assign CSStab4[191] = 8'hfd; assign CSStab4[192] = 8'h03; assign CSStab4[193] = 8'h83; assign CSStab4[194] = 8'h43; assign CSStab4[195] = 8'hc3; assign CSStab4[196] = 8'h23; assign CSStab4[197] = 8'ha3; assign CSStab4[198] = 8'h63; assign CSStab4[199] = 8'he3; assign CSStab4[200] = 8'h13; assign CSStab4[201] = 8'h93; assign CSStab4[202] = 8'h53; assign CSStab4[203] = 8'hd3; assign CSStab4[204] = 8'h33; assign CSStab4[205] = 8'hb3; assign CSStab4[206] = 8'h73; assign CSStab4[207] = 8'hf3; assign CSStab4[208] = 8'h0b; assign CSStab4[209] = 8'h8b; assign CSStab4[210] = 8'h4b; assign CSStab4[211] = 8'hcb; assign CSStab4[212] = 8'h2b; assign CSStab4[213] = 8'hab; assign CSStab4[214] = 8'h6b; assign CSStab4[215] = 8'heb; assign CSStab4[216] = 8'h1b; assign CSStab4[217] = 8'h9b; assign CSStab4[218] = 8'h5b; assign CSStab4[219] = 8'hdb; assign CSStab4[220] = 8'h3b; assign CSStab4[221] = 8'hbb; assign CSStab4[222] = 8'h7b; assign CSStab4[223] = 8'hfb; assign CSStab4[224] = 8'h07; assign CSStab4[225] = 8'h87; assign CSStab4[226] = 8'h47; assign CSStab4[227] = 8'hc7; assign CSStab4[228] = 8'h27; assign CSStab4[229] = 8'ha7; assign CSStab4[230] = 8'h67; assign CSStab4[231] = 8'he7; assign CSStab4[232] = 8'h17; assign CSStab4[233] = 8'h97; assign CSStab4[234] = 8'h57; assign CSStab4[235] = 8'hd7; assign CSStab4[236] = 8'h37; assign CSStab4[237] = 8'hb7; assign CSStab4[238] = 8'h77; assign CSStab4[239] = 8'hf7; assign CSStab4[240] = 8'h0f; assign CSStab4[241] = 8'h8f; assign CSStab4[242] = 8'h4f; assign CSStab4[243] = 8'hcf; assign CSStab4[244] = 8'h2f; assign CSStab4[245] = 8'haf; assign CSStab4[246] = 8'h6f; assign CSStab4[247] = 8'hef; assign CSStab4[248] = 8'h1f; assign CSStab4[249] = 8'h9f; assign CSStab4[250] = 8'h5f; assign CSStab4[251] = 8'hdf; assign CSStab4[252] = 8'h3f; assign CSStab4[253] = 8'hbf; assign CSStab4[254] = 8'h7f; assign CSStab4[255] = 8'hff; wire [7:0]CSStab5[0:255]; assign CSStab5[0] = 8'hff; assign CSStab5[1] = 8'h7f; assign CSStab5[2] = 8'hbf; assign CSStab5[3] = 8'h3f; assign CSStab5[4] = 8'hdf; assign CSStab5[5] = 8'h5f; assign CSStab5[6] = 8'h9f; assign CSStab5[7] = 8'h1f; assign CSStab5[8] = 8'hef; assign CSStab5[9] = 8'h6f; assign CSStab5[10] = 8'haf; assign CSStab5[11] = 8'h2f; assign CSStab5[12] = 8'hcf; assign CSStab5[13] = 8'h4f; assign CSStab5[14] = 8'h8f; assign CSStab5[15] = 8'h0f; assign CSStab5[16] = 8'hf7; assign CSStab5[17] = 8'h77; assign CSStab5[18] = 8'hb7; assign CSStab5[19] = 8'h37; assign CSStab5[20] = 8'hd7; assign CSStab5[21] = 8'h57; assign CSStab5[22] = 8'h97; assign CSStab5[23] = 8'h17; assign CSStab5[24] = 8'he7; assign CSStab5[25] = 8'h67; assign CSStab5[26] = 8'ha7; assign CSStab5[27] = 8'h27; assign CSStab5[28] = 8'hc7; assign CSStab5[29] = 8'h47; assign CSStab5[30] = 8'h87; assign CSStab5[31] = 8'h07; assign CSStab5[32] = 8'hfb; assign CSStab5[33] = 8'h7b; assign CSStab5[34] = 8'hbb; assign CSStab5[35] = 8'h3b; assign CSStab5[36] = 8'hdb; assign CSStab5[37] = 8'h5b; assign CSStab5[38] = 8'h9b; assign CSStab5[39] = 8'h1b; assign CSStab5[40] = 8'heb; assign CSStab5[41] = 8'h6b; assign CSStab5[42] = 8'hab; assign CSStab5[43] = 8'h2b; assign CSStab5[44] = 8'hcb; assign CSStab5[45] = 8'h4b; assign CSStab5[46] = 8'h8b; assign CSStab5[47] = 8'h0b; assign CSStab5[48] = 8'hf3; assign CSStab5[49] = 8'h73; assign CSStab5[50] = 8'hb3; assign CSStab5[51] = 8'h33; assign CSStab5[52] = 8'hd3; assign CSStab5[53] = 8'h53; assign CSStab5[54] = 8'h93; assign CSStab5[55] = 8'h13; assign CSStab5[56] = 8'he3; assign CSStab5[57] = 8'h63; assign CSStab5[58] = 8'ha3; assign CSStab5[59] = 8'h23; assign CSStab5[60] = 8'hc3; assign CSStab5[61] = 8'h43; assign CSStab5[62] = 8'h83; assign CSStab5[63] = 8'h03; assign CSStab5[64] = 8'hfd; assign CSStab5[65] = 8'h7d; assign CSStab5[66] = 8'hbd; assign CSStab5[67] = 8'h3d; assign CSStab5[68] = 8'hdd; assign CSStab5[69] = 8'h5d; assign CSStab5[70] = 8'h9d; assign CSStab5[71] = 8'h1d; assign CSStab5[72] = 8'hed; assign CSStab5[73] = 8'h6d; assign CSStab5[74] = 8'had; assign CSStab5[75] = 8'h2d; assign CSStab5[76] = 8'hcd; assign CSStab5[77] = 8'h4d; assign CSStab5[78] = 8'h8d; assign CSStab5[79] = 8'h0d; assign CSStab5[80] = 8'hf5; assign CSStab5[81] = 8'h75; assign CSStab5[82] = 8'hb5; assign CSStab5[83] = 8'h35; assign CSStab5[84] = 8'hd5; assign CSStab5[85] = 8'h55; assign CSStab5[86] = 8'h95; assign CSStab5[87] = 8'h15; assign CSStab5[88] = 8'he5; assign CSStab5[89] = 8'h65; assign CSStab5[90] = 8'ha5; assign CSStab5[91] = 8'h25; assign CSStab5[92] = 8'hc5; assign CSStab5[93] = 8'h45; assign CSStab5[94] = 8'h85; assign CSStab5[95] = 8'h05; assign CSStab5[96] = 8'hf9; assign CSStab5[97] = 8'h79; assign CSStab5[98] = 8'hb9; assign CSStab5[99] = 8'h39; assign CSStab5[100] = 8'hd9; assign CSStab5[101] = 8'h59; assign CSStab5[102] = 8'h99; assign CSStab5[103] = 8'h19; assign CSStab5[104] = 8'he9; assign CSStab5[105] = 8'h69; assign CSStab5[106] = 8'ha9; assign CSStab5[107] = 8'h29; assign CSStab5[108] = 8'hc9; assign CSStab5[109] = 8'h49; assign CSStab5[110] = 8'h89; assign CSStab5[111] = 8'h09; assign CSStab5[112] = 8'hf1; assign CSStab5[113] = 8'h71; assign CSStab5[114] = 8'hb1; assign CSStab5[115] = 8'h31; assign CSStab5[116] = 8'hd1; assign CSStab5[117] = 8'h51; assign CSStab5[118] = 8'h91; assign CSStab5[119] = 8'h11; assign CSStab5[120] = 8'he1; assign CSStab5[121] = 8'h61; assign CSStab5[122] = 8'ha1; assign CSStab5[123] = 8'h21; assign CSStab5[124] = 8'hc1; assign CSStab5[125] = 8'h41; assign CSStab5[126] = 8'h81; assign CSStab5[127] = 8'h01; assign CSStab5[128] = 8'hfe; assign CSStab5[129] = 8'h7e; assign CSStab5[130] = 8'hbe; assign CSStab5[131] = 8'h3e; assign CSStab5[132] = 8'hde; assign CSStab5[133] = 8'h5e; assign CSStab5[134] = 8'h9e; assign CSStab5[135] = 8'h1e; assign CSStab5[136] = 8'hee; assign CSStab5[137] = 8'h6e; assign CSStab5[138] = 8'hae; assign CSStab5[139] = 8'h2e; assign CSStab5[140] = 8'hce; assign CSStab5[141] = 8'h4e; assign CSStab5[142] = 8'h8e; assign CSStab5[143] = 8'h0e; assign CSStab5[144] = 8'hf6; assign CSStab5[145] = 8'h76; assign CSStab5[146] = 8'hb6; assign CSStab5[147] = 8'h36; assign CSStab5[148] = 8'hd6; assign CSStab5[149] = 8'h56; assign CSStab5[150] = 8'h96; assign CSStab5[151] = 8'h16; assign CSStab5[152] = 8'he6; assign CSStab5[153] = 8'h66; assign CSStab5[154] = 8'ha6; assign CSStab5[155] = 8'h26; assign CSStab5[156] = 8'hc6; assign CSStab5[157] = 8'h46; assign CSStab5[158] = 8'h86; assign CSStab5[159] = 8'h06; assign CSStab5[160] = 8'hfa; assign CSStab5[161] = 8'h7a; assign CSStab5[162] = 8'hba; assign CSStab5[163] = 8'h3a; assign CSStab5[164] = 8'hda; assign CSStab5[165] = 8'h5a; assign CSStab5[166] = 8'h9a; assign CSStab5[167] = 8'h1a; assign CSStab5[168] = 8'hea; assign CSStab5[169] = 8'h6a; assign CSStab5[170] = 8'haa; assign CSStab5[171] = 8'h2a; assign CSStab5[172] = 8'hca; assign CSStab5[173] = 8'h4a; assign CSStab5[174] = 8'h8a; assign CSStab5[175] = 8'h0a; assign CSStab5[176] = 8'hf2; assign CSStab5[177] = 8'h72; assign CSStab5[178] = 8'hb2; assign CSStab5[179] = 8'h32; assign CSStab5[180] = 8'hd2; assign CSStab5[181] = 8'h52; assign CSStab5[182] = 8'h92; assign CSStab5[183] = 8'h12; assign CSStab5[184] = 8'he2; assign CSStab5[185] = 8'h62; assign CSStab5[186] = 8'ha2; assign CSStab5[187] = 8'h22; assign CSStab5[188] = 8'hc2; assign CSStab5[189] = 8'h42; assign CSStab5[190] = 8'h82; assign CSStab5[191] = 8'h02; assign CSStab5[192] = 8'hfc; assign CSStab5[193] = 8'h7c; assign CSStab5[194] = 8'hbc; assign CSStab5[195] = 8'h3c; assign CSStab5[196] = 8'hdc; assign CSStab5[197] = 8'h5c; assign CSStab5[198] = 8'h9c; assign CSStab5[199] = 8'h1c; assign CSStab5[200] = 8'hec; assign CSStab5[201] = 8'h6c; assign CSStab5[202] = 8'hac; assign CSStab5[203] = 8'h2c; assign CSStab5[204] = 8'hcc; assign CSStab5[205] = 8'h4c; assign CSStab5[206] = 8'h8c; assign CSStab5[207] = 8'h0c; assign CSStab5[208] = 8'hf4; assign CSStab5[209] = 8'h74; assign CSStab5[210] = 8'hb4; assign CSStab5[211] = 8'h34; assign CSStab5[212] = 8'hd4; assign CSStab5[213] = 8'h54; assign CSStab5[214] = 8'h94; assign CSStab5[215] = 8'h14; assign CSStab5[216] = 8'he4; assign CSStab5[217] = 8'h64; assign CSStab5[218] = 8'ha4; assign CSStab5[219] = 8'h24; assign CSStab5[220] = 8'hc4; assign CSStab5[221] = 8'h44; assign CSStab5[222] = 8'h84; assign CSStab5[223] = 8'h04; assign CSStab5[224] = 8'hf8; assign CSStab5[225] = 8'h78; assign CSStab5[226] = 8'hb8; assign CSStab5[227] = 8'h38; assign CSStab5[228] = 8'hd8; assign CSStab5[229] = 8'h58; assign CSStab5[230] = 8'h98; assign CSStab5[231] = 8'h18; assign CSStab5[232] = 8'he8; assign CSStab5[233] = 8'h68; assign CSStab5[234] = 8'ha8; assign CSStab5[235] = 8'h28; assign CSStab5[236] = 8'hc8; assign CSStab5[237] = 8'h48; assign CSStab5[238] = 8'h88; assign CSStab5[239] = 8'h08; assign CSStab5[240] = 8'hf0; assign CSStab5[241] = 8'h70; assign CSStab5[242] = 8'hb0; assign CSStab5[243] = 8'h30; assign CSStab5[244] = 8'hd0; assign CSStab5[245] = 8'h50; assign CSStab5[246] = 8'h90; assign CSStab5[247] = 8'h10; assign CSStab5[248] = 8'he0; assign CSStab5[249] = 8'h60; assign CSStab5[250] = 8'ha0; assign CSStab5[251] = 8'h20; assign CSStab5[252] = 8'hc0; assign CSStab5[253] = 8'h40; assign CSStab5[254] = 8'h80; assign CSStab5[255] = 8'h00; wire [ 7:0]t4 = CSStab2[t2]^CSStab3[t1[2:0]]; wire [ 7:0]next_t2 = t1[8:1]; wire [ 8:0]next_t1 = {t1[0], t4}; wire [ 7:0]t4x = CSStab5[t4]; wire [ 7:0]t6 = t3[24:17]^t3[21:14]^t3[20:13]^t3[12:5]; wire [31:0]next_t3 = {t3[23:0], t6}; wire [ 7:0]t6x = CSStab4[t6]; wire [31:0]t5x = t5+t6+t4; wire [ 7:0]next_out = CSStab1[sec]^t5x[7:0]; wire [31:0]next_t5 = t5x[31:8]; reg [31:0]t3x; reg [ 8: 0]t1; reg [ 7: 0]t2; reg [31: 0]t3; reg [31: 0]t5; always @(posedge clock) begin if (start) begin t1 <= {1'b1, key[7:0]^sec_key[7:0]}; t2 <= key[15:8]^sec_key[15:8]; t3x = key[6*8-1:16]^sec_key[6*8-1:16]; t3 <= {t3x, 1'b0}+8-t3x[2:0]; t5 <= 0; out <= out; end else begin t1 <= next_t1; t2 <= next_t2; t3 <= next_t3; t5 <= next_t5; out <= next_out; end end endmodule module CSStitlekey(output [6*8-1:0]result, input [6*8-1:0]key, input [6*8-1:0]im, input type); wire [8:0]t1[0:5]; wire [7:0]t2[0:5]; wire [31:0]t3[0:5]; wire [31:0]t5[0:5]; wire [7:0]k[0:5]; wire [7:0]CSStab1[0:255]; assign CSStab1[0] = 8'h33; assign CSStab1[1] = 8'h73; assign CSStab1[2] = 8'h3b; assign CSStab1[3] = 8'h26; assign CSStab1[4] = 8'h63; assign CSStab1[5] = 8'h23; assign CSStab1[6] = 8'h6b; assign CSStab1[7] = 8'h76; assign CSStab1[8] = 8'h3e; assign CSStab1[9] = 8'h7e; assign CSStab1[10] = 8'h36; assign CSStab1[11] = 8'h2b; assign CSStab1[12] = 8'h6e; assign CSStab1[13] = 8'h2e; assign CSStab1[14] = 8'h66; assign CSStab1[15] = 8'h7b; assign CSStab1[16] = 8'hd3; assign CSStab1[17] = 8'h93; assign CSStab1[18] = 8'hdb; assign CSStab1[19] = 8'h06; assign CSStab1[20] = 8'h43; assign CSStab1[21] = 8'h03; assign CSStab1[22] = 8'h4b; assign CSStab1[23] = 8'h96; assign CSStab1[24] = 8'hde; assign CSStab1[25] = 8'h9e; assign CSStab1[26] = 8'hd6; assign CSStab1[27] = 8'h0b; assign CSStab1[28] = 8'h4e; assign CSStab1[29] = 8'h0e; assign CSStab1[30] = 8'h46; assign CSStab1[31] = 8'h9b; assign CSStab1[32] = 8'h57; assign CSStab1[33] = 8'h17; assign CSStab1[34] = 8'h5f; assign CSStab1[35] = 8'h82; assign CSStab1[36] = 8'hc7; assign CSStab1[37] = 8'h87; assign CSStab1[38] = 8'hcf; assign CSStab1[39] = 8'h12; assign CSStab1[40] = 8'h5a; assign CSStab1[41] = 8'h1a; assign CSStab1[42] = 8'h52; assign CSStab1[43] = 8'h8f; assign CSStab1[44] = 8'hca; assign CSStab1[45] = 8'h8a; assign CSStab1[46] = 8'hc2; assign CSStab1[47] = 8'h1f; assign CSStab1[48] = 8'hd9; assign CSStab1[49] = 8'h99; assign CSStab1[50] = 8'hd1; assign CSStab1[51] = 8'h00; assign CSStab1[52] = 8'h49; assign CSStab1[53] = 8'h09; assign CSStab1[54] = 8'h41; assign CSStab1[55] = 8'h90; assign CSStab1[56] = 8'hd8; assign CSStab1[57] = 8'h98; assign CSStab1[58] = 8'hd0; assign CSStab1[59] = 8'h01; assign CSStab1[60] = 8'h48; assign CSStab1[61] = 8'h08; assign CSStab1[62] = 8'h40; assign CSStab1[63] = 8'h91; assign CSStab1[64] = 8'h3d; assign CSStab1[65] = 8'h7d; assign CSStab1[66] = 8'h35; assign CSStab1[67] = 8'h24; assign CSStab1[68] = 8'h6d; assign CSStab1[69] = 8'h2d; assign CSStab1[70] = 8'h65; assign CSStab1[71] = 8'h74; assign CSStab1[72] = 8'h3c; assign CSStab1[73] = 8'h7c; assign CSStab1[74] = 8'h34; assign CSStab1[75] = 8'h25; assign CSStab1[76] = 8'h6c; assign CSStab1[77] = 8'h2c; assign CSStab1[78] = 8'h64; assign CSStab1[79] = 8'h75; assign CSStab1[80] = 8'hdd; assign CSStab1[81] = 8'h9d; assign CSStab1[82] = 8'hd5; assign CSStab1[83] = 8'h04; assign CSStab1[84] = 8'h4d; assign CSStab1[85] = 8'h0d; assign CSStab1[86] = 8'h45; assign CSStab1[87] = 8'h94; assign CSStab1[88] = 8'hdc; assign CSStab1[89] = 8'h9c; assign CSStab1[90] = 8'hd4; assign CSStab1[91] = 8'h05; assign CSStab1[92] = 8'h4c; assign CSStab1[93] = 8'h0c; assign CSStab1[94] = 8'h44; assign CSStab1[95] = 8'h95; assign CSStab1[96] = 8'h59; assign CSStab1[97] = 8'h19; assign CSStab1[98] = 8'h51; assign CSStab1[99] = 8'h80; assign CSStab1[100] = 8'hc9; assign CSStab1[101] = 8'h89; assign CSStab1[102] = 8'hc1; assign CSStab1[103] = 8'h10; assign CSStab1[104] = 8'h58; assign CSStab1[105] = 8'h18; assign CSStab1[106] = 8'h50; assign CSStab1[107] = 8'h81; assign CSStab1[108] = 8'hc8; assign CSStab1[109] = 8'h88; assign CSStab1[110] = 8'hc0; assign CSStab1[111] = 8'h11; assign CSStab1[112] = 8'hd7; assign CSStab1[113] = 8'h97; assign CSStab1[114] = 8'hdf; assign CSStab1[115] = 8'h02; assign CSStab1[116] = 8'h47; assign CSStab1[117] = 8'h07; assign CSStab1[118] = 8'h4f; assign CSStab1[119] = 8'h92; assign CSStab1[120] = 8'hda; assign CSStab1[121] = 8'h9a; assign CSStab1[122] = 8'hd2; assign CSStab1[123] = 8'h0f; assign CSStab1[124] = 8'h4a; assign CSStab1[125] = 8'h0a; assign CSStab1[126] = 8'h42; assign CSStab1[127] = 8'h9f; assign CSStab1[128] = 8'h53; assign CSStab1[129] = 8'h13; assign CSStab1[130] = 8'h5b; assign CSStab1[131] = 8'h86; assign CSStab1[132] = 8'hc3; assign CSStab1[133] = 8'h83; assign CSStab1[134] = 8'hcb; assign CSStab1[135] = 8'h16; assign CSStab1[136] = 8'h5e; assign CSStab1[137] = 8'h1e; assign CSStab1[138] = 8'h56; assign CSStab1[139] = 8'h8b; assign CSStab1[140] = 8'hce; assign CSStab1[141] = 8'h8e; assign CSStab1[142] = 8'hc6; assign CSStab1[143] = 8'h1b; assign CSStab1[144] = 8'hb3; assign CSStab1[145] = 8'hf3; assign CSStab1[146] = 8'hbb; assign CSStab1[147] = 8'ha6; assign CSStab1[148] = 8'he3; assign CSStab1[149] = 8'ha3; assign CSStab1[150] = 8'heb; assign CSStab1[151] = 8'hf6; assign CSStab1[152] = 8'hbe; assign CSStab1[153] = 8'hfe; assign CSStab1[154] = 8'hb6; assign CSStab1[155] = 8'hab; assign CSStab1[156] = 8'hee; assign CSStab1[157] = 8'hae; assign CSStab1[158] = 8'he6; assign CSStab1[159] = 8'hfb; assign CSStab1[160] = 8'h37; assign CSStab1[161] = 8'h77; assign CSStab1[162] = 8'h3f; assign CSStab1[163] = 8'h22; assign CSStab1[164] = 8'h67; assign CSStab1[165] = 8'h27; assign CSStab1[166] = 8'h6f; assign CSStab1[167] = 8'h72; assign CSStab1[168] = 8'h3a; assign CSStab1[169] = 8'h7a; assign CSStab1[170] = 8'h32; assign CSStab1[171] = 8'h2f; assign CSStab1[172] = 8'h6a; assign CSStab1[173] = 8'h2a; assign CSStab1[174] = 8'h62; assign CSStab1[175] = 8'h7f; assign CSStab1[176] = 8'hb9; assign CSStab1[177] = 8'hf9; assign CSStab1[178] = 8'hb1; assign CSStab1[179] = 8'ha0; assign CSStab1[180] = 8'he9; assign CSStab1[181] = 8'ha9; assign CSStab1[182] = 8'he1; assign CSStab1[183] = 8'hf0; assign CSStab1[184] = 8'hb8; assign CSStab1[185] = 8'hf8; assign CSStab1[186] = 8'hb0; assign CSStab1[187] = 8'ha1; assign CSStab1[188] = 8'he8; assign CSStab1[189] = 8'ha8; assign CSStab1[190] = 8'he0; assign CSStab1[191] = 8'hf1; assign CSStab1[192] = 8'h5d; assign CSStab1[193] = 8'h1d; assign CSStab1[194] = 8'h55; assign CSStab1[195] = 8'h84; assign CSStab1[196] = 8'hcd; assign CSStab1[197] = 8'h8d; assign CSStab1[198] = 8'hc5; assign CSStab1[199] = 8'h14; assign CSStab1[200] = 8'h5c; assign CSStab1[201] = 8'h1c; assign CSStab1[202] = 8'h54; assign CSStab1[203] = 8'h85; assign CSStab1[204] = 8'hcc; assign CSStab1[205] = 8'h8c; assign CSStab1[206] = 8'hc4; assign CSStab1[207] = 8'h15; assign CSStab1[208] = 8'hbd; assign CSStab1[209] = 8'hfd; assign CSStab1[210] = 8'hb5; assign CSStab1[211] = 8'ha4; assign CSStab1[212] = 8'hed; assign CSStab1[213] = 8'had; assign CSStab1[214] = 8'he5; assign CSStab1[215] = 8'hf4; assign CSStab1[216] = 8'hbc; assign CSStab1[217] = 8'hfc; assign CSStab1[218] = 8'hb4; assign CSStab1[219] = 8'ha5; assign CSStab1[220] = 8'hec; assign CSStab1[221] = 8'hac; assign CSStab1[222] = 8'he4; assign CSStab1[223] = 8'hf5; assign CSStab1[224] = 8'h39; assign CSStab1[225] = 8'h79; assign CSStab1[226] = 8'h31; assign CSStab1[227] = 8'h20; assign CSStab1[228] = 8'h69; assign CSStab1[229] = 8'h29; assign CSStab1[230] = 8'h61; assign CSStab1[231] = 8'h70; assign CSStab1[232] = 8'h38; assign CSStab1[233] = 8'h78; assign CSStab1[234] = 8'h30; assign CSStab1[235] = 8'h21; assign CSStab1[236] = 8'h68; assign CSStab1[237] = 8'h28; assign CSStab1[238] = 8'h60; assign CSStab1[239] = 8'h71; assign CSStab1[240] = 8'hb7; assign CSStab1[241] = 8'hf7; assign CSStab1[242] = 8'hbf; assign CSStab1[243] = 8'ha2; assign CSStab1[244] = 8'he7; assign CSStab1[245] = 8'ha7; assign CSStab1[246] = 8'hef; assign CSStab1[247] = 8'hf2; assign CSStab1[248] = 8'hba; assign CSStab1[249] = 8'hfa; assign CSStab1[250] = 8'hb2; assign CSStab1[251] = 8'haf; assign CSStab1[252] = 8'hea; assign CSStab1[253] = 8'haa; assign CSStab1[254] = 8'he2; assign CSStab1[255] = 8'hff; wire [7:0]CSStab2[0:255]; assign CSStab2[0] = 8'h00; assign CSStab2[1] = 8'h01; assign CSStab2[2] = 8'h02; assign CSStab2[3] = 8'h03; assign CSStab2[4] = 8'h04; assign CSStab2[5] = 8'h05; assign CSStab2[6] = 8'h06; assign CSStab2[7] = 8'h07; assign CSStab2[8] = 8'h09; assign CSStab2[9] = 8'h08; assign CSStab2[10] = 8'h0b; assign CSStab2[11] = 8'h0a; assign CSStab2[12] = 8'h0d; assign CSStab2[13] = 8'h0c; assign CSStab2[14] = 8'h0f; assign CSStab2[15] = 8'h0e; assign CSStab2[16] = 8'h12; assign CSStab2[17] = 8'h13; assign CSStab2[18] = 8'h10; assign CSStab2[19] = 8'h11; assign CSStab2[20] = 8'h16; assign CSStab2[21] = 8'h17; assign CSStab2[22] = 8'h14; assign CSStab2[23] = 8'h15; assign CSStab2[24] = 8'h1b; assign CSStab2[25] = 8'h1a; assign CSStab2[26] = 8'h19; assign CSStab2[27] = 8'h18; assign CSStab2[28] = 8'h1f; assign CSStab2[29] = 8'h1e; assign CSStab2[30] = 8'h1d; assign CSStab2[31] = 8'h1c; assign CSStab2[32] = 8'h24; assign CSStab2[33] = 8'h25; assign CSStab2[34] = 8'h26; assign CSStab2[35] = 8'h27; assign CSStab2[36] = 8'h20; assign CSStab2[37] = 8'h21; assign CSStab2[38] = 8'h22; assign CSStab2[39] = 8'h23; assign CSStab2[40] = 8'h2d; assign CSStab2[41] = 8'h2c; assign CSStab2[42] = 8'h2f; assign CSStab2[43] = 8'h2e; assign CSStab2[44] = 8'h29; assign CSStab2[45] = 8'h28; assign CSStab2[46] = 8'h2b; assign CSStab2[47] = 8'h2a; assign CSStab2[48] = 8'h36; assign CSStab2[49] = 8'h37; assign CSStab2[50] = 8'h34; assign CSStab2[51] = 8'h35; assign CSStab2[52] = 8'h32; assign CSStab2[53] = 8'h33; assign CSStab2[54] = 8'h30; assign CSStab2[55] = 8'h31; assign CSStab2[56] = 8'h3f; assign CSStab2[57] = 8'h3e; assign CSStab2[58] = 8'h3d; assign CSStab2[59] = 8'h3c; assign CSStab2[60] = 8'h3b; assign CSStab2[61] = 8'h3a; assign CSStab2[62] = 8'h39; assign CSStab2[63] = 8'h38; assign CSStab2[64] = 8'h49; assign CSStab2[65] = 8'h48; assign CSStab2[66] = 8'h4b; assign CSStab2[67] = 8'h4a; assign CSStab2[68] = 8'h4d; assign CSStab2[69] = 8'h4c; assign CSStab2[70] = 8'h4f; assign CSStab2[71] = 8'h4e; assign CSStab2[72] = 8'h40; assign CSStab2[73] = 8'h41; assign CSStab2[74] = 8'h42; assign CSStab2[75] = 8'h43; assign CSStab2[76] = 8'h44; assign CSStab2[77] = 8'h45; assign CSStab2[78] = 8'h46; assign CSStab2[79] = 8'h47; assign CSStab2[80] = 8'h5b; assign CSStab2[81] = 8'h5a; assign CSStab2[82] = 8'h59; assign CSStab2[83] = 8'h58; assign CSStab2[84] = 8'h5f; assign CSStab2[85] = 8'h5e; assign CSStab2[86] = 8'h5d; assign CSStab2[87] = 8'h5c; assign CSStab2[88] = 8'h52; assign CSStab2[89] = 8'h53; assign CSStab2[90] = 8'h50; assign CSStab2[91] = 8'h51; assign CSStab2[92] = 8'h56; assign CSStab2[93] = 8'h57; assign CSStab2[94] = 8'h54; assign CSStab2[95] = 8'h55; assign CSStab2[96] = 8'h6d; assign CSStab2[97] = 8'h6c; assign CSStab2[98] = 8'h6f; assign CSStab2[99] = 8'h6e; assign CSStab2[100] = 8'h69; assign CSStab2[101] = 8'h68; assign CSStab2[102] = 8'h6b; assign CSStab2[103] = 8'h6a; assign CSStab2[104] = 8'h64; assign CSStab2[105] = 8'h65; assign CSStab2[106] = 8'h66; assign CSStab2[107] = 8'h67; assign CSStab2[108] = 8'h60; assign CSStab2[109] = 8'h61; assign CSStab2[110] = 8'h62; assign CSStab2[111] = 8'h63; assign CSStab2[112] = 8'h7f; assign CSStab2[113] = 8'h7e; assign CSStab2[114] = 8'h7d; assign CSStab2[115] = 8'h7c; assign CSStab2[116] = 8'h7b; assign CSStab2[117] = 8'h7a; assign CSStab2[118] = 8'h79; assign CSStab2[119] = 8'h78; assign CSStab2[120] = 8'h76; assign CSStab2[121] = 8'h77; assign CSStab2[122] = 8'h74; assign CSStab2[123] = 8'h75; assign CSStab2[124] = 8'h72; assign CSStab2[125] = 8'h73; assign CSStab2[126] = 8'h70; assign CSStab2[127] = 8'h71; assign CSStab2[128] = 8'h92; assign CSStab2[129] = 8'h93; assign CSStab2[130] = 8'h90; assign CSStab2[131] = 8'h91; assign CSStab2[132] = 8'h96; assign CSStab2[133] = 8'h97; assign CSStab2[134] = 8'h94; assign CSStab2[135] = 8'h95; assign CSStab2[136] = 8'h9b; assign CSStab2[137] = 8'h9a; assign CSStab2[138] = 8'h99; assign CSStab2[139] = 8'h98; assign CSStab2[140] = 8'h9f; assign CSStab2[141] = 8'h9e; assign CSStab2[142] = 8'h9d; assign CSStab2[143] = 8'h9c; assign CSStab2[144] = 8'h80; assign CSStab2[145] = 8'h81; assign CSStab2[146] = 8'h82; assign CSStab2[147] = 8'h83; assign CSStab2[148] = 8'h84; assign CSStab2[149] = 8'h85; assign CSStab2[150] = 8'h86; assign CSStab2[151] = 8'h87; assign CSStab2[152] = 8'h89; assign CSStab2[153] = 8'h88; assign CSStab2[154] = 8'h8b; assign CSStab2[155] = 8'h8a; assign CSStab2[156] = 8'h8d; assign CSStab2[157] = 8'h8c; assign CSStab2[158] = 8'h8f; assign CSStab2[159] = 8'h8e; assign CSStab2[160] = 8'hb6; assign CSStab2[161] = 8'hb7; assign CSStab2[162] = 8'hb4; assign CSStab2[163] = 8'hb5; assign CSStab2[164] = 8'hb2; assign CSStab2[165] = 8'hb3; assign CSStab2[166] = 8'hb0; assign CSStab2[167] = 8'hb1; assign CSStab2[168] = 8'hbf; assign CSStab2[169] = 8'hbe; assign CSStab2[170] = 8'hbd; assign CSStab2[171] = 8'hbc; assign CSStab2[172] = 8'hbb; assign CSStab2[173] = 8'hba; assign CSStab2[174] = 8'hb9; assign CSStab2[175] = 8'hb8; assign CSStab2[176] = 8'ha4; assign CSStab2[177] = 8'ha5; assign CSStab2[178] = 8'ha6; assign CSStab2[179] = 8'ha7; assign CSStab2[180] = 8'ha0; assign CSStab2[181] = 8'ha1; assign CSStab2[182] = 8'ha2; assign CSStab2[183] = 8'ha3; assign CSStab2[184] = 8'had; assign CSStab2[185] = 8'hac; assign CSStab2[186] = 8'haf; assign CSStab2[187] = 8'hae; assign CSStab2[188] = 8'ha9; assign CSStab2[189] = 8'ha8; assign CSStab2[190] = 8'hab; assign CSStab2[191] = 8'haa; assign CSStab2[192] = 8'hdb; assign CSStab2[193] = 8'hda; assign CSStab2[194] = 8'hd9; assign CSStab2[195] = 8'hd8; assign CSStab2[196] = 8'hdf; assign CSStab2[197] = 8'hde; assign CSStab2[198] = 8'hdd; assign CSStab2[199] = 8'hdc; assign CSStab2[200] = 8'hd2; assign CSStab2[201] = 8'hd3; assign CSStab2[202] = 8'hd0; assign CSStab2[203] = 8'hd1; assign CSStab2[204] = 8'hd6; assign CSStab2[205] = 8'hd7; assign CSStab2[206] = 8'hd4; assign CSStab2[207] = 8'hd5; assign CSStab2[208] = 8'hc9; assign CSStab2[209] = 8'hc8; assign CSStab2[210] = 8'hcb; assign CSStab2[211] = 8'hca; assign CSStab2[212] = 8'hcd; assign CSStab2[213] = 8'hcc; assign CSStab2[214] = 8'hcf; assign CSStab2[215] = 8'hce; assign CSStab2[216] = 8'hc0; assign CSStab2[217] = 8'hc1; assign CSStab2[218] = 8'hc2; assign CSStab2[219] = 8'hc3; assign CSStab2[220] = 8'hc4; assign CSStab2[221] = 8'hc5; assign CSStab2[222] = 8'hc6; assign CSStab2[223] = 8'hc7; assign CSStab2[224] = 8'hff; assign CSStab2[225] = 8'hfe; assign CSStab2[226] = 8'hfd; assign CSStab2[227] = 8'hfc; assign CSStab2[228] = 8'hfb; assign CSStab2[229] = 8'hfa; assign CSStab2[230] = 8'hf9; assign CSStab2[231] = 8'hf8; assign CSStab2[232] = 8'hf6; assign CSStab2[233] = 8'hf7; assign CSStab2[234] = 8'hf4; assign CSStab2[235] = 8'hf5; assign CSStab2[236] = 8'hf2; assign CSStab2[237] = 8'hf3; assign CSStab2[238] = 8'hf0; assign CSStab2[239] = 8'hf1; assign CSStab2[240] = 8'hed; assign CSStab2[241] = 8'hec; assign CSStab2[242] = 8'hef; assign CSStab2[243] = 8'hee; assign CSStab2[244] = 8'he9; assign CSStab2[245] = 8'he8; assign CSStab2[246] = 8'heb; assign CSStab2[247] = 8'hea; assign CSStab2[248] = 8'he4; assign CSStab2[249] = 8'he5; assign CSStab2[250] = 8'he6; assign CSStab2[251] = 8'he7; assign CSStab2[252] = 8'he0; assign CSStab2[253] = 8'he1; assign CSStab2[254] = 8'he2; assign CSStab2[255] = 8'he3; wire [7:0]CSStab3[0:7]; assign CSStab3[0] = 8'h00; assign CSStab3[1] = 8'h24; assign CSStab3[2] = 8'h49; assign CSStab3[3] = 8'h6d; assign CSStab3[4] = 8'h92; assign CSStab3[5] = 8'hb6; assign CSStab3[6] = 8'hdb; assign CSStab3[7] = 8'hff; wire [7:0]CSStab4[0:255]; assign CSStab4[0] = 8'h00; assign CSStab4[1] = 8'h80; assign CSStab4[2] = 8'h40; assign CSStab4[3] = 8'hc0; assign CSStab4[4] = 8'h20; assign CSStab4[5] = 8'ha0; assign CSStab4[6] = 8'h60; assign CSStab4[7] = 8'he0; assign CSStab4[8] = 8'h10; assign CSStab4[9] = 8'h90; assign CSStab4[10] = 8'h50; assign CSStab4[11] = 8'hd0; assign CSStab4[12] = 8'h30; assign CSStab4[13] = 8'hb0; assign CSStab4[14] = 8'h70; assign CSStab4[15] = 8'hf0; assign CSStab4[16] = 8'h08; assign CSStab4[17] = 8'h88; assign CSStab4[18] = 8'h48; assign CSStab4[19] = 8'hc8; assign CSStab4[20] = 8'h28; assign CSStab4[21] = 8'ha8; assign CSStab4[22] = 8'h68; assign CSStab4[23] = 8'he8; assign CSStab4[24] = 8'h18; assign CSStab4[25] = 8'h98; assign CSStab4[26] = 8'h58; assign CSStab4[27] = 8'hd8; assign CSStab4[28] = 8'h38; assign CSStab4[29] = 8'hb8; assign CSStab4[30] = 8'h78; assign CSStab4[31] = 8'hf8; assign CSStab4[32] = 8'h04; assign CSStab4[33] = 8'h84; assign CSStab4[34] = 8'h44; assign CSStab4[35] = 8'hc4; assign CSStab4[36] = 8'h24; assign CSStab4[37] = 8'ha4; assign CSStab4[38] = 8'h64; assign CSStab4[39] = 8'he4; assign CSStab4[40] = 8'h14; assign CSStab4[41] = 8'h94; assign CSStab4[42] = 8'h54; assign CSStab4[43] = 8'hd4; assign CSStab4[44] = 8'h34; assign CSStab4[45] = 8'hb4; assign CSStab4[46] = 8'h74; assign CSStab4[47] = 8'hf4; assign CSStab4[48] = 8'h0c; assign CSStab4[49] = 8'h8c; assign CSStab4[50] = 8'h4c; assign CSStab4[51] = 8'hcc; assign CSStab4[52] = 8'h2c; assign CSStab4[53] = 8'hac; assign CSStab4[54] = 8'h6c; assign CSStab4[55] = 8'hec; assign CSStab4[56] = 8'h1c; assign CSStab4[57] = 8'h9c; assign CSStab4[58] = 8'h5c; assign CSStab4[59] = 8'hdc; assign CSStab4[60] = 8'h3c; assign CSStab4[61] = 8'hbc; assign CSStab4[62] = 8'h7c; assign CSStab4[63] = 8'hfc; assign CSStab4[64] = 8'h02; assign CSStab4[65] = 8'h82; assign CSStab4[66] = 8'h42; assign CSStab4[67] = 8'hc2; assign CSStab4[68] = 8'h22; assign CSStab4[69] = 8'ha2; assign CSStab4[70] = 8'h62; assign CSStab4[71] = 8'he2; assign CSStab4[72] = 8'h12; assign CSStab4[73] = 8'h92; assign CSStab4[74] = 8'h52; assign CSStab4[75] = 8'hd2; assign CSStab4[76] = 8'h32; assign CSStab4[77] = 8'hb2; assign CSStab4[78] = 8'h72; assign CSStab4[79] = 8'hf2; assign CSStab4[80] = 8'h0a; assign CSStab4[81] = 8'h8a; assign CSStab4[82] = 8'h4a; assign CSStab4[83] = 8'hca; assign CSStab4[84] = 8'h2a; assign CSStab4[85] = 8'haa; assign CSStab4[86] = 8'h6a; assign CSStab4[87] = 8'hea; assign CSStab4[88] = 8'h1a; assign CSStab4[89] = 8'h9a; assign CSStab4[90] = 8'h5a; assign CSStab4[91] = 8'hda; assign CSStab4[92] = 8'h3a; assign CSStab4[93] = 8'hba; assign CSStab4[94] = 8'h7a; assign CSStab4[95] = 8'hfa; assign CSStab4[96] = 8'h06; assign CSStab4[97] = 8'h86; assign CSStab4[98] = 8'h46; assign CSStab4[99] = 8'hc6; assign CSStab4[100] = 8'h26; assign CSStab4[101] = 8'ha6; assign CSStab4[102] = 8'h66; assign CSStab4[103] = 8'he6; assign CSStab4[104] = 8'h16; assign CSStab4[105] = 8'h96; assign CSStab4[106] = 8'h56; assign CSStab4[107] = 8'hd6; assign CSStab4[108] = 8'h36; assign CSStab4[109] = 8'hb6; assign CSStab4[110] = 8'h76; assign CSStab4[111] = 8'hf6; assign CSStab4[112] = 8'h0e; assign CSStab4[113] = 8'h8e; assign CSStab4[114] = 8'h4e; assign CSStab4[115] = 8'hce; assign CSStab4[116] = 8'h2e; assign CSStab4[117] = 8'hae; assign CSStab4[118] = 8'h6e; assign CSStab4[119] = 8'hee; assign CSStab4[120] = 8'h1e; assign CSStab4[121] = 8'h9e; assign CSStab4[122] = 8'h5e; assign CSStab4[123] = 8'hde; assign CSStab4[124] = 8'h3e; assign CSStab4[125] = 8'hbe; assign CSStab4[126] = 8'h7e; assign CSStab4[127] = 8'hfe; assign CSStab4[128] = 8'h01; assign CSStab4[129] = 8'h81; assign CSStab4[130] = 8'h41; assign CSStab4[131] = 8'hc1; assign CSStab4[132] = 8'h21; assign CSStab4[133] = 8'ha1; assign CSStab4[134] = 8'h61; assign CSStab4[135] = 8'he1; assign CSStab4[136] = 8'h11; assign CSStab4[137] = 8'h91; assign CSStab4[138] = 8'h51; assign CSStab4[139] = 8'hd1; assign CSStab4[140] = 8'h31; assign CSStab4[141] = 8'hb1; assign CSStab4[142] = 8'h71; assign CSStab4[143] = 8'hf1; assign CSStab4[144] = 8'h09; assign CSStab4[145] = 8'h89; assign CSStab4[146] = 8'h49; assign CSStab4[147] = 8'hc9; assign CSStab4[148] = 8'h29; assign CSStab4[149] = 8'ha9; assign CSStab4[150] = 8'h69; assign CSStab4[151] = 8'he9; assign CSStab4[152] = 8'h19; assign CSStab4[153] = 8'h99; assign CSStab4[154] = 8'h59; assign CSStab4[155] = 8'hd9; assign CSStab4[156] = 8'h39; assign CSStab4[157] = 8'hb9; assign CSStab4[158] = 8'h79; assign CSStab4[159] = 8'hf9; assign CSStab4[160] = 8'h05; assign CSStab4[161] = 8'h85; assign CSStab4[162] = 8'h45; assign CSStab4[163] = 8'hc5; assign CSStab4[164] = 8'h25; assign CSStab4[165] = 8'ha5; assign CSStab4[166] = 8'h65; assign CSStab4[167] = 8'he5; assign CSStab4[168] = 8'h15; assign CSStab4[169] = 8'h95; assign CSStab4[170] = 8'h55; assign CSStab4[171] = 8'hd5; assign CSStab4[172] = 8'h35; assign CSStab4[173] = 8'hb5; assign CSStab4[174] = 8'h75; assign CSStab4[175] = 8'hf5; assign CSStab4[176] = 8'h0d; assign CSStab4[177] = 8'h8d; assign CSStab4[178] = 8'h4d; assign CSStab4[179] = 8'hcd; assign CSStab4[180] = 8'h2d; assign CSStab4[181] = 8'had; assign CSStab4[182] = 8'h6d; assign CSStab4[183] = 8'hed; assign CSStab4[184] = 8'h1d; assign CSStab4[185] = 8'h9d; assign CSStab4[186] = 8'h5d; assign CSStab4[187] = 8'hdd; assign CSStab4[188] = 8'h3d; assign CSStab4[189] = 8'hbd; assign CSStab4[190] = 8'h7d; assign CSStab4[191] = 8'hfd; assign CSStab4[192] = 8'h03; assign CSStab4[193] = 8'h83; assign CSStab4[194] = 8'h43; assign CSStab4[195] = 8'hc3; assign CSStab4[196] = 8'h23; assign CSStab4[197] = 8'ha3; assign CSStab4[198] = 8'h63; assign CSStab4[199] = 8'he3; assign CSStab4[200] = 8'h13; assign CSStab4[201] = 8'h93; assign CSStab4[202] = 8'h53; assign CSStab4[203] = 8'hd3; assign CSStab4[204] = 8'h33; assign CSStab4[205] = 8'hb3; assign CSStab4[206] = 8'h73; assign CSStab4[207] = 8'hf3; assign CSStab4[208] = 8'h0b; assign CSStab4[209] = 8'h8b; assign CSStab4[210] = 8'h4b; assign CSStab4[211] = 8'hcb; assign CSStab4[212] = 8'h2b; assign CSStab4[213] = 8'hab; assign CSStab4[214] = 8'h6b; assign CSStab4[215] = 8'heb; assign CSStab4[216] = 8'h1b; assign CSStab4[217] = 8'h9b; assign CSStab4[218] = 8'h5b; assign CSStab4[219] = 8'hdb; assign CSStab4[220] = 8'h3b; assign CSStab4[221] = 8'hbb; assign CSStab4[222] = 8'h7b; assign CSStab4[223] = 8'hfb; assign CSStab4[224] = 8'h07; assign CSStab4[225] = 8'h87; assign CSStab4[226] = 8'h47; assign CSStab4[227] = 8'hc7; assign CSStab4[228] = 8'h27; assign CSStab4[229] = 8'ha7; assign CSStab4[230] = 8'h67; assign CSStab4[231] = 8'he7; assign CSStab4[232] = 8'h17; assign CSStab4[233] = 8'h97; assign CSStab4[234] = 8'h57; assign CSStab4[235] = 8'hd7; assign CSStab4[236] = 8'h37; assign CSStab4[237] = 8'hb7; assign CSStab4[238] = 8'h77; assign CSStab4[239] = 8'hf7; assign CSStab4[240] = 8'h0f; assign CSStab4[241] = 8'h8f; assign CSStab4[242] = 8'h4f; assign CSStab4[243] = 8'hcf; assign CSStab4[244] = 8'h2f; assign CSStab4[245] = 8'haf; assign CSStab4[246] = 8'h6f; assign CSStab4[247] = 8'hef; assign CSStab4[248] = 8'h1f; assign CSStab4[249] = 8'h9f; assign CSStab4[250] = 8'h5f; assign CSStab4[251] = 8'hdf; assign CSStab4[252] = 8'h3f; assign CSStab4[253] = 8'hbf; assign CSStab4[254] = 8'h7f; assign CSStab4[255] = 8'hff; wire [7:0]CSStab5[0:255]; assign CSStab5[0] = 8'hff; assign CSStab5[1] = 8'h7f; assign CSStab5[2] = 8'hbf; assign CSStab5[3] = 8'h3f; assign CSStab5[4] = 8'hdf; assign CSStab5[5] = 8'h5f; assign CSStab5[6] = 8'h9f; assign CSStab5[7] = 8'h1f; assign CSStab5[8] = 8'hef; assign CSStab5[9] = 8'h6f; assign CSStab5[10] = 8'haf; assign CSStab5[11] = 8'h2f; assign CSStab5[12] = 8'hcf; assign CSStab5[13] = 8'h4f; assign CSStab5[14] = 8'h8f; assign CSStab5[15] = 8'h0f; assign CSStab5[16] = 8'hf7; assign CSStab5[17] = 8'h77; assign CSStab5[18] = 8'hb7; assign CSStab5[19] = 8'h37; assign CSStab5[20] = 8'hd7; assign CSStab5[21] = 8'h57; assign CSStab5[22] = 8'h97; assign CSStab5[23] = 8'h17; assign CSStab5[24] = 8'he7; assign CSStab5[25] = 8'h67; assign CSStab5[26] = 8'ha7; assign CSStab5[27] = 8'h27; assign CSStab5[28] = 8'hc7; assign CSStab5[29] = 8'h47; assign CSStab5[30] = 8'h87; assign CSStab5[31] = 8'h07; assign CSStab5[32] = 8'hfb; assign CSStab5[33] = 8'h7b; assign CSStab5[34] = 8'hbb; assign CSStab5[35] = 8'h3b; assign CSStab5[36] = 8'hdb; assign CSStab5[37] = 8'h5b; assign CSStab5[38] = 8'h9b; assign CSStab5[39] = 8'h1b; assign CSStab5[40] = 8'heb; assign CSStab5[41] = 8'h6b; assign CSStab5[42] = 8'hab; assign CSStab5[43] = 8'h2b; assign CSStab5[44] = 8'hcb; assign CSStab5[45] = 8'h4b; assign CSStab5[46] = 8'h8b; assign CSStab5[47] = 8'h0b; assign CSStab5[48] = 8'hf3; assign CSStab5[49] = 8'h73; assign CSStab5[50] = 8'hb3; assign CSStab5[51] = 8'h33; assign CSStab5[52] = 8'hd3; assign CSStab5[53] = 8'h53; assign CSStab5[54] = 8'h93; assign CSStab5[55] = 8'h13; assign CSStab5[56] = 8'he3; assign CSStab5[57] = 8'h63; assign CSStab5[58] = 8'ha3; assign CSStab5[59] = 8'h23; assign CSStab5[60] = 8'hc3; assign CSStab5[61] = 8'h43; assign CSStab5[62] = 8'h83; assign CSStab5[63] = 8'h03; assign CSStab5[64] = 8'hfd; assign CSStab5[65] = 8'h7d; assign CSStab5[66] = 8'hbd; assign CSStab5[67] = 8'h3d; assign CSStab5[68] = 8'hdd; assign CSStab5[69] = 8'h5d; assign CSStab5[70] = 8'h9d; assign CSStab5[71] = 8'h1d; assign CSStab5[72] = 8'hed; assign CSStab5[73] = 8'h6d; assign CSStab5[74] = 8'had; assign CSStab5[75] = 8'h2d; assign CSStab5[76] = 8'hcd; assign CSStab5[77] = 8'h4d; assign CSStab5[78] = 8'h8d; assign CSStab5[79] = 8'h0d; assign CSStab5[80] = 8'hf5; assign CSStab5[81] = 8'h75; assign CSStab5[82] = 8'hb5; assign CSStab5[83] = 8'h35; assign CSStab5[84] = 8'hd5; assign CSStab5[85] = 8'h55; assign CSStab5[86] = 8'h95; assign CSStab5[87] = 8'h15; assign CSStab5[88] = 8'he5; assign CSStab5[89] = 8'h65; assign CSStab5[90] = 8'ha5; assign CSStab5[91] = 8'h25; assign CSStab5[92] = 8'hc5; assign CSStab5[93] = 8'h45; assign CSStab5[94] = 8'h85; assign CSStab5[95] = 8'h05; assign CSStab5[96] = 8'hf9; assign CSStab5[97] = 8'h79; assign CSStab5[98] = 8'hb9; assign CSStab5[99] = 8'h39; assign CSStab5[100] = 8'hd9; assign CSStab5[101] = 8'h59; assign CSStab5[102] = 8'h99; assign CSStab5[103] = 8'h19; assign CSStab5[104] = 8'he9; assign CSStab5[105] = 8'h69; assign CSStab5[106] = 8'ha9; assign CSStab5[107] = 8'h29; assign CSStab5[108] = 8'hc9; assign CSStab5[109] = 8'h49; assign CSStab5[110] = 8'h89; assign CSStab5[111] = 8'h09; assign CSStab5[112] = 8'hf1; assign CSStab5[113] = 8'h71; assign CSStab5[114] = 8'hb1; assign CSStab5[115] = 8'h31; assign CSStab5[116] = 8'hd1; assign CSStab5[117] = 8'h51; assign CSStab5[118] = 8'h91; assign CSStab5[119] = 8'h11; assign CSStab5[120] = 8'he1; assign CSStab5[121] = 8'h61; assign CSStab5[122] = 8'ha1; assign CSStab5[123] = 8'h21; assign CSStab5[124] = 8'hc1; assign CSStab5[125] = 8'h41; assign CSStab5[126] = 8'h81; assign CSStab5[127] = 8'h01; assign CSStab5[128] = 8'hfe; assign CSStab5[129] = 8'h7e; assign CSStab5[130] = 8'hbe; assign CSStab5[131] = 8'h3e; assign CSStab5[132] = 8'hde; assign CSStab5[133] = 8'h5e; assign CSStab5[134] = 8'h9e; assign CSStab5[135] = 8'h1e; assign CSStab5[136] = 8'hee; assign CSStab5[137] = 8'h6e; assign CSStab5[138] = 8'hae; assign CSStab5[139] = 8'h2e; assign CSStab5[140] = 8'hce; assign CSStab5[141] = 8'h4e; assign CSStab5[142] = 8'h8e; assign CSStab5[143] = 8'h0e; assign CSStab5[144] = 8'hf6; assign CSStab5[145] = 8'h76; assign CSStab5[146] = 8'hb6; assign CSStab5[147] = 8'h36; assign CSStab5[148] = 8'hd6; assign CSStab5[149] = 8'h56; assign CSStab5[150] = 8'h96; assign CSStab5[151] = 8'h16; assign CSStab5[152] = 8'he6; assign CSStab5[153] = 8'h66; assign CSStab5[154] = 8'ha6; assign CSStab5[155] = 8'h26; assign CSStab5[156] = 8'hc6; assign CSStab5[157] = 8'h46; assign CSStab5[158] = 8'h86; assign CSStab5[159] = 8'h06; assign CSStab5[160] = 8'hfa; assign CSStab5[161] = 8'h7a; assign CSStab5[162] = 8'hba; assign CSStab5[163] = 8'h3a; assign CSStab5[164] = 8'hda; assign CSStab5[165] = 8'h5a; assign CSStab5[166] = 8'h9a; assign CSStab5[167] = 8'h1a; assign CSStab5[168] = 8'hea; assign CSStab5[169] = 8'h6a; assign CSStab5[170] = 8'haa; assign CSStab5[171] = 8'h2a; assign CSStab5[172] = 8'hca; assign CSStab5[173] = 8'h4a; assign CSStab5[174] = 8'h8a; assign CSStab5[175] = 8'h0a; assign CSStab5[176] = 8'hf2; assign CSStab5[177] = 8'h72; assign CSStab5[178] = 8'hb2; assign CSStab5[179] = 8'h32; assign CSStab5[180] = 8'hd2; assign CSStab5[181] = 8'h52; assign CSStab5[182] = 8'h92; assign CSStab5[183] = 8'h12; assign CSStab5[184] = 8'he2; assign CSStab5[185] = 8'h62; assign CSStab5[186] = 8'ha2; assign CSStab5[187] = 8'h22; assign CSStab5[188] = 8'hc2; assign CSStab5[189] = 8'h42; assign CSStab5[190] = 8'h82; assign CSStab5[191] = 8'h02; assign CSStab5[192] = 8'hfc; assign CSStab5[193] = 8'h7c; assign CSStab5[194] = 8'hbc; assign CSStab5[195] = 8'h3c; assign CSStab5[196] = 8'hdc; assign CSStab5[197] = 8'h5c; assign CSStab5[198] = 8'h9c; assign CSStab5[199] = 8'h1c; assign CSStab5[200] = 8'hec; assign CSStab5[201] = 8'h6c; assign CSStab5[202] = 8'hac; assign CSStab5[203] = 8'h2c; assign CSStab5[204] = 8'hcc; assign CSStab5[205] = 8'h4c; assign CSStab5[206] = 8'h8c; assign CSStab5[207] = 8'h0c; assign CSStab5[208] = 8'hf4; assign CSStab5[209] = 8'h74; assign CSStab5[210] = 8'hb4; assign CSStab5[211] = 8'h34; assign CSStab5[212] = 8'hd4; assign CSStab5[213] = 8'h54; assign CSStab5[214] = 8'h94; assign CSStab5[215] = 8'h14; assign CSStab5[216] = 8'he4; assign CSStab5[217] = 8'h64; assign CSStab5[218] = 8'ha4; assign CSStab5[219] = 8'h24; assign CSStab5[220] = 8'hc4; assign CSStab5[221] = 8'h44; assign CSStab5[222] = 8'h84; assign CSStab5[223] = 8'h04; assign CSStab5[224] = 8'hf8; assign CSStab5[225] = 8'h78; assign CSStab5[226] = 8'hb8; assign CSStab5[227] = 8'h38; assign CSStab5[228] = 8'hd8; assign CSStab5[229] = 8'h58; assign CSStab5[230] = 8'h98; assign CSStab5[231] = 8'h18; assign CSStab5[232] = 8'he8; assign CSStab5[233] = 8'h68; assign CSStab5[234] = 8'ha8; assign CSStab5[235] = 8'h28; assign CSStab5[236] = 8'hc8; assign CSStab5[237] = 8'h48; assign CSStab5[238] = 8'h88; assign CSStab5[239] = 8'h08; assign CSStab5[240] = 8'hf0; assign CSStab5[241] = 8'h70; assign CSStab5[242] = 8'hb0; assign CSStab5[243] = 8'h30; assign CSStab5[244] = 8'hd0; assign CSStab5[245] = 8'h50; assign CSStab5[246] = 8'h90; assign CSStab5[247] = 8'h10; assign CSStab5[248] = 8'he0; assign CSStab5[249] = 8'h60; assign CSStab5[250] = 8'ha0; assign CSStab5[251] = 8'h20; assign CSStab5[252] = 8'hc0; assign CSStab5[253] = 8'h40; assign CSStab5[254] = 8'h80; assign CSStab5[255] = 8'h00; generate genvar i; assign t1[0] = {1'b1, im[7:0]}; assign t2[0] = im[15:8]; wire [31:0]t3x = im[6*8-1:16]; assign t3[0] = {t3x, 1'b0}+32'h8-t3x[2:0]; assign t5[0] = 0; for (i=0; i<5; i=i+1) begin : xx wire [ 7:0]t4 = CSStab2[t2[i]]^CSStab3[t1[i][2:0]]; assign t2[i+1] = t1[i][8:1]; assign t1[i+1] = {t1[i][0], t4}; wire [ 7:0]t4x = CSStab4[t4]; wire [ 7:0]t6 = t3[24:17]^t3[21:14]^t3[20:13]^t3[12:5]; assign t3[i+1] = {t3[i][23:0], t6}; wire [ 7:0]t6x = (type?CSStab5[t6]:CSStab4[t6]); wire [31:0]t5x = t5[i]+t6+t4; assign k[i] = t5x[7:0]; assign t5[i+1] = t5x[31:8]; end assign xkey[39:32] = k[4]^CSStab1[key[39:32]]^key[31:24]; assign xkey[31:24] = k[3]^CSStab1[key[31:24]]^key[23:16]; assign xkey[23:16] = k[2]^CSStab1[key[23:16]]^key[15:8]; assign xkey[15: 8] = k[1]^CSStab1[key[15:8]]^key[7:0]; assign xkey[ 7: 0] = k[0]^CSStab1[key[7:0]]^xkey[39:32]; assign result[39:32] = k[4]^CSStab1[xkey[39:32]]^xkey[31:24]; assign result[31:24] = k[3]^CSStab1[xkey[31:24]]^xkey[23:16]; assign result[23:16] = k[2]^CSStab1[xkey[23:16]]^xkey[15:8]; assign result[15: 8] = k[1]^CSStab1[xkey[15:8]]^xkey[7:0]; assign result[ 7: 0] = k[0]^CSStab1[xkey[7:0]]^key[47:40]; assign result[47:40] = key[47:40]; endgenerate endmodule // // title key decription is entirely combinatorial // module CSSdecrypttitlekey(output [6*8-1:0]result, input [6*8-1:0]tkey,input [6*8-1:0]dkey); wire [6*8-1:0]imx; wire [6*8-1:0]im2 = {8'h00,8'he0,8'hc5,8'h67,8'h67,8'h51}; CSStitlekey CSStitlekey1(.result(imx), .key(dkey), .im(im2), .type(1'b0)); CSStitlekey CSStitlekey2(.result(result), .key(key), .im(imx), .type(1'b1)); endmodule