-- "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 sbox0_init is
port (
  address : in     std_logic_vector(7 downto 0);
  data    : inout std_logic_vector(31 downto 0)
);
end sbox0_init;

architecture fishy of sbox0_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"d1310ba6";
  contents(1 ) <= x"98dfb5ac";
  contents(2 ) <= x"2ffd72db";
  contents(3 ) <= x"d01adfb7";
  contents(4 ) <= x"b8e1afed";
  contents(5 ) <= x"6a267e96";
  contents(6 ) <= x"ba7c9045";
  contents(7 ) <= x"f12c7f99";
  contents(8 ) <= x"24a19947";
  contents(9 ) <= x"b3916cf7";
  contents(10) <= x"0801f2e2";
  contents(11) <= x"858efc16";
  contents(12) <= x"636920d8";
  contents(13) <= x"71574e69";
  contents(14) <= x"a458fea3";
  contents(15) <= x"f4933d7e";
  contents(16) <= x"0d95748f";
  contents(17) <= x"728eb658";
  contents(18) <= x"718bcd58";
  contents(19) <= x"82154aee";
  contents(20) <= x"7b54a41d";
  contents(21) <= x"c25a59b5";
  contents(22) <= x"9c30d539";
  contents(23) <= x"2af26013";
  contents(24) <= x"c5d1b023";
  contents(25) <= x"286085f0";
  contents(26) <= x"ca417918";
  contents(27) <= x"b8db38ef";
  contents(28) <= x"8e79dcb0";
  contents(29) <= x"603a180e";
  contents(30) <= x"6c9e0e8b";
  contents(31) <= x"b01e8a3e";
  contents(32) <= x"d71577c1";
  contents(33) <= x"bd314b27";
  contents(34) <= x"78af2fda";
  contents(35) <= x"55605c60";
  contents(36) <= x"e65525f3";
  contents(37) <= x"aa55ab94";
  contents(38) <= x"57489862";
  contents(39) <= x"63e81440";
  contents(40) <= x"55ca396a";
  contents(41) <= x"2aab10b6";
  contents(42) <= x"b4cc5c34";
  contents(43) <= x"1141e8ce";
  contents(44) <= x"a15486af";
  contents(45) <= x"7c72e993";
  contents(46) <= x"b3ee1411";
  contents(47) <= x"636fbc2a";
  contents(48) <= x"2ba9c55d";
  contents(49) <= x"741831f6";
  contents(50) <= x"ce5c3e16";
  contents(51) <= x"9b87931e";
  contents(52) <= x"afd6ba33";
  contents(53) <= x"6c24cf5c";
  contents(54) <= x"7a325381";
  contents(55) <= x"28958677";
  contents(56) <= x"3b8f4898";
  contents(57) <= x"6b4bb9af";
  contents(58) <= x"c4bfe81b";
  contents(59) <= x"66282193";
  contents(60) <= x"61d809cc";
  contents(61) <= x"fb21a991";
  contents(62) <= x"487cac60";
  contents(63) <= x"5dec8032";
  contents(64) <= x"ef845d5d";
  contents(65) <= x"e98575b1";
  contents(66) <= x"dc262302";
  contents(67) <= x"eb651b88";
  contents(68) <= x"23893e81";
  contents(69) <= x"d396acc5";
  contents(70) <= x"0f6d6ff3";
  contents(71) <= x"83f44239";
  contents(72) <= x"2e0b4482";
  contents(73) <= x"a4842004";
  contents(74) <= x"69c8f04a";
  contents(75) <= x"9e1f9b5e";
  contents(76) <= x"21c66842";
  contents(77) <= x"f6e96c9a";
  contents(78) <= x"670c9c61";
  contents(79) <= x"abd388f0";
  contents(80) <= x"6a51a0d2";
  contents(81) <= x"d8542f68";
  contents(82) <= x"960fa728";
  contents(83) <= x"ab5133a3";
  contents(84) <= x"6eef0b6c";
  contents(85) <= x"137a3be4";
  contents(86) <= x"ba3bf050";
  contents(87) <= x"7efb2a98";
  contents(88) <= x"a1f1651d";
  contents(89) <= x"39af0176";
  contents(90) <= x"66ca593e";
  contents(91) <= x"82430e88";
  contents(92) <= x"8cee8619";
  contents(93) <= x"456f9fb4";
  contents(94) <= x"7d84a5c3";
  contents(95) <= x"3b8b5ebe";
  contents(96) <= x"e06f75d8";
  contents(97) <= x"85c12073";
  contents(98) <= x"401a449f";
  contents(99) <= x"56c16aa6";
  contents(100) <= x"4ed3aa62";
  contents(101) <= x"363f7706";
  contents(102) <= x"1bfedf72";
  contents(103) <= x"429b023d";
  contents(104) <= x"37d0d724";
  contents(105) <= x"d00a1248";
  contents(106) <= x"db0fead3";
  contents(107) <= x"49f1c09b";
  contents(108) <= x"075372c9";
  contents(109) <= x"80991b7b";
  contents(110) <= x"25d479d8";
  contents(111) <= x"f6e8def7";
  contents(112) <= x"e3fe501a";
  contents(113) <= x"b6794c3b";
  contents(114) <= x"976ce0bd";
  contents(115) <= x"04c006ba";
  contents(116) <= x"c1a94fb6";
  contents(117) <= x"409f60c4";
  contents(118) <= x"5e5c9ec2";
  contents(119) <= x"196a2463";
  contents(120) <= x"68fb6faf";
  contents(121) <= x"3e6c53b5";
  contents(122) <= x"1339b2eb";
  contents(123) <= x"3b52ec6f";
  contents(124) <= x"6dfc511f";
  contents(125) <= x"9b30952c";
  contents(126) <= x"cc814544";
  contents(127) <= x"af5ebd09";
  contents(128) <= x"bee3d004";
  contents(129) <= x"de334afd";
  contents(130) <= x"660f2807";
  contents(131) <= x"192e4bb3";
  contents(132) <= x"c0cba857";
  contents(133) <= x"45c8740f";
  contents(134) <= x"d20b5f39";
  contents(135) <= x"b9d3fbdb";
  contents(136) <= x"5579c0bd";
  contents(137) <= x"1a60320a";
  contents(138) <= x"d6a100c6";
  contents(139) <= x"402c7279";
  contents(140) <= x"679f25fe";
  contents(141) <= x"fb1fa3cc";
  contents(142) <= x"8ea5e9f8";
  contents(143) <= x"db3222f8";
  contents(144) <= x"3c7516df";
  contents(145) <= x"fd616b15";
  contents(146) <= x"2f501ec8";
  contents(147) <= x"ad0552ab";
  contents(148) <= x"323db5fa";
  contents(149) <= x"fd238760";
  contents(150) <= x"53317b48";
  contents(151) <= x"3e00df82";
  contents(152) <= x"9e5c57bb";
  contents(153) <= x"ca6f8ca0";
  contents(154) <= x"1a87562e";
  contents(155) <= x"df1769db";
  contents(156) <= x"d542a8f6";
  contents(157) <= x"287effc3";
  contents(158) <= x"ac6732c6";
  contents(159) <= x"8c4f5573";
  contents(160) <= x"695b27b0";
  contents(161) <= x"bbca58c8";
  contents(162) <= x"e1ffa35d";
  contents(163) <= x"b8f011a0";
  contents(164) <= x"10fa3d98";
  contents(165) <= x"fd2183b8";
  contents(166) <= x"4afcb56c";
  contents(167) <= x"2dd1d35b";
  contents(168) <= x"9a53e479";
  contents(169) <= x"b6f84565";
  contents(170) <= x"d28e49bc";
  contents(171) <= x"4bfb9790";
  contents(172) <= x"e1ddf2da";
  contents(173) <= x"a4cb7e33";
  contents(174) <= x"62fb1341";
  contents(175) <= x"cee4c6e8";
  contents(176) <= x"ef20cada";
  contents(177) <= x"36774c01";
  contents(178) <= x"d07e9efe";
  contents(179) <= x"2bf11fb4";
  contents(180) <= x"95dbda4d";
  contents(181) <= x"ae909198";
  contents(182) <= x"eaad8e71";
  contents(183) <= x"6b93d5a0";
  contents(184) <= x"d08ed1d0";
  contents(185) <= x"afc725e0";
  contents(186) <= x"8e3c5b2f";
  contents(187) <= x"8e7594b7";
  contents(188) <= x"8ff6e2fb";
  contents(189) <= x"f2122b64";
  contents(190) <= x"8888b812";
  contents(191) <= x"900df01c";
  contents(192) <= x"4fad5ea0";
  contents(193) <= x"688fc31c";
  contents(194) <= x"d1cff191";
  contents(195) <= x"b3a8c1ad";
  contents(196) <= x"2f2f2218";
  contents(197) <= x"be0e1777";
  contents(198) <= x"ea752dfe";
  contents(199) <= x"8b021fa1";
  contents(200) <= x"e5a0cc0f";
  contents(201) <= x"b56f74e8";
  contents(202) <= x"18acf3d6";
  contents(203) <= x"ce89e299";
  contents(204) <= x"b4a84fe0";
  contents(205) <= x"fd13e0b7";
  contents(206) <= x"7cc43b81";
  contents(207) <= x"d2ada8d9";
  contents(208) <= x"165fa266";
  contents(209) <= x"80957705";
  contents(210) <= x"93cc7314";
  contents(211) <= x"211a1477";
  contents(212) <= x"e6ad2065";
  contents(213) <= x"77b5fa86";
  contents(214) <= x"c75442f5";
  contents(215) <= x"fb9d35cf";
  contents(216) <= x"ebcdaf0c";
  contents(217) <= x"7b3e89a0";
  contents(218) <= x"d6411bd3";
  contents(219) <= x"ae1e7e49";
  contents(220) <= x"00250e2d";
  contents(221) <= x"2071b35e";
  contents(222) <= x"226800bb";
  contents(223) <= x"57b8e0af";
  contents(224) <= x"2464369b";
  contents(225) <= x"f009b91e";
  contents(226) <= x"5563911d";
  contents(227) <= x"59dfa6aa";
  contents(228) <= x"78c14389";
  contents(229) <= x"d95a537f";
  contents(230) <= x"207d5ba2";
  contents(231) <= x"02e5b9c5";
  contents(232) <= x"83260376";
  contents(233) <= x"6295cfa9";
  contents(234) <= x"11c81968";
  contents(235) <= x"4e734a41";
  contents(236) <= x"b3472dca";
  contents(237) <= x"7b14a94a";
  contents(238) <= x"1b510052";
  contents(239) <= x"9a532915";
  contents(240) <= x"d60f573f";
  contents(241) <= x"bc9bc6e4";
  contents(242) <= x"2b60a476";
  contents(243) <= x"81e67400";
  contents(244) <= x"08ba6fb5";
  contents(245) <= x"571be91f";
  contents(246) <= x"f296ec6b";
  contents(247) <= x"2a0dd915";
  contents(248) <= x"b6636521";
  contents(249) <= x"e7b9f9b6";
  contents(250) <= x"ff34052e";
  contents(251) <= x"c5855664";
  contents(252) <= x"53b02d5d";
  contents(253) <= x"a99f8fa1";
  contents(254) <= x"08ba4799";
  contents(255) <= x"6e85076a";
  
  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;
