📄 aes_package.vhd
字号:
when "11101101" => inv_data := X"53"; when "11101110" => inv_data := X"99"; when "11101111" => inv_data := X"61"; when "11110000" => inv_data := X"17"; when "11110001" => inv_data := X"2b"; when "11110010" => inv_data := X"04"; when "11110011" => inv_data := X"7e"; when "11110100" => inv_data := X"ba"; when "11110101" => inv_data := X"77"; when "11110110" => inv_data := X"d6"; when "11110111" => inv_data := X"26"; when "11111000" => inv_data := X"e1"; when "11111001" => inv_data := X"69"; when "11111010" => inv_data := X"14"; when "11111011" => inv_data := X"63"; when "11111100" => inv_data := X"55"; when "11111101" => inv_data := X"21"; when "11111110" => inv_data := X"0c"; when "11111111" => inv_data := X"7d"; when others => null; end case;inv_data_stdlogic := to_StdLogicVector(inv_data);return inv_data_stdlogic;end function inv_sbox_val;function col_transform(p: state_array_type) return std_logic_vector is variable result: std_logic_vector(7 downto 0); variable m,n: std_logic_vector(7 downto 0); begin if(p(0)(7) = '1') then m := (p(0)(6 downto 0) & '0') xor "00011011"; else m := (p(0)(6 downto 0) & '0'); end if; if(p(1)(7) = '1') then n := (p(1)(6 downto 0) & '0') xor "00011011" xor p(1); else n := (p(1)(6 downto 0) & '0') xor p(1); end if; result := m xor n xor p(2) xor p(3); return result;end function col_transform;function col_inv_transform(s: state_array_type) return std_logic_vector isvariable result: std_logic_vector(7 downto 0);variable sub0,sub1,sub2,sub3: std_logic_vector(7 downto 0);variable x0,y0,z0: std_logic_vector(7 downto 0);variable x1,y1,z1: std_logic_vector(7 downto 0);variable x2,y2,z2: std_logic_vector(7 downto 0);variable x3,y3,z3: std_logic_vector(7 downto 0);begin if(s(0)(7) = '1') then x0 := (s(0)(6 downto 0) & '0') xor "00011011"; else x0 := (s(0)(6 downto 0) & '0'); end if; if(x0(7) = '1') then y0 := (x0(6 downto 0) & '0') xor "00011011"; else y0 := (x0(6 downto 0) & '0'); end if; if(y0(7) = '1') then z0 := (y0(6 downto 0) & '0') xor "00011011"; else z0 := (y0(6 downto 0) & '0'); end if; sub0 := (x0 xor y0 xor z0);---------- if(s(1)(7) = '1') then x1 := (s(1)(6 downto 0) & '0') xor "00011011"; else x1 := (s(1)(6 downto 0) & '0'); end if; if(x1(7) = '1') then y1 := (x1(6 downto 0) & '0') xor "00011011"; else y1 := (x1(6 downto 0) & '0'); end if; if(y1(7) = '1') then z1 := (y1(6 downto 0) & '0') xor "00011011"; else z1 := (y1(6 downto 0) & '0'); end if; sub1 := (x1 xor z1 xor s(1));---------- if(s(2)(7) = '1') then x2 := (s(2)(6 downto 0) & '0') xor "00011011"; else x2 := (s(2)(6 downto 0) & '0'); end if; if(x2(7) = '1') then y2 := (x2(6 downto 0) & '0') xor "00011011"; else y2 := (x2(6 downto 0) & '0'); end if; if(y2(7) = '1') then z2 := (y2(6 downto 0) & '0') xor "00011011"; else z2 := (y2(6 downto 0) & '0'); end if; sub2 := (y2 xor z2 xor s(2));---------- if(s(3)(7) = '1') then x3 := (s(3)(6 downto 0) & '0') xor "00011011"; else x3 := (s(3)(6 downto 0) & '0'); end if; if(x3(7) = '1') then y3 := (x3(6 downto 0) & '0') xor "00011011"; else y3 := (x3(6 downto 0) & '0'); end if; if(y3(7) = '1') then z3 := (y3(6 downto 0) & '0') xor "00011011"; else z3 := (y3(6 downto 0) & '0'); end if; sub3 := (z3 xor s(3));---------- result := sub0 xor sub1 xor sub2 xor sub3; return result;end function col_inv_transform;-- combo logic for mix columnsfunction mix_cols_routine ( a_r0 :state_array_type; a_r1 :state_array_type; a_r2 :state_array_type; a_r3 :state_array_type; mode :std_logic )return std_logic_vector isvariable b : std_logic_vector(0 to 127);variable b0 : state_array_type;variable b1 : state_array_type;variable b2 : state_array_type;variable b3 : state_array_type;-------------------------------------------------variable b_0_0 : std_logic_vector(7 downto 0);variable s_0_0 : state_array_type;--------------------------------------------------variable b_0_1 : std_logic_vector(7 downto 0);variable s_0_1 : state_array_type;--------------------------------------------------variable b_0_2 : std_logic_vector(7 downto 0);variable s_0_2 : state_array_type;----------------------------------------------variable b_0_3 : std_logic_vector(7 downto 0);variable s_0_3 : state_array_type;----------------------------------------------variable b_1_0 : std_logic_vector(7 downto 0);variable s_1_0 : state_array_type;----------------------------------------------variable b_1_1 : std_logic_vector(7 downto 0);variable s_1_1 : state_array_type;----------------------------------------------variable b_1_2 : std_logic_vector(7 downto 0);variable s_1_2 : state_array_type;----------------------------------------------variable b_1_3 : std_logic_vector(7 downto 0);variable s_1_3 : state_array_type;----------------------------------------------variable b_2_0 : std_logic_vector(7 downto 0);variable s_2_0 : state_array_type;----------------------------------------------variable b_2_1 : std_logic_vector(7 downto 0);variable s_2_1 : state_array_type;----------------------------------------------variable b_2_2 : std_logic_vector(7 downto 0);variable s_2_2 : state_array_type;----------------------------------------------variable b_2_3 : std_logic_vector(7 downto 0);variable s_2_3 : state_array_type;----------------------------------------------variable b_3_0 : std_logic_vector(7 downto 0);variable s_3_0 : state_array_type;----------------------------------------------variable b_3_1 : std_logic_vector(7 downto 0);variable s_3_1 : state_array_type;----------------------------------------------variable b_3_2 : std_logic_vector(7 downto 0);variable s_3_2 : state_array_type;----------------------------------------------variable b_3_3 : std_logic_vector(7 downto 0);variable s_3_3 : state_array_type;--------------------------------------------------beginif(mode = '1') then s_0_0 := a_r0; b_0_0 := col_transform(s_0_0);------------------------------------------------------ s_0_1 := a_r1; b_0_1 := col_transform(s_0_1);------------------------------------------------------ s_0_2 := a_r2; b_0_2 := col_transform(s_0_2);------------------------------------------------------ s_0_3 := a_r3; b_0_3 := col_transform(s_0_3);--**************************************************************** s_1_0 := (a_r0(1),a_r0(2),a_r0(3),a_r0(0)); b_1_0 := col_transform(s_1_0);------------------------------------------------------ s_1_1 := (a_r1(1),a_r1(2),a_r1(3),a_r1(0)); b_1_1 := col_transform(s_1_1);------------------------------------------------------ s_1_2 := (a_r2(1),a_r2(2),a_r2(3),a_r2(0)); b_1_2 := col_transform(s_1_2);------------------------------------------------------ s_1_3 := (a_r3(1),a_r3(2),a_r3(3),a_r3(0)); b_1_3 := col_transform(s_1_3);--**************************************************************** s_2_0 := (a_r0(2),a_r0(3),a_r0(0),a_r0(1)); b_2_0 := col_transform(s_2_0);------------------------------------------------------ s_2_1 := (a_r1(2),a_r1(3),a_r1(0),a_r1(1)); b_2_1 := col_transform(s_2_1);------------------------------------------------------ s_2_2 := (a_r2(2),a_r2(3),a_r2(0),a_r2(1)); b_2_2 := col_transform(s_2_2);------------------------------------------------------ s_2_3 := (a_r3(2),a_r3(3),a_r3(0),a_r3(1)); b_2_3 := col_transform(s_2_3);--**************************************************************** s_3_0 := (a_r0(3),a_r0(0),a_r0(1),a_r0(2)); b_3_0 := col_transform(s_3_0);------------------------------------------------------ s_3_1 := (a_r1(3),a_r1(0),a_r1(1),a_r1(2)); b_3_1 := col_transform(s_3_1);------------------------------------------------------ s_3_2 := (a_r2(3),a_r2(0),a_r2(1),a_r2(2)); b_3_2 := col_transform(s_3_2);------------------------------------------------------ s_3_3 := (a_r3(3),a_r3(0),a_r3(1),a_r3(2)); b_3_3 := col_transform(s_3_3);--****************************************************************else s_0_0 := a_r0; b_0_0 := col_inv_transform(s_0_0);------------------------------------------------------ s_0_1 := a_r1; b_0_1 := col_inv_transform(s_0_1);------------------------------------------------------ s_0_2 := a_r2; b_0_2 := col_inv_transform(s_0_2);------------------------------------------------------ s_0_3 := a_r3; b_0_3 := col_inv_transform(s_0_3);--**************************************************************** s_1_0 := (a_r0(1),a_r0(2),a_r0(3),a_r0(0)); b_1_0 := col_inv_transform(s_1_0);------------------------------------------------------ s_1_1 := (a_r1(1),a_r1(2),a_r1(3),a_r1(0)); b_1_1 := col_inv_transform(s_1_1);------------------------------------------------------ s_1_2 := (a_r2(1),a_r2(2),a_r2(3),a_r2(0)); b_1_2 := col_inv_transform(s_1_2);------------------------------------------------------ s_1_3 := (a_r3(1),a_r3(2),a_r3(3),a_r3(0)); b_1_3 := col_inv_transform(s_1_3);--**************************************************************** s_2_0 := (a_r0(2),a_r0(3),a_r0(0),a_r0(1)); b_2_0 := col_inv_transform(s_2_0);------------------------------------------------------ s_2_1 := (a_r1(2),a_r1(3),a_r1(0),a_r1(1)); b_2_1 := col_inv_transform(s_2_1);------------------------------------------------------ s_2_2 := (a_r2(2),a_r2(3),a_r2(0),a_r2(1)); b_2_2 := col_inv_transform(s_2_2);------------------------------------------------------ s_2_3 := (a_r3(2),a_r3(3),a_r3(0),a_r3(1)); b_2_3 := col_inv_transform(s_2_3);--**************************************************************** s_3_0 := (a_r0(3),a_r0(0),a_r0(1),a_r0(2)); b_3_0 := col_inv_transform(s_3_0);------------------------------------------------------ s_3_1 := (a_r1(3),a_r1(0),a_r1(1),a_r1(2)); b_3_1 := col_inv_transform(s_3_1);------------------------------------------------------ s_3_2 := (a_r2(3),a_r2(0),a_r2(1),a_r2(2)); b_3_2 := col_inv_transform(s_3_2);------------------------------------------------------ s_3_3 := (a_r3(3),a_r3(0),a_r3(1),a_r3(2)); b_3_3 := col_inv_transform(s_3_3);--****************************************************************end if;b := (b_0_0 & b_1_0 & b_2_0 & b_3_0 & b_0_1 & b_1_1 & b_2_1 & b_3_1 & b_0_2 & b_1_2 & b_2_2 & b_3_2 & b_0_3 & b_1_3 & b_2_3 & b_3_3);return b;end function mix_cols_routine;end package body aes_package;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -