-- "blowfishvhdl" is a free synthesizable VHDL Blowfish implementation
-- Copyright (C) 2000  Wesley J. Landaker <wjl@mindless.com>

-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.

-- This program 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 General Public License for more details.

-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

-- See http://blowfishvhdl.sourceforge.net for more information.


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity sbox2_init is
port (
  address : in     std_logic_vector(7 downto 0);
  data    : inout std_logic_vector(31 downto 0)
);
end sbox2_init;

architecture fishy of sbox2_init is
  type sbox_data is array (0 to 255) of std_logic_vector(31 downto 0); 
  signal contents : sbox_data;
begin

  contents(0 ) <= x"e93d5a68";
  contents(1 ) <= x"948140f7";
  contents(2 ) <= x"f64c261c";
  contents(3 ) <= x"94692934";
  contents(4 ) <= x"411520f7";
  contents(5 ) <= x"7602d4f7";
  contents(6 ) <= x"bcf46b2e";
  contents(7 ) <= x"d4a20068";
  contents(8 ) <= x"d4082471";
  contents(9 ) <= x"3320f46a";
  contents(10) <= x"43b7d4b7";
  contents(11) <= x"500061af";
  contents(12) <= x"1e39f62e";
  contents(13) <= x"97244546";
  contents(14) <= x"14214f74";
  contents(15) <= x"bf8b8840";
  contents(16) <= x"4d95fc1d";
  contents(17) <= x"96b591af";
  contents(18) <= x"70f4ddd3";
  contents(19) <= x"66a02f45";
  contents(20) <= x"bfbc09ec";
  contents(21) <= x"03bd9785";
  contents(22) <= x"7fac6dd0";
  contents(23) <= x"31cb8504";
  contents(24) <= x"96eb27b3";
  contents(25) <= x"55fd3941";
  contents(26) <= x"da2547e6";
  contents(27) <= x"abca0a9a";
  contents(28) <= x"28507825";
  contents(29) <= x"530429f4";
  contents(30) <= x"0a2c86da";
  contents(31) <= x"e9b66dfb";
  contents(32) <= x"68dc1462";
  contents(33) <= x"d7486900";
  contents(34) <= x"680ec0a4";
  contents(35) <= x"27a18dee";
  contents(36) <= x"4f3ffea2";
  contents(37) <= x"e887ad8c";
  contents(38) <= x"b58ce006";
  contents(39) <= x"7af4d6b6";
  contents(40) <= x"aace1e7c";
  contents(41) <= x"d3375fec";
  contents(42) <= x"ce78a399";
  contents(43) <= x"406b2a42";
  contents(44) <= x"20fe9e35";
  contents(45) <= x"d9f385b9";
  contents(46) <= x"ee39d7ab";
  contents(47) <= x"3b124e8b";
  contents(48) <= x"1dc9faf7";
  contents(49) <= x"4b6d1856";
  contents(50) <= x"26a36631";
  contents(51) <= x"eae397b2";
  contents(52) <= x"3a6efa74";
  contents(53) <= x"dd5b4332";
  contents(54) <= x"6841e7f7";
  contents(55) <= x"ca7820fb";
  contents(56) <= x"fb0af54e";
  contents(57) <= x"d8feb397";
  contents(58) <= x"454056ac";
  contents(59) <= x"ba489527";
  contents(60) <= x"55533a3a";
  contents(61) <= x"20838d87";
  contents(62) <= x"fe6ba9b7";
  contents(63) <= x"d096954b";
  contents(64) <= x"55a867bc";
  contents(65) <= x"a1159a58";
  contents(66) <= x"cca92963";
  contents(67) <= x"99e1db33";
  contents(68) <= x"a62a4a56";
  contents(69) <= x"3f3125f9";
  contents(70) <= x"5ef47e1c";
  contents(71) <= x"9029317c";
  contents(72) <= x"fdf8e802";
  contents(73) <= x"04272f70";
  contents(74) <= x"80bb155c";
  contents(75) <= x"05282ce3";
  contents(76) <= x"95c11548";
  contents(77) <= x"e4c66d22";
  contents(78) <= x"48c1133f";
  contents(79) <= x"c70f86dc";
  contents(80) <= x"07f9c9ee";
  contents(81) <= x"41041f0f";
  contents(82) <= x"404779a4";
  contents(83) <= x"5d886e17";
  contents(84) <= x"325f51eb";
  contents(85) <= x"d59bc0d1";
  contents(86) <= x"f2bcc18f";
  contents(87) <= x"41113564";
  contents(88) <= x"257b7834";
  contents(89) <= x"602a9c60";
  contents(90) <= x"dff8e8a3";
  contents(91) <= x"1f636c1b";
  contents(92) <= x"0e12b4c2";
  contents(93) <= x"02e1329e";
  contents(94) <= x"af664fd1";
  contents(95) <= x"cad18115";
  contents(96) <= x"6b2395e0";
  contents(97) <= x"333e92e1";
  contents(98) <= x"3b240b62";
  contents(99) <= x"eebeb922";
  contents(100) <= x"85b2a20e";
  contents(101) <= x"e6ba0d99";
  contents(102) <= x"de720c8c";
  contents(103) <= x"2da2f728";
  contents(104) <= x"d0127845";
  contents(105) <= x"95b794fd";
  contents(106) <= x"647d0862";
  contents(107) <= x"e7ccf5f0";
  contents(108) <= x"5449a36f";
  contents(109) <= x"877d48fa";
  contents(110) <= x"c39dfd27";
  contents(111) <= x"f33e8d1e";
  contents(112) <= x"0a476341";
  contents(113) <= x"992eff74";
  contents(114) <= x"3a6f6eab";
  contents(115) <= x"f4f8fd37";
  contents(116) <= x"a812dc60";
  contents(117) <= x"a1ebddf8";
  contents(118) <= x"991be14c";
  contents(119) <= x"db6e6b0d";
  contents(120) <= x"c67b5510";
  contents(121) <= x"6d672c37";
  contents(122) <= x"2765d43b";
  contents(123) <= x"dcd0e804";
  contents(124) <= x"f1290dc7";
  contents(125) <= x"cc00ffa3";
  contents(126) <= x"b5390f92";
  contents(127) <= x"690fed0b";
  contents(128) <= x"667b9ffb";
  contents(129) <= x"cedb7d9c";
  contents(130) <= x"a091cf0b";
  contents(131) <= x"d9155ea3";
  contents(132) <= x"bb132f88";
  contents(133) <= x"515bad24";
  contents(134) <= x"7b9479bf";
  contents(135) <= x"763bd6eb";
  contents(136) <= x"37392eb3";
  contents(137) <= x"cc115979";
  contents(138) <= x"8026e297";
  contents(139) <= x"f42e312d";
  contents(140) <= x"6842ada7";
  contents(141) <= x"c66a2b3b";
  contents(142) <= x"12754ccc";
  contents(143) <= x"782ef11c";
  contents(144) <= x"6a124237";
  contents(145) <= x"b79251e7";
  contents(146) <= x"06a1bbe6";
  contents(147) <= x"4bfb6350";
  contents(148) <= x"1a6b1018";
  contents(149) <= x"11caedfa";
  contents(150) <= x"3d25bdd8";
  contents(151) <= x"e2e1c3c9";
  contents(152) <= x"44421659";
  contents(153) <= x"0a121386";
  contents(154) <= x"d90cec6e";
  contents(155) <= x"d5abea2a";
  contents(156) <= x"64af674e";
  contents(157) <= x"da86a85f";
  contents(158) <= x"bebfe988";
  contents(159) <= x"64e4c3fe";
  contents(160) <= x"9dbc8057";
  contents(161) <= x"f0f7c086";
  contents(162) <= x"60787bf8";
  contents(163) <= x"6003604d";
  contents(164) <= x"d1fd8346";
  contents(165) <= x"f6381fb0";
  contents(166) <= x"7745ae04";
  contents(167) <= x"d736fccc";
  contents(168) <= x"83426b33";
  contents(169) <= x"f01eab71";
  contents(170) <= x"b0804187";
  contents(171) <= x"3c005e5f";
  contents(172) <= x"77a057be";
  contents(173) <= x"bde8ae24";
  contents(174) <= x"55464299";
  contents(175) <= x"bf582e61";
  contents(176) <= x"4e58f48f";
  contents(177) <= x"f2ddfda2";
  contents(178) <= x"f474ef38";
  contents(179) <= x"8789bdc2";
  contents(180) <= x"5366f9c3";
  contents(181) <= x"c8b38e74";
  contents(182) <= x"b475f255";
  contents(183) <= x"46fcd9b9";
  contents(184) <= x"7aeb2661";
  contents(185) <= x"8b1ddf84";
  contents(186) <= x"846a0e79";
  contents(187) <= x"915f95e2";
  contents(188) <= x"466e598e";
  contents(189) <= x"20b45770";
  contents(190) <= x"8cd55591";
  contents(191) <= x"c902de4c";
  contents(192) <= x"b90bace1";
  contents(193) <= x"bb8205d0";
  contents(194) <= x"11a86248";
  contents(195) <= x"7574a99e";
  contents(196) <= x"b77f19b6";
  contents(197) <= x"e0a9dc09";
  contents(198) <= x"662d09a1";
  contents(199) <= x"c4324633";
  contents(200) <= x"e85a1f02";
  contents(201) <= x"09f0be8c";
  contents(202) <= x"4a99a025";
  contents(203) <= x"1d6efe10";
  contents(204) <= x"1ab93d1d";
  contents(205) <= x"0ba5a4df";
  contents(206) <= x"a186f20f";
  contents(207) <= x"2868f169";
  contents(208) <= x"dcb7da83";
  contents(209) <= x"573906fe";
  contents(210) <= x"a1e2ce9b";
  contents(211) <= x"4fcd7f52";
  contents(212) <= x"50115e01";
  contents(213) <= x"a70683fa";
  contents(214) <= x"a002b5c4";
  contents(215) <= x"0de6d027";
  contents(216) <= x"9af88c27";
  contents(217) <= x"773f8641";
  contents(218) <= x"c3604c06";
  contents(219) <= x"61a806b5";
  contents(220) <= x"f0177a28";
  contents(221) <= x"c0f586e0";
  contents(222) <= x"006058aa";
  contents(223) <= x"30dc7d62";
  contents(224) <= x"11e69ed7";
  contents(225) <= x"2338ea63";
  contents(226) <= x"53c2dd94";
  contents(227) <= x"c2c21634";
  contents(228) <= x"bbcbee56";
  contents(229) <= x"90bcb6de";
  contents(230) <= x"ebfc7da1";
  contents(231) <= x"ce591d76";
  contents(232) <= x"6f05e409";
  contents(233) <= x"4b7c0188";
  contents(234) <= x"39720a3d";
  contents(235) <= x"7c927c24";
  contents(236) <= x"86e3725f";
  contents(237) <= x"724d9db9";
  contents(238) <= x"1ac15bb4";
  contents(239) <= x"d39eb8fc";
  contents(240) <= x"ed545578";
  contents(241) <= x"08fca5b5";
  contents(242) <= x"d83d7cd3";
  contents(243) <= x"4dad0fc4";
  contents(244) <= x"1e50ef5e";
  contents(245) <= x"b161e6f8";
  contents(246) <= x"a28514d9";
  contents(247) <= x"6c51133c";
  contents(248) <= x"6fd5c7e7";
  contents(249) <= x"56e14ec4";
  contents(250) <= x"362abfce";
  contents(251) <= x"ddc6c837";
  contents(252) <= x"d79a3234";
  contents(253) <= x"92638212";
  contents(254) <= x"670efa8e";
  contents(255) <= x"406000e0";
  

  with address select data 
    <= contents(  0) when x"00",
       contents(  1) when x"01",
       contents(  2) when x"02",
       contents(  3) when x"03",
       contents(  4) when x"04",
       contents(  5) when x"05",
       contents(  6) when x"06",
       contents(  7) when x"07",
       contents(  8) when x"08",
       contents(  9) when x"09",
       contents( 10) when x"0a",
       contents( 11) when x"0b",
       contents( 12) when x"0c",
       contents( 13) when x"0d",
       contents( 14) when x"0e",
       contents( 15) when x"0f",
       contents( 16) when x"10",
       contents( 17) when x"11",
       contents( 18) when x"12",
       contents( 19) when x"13",
       contents( 20) when x"14",
       contents( 21) when x"15",
       contents( 22) when x"16",
       contents( 23) when x"17",
       contents( 24) when x"18",
       contents( 25) when x"19",
       contents( 26) when x"1a",
       contents( 27) when x"1b",
       contents( 28) when x"1c",
       contents( 29) when x"1d",
       contents( 30) when x"1e",
       contents( 31) when x"1f",
       contents( 32) when x"20",
       contents( 33) when x"21",
       contents( 34) when x"22",
       contents( 35) when x"23",
       contents( 36) when x"24",
       contents( 37) when x"25",
       contents( 38) when x"26",
       contents( 39) when x"27",
       contents( 40) when x"28",
       contents( 41) when x"29",
       contents( 42) when x"2a",
       contents( 43) when x"2b",
       contents( 44) when x"2c",
       contents( 45) when x"2d",
       contents( 46) when x"2e",
       contents( 47) when x"2f",
       contents( 48) when x"30",
       contents( 49) when x"31",
       contents( 50) when x"32",
       contents( 51) when x"33",
       contents( 52) when x"34",
       contents( 53) when x"35",
       contents( 54) when x"36",
       contents( 55) when x"37",
       contents( 56) when x"38",
       contents( 57) when x"39",
       contents( 58) when x"3a",
       contents( 59) when x"3b",
       contents( 60) when x"3c",
       contents( 61) when x"3d",
       contents( 62) when x"3e",
       contents( 63) when x"3f",
       contents( 64) when x"40",
       contents( 65) when x"41",
       contents( 66) when x"42",
       contents( 67) when x"43",
       contents( 68) when x"44",
       contents( 69) when x"45",
       contents( 70) when x"46",
       contents( 71) when x"47",
       contents( 72) when x"48",
       contents( 73) when x"49",
       contents( 74) when x"4a",
       contents( 75) when x"4b",
       contents( 76) when x"4c",
       contents( 77) when x"4d",
       contents( 78) when x"4e",
       contents( 79) when x"4f",
       contents( 80) when x"50",
       contents( 81) when x"51",
       contents( 82) when x"52",
       contents( 83) when x"53",
       contents( 84) when x"54",
       contents( 85) when x"55",
       contents( 86) when x"56",
       contents( 87) when x"57",
       contents( 88) when x"58",
       contents( 89) when x"59",
       contents( 90) when x"5a",
       contents( 91) when x"5b",
       contents( 92) when x"5c",
       contents( 93) when x"5d",
       contents( 94) when x"5e",
       contents( 95) when x"5f",
       contents( 96) when x"60",
       contents( 97) when x"61",
       contents( 98) when x"62",
       contents( 99) when x"63",
       contents(100) when x"64",
       contents(101) when x"65",
       contents(102) when x"66",
       contents(103) when x"67",
       contents(104) when x"68",
       contents(105) when x"69",
       contents(106) when x"6a",
       contents(107) when x"6b",
       contents(108) when x"6c",
       contents(109) when x"6d",
       contents(110) when x"6e",
       contents(111) when x"6f",
       contents(112) when x"70",
       contents(113) when x"71",
       contents(114) when x"72",
       contents(115) when x"73",
       contents(116) when x"74",
       contents(117) when x"75",
       contents(118) when x"76",
       contents(119) when x"77",
       contents(120) when x"78",
       contents(121) when x"79",
       contents(122) when x"7a",
       contents(123) when x"7b",
       contents(124) when x"7c",
       contents(125) when x"7d",
       contents(126) when x"7e",
       contents(127) when x"7f",
       contents(128) when x"80",
       contents(129) when x"81",
       contents(130) when x"82",
       contents(131) when x"83",
       contents(132) when x"84",
       contents(133) when x"85",
       contents(134) when x"86",
       contents(135) when x"87",
       contents(136) when x"88",
       contents(137) when x"89",
       contents(138) when x"8a",
       contents(139) when x"8b",
       contents(140) when x"8c",
       contents(141) when x"8d",
       contents(142) when x"8e",
       contents(143) when x"8f",
       contents(144) when x"90",
       contents(145) when x"91",
       contents(146) when x"92",
       contents(147) when x"93",
       contents(148) when x"94",
       contents(149) when x"95",
       contents(150) when x"96",
       contents(151) when x"97",
       contents(152) when x"98",
       contents(153) when x"99",
       contents(154) when x"9a",
       contents(155) when x"9b",
       contents(156) when x"9c",
       contents(157) when x"9d",
       contents(158) when x"9e",
       contents(159) when x"9f",
       contents(160) when x"a0",
       contents(161) when x"a1",
       contents(162) when x"a2",
       contents(163) when x"a3",
       contents(164) when x"a4",
       contents(165) when x"a5",
       contents(166) when x"a6",
       contents(167) when x"a7",
       contents(168) when x"a8",
       contents(169) when x"a9",
       contents(170) when x"aa",
       contents(171) when x"ab",
       contents(172) when x"ac",
       contents(173) when x"ad",
       contents(174) when x"ae",
       contents(175) when x"af",
       contents(176) when x"b0",
       contents(177) when x"b1",
       contents(178) when x"b2",
       contents(179) when x"b3",
       contents(180) when x"b4",
       contents(181) when x"b5",
       contents(182) when x"b6",
       contents(183) when x"b7",
       contents(184) when x"b8",
       contents(185) when x"b9",
       contents(186) when x"ba",
       contents(187) when x"bb",
       contents(188) when x"bc",
       contents(189) when x"bd",
       contents(190) when x"be",
       contents(191) when x"bf",
       contents(192) when x"c0",
       contents(193) when x"c1",
       contents(194) when x"c2",
       contents(195) when x"c3",
       contents(196) when x"c4",
       contents(197) when x"c5",
       contents(198) when x"c6",
       contents(199) when x"c7",
       contents(200) when x"c8",
       contents(201) when x"c9",
       contents(202) when x"ca",
       contents(203) when x"cb",
       contents(204) when x"cc",
       contents(205) when x"cd",
       contents(206) when x"ce",
       contents(207) when x"cf",
       contents(208) when x"d0",
       contents(209) when x"d1",
       contents(210) when x"d2",
       contents(211) when x"d3",
       contents(212) when x"d4",
       contents(213) when x"d5",
       contents(214) when x"d6",
       contents(215) when x"d7",
       contents(216) when x"d8",
       contents(217) when x"d9",
       contents(218) when x"da",
       contents(219) when x"db",
       contents(220) when x"dc",
       contents(221) when x"dd",
       contents(222) when x"de",
       contents(223) when x"df",
       contents(224) when x"e0",
       contents(225) when x"e1",
       contents(226) when x"e2",
       contents(227) when x"e3",
       contents(228) when x"e4",
       contents(229) when x"e5",
       contents(230) when x"e6",
       contents(231) when x"e7",
       contents(232) when x"e8",
       contents(233) when x"e9",
       contents(234) when x"ea",
       contents(235) when x"eb",
       contents(236) when x"ec",
       contents(237) when x"ed",
       contents(238) when x"ee",
       contents(239) when x"ef",
       contents(240) when x"f0",
       contents(241) when x"f1",
       contents(242) when x"f2",
       contents(243) when x"f3",
       contents(244) when x"f4",
       contents(245) when x"f5",
       contents(246) when x"f6",
       contents(247) when x"f7",
       contents(248) when x"f8",
       contents(249) when x"f9",
       contents(250) when x"fa",
       contents(251) when x"fb",
       contents(252) when x"fc",
       contents(253) when x"fd",
       contents(254) when x"fe",
       contents(255) when x"ff",
       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" when others;
   
end;
