------------------------------------------------------------
-- Copyright: 2011 George Mason University, Virginia USA
--            http://www.iis.ee.ethz.ch/~sha3
------------------------------------------------------------
 -- =====================================================================

-- Copyright  2010-2011 by Cryptographic Engineering Research Group (CERG),

-- ECE Department, George Mason University

-- Fairfax, VA, U.S.A.

-- =====================================================================


library ieee;
use ieee.std_logic_1164.all;   
use ieee.numeric_std.all;
use work.sha3_pkg.all;	 
use work.groestl_pkg.all;	

-- Groestl ShiftRow  implemented as combinational function

-- possible generics values: hs = {GROESTL_DATA_SIZE_SMALL, GROESTL_DATA_SIZE_BIG} 

-- they are corresponding to 256 and 512 versions respectively


-- 2011-09-28 - kgf - separated architectures


entity groestl_shiftrowq is
generic (n	:integer := GROESTL_DATA_SIZE_SMALL);
port( 
	input 		: in std_logic_vector(n-1 downto 0);
        output 		: out std_logic_vector(n-1 downto 0));
end groestl_shiftrowq;
  
architecture rtl of groestl_shiftrowq is
type matrix is array (0 to n/8-1) of std_logic_vector(7 downto 0);
signal gsq	: matrix;
begin	

	conv : for i in 0 to n/8-1 generate	
		gsq(n/8-i-1) <= input(8*(i+1)-1 downto 8*i);
	end generate;
	
gen256: if n=GROESTL_DATA_SIZE_SMALL generate
	
	output <=	gsq(8) & gsq(25) & gsq(42) & gsq(59) & gsq(4) & gsq(21) & gsq(38) & gsq(55) & 
				gsq(16) & gsq(33) & gsq(50) & gsq(3) & gsq(12) & gsq(29) & gsq(46) & gsq(63) & 				
				gsq(24) & gsq(41) & gsq(58) & gsq(11) & gsq(20) & gsq(37) & gsq(54) & gsq(7) & 				
				gsq(32) & gsq(49) & gsq(2) & gsq(19) & gsq(28) & gsq(45) & gsq(62) & gsq(15) & 				
				gsq(40) & gsq(57) & gsq(10) & gsq(27) & gsq(36) & gsq(53) & gsq(6) & gsq(23) & 				
				gsq(48) & gsq(1) & gsq(18) & gsq(35) & gsq(44) & gsq(61) & gsq(14) & gsq(31) & 				
				gsq(56) & gsq(9) & gsq(26) & gsq(43) & gsq(52) & gsq(5) & gsq(22) & gsq(39) & 				
				gsq(0) & gsq(17) & gsq(34) & gsq(51) & gsq(60) & gsq(13) & gsq(30) & gsq(47); 				

				--				gsq() & gsq() & gsq() & gsq() & gsq() & gsq() & gsq() & gsq() & 				


				end generate;


gen512: if n=GROESTL_DATA_SIZE_BIG generate

output <= 	gsq(8) & gsq(25) & gsq(42) & gsq(91) & gsq(4) & gsq(21) & gsq(38) & gsq(55) & 
			gsq(16) & gsq(33) & gsq(50) & gsq(99) & gsq(12) & gsq(29) & gsq(46) & gsq(63) &				
			gsq(24) & gsq(41) & gsq(58) & gsq(107) & gsq(20) & gsq(37) & gsq(54) & gsq(71) & 
			gsq(32) & gsq(49) & gsq(66) & gsq(115) & gsq(28) & gsq(45) & gsq(62) & gsq(79) &			
			gsq(40) & gsq(57) & gsq(74) & gsq(123) & gsq(36) & gsq(53) & gsq(70) & gsq(87) & 
			gsq(48) & gsq(65) & gsq(82) & gsq(3) & gsq(44) & gsq(61) & gsq(78) & gsq(95) &			
			gsq(56) & gsq(73) & gsq(90) & gsq(11) & gsq(52) & gsq(69) & gsq(86) & gsq(103) & 
			gsq(64) & gsq(81) & gsq(98) & gsq(19) & gsq(60) & gsq(77) & gsq(94) & gsq(111) &			
			gsq(72) & gsq(89) & gsq(106) & gsq(27) & gsq(68) & gsq(85) & gsq(102) & gsq(119) & 
			gsq(80) & gsq(97) & gsq(114) & gsq(35) & gsq(76) & gsq(93) & gsq(110) & gsq(127) &			
			gsq(88) & gsq(105) & gsq(122) & gsq(43) & gsq(84) & gsq(101) & gsq(118) & gsq(7) & 
			gsq(96) & gsq(113) & gsq(2) & gsq(51) & gsq(92) & gsq(109) & gsq(126) & gsq(15) &			
			gsq(104) & gsq(121) & gsq(10) & gsq(59) & gsq(100) & gsq(117) & gsq(6) & gsq(23) & 
			gsq(112) & gsq(1) & gsq(18) & gsq(67) & gsq(108) & gsq(125) & gsq(14) & gsq(31) &			
			gsq(120) & gsq(9) & gsq(26) & gsq(75) & gsq(116) & gsq(5) & gsq(22) & gsq(39) & 
			gsq(0) & gsq(17) & gsq(34) & gsq(83) & gsq(124) & gsq(13) & gsq(30) & gsq(47);		
			
end generate;


end architecture rtl; 


Generated on Tue Nov 22 15:16:34 CET 2011
Home