Line 1... |
Line 1... |
-- $Id: mini_aes.vhdl,v 1.1.1.1 2005-12-06 02:48:33 arif_endro Exp $
|
-- $Id: mini_aes.vhdl,v 1.2 2005-12-23 04:21:39 arif_endro Exp $
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
-- Title : Mini AES 128
|
-- Title : Mini AES 128
|
-- Project : Mini AES 128
|
-- Project : Mini AES 128
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
-- File : mini_aes.vhdl
|
-- File : mini_aes.vhdl
|
Line 45... |
Line 45... |
|
|
entity mini_aes is
|
entity mini_aes is
|
port (
|
port (
|
clock : in std_logic;
|
clock : in std_logic;
|
clear : in std_logic;
|
clear : in std_logic;
|
|
load_i : in std_logic;
|
enc : in std_logic; -- active low (e.g. 0 = encrypt, 1 = decrypt)
|
enc : in std_logic; -- active low (e.g. 0 = encrypt, 1 = decrypt)
|
key_i : in std_logic_vector (127 downto 00);
|
key_i : in std_logic_vector (7 downto 0);
|
data_i : in std_logic_vector (127 downto 00);
|
data_i : in std_logic_vector (7 downto 0);
|
data_o : out std_logic_vector (127 downto 00);
|
data_o : out std_logic_vector (7 downto 0);
|
done_o : out std_logic
|
done_o : out std_logic
|
);
|
);
|
end mini_aes;
|
end mini_aes;
|
|
|
architecture data_flow of mini_aes is
|
architecture data_flow of mini_aes is
|
|
|
|
component io_interface
|
|
port (
|
|
clock : in std_logic;
|
|
clear : in std_logic;
|
|
load_i : in std_logic;
|
|
load_i_int : out std_logic;
|
|
data_i : in std_logic_vector (7 downto 0);
|
|
key_i : in std_logic_vector (7 downto 0);
|
|
data_o : out std_logic_vector (7 downto 0);
|
|
data_o_int : in std_logic_vector (127 downto 000);
|
|
data_i_int : out std_logic_vector (127 downto 000);
|
|
key_i_int : out std_logic_vector (127 downto 000);
|
|
done_o_int : in std_logic;
|
|
done_o : out std_logic
|
|
);
|
|
end component;
|
|
|
component bram_block_a
|
component bram_block_a
|
port (
|
port (
|
clk_a_i : in std_logic;
|
clk_a_i : in std_logic;
|
en_a_i : in std_logic;
|
en_a_i : in std_logic;
|
we_a_i : in std_logic;
|
we_a_i : in std_logic;
|
Line 198... |
Line 216... |
signal key_counter_up : integer range 0 to 43;
|
signal key_counter_up : integer range 0 to 43;
|
signal key_counter_down : integer range 0 to 43;
|
signal key_counter_down : integer range 0 to 43;
|
signal done : std_logic := '0';
|
signal done : std_logic := '0';
|
signal done_decrypt : std_logic := '0';
|
signal done_decrypt : std_logic := '0';
|
signal counter1bit : std_logic := '0';
|
signal counter1bit : std_logic := '0';
|
|
signal done_o_int : std_logic := '0';
|
|
signal data_i_int : std_logic_vector (127 downto 000) := ( X"00000000_00000000_00000000_00000000" );
|
|
signal data_o_int : std_logic_vector (127 downto 000) := ( X"00000000_00000000_00000000_00000000" );
|
|
signal key_i_int : std_logic_vector (127 downto 000) := ( X"00000000_00000000_00000000_00000000" );
|
signal load : std_logic := '0';
|
signal load : std_logic := '0';
|
|
signal load_io : std_logic := '0';
|
signal di_0_i : std_logic_vector (007 downto 000);
|
signal di_0_i : std_logic_vector (007 downto 000);
|
signal di_1_i : std_logic_vector (007 downto 000);
|
signal di_1_i : std_logic_vector (007 downto 000);
|
signal di_2_i : std_logic_vector (007 downto 000);
|
signal di_2_i : std_logic_vector (007 downto 000);
|
signal di_3_i : std_logic_vector (007 downto 000);
|
signal di_3_i : std_logic_vector (007 downto 000);
|
signal do_0_o : std_logic_vector (007 downto 000);
|
signal do_0_o : std_logic_vector (007 downto 000);
|
Line 242... |
Line 265... |
signal do_a_1_o : std_logic_vector (07 downto 00);
|
signal do_a_1_o : std_logic_vector (07 downto 00);
|
signal do_a_2_o : std_logic_vector (07 downto 00);
|
signal do_a_2_o : std_logic_vector (07 downto 00);
|
signal do_b_1_o : std_logic_vector (07 downto 00);
|
signal do_b_1_o : std_logic_vector (07 downto 00);
|
signal do_b_2_o : std_logic_vector (07 downto 00);
|
signal do_b_2_o : std_logic_vector (07 downto 00);
|
|
|
--signal data_i : std_logic_vector (127 downto 000) :=
|
--signal data_i_int : std_logic_vector (127 downto 000) :=
|
--( X"3243F6A8_885A308D_313198A2_E0370734" ); -- PT 0
|
--( X"3243F6A8_885A308D_313198A2_E0370734" ); -- PT 0
|
--( X"00112233_44556677_8899AABB_CCDDEEFF" ); -- PT 1
|
--( X"00112233_44556677_8899AABB_CCDDEEFF" ); -- PT 1
|
--( X"3925841D_02DC09FB_DC118597_196A0B32" ); -- CT 0
|
--( X"3925841D_02DC09FB_DC118597_196A0B32" ); -- CT 0
|
--( X"69C4E0D8_6A7B0430_D8CDB780_70B4C55A" ); -- CT 1
|
--( X"69C4E0D8_6A7B0430_D8CDB780_70B4C55A" ); -- CT 1
|
--signal key_i : std_logic_vector (127 downto 000) :=
|
--signal key_i : std_logic_vector (127 downto 000) :=
|
Line 260... |
Line 283... |
en_a_i <= VCC;
|
en_a_i <= VCC;
|
en_b_i <= VCC;
|
en_b_i <= VCC;
|
we_a_i <= GND;
|
we_a_i <= GND;
|
we_b_i <= GND;
|
we_b_i <= GND;
|
|
|
done_o <= done_decrypt;
|
done_o_int <= done_decrypt;
|
|
|
|
my_io : io_interface
|
|
port map (
|
|
clock => clock,
|
|
clear => clear,
|
|
load_i => load_i,
|
|
load_i_int => load_io,
|
|
data_i => data_i,
|
|
key_i => key_i,
|
|
data_o => data_o,
|
|
data_o_int => data_o_int,
|
|
data_i_int => data_i_int,
|
|
key_i_int => key_i_int,
|
|
done_o_int => done_o_int,
|
|
done_o => done_o
|
|
);
|
|
|
sbox1 : bram_block_a
|
sbox1 : bram_block_a
|
port map (
|
port map (
|
clk_a_i => clk_a_i,
|
clk_a_i => clk_a_i,
|
en_a_i => en_a_i,
|
en_a_i => en_a_i,
|
Line 300... |
Line 339... |
--
|
--
|
key : key_scheduler
|
key : key_scheduler
|
port map (
|
port map (
|
clock => clock,
|
clock => clock,
|
load => load,
|
load => load,
|
key_i => key_i,
|
key_i => key_i_int,
|
key_o => key_o,
|
key_o => key_o,
|
done => done
|
done => done
|
);
|
);
|
--
|
--
|
count2bit : counter2bit
|
count2bit : counter2bit
|
Line 317... |
Line 356... |
foldreg : folded_register
|
foldreg : folded_register
|
port map (
|
port map (
|
clk_i => clock,
|
clk_i => clock,
|
enc_i => enc,
|
enc_i => enc,
|
load_i => load,
|
load_i => load,
|
data_i => data_i,
|
data_i => data_i_int,
|
key_i => key_b,
|
key_i => key_b,
|
di_0_i => di_0_i,
|
di_0_i => di_0_i,
|
di_1_i => di_1_i,
|
di_1_i => di_1_i,
|
di_2_i => di_2_i,
|
di_2_i => di_2_i,
|
di_3_i => di_3_i,
|
di_3_i => di_3_i,
|
Line 338... |
Line 377... |
elsif (clock = '1' and clock'event) then
|
elsif (clock = '1' and clock'event) then
|
fifo16x8 (127 downto 000) <= fifo16x8i (127 downto 000);
|
fifo16x8 (127 downto 000) <= fifo16x8i (127 downto 000);
|
if (done = '1') then
|
if (done = '1') then
|
load <= '1';
|
load <= '1';
|
else
|
else
|
load <= '0';
|
-- load <= '0';
|
|
load <= load_io;
|
end if;
|
end if;
|
end if;
|
end if;
|
end process;
|
end process;
|
--
|
--
|
process(clear, clock)
|
process(clear, clock)
|
Line 385... |
Line 425... |
|
|
key_o_srl2 (43 downto 40) <= ( key_o_srl4_p (03), key_o_srl4_p (02), key_o_srl4_p (01), key_o_srl4_p (00) ) when ( enc = '0' ) else
|
key_o_srl2 (43 downto 40) <= ( key_o_srl4_p (03), key_o_srl4_p (02), key_o_srl4_p (01), key_o_srl4_p (00) ) when ( enc = '0' ) else
|
( key_o_srl2_p (03), key_o_srl2_p (02), key_o_srl2_p (01), key_o_srl2_p (00) );
|
( key_o_srl2_p (03), key_o_srl2_p (02), key_o_srl2_p (01), key_o_srl2_p (00) );
|
|
|
key_o_srl3 (43 downto 00) <= ( key_o_srl2 (43 downto 04) &
|
key_o_srl3 (43 downto 00) <= ( key_o_srl2 (43 downto 04) &
|
key_i (127 downto 096) &
|
key_i_int (127 downto 096) &
|
key_i (095 downto 064) &
|
key_i_int (095 downto 064) &
|
key_i (063 downto 032) &
|
key_i_int (063 downto 032) &
|
key_i (031 downto 000)
|
key_i_int (031 downto 000)
|
) when (done = '1') else
|
) when (done = '1') else
|
key_o_srl3 (43 downto 00);
|
key_o_srl3 (43 downto 00);
|
|
|
fifo16x8o (127 downto 000) <= fifo16x8i (127 downto 000) when (done = '1') else fifo16x8o (127 downto 000);
|
fifo16x8o (127 downto 000) <= fifo16x8i (127 downto 000) when (done = '1') else fifo16x8o (127 downto 000);
|
fifo16x8i (127 downto 000) <= ( fifo16x8 (095 downto 000) & output_o );
|
fifo16x8i (127 downto 000) <= ( fifo16x8 (095 downto 000) & output_o );
|
|
|
data_o (127 downto 000) <= fifo16x8o (127 downto 000);
|
data_o_int (127 downto 000) <= fifo16x8o (127 downto 000);
|
--
|
--
|
input (0) <= do_0_o;
|
input (0) <= do_0_o;
|
input (1) <= do_1_o;
|
input (1) <= do_1_o;
|
input (2) <= do_2_o;
|
input (2) <= do_2_o;
|
input (3) <= do_3_o;
|
input (3) <= do_3_o;
|
Line 423... |
Line 463... |
di_0_i <= output (31 downto 24) when (enc = '0') else inv_mixcol_o (31 downto 24);
|
di_0_i <= output (31 downto 24) when (enc = '0') else inv_mixcol_o (31 downto 24);
|
di_1_i <= output (23 downto 16) when (enc = '0') else inv_mixcol_o (23 downto 16);
|
di_1_i <= output (23 downto 16) when (enc = '0') else inv_mixcol_o (23 downto 16);
|
di_2_i <= output (15 downto 08) when (enc = '0') else inv_mixcol_o (15 downto 08);
|
di_2_i <= output (15 downto 08) when (enc = '0') else inv_mixcol_o (15 downto 08);
|
di_3_i <= output (07 downto 00) when (enc = '0') else inv_mixcol_o (07 downto 00);
|
di_3_i <= output (07 downto 00) when (enc = '0') else inv_mixcol_o (07 downto 00);
|
--
|
--
|
key_b (127 downto 000) <= key_i (127 downto 000) when (enc = '0') else (key_o_srl3 (43) & key_o_srl3 (42) & key_o_srl3 (41) & key_o_srl3 (40));
|
key_b (127 downto 000) <= key_i_int (127 downto 000) when (enc = '0') else (key_o_srl3 (43) & key_o_srl3 (42) & key_o_srl3 (41) & key_o_srl3 (40));
|
|
|
current_key <= key_o_srl3(key_counter_down);
|
current_key <= key_o_srl3(key_counter_down);
|
|
|
process (clock, load)
|
process (clock, load)
|
begin
|
begin
|