|  | @ -138,6 +138,7 @@ architecture rtl of tb_cbcdes is | 
														
													
														
															
																|  |  | x"88BF0DB6D70DEE56", x"A1F9915541020B56", x"6FBF1CAFCFFD0556", |  |  | x"88BF0DB6D70DEE56", x"A1F9915541020B56", x"6FBF1CAFCFFD0556", | 
														
													
														
															
																|  |  | x"2F22E49BAB7CA1AC", x"5A6B612CC26CCE4A", x"5F4C038ED12B2E41", |  |  | x"2F22E49BAB7CA1AC", x"5A6B612CC26CCE4A", x"5F4C038ED12B2E41", | 
														
													
														
															
																|  |  | x"63FAC0D034D9F793"); |  |  | x"63FAC0D034D9F793"); | 
														
													
														
															
																|  |  |  |  |  | signal s_cbc_answers : t_array(0 to 19); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | signal s_reset    : std_logic := '0'; |  |  | signal s_reset    : std_logic := '0'; | 
														
													
														
															
																|  |  | signal s_clk      : std_logic := '0'; |  |  | signal s_clk      : std_logic := '0'; | 
														
													
												
													
														
															
																|  | @ -281,6 +282,28 @@ begin | 
														
													
														
															
																|  |  | s_start   <= '0'; |  |  | s_start   <= '0'; | 
														
													
														
															
																|  |  | end loop; |  |  | end loop; | 
														
													
														
															
																|  |  | wait until rising_edge(s_clk); |  |  | wait until rising_edge(s_clk); | 
														
													
														
															
																|  |  |  |  |  | s_start   <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_mode    <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_validin <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_iv      <= (others => '0'); | 
														
													
														
															
																|  |  |  |  |  | s_key     <= (others => '0'); | 
														
													
														
															
																|  |  |  |  |  | s_datain  <= (others => '0'); | 
														
													
														
															
																|  |  |  |  |  | wait for 1 us; | 
														
													
														
															
																|  |  |  |  |  | -- cbc known answers test | 
														
													
														
															
																|  |  |  |  |  | for index in c_substitution_table_test_keys'range loop | 
														
													
														
															
																|  |  |  |  |  | wait until rising_edge(s_clk) and s_ready = '1'; | 
														
													
														
															
																|  |  |  |  |  | if(index = 0) then | 
														
													
														
															
																|  |  |  |  |  | s_start <= '1'; | 
														
													
														
															
																|  |  |  |  |  | s_key   <= x"5555555555555555"; | 
														
													
														
															
																|  |  |  |  |  | s_iv    <= x"DEADBEEFDEADBEEF"; | 
														
													
														
															
																|  |  |  |  |  | end if; | 
														
													
														
															
																|  |  |  |  |  | s_validin <= '1'; | 
														
													
														
															
																|  |  |  |  |  | s_datain  <= c_substitution_table_test_plain(index); | 
														
													
														
															
																|  |  |  |  |  | wait until rising_edge(s_clk); | 
														
													
														
															
																|  |  |  |  |  | s_validin <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_start   <= '0'; | 
														
													
														
															
																|  |  |  |  |  | end loop; | 
														
													
														
															
																|  |  |  |  |  | wait until rising_edge(s_clk); | 
														
													
														
															
																|  |  | -- DECRYPTION TESTS |  |  | -- DECRYPTION TESTS | 
														
													
														
															
																|  |  | s_start   <= '0'; |  |  | s_start   <= '0'; | 
														
													
														
															
																|  |  | s_mode    <= '0'; |  |  | s_mode    <= '0'; | 
														
													
												
													
														
															
																|  | @ -404,6 +427,30 @@ begin | 
														
													
														
															
																|  |  | s_iv      <= (others => '0'); |  |  | s_iv      <= (others => '0'); | 
														
													
														
															
																|  |  | s_key     <= (others => '0'); |  |  | s_key     <= (others => '0'); | 
														
													
														
															
																|  |  | s_datain  <= (others => '0'); |  |  | s_datain  <= (others => '0'); | 
														
													
														
															
																|  |  |  |  |  | wait for 1 us; | 
														
													
														
															
																|  |  |  |  |  | -- cbc known answer test | 
														
													
														
															
																|  |  |  |  |  | for index in c_substitution_table_test_keys'range loop | 
														
													
														
															
																|  |  |  |  |  | wait until rising_edge(s_clk) and s_ready = '1'; | 
														
													
														
															
																|  |  |  |  |  | if(index = 0) then | 
														
													
														
															
																|  |  |  |  |  | s_mode  <= '1'; | 
														
													
														
															
																|  |  |  |  |  | s_start <= '1'; | 
														
													
														
															
																|  |  |  |  |  | s_key   <= x"5555555555555555"; | 
														
													
														
															
																|  |  |  |  |  | s_iv    <= x"DEADBEEFDEADBEEF"; | 
														
													
														
															
																|  |  |  |  |  | end if; | 
														
													
														
															
																|  |  |  |  |  | s_validin <= '1'; | 
														
													
														
															
																|  |  |  |  |  | s_datain  <= s_cbc_answers(index); | 
														
													
														
															
																|  |  |  |  |  | wait until rising_edge(s_clk); | 
														
													
														
															
																|  |  |  |  |  | s_validin <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_start   <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_mode    <= '0'; | 
														
													
														
															
																|  |  |  |  |  | end loop; | 
														
													
														
															
																|  |  |  |  |  | wait until rising_edge(s_clk); | 
														
													
														
															
																|  |  |  |  |  | s_start   <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_mode    <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_validin <= '0'; | 
														
													
														
															
																|  |  |  |  |  | s_iv      <= (others => '0'); | 
														
													
														
															
																|  |  |  |  |  | s_key     <= (others => '0'); | 
														
													
														
															
																|  |  |  |  |  | s_datain  <= (others => '0'); | 
														
													
														
															
																|  |  | wait; |  |  | wait; | 
														
													
														
															
																|  |  | end process teststimuliP; |  |  | end process teststimuliP; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
												
													
														
															
																|  | @ -448,6 +495,10 @@ begin | 
														
													
														
															
																|  |  | report "encryption error" |  |  | report "encryption error" | 
														
													
														
															
																|  |  | severity error; |  |  | severity error; | 
														
													
														
															
																|  |  | end loop; |  |  | end loop; | 
														
													
														
															
																|  |  |  |  |  | for index in c_substitution_table_test_cipher'range loop | 
														
													
														
															
																|  |  |  |  |  | wait until rising_edge(s_clk) and s_validout = '1'; | 
														
													
														
															
																|  |  |  |  |  | s_cbc_answers(index) <= s_dataout; | 
														
													
														
															
																|  |  |  |  |  | end loop; | 
														
													
														
															
																|  |  | report "# DECRYPTION TESTS"; |  |  | report "# DECRYPTION TESTS"; | 
														
													
														
															
																|  |  | report "# Variable ciphertext known answer test"; |  |  | report "# Variable ciphertext known answer test"; | 
														
													
														
															
																|  |  | v_plaintext := x"8000000000000000"; |  |  | v_plaintext := x"8000000000000000"; | 
														
													
												
													
														
															
																|  | @ -486,6 +537,13 @@ begin | 
														
													
														
															
																|  |  | report "decryption error" |  |  | report "decryption error" | 
														
													
														
															
																|  |  | severity error; |  |  | severity error; | 
														
													
														
															
																|  |  | end loop; |  |  | end loop; | 
														
													
														
															
																|  |  |  |  |  | report "# cbc known answer test"; | 
														
													
														
															
																|  |  |  |  |  | for index in c_substitution_table_test_cipher'range loop | 
														
													
														
															
																|  |  |  |  |  | wait until rising_edge(s_clk) and s_validout = '1'; | 
														
													
														
															
																|  |  |  |  |  | assert (s_dataout = c_substitution_table_test_plain(index)) | 
														
													
														
															
																|  |  |  |  |  | report "decryption error" | 
														
													
														
															
																|  |  |  |  |  | severity error; | 
														
													
														
															
																|  |  |  |  |  | end loop; | 
														
													
														
															
																|  |  | report "# Successfully passed all tests"; |  |  | report "# Successfully passed all tests"; | 
														
													
														
															
																|  |  | wait; |  |  | wait; | 
														
													
														
															
																|  |  | end process testcheckerP; |  |  | end process testcheckerP; | 
														
													
												
													
														
															
																|  | 
 |