OpenCores
URL https://opencores.org/ocsvn/aes_crypto_core/aes_crypto_core/trunk

Subversion Repositories aes_crypto_core

[/] [aes_crypto_core/] [trunk/] [tb/] [aes_fips_mctester.vhd] - Rev 4

Compare with Previous | Blame | View Log

--*************************************************************************
-- Project    : AES128                                                    *
--                                                                        *
-- Block Name : aes_fips_mctester.vhd                                     *
--                                                                        *
-- Author     : Hemanth Satyanarayana                                     *
--                                                                        *
-- Email      : hemanth@opencores.org                                     *
--                                                                        *
-- Description: Test bench module to test the aes implemntation           *
--              for Monte-Carlo based tests.                              *
--                         .                                              *
--                                                                        *
-- Revision History                                                       *
-- |-----------|-------------|---------|---------------------------------|*
-- |   Name    |    Date     | Version |          Revision details       |*
-- |-----------|-------------|---------|---------------------------------|*
-- | Hemanth   | 15-Dec-2004 | 1.1.1.1 |            Uploaded             |*
-- |-----------|-------------|---------|---------------------------------|*
--                                                                        *
--  Refer FIPS-KAT Document for details                                   *
--*************************************************************************
--                                                                        *
-- Copyright (C) 2004 Author                                              *
--                                                                        *
-- This source file may be used and distributed without                   *
-- restriction provided that this copyright statement is not              *
-- removed from the file and that any derivative work contains            *
-- the original copyright notice and the associated disclaimer.           *
--                                                                        *
-- This source file is free software; you can redistribute it             *
-- and/or modify it under the terms of the GNU Lesser General             *
-- Public License as published by the Free Software Foundation;           *
-- either version 2.1 of the License, or (at your option) any             *
-- later version.                                                         *
--                                                                        *
-- This source is distributed in the hope that it will be                 *
-- useful, but WITHOUT ANY WARRANTY; without even the implied             *
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR                *
-- PURPOSE.  See the GNU Lesser General Public License for more           *
-- details.                                                               *
--                                                                        *
-- You should have received a copy of the GNU Lesser General              *
-- Public License along with this source; if not, download it             *
-- from http://www.opencores.org/lgpl.shtml                               *
--                                                                        *
--*************************************************************************
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.math_real.all;
use std.textio.all;
use ieee.std_logic_textio.all;
library std_developerskit;
use std_developerskit.std_iopak.all;
 
entity aes_fips_mctester is end aes_fips_mctester;
 
architecture behavioral of aes_fips_mctester is
 
component aes128_fast
port(
      clk       : in std_logic;
      reset     : in std_logic;
      start     : in std_logic;
      mode      : in std_logic;
      load      : in std_logic;
      key       : in std_logic_vector(63 downto 0);
      data_in   : in std_logic_vector(63 downto 0);
      data_out  : out std_logic_vector(127 downto 0);
      done      : out std_logic
     );
 
end component;
 
signal clock_tb: std_logic:='0';
signal reset_tb: std_logic:='0';
signal start_tb: std_logic:='0';
signal load_tb: std_logic:='0';
signal done_tb: std_logic;
--#############################
signal mode_tb: std_logic:='1'; -- 1-> encode; 0-> decode
--#############################
signal data_in_tb: std_logic_vector(63 downto 0):=X"0000000000000000";
signal data_out_tb: std_logic_vector(127 downto 0);
signal key_tb: std_logic_vector(63 downto 0):=X"0000000000000000";
signal chk: integer:=0;
 
begin
 
clock_tb <= not clock_tb after 50 ns;
reset_tb <= '1','0' after 150 ns;
 
aes_i: aes128_fast
       port map(
                  clk      => clock_tb,
                  reset    => reset_tb,
                  start    => start_tb,
                  mode     => mode_tb,
                  load     => load_tb,
                  key      => key_tb,
                  data_in  => data_in_tb,
                  data_out => data_out_tb,
                  done     => done_tb
                 );
 
process
file infile : text open read_mode is "ecb_e_m.txt";
file outfile: text open write_mode is "ecb_e_m_results.txt";
variable inline       : line;
variable outline      : line;
variable itr_numline  : string(1 to 2);
variable key_line     : string(1 to 4);
variable pt_line      : string(1 to 3);
variable ct_line      : string(1 to 3);
variable iteration_num: integer;
variable hex_key_str  : string(1 to 32);
variable pt_str       : string(1 to 32);
variable ct_str       : string(1 to 32);
variable exp_cipher   : std_logic_vector(127 downto 0);
variable next_round_data: std_logic_vector(127 downto 0):=X"00000000000000000000000000000000";
begin
  wait for 1 ns;
  wait until reset_tb = '0';
  write(outline,string'("Monte-Carlo Encryption Tests"));
  writeline(outfile,outline);
  write(outline,string'("----------------------------"));
  writeline(outfile,outline);
  while(not endfile(infile)) loop
    wait until rising_edge(clock_tb);
    wait until rising_edge(clock_tb);
    readline(infile,inline);
    read(inline,itr_numline);
    read(inline,iteration_num);
    readline(infile,inline);
    read(inline,key_line);
    read(inline,hex_key_str);
    readline(infile,inline);
    read(inline,pt_line);
    read(inline,pt_str);
    readline(infile,inline);
    read(inline,ct_line);
    read(inline,ct_str);
    exp_cipher := to_StdLogicVector(From_HexString(ct_str));
    for j in 0 to 9999 loop
      chk <= j;
      if(j = 0) then
        wait until rising_edge(clock_tb);
        load_tb <= '1';
        key_tb <= to_StdLogicVector(From_HexString(hex_key_str(1 to 16)));
        data_in_tb <= to_StdLogicVector(From_HexString(pt_str(1 to 16)));
        wait until rising_edge(clock_tb);
        load_tb <= '0';
        key_tb <= to_StdLogicVector(From_HexString(hex_key_str(17 to 32)));
        data_in_tb <= to_StdLogicVector(From_HexString(pt_str(17 to 32)));
      else
        wait until rising_edge(clock_tb);
        load_tb <= '1';
        key_tb <= to_StdLogicVector(From_HexString(hex_key_str(1 to 16)));
        data_in_tb <= next_round_data(127 downto 64);
        wait until rising_edge(clock_tb);
        load_tb <= '0';
        key_tb <= to_StdLogicVector(From_HexString(hex_key_str(17 to 32)));
        data_in_tb <= next_round_data(63 downto 0);
      end if;  
      wait until rising_edge(clock_tb);
      wait until rising_edge(clock_tb);
      start_tb <= '1';
      wait until rising_edge(clock_tb);
      start_tb <= '0';    
      wait until done_tb = '1';
      wait until rising_edge(clock_tb);
      next_round_data := data_out_tb;
      wait until rising_edge(clock_tb);
    end loop;
    write(outline,string'("Round Number - "));
    write(outline,iteration_num);
    writeline(outfile,outline);
    write(outline,string'("Result: "));
    if(data_out_tb = exp_cipher) then
      write(outline,string'("OK"));
    else
      write(outline,string'("Error"));
    end if;
    writeline(outfile,outline);
  end loop;
end process;
 
end behavioral;
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.