diff options
author | Joachim StroĢmbergson <joachim@secworks.se> | 2018-10-03 09:01:20 +0200 |
---|---|---|
committer | Joachim StroĢmbergson <joachim@secworks.se> | 2018-10-03 09:01:20 +0200 |
commit | 00f01ac229e822f1fd6577c27b0e3012983368b0 (patch) | |
tree | b89b9f8e69bf3f7f47ae7f393ec36420e310ac11 | |
parent | 717f11e0fca162512a7e0675813a14cf23a539cf (diff) |
Adding testcase that tests the mangling of aes operations by switching from encipher to decipher mid-operation.
-rw-r--r-- | src/tb/tb_aes.v | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/tb/tb_aes.v b/src/tb/tb_aes.v index 35fc1d9..84be6a8 100644 --- a/src/tb/tb_aes.v +++ b/src/tb/tb_aes.v @@ -429,6 +429,59 @@ module tb_aes(); //---------------------------------------------------------------- + // single_block_mangle_test() + // + // Perform single block test, but try to mangle the operation + // by changing from encryption to decryption mid-processing. + // This should cause errors unless changes to config during + // processing. + //---------------------------------------------------------------- + task single_block_mangle_test(input [7 : 0] tc_number, + input [255 : 0] key, + input [127 : 0] block, + input [127 : 0] expected); + begin + $display("*** TC %0d mangle test started.", tc_number); + tc_ctr = tc_ctr + 1; + + init_key(key, AES_128_BIT_KEY); + write_block(block); + dump_dut_state(); + + // Set that we want to encipher and start processing. + $display("*** Staring encipher operation"); + write_word(ADDR_CONFIG, (8'h00 + (AES_128_BIT_KEY << 1) + AES_ENCIPHER)); + write_word(ADDR_CTRL, 8'h02); + + // Wait a number of cycles and then switch from encipher to decipher. + #(10 * CLK_PERIOD); + $display("*** Switching to decipher operation"); + write_word(ADDR_CONFIG, (8'h00 + (AES_128_BIT_KEY << 1) + AES_DECIPHER)); + + wait_ready(); + $display("*** Ready has been set!"); + dump_dut_state(); + read_result(); + + if (result_data == expected) + begin + $display("*** TC %0d successful.", tc_number); + $display(""); + end + else + begin + $display("*** ERROR: TC %0d NOT successful.", tc_number); + $display("Expected: 0x%032x", expected); + $display("Got: 0x%032x", result_data); + $display(""); + + error_ctr = error_ctr + 1; + end + end + endtask // ecb_mode_single_block_test + + + //---------------------------------------------------------------- // aes_test() // // Main test task will perform complete NIST test of AES. @@ -527,6 +580,12 @@ module tb_aes(); ecb_mode_single_block_test(8'h17, AES_DECIPHER, nist_aes256_key, AES_256_BIT_KEY, nist_ecb_256_enc_expected3, nist_plaintext3); + + + $display("Block processing mangling test"); + $display("------------------------------"); + single_block_mangle_test(8'h18, nist_aes128_key, nist_plaintext0, + nist_ecb_128_enc_expected0); end endtask // aes_test |