twofish.vhd

来自「VHDL implementation of the twofish ciphe」· VHDL 代码 · 共 2,663 行 · 第 1/5 页

VHD
2,663
字号
library ieee;use ieee.std_logic_1164.all;entity mulc6 isport	(		in_mulc6	: in std_logic_vector(7 downto 0);		out_mulc6	: out std_logic_vector(7 downto 0)		);end mulc6;architecture mulc6_arch of mulc6 isbegin	out_mulc6(0) <= in_mulc6(6) xor in_mulc6(5) xor in_mulc6(4) xor in_mulc6(3) xor in_mulc6(2) xor in_mulc6(1);	out_mulc6(1) <= in_mulc6(7) xor in_mulc6(6) xor in_mulc6(5) xor in_mulc6(4) xor in_mulc6(3) xor in_mulc6(2) xor in_mulc6(0);	out_mulc6(2) <= in_mulc6(7) xor in_mulc6(2) xor in_mulc6(0);	out_mulc6(3) <= in_mulc6(6) xor in_mulc6(5) xor in_mulc6(4) xor in_mulc6(2);	out_mulc6(4) <= in_mulc6(7) xor in_mulc6(6) xor in_mulc6(5) xor in_mulc6(3);	out_mulc6(5) <= in_mulc6(7) xor in_mulc6(6) xor in_mulc6(4);	out_mulc6(6) <= in_mulc6(7) xor in_mulc6(6) xor in_mulc6(4) xor in_mulc6(3) xor in_mulc6(2) xor in_mulc6(1) xor in_mulc6(0);	out_mulc6(7) <= in_mulc6(7) xor in_mulc6(5) xor in_mulc6(4) xor in_mulc6(3) xor in_mulc6(2) xor in_mulc6(1) xor in_mulc6(0);end mulc6_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by 68	--						library ieee;use ieee.std_logic_1164.all;entity mul68 isport	(		in_mul68	: in std_logic_vector(7 downto 0);		out_mul68	: out std_logic_vector(7 downto 0)		);end mul68;architecture mul68_arch of mul68 isbegin	out_mul68(0) <= in_mul68(7) xor in_mul68(6) xor in_mul68(4) xor in_mul68(3) xor in_mul68(2);	out_mul68(1) <= in_mul68(7) xor in_mul68(5) xor in_mul68(4) xor in_mul68(3);	out_mul68(2) <= in_mul68(7) xor in_mul68(5) xor in_mul68(3) xor in_mul68(2);	out_mul68(3) <= in_mul68(7) xor in_mul68(2) xor in_mul68(0);	out_mul68(4) <= in_mul68(3) xor in_mul68(1);	out_mul68(5) <= in_mul68(4) xor in_mul68(2) xor in_mul68(0);	out_mul68(6) <= in_mul68(7) xor in_mul68(6) xor in_mul68(5) xor in_mul68(4) xor in_mul68(2) xor in_mul68(1) xor in_mul68(0);	out_mul68(7) <= in_mul68(7) xor in_mul68(6) xor in_mul68(5) xor in_mul68(3) xor in_mul68(2) xor in_mul68(1);end mul68_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by e5	--						library ieee;use ieee.std_logic_1164.all;entity mule5 isport	(		in_mule5	: in std_logic_vector(7 downto 0);		out_mule5	: out std_logic_vector(7 downto 0)		);end mule5;architecture mule5_arch of mule5 isbegin	out_mule5(0) <= in_mule5(6) xor in_mule5(4) xor in_mule5(2) xor in_mule5(1) xor in_mule5(0);	out_mule5(1) <= in_mule5(7) xor in_mule5(5) xor in_mule5(3) xor in_mule5(2) xor in_mule5(1);	out_mule5(2) <= in_mule5(3) xor in_mule5(1) xor in_mule5(0);	out_mule5(3) <= in_mule5(6);	out_mule5(4) <= in_mule5(7);	out_mule5(5) <= in_mule5(0);	out_mule5(6) <= in_mule5(6) xor in_mule5(4) xor in_mule5(2) xor in_mule5(0);	out_mule5(7) <= in_mule5(7) xor in_mule5(5) xor in_mule5(3) xor in_mule5(1) xor in_mule5(0);end mule5_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by 02	--						library ieee;use ieee.std_logic_1164.all;entity mul02 isport	(		in_mul02	: in std_logic_vector(7 downto 0);		out_mul02	: out std_logic_vector(7 downto 0)		);end mul02;architecture mul02_arch of mul02 isbegin	out_mul02(0) <= in_mul02(7);	out_mul02(1) <= in_mul02(0);	out_mul02(2) <= in_mul02(7) xor in_mul02(1);	out_mul02(3) <= in_mul02(7) xor in_mul02(2);	out_mul02(4) <= in_mul02(3);	out_mul02(5) <= in_mul02(4);	out_mul02(6) <= in_mul02(7) xor in_mul02(5);	out_mul02(7) <= in_mul02(6);end mul02_arch;			  -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by a1	--						library ieee;use ieee.std_logic_1164.all;entity mula1 isport	(		in_mula1	: in std_logic_vector(7 downto 0);		out_mula1	: out std_logic_vector(7 downto 0)		);end mula1;architecture mula1_arch of mula1 isbegin	out_mula1(0) <= in_mula1(7) xor in_mula1(6) xor in_mula1(1) xor in_mula1(0);	out_mula1(1) <= in_mula1(7) xor in_mula1(2) xor in_mula1(1);	out_mula1(2) <= in_mula1(7) xor in_mula1(6) xor in_mula1(3) xor in_mula1(2) xor in_mula1(1);	out_mula1(3) <= in_mula1(6) xor in_mula1(4) xor in_mula1(3) xor in_mula1(2) xor in_mula1(1);	out_mula1(4) <= in_mula1(7) xor in_mula1(5) xor in_mula1(4) xor in_mula1(3) xor in_mula1(2);	out_mula1(5) <= in_mula1(6) xor in_mula1(5) xor in_mula1(4) xor in_mula1(3) xor in_mula1(0);	out_mula1(6) <= in_mula1(5) xor in_mula1(4);	out_mula1(7) <= in_mula1(6) xor in_mula1(5) xor in_mula1(0);end mula1_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by fc	--						library ieee;use ieee.std_logic_1164.all;entity mulfc isport	(		in_mulfc	: in std_logic_vector(7 downto 0);		out_mulfc	: out std_logic_vector(7 downto 0)		);end mulfc;architecture mulfc_arch of mulfc isbegin	out_mulfc(0) <= in_mulfc(7) xor in_mulfc(5) xor in_mulfc(2) xor in_mulfc(1);	out_mulfc(1) <= in_mulfc(6) xor in_mulfc(3) xor in_mulfc(2);	out_mulfc(2) <= in_mulfc(5) xor in_mulfc(4) xor in_mulfc(3) xor in_mulfc(2) xor in_mulfc(1) xor in_mulfc(0);	out_mulfc(3) <= in_mulfc(7) xor in_mulfc(6) xor in_mulfc(4) xor in_mulfc(3) xor in_mulfc(0);	out_mulfc(4) <= in_mulfc(7) xor in_mulfc(5) xor in_mulfc(4) xor in_mulfc(1) xor in_mulfc(0);	out_mulfc(5) <= in_mulfc(6) xor in_mulfc(5) xor in_mulfc(2) xor in_mulfc(1) xor in_mulfc(0);	out_mulfc(6) <= in_mulfc(6) xor in_mulfc(5) xor in_mulfc(3) xor in_mulfc(0);	out_mulfc(7) <= in_mulfc(7) xor in_mulfc(6) xor in_mulfc(4) xor in_mulfc(1) xor in_mulfc(0);end mulfc_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by c1	--						library ieee;use ieee.std_logic_1164.all;entity mulc1 isport	(		in_mulc1	: in std_logic_vector(7 downto 0);		out_mulc1	: out std_logic_vector(7 downto 0)		);end mulc1;architecture mulc1_arch of mulc1 isbegin	out_mulc1(0) <= in_mulc1(7) xor in_mulc1(5) xor in_mulc1(4) xor in_mulc1(3) xor in_mulc1(2) xor in_mulc1(1) xor in_mulc1(0);	out_mulc1(1) <= in_mulc1(6) xor in_mulc1(5) xor in_mulc1(4) xor in_mulc1(3) xor in_mulc1(2) xor in_mulc1(1);	out_mulc1(2) <= in_mulc1(6) xor in_mulc1(1);	out_mulc1(3) <= in_mulc1(5) xor in_mulc1(4) xor in_mulc1(3) xor in_mulc1(1);	out_mulc1(4) <= in_mulc1(6) xor in_mulc1(5) xor in_mulc1(4) xor in_mulc1(2);	out_mulc1(5) <= in_mulc1(7) xor in_mulc1(6) xor in_mulc1(5) xor in_mulc1(3);	out_mulc1(6) <= in_mulc1(6) xor in_mulc1(5) xor in_mulc1(3) xor in_mulc1(2) xor in_mulc1(1) xor in_mulc1(0);	out_mulc1(7) <= in_mulc1(7) xor in_mulc1(6) xor in_mulc1(4) xor in_mulc1(3) xor in_mulc1(2) xor in_mulc1(1) xor in_mulc1(0);end mulc1_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by 47	--						library ieee;use ieee.std_logic_1164.all;entity mul47 isport	(		in_mul47	: in std_logic_vector(7 downto 0);		out_mul47	: out std_logic_vector(7 downto 0)		);end mul47;architecture mul47_arch of mul47 isbegin	out_mul47(0) <= in_mul47(4) xor in_mul47(2) xor in_mul47(0);	out_mul47(1) <= in_mul47(5) xor in_mul47(3) xor in_mul47(1) xor in_mul47(0);	out_mul47(2) <= in_mul47(6) xor in_mul47(1) xor in_mul47(0);	out_mul47(3) <= in_mul47(7) xor in_mul47(4) xor in_mul47(1);	out_mul47(4) <= in_mul47(5) xor in_mul47(2);	out_mul47(5) <= in_mul47(6) xor in_mul47(3);	out_mul47(6) <= in_mul47(7) xor in_mul47(2) xor in_mul47(0);	out_mul47(7) <= in_mul47(3) xor in_mul47(1);end mul47_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by ae	--						library ieee;use ieee.std_logic_1164.all;entity mulae isport	(		in_mulae	: in std_logic_vector(7 downto 0);		out_mulae	: out std_logic_vector(7 downto 0)		);end mulae;architecture mulae_arch of mulae isbegin	out_mulae(0) <= in_mulae(7) xor in_mulae(5) xor in_mulae(1);	out_mulae(1) <= in_mulae(6) xor in_mulae(2) xor in_mulae(0);	out_mulae(2) <= in_mulae(5) xor in_mulae(3) xor in_mulae(0);	out_mulae(3) <= in_mulae(7) xor in_mulae(6) xor in_mulae(5) xor in_mulae(4) xor in_mulae(0);	out_mulae(4) <= in_mulae(7) xor in_mulae(6) xor in_mulae(5) xor in_mulae(1);	out_mulae(5) <= in_mulae(7) xor in_mulae(6) xor in_mulae(2) xor in_mulae(0);	out_mulae(6) <= in_mulae(5) xor in_mulae(3);	out_mulae(7) <= in_mulae(6) xor in_mulae(4) xor in_mulae(0);end mulae_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by 3d	--						library ieee;use ieee.std_logic_1164.all;entity mul3d isport	(		in_mul3d	: in std_logic_vector(7 downto 0);		out_mul3d	: out std_logic_vector(7 downto 0)		);end mul3d;architecture mul3d_arch of mul3d isbegin	out_mul3d(0) <= in_mul3d(4) xor in_mul3d(3) xor in_mul3d(0);	out_mul3d(1) <= in_mul3d(5) xor in_mul3d(4) xor in_mul3d(1);	out_mul3d(2) <= in_mul3d(6) xor in_mul3d(5) xor in_mul3d(4) xor in_mul3d(3) xor in_mul3d(2) xor in_mul3d(0);	out_mul3d(3) <= in_mul3d(7) xor in_mul3d(6) xor in_mul3d(5) xor in_mul3d(1) xor in_mul3d(0);	out_mul3d(4) <= in_mul3d(7) xor in_mul3d(6) xor in_mul3d(2) xor in_mul3d(1) xor in_mul3d(0);	out_mul3d(5) <= in_mul3d(7) xor in_mul3d(3) xor in_mul3d(2) xor in_mul3d(1) xor in_mul3d(0);	out_mul3d(6) <= in_mul3d(2) xor in_mul3d(1);	out_mul3d(7) <= in_mul3d(3) xor in_mul3d(2);end mul3d_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by 19	--						library ieee;use ieee.std_logic_1164.all;entity mul19 isport	(		in_mul19	: in std_logic_vector(7 downto 0);		out_mul19	: out std_logic_vector(7 downto 0)		);end mul19;architecture mul19_arch of mul19 isbegin	out_mul19(0) <= in_mul19(7) xor in_mul19(6) xor in_mul19(5) xor in_mul19(4) xor in_mul19(0);	out_mul19(1) <= in_mul19(7) xor in_mul19(6) xor in_mul19(5) xor in_mul19(1);	out_mul19(2) <= in_mul19(5) xor in_mul19(4) xor in_mul19(2);	out_mul19(3) <= in_mul19(7) xor in_mul19(4) xor in_mul19(3) xor in_mul19(0);	out_mul19(4) <= in_mul19(5) xor in_mul19(4) xor in_mul19(1) xor in_mul19(0);	out_mul19(5) <= in_mul19(6) xor in_mul19(5) xor in_mul19(2) xor in_mul19(1);	out_mul19(6) <= in_mul19(5) xor in_mul19(4) xor in_mul19(3) xor in_mul19(2);	out_mul19(7) <= in_mul19(6) xor in_mul19(5) xor in_mul19(4) xor in_mul19(3);end mul19_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- 						--	multiplier by 03	--						library ieee;use ieee.std_logic_1164.all;entity mul03 isport	(		in_mul03	: in std_logic_vector(7 downto 0);		out_mul03	: out std_logic_vector(7 downto 0)		);end mul03;architecture mul03_arch of mul03 isbegin	out_mul03(0) <= in_mul03(7) xor in_mul03(0);	out_mul03(1) <= in_mul03(1) xor in_mul03(0);	out_mul03(2) <= in_mul03(7) xor in_mul03(2) xor in_mul03(1);	out_mul03(3) <= in_mul03(7) xor in_mul03(3) xor in_mul03(2);	out_mul03(4) <= in_mul03(4) xor in_mul03(3);	out_mul03(5) <= in_mul03(5) xor in_mul03(4);	out_mul03(6) <= in_mul03(7) xor in_mul03(6) xor in_mul03(5);	out_mul03(7) <= in_mul03(7) xor in_mul03(6);end mul03_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ------ twofish data input is the component-- that transforms the data input to the-- first round to the wanted form as is -- described in the twofish prototype--library ieee;use ieee.std_logic_1164.all;entity twofish_data_input isport	(		in_tdi	: in std_logic_vector(127 downto 0);		out_tdi	: out std_logic_vector(127 downto 0)		);end twofish_data_input;architecture twofish_data_input_arch of twofish_data_input is		-- we declare internal signals							 	signal	byte0, byte1, byte2, byte3,			byte4, byte5, byte6,			byte7, byte8, byte9,			byte10,	byte11, byte12,			byte13,	byte14,	byte15	: std_logic_vector(7 downto 0);	signal	P0, P1, P2, P3			: std_logic_vector(31 downto 0);begin		-- we assign the input signal to the respective	-- bytes as is described in the prototype	byte15 <= in_tdi(7 downto 0);	byte14 <= in_tdi(15 downto 8);	byte13 <= in_tdi(23 downto 16);	byte12 <= in_tdi(31 downto 24);	byte11 <= in_tdi(39 downto 32);	byte10 <= in_tdi(47 downto 40);	byte9 <= in_tdi(55 downto 48);	byte8 <= in_tdi(63 downto 56);	byte7 <= in_tdi(71 downto 64);	byte6 <= in_tdi(79 downto 72);	byte5 <= in_tdi(87 downto 80);	byte4 <= in_tdi(95 downto 88);	byte3 <= in_tdi(103 downto 96);	byte2 <= in_tdi(111 downto 104);	byte1 <= in_tdi(119 downto 112);	byte0 <= in_tdi(127 downto 120);	-- we rearrange the bytes and send them to exit	P0 <= byte3 & byte2 & byte1 & byte0;	P1 <= byte7 & byte6 & byte5 & byte4;	P2 <= byte11 & byte10 & byte9 & byte8;	P3 <= byte15 & byte14 & byte13 & byte12;	out_tdi <= P0 & P1 & P2 & P3;end twofish_data_input_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----																			---- 								new component								----																			---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ------ twofish data output is the component-- that transforms the data output from the -- 16th round to the wanted form as is -- described in the twofish prototype--library ieee;use ieee.std_logic_1164.all;entity twofish_data_output isport	(		in_tdo	: in std_logic_vector(127 downto 0);		out_tdo	: out std_logic_vector(127 downto 0)		);end twofish_data_output;architecture twofish_data_output_arch of twofish_data_output is		-- we declare internal signals							 	signal	byte0, byte1, byte2, byte3,			byte4, byte5, byte6,			byte7, byte8, byte9,			byte10,	byte11, byte12,			byte13,	byte14,	byte15	: std_logic_vector(7 downto 0);	signal	C0, C1, C2, C3			: std_logic_vector(31 downto 0);begin		-- we assign the input signal to the respective	-- bytes as is described in the prototype	byte15 <= in_tdo(7 downto 0);	byte14 <= in_tdo(15 downto 8);	byte13 <= in_tdo(23 downto 16);	byte12 <= in_tdo(31 downto 24);	byte11 <= in_tdo(39 downto 32);	byte10 <= in_tdo(47 downto 40);	byte9 <= in_tdo(55 downto 48);	byte8 <= in_tdo(63 downto 56);	byte7 <= in_tdo(71 downto 64);	byte6 <= in_tdo(79 downto 72);	byte5 <= in_tdo(87 downto 80);	byte4 <= in_tdo(95 downto 88);	byte3 <= in_tdo(103 downto 96);	byte2 <= in_tdo(111 downto 104);	byte1 <= in_tdo(119 downto 112);	byte0 <= in_tdo(127 downto 120);	-- we rearrange the bytes and send them to exit	C0 <= byte3 & byte2 & byte1 & byte0;	C1 <= byte7 & byte6 & byte5 & byte4;	C2 <= byte11 & byte10 & byte9 & byte8;	C3 <= byte15 & byte14 & byte13 & byte12;	out_tdo <= C0 & C1 & C2 & C3;end twofish_data_output_arch;-- =======-======================================= ---- =============================================== ----												   ---- second part: 128 key input dependent components ----												   ---- =============================================== ---- =============================================== ---- 					--	reed solomon	for 128bits key--					

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?