blob: f33683d7b6c4ea1abe826afb63cfb26e1695f074 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// AES ShiftRows
module aes_shift_rows (
input aes_pkg::mode_e mode_i,
input logic [7:0] data_i [16],
output logic [7:0] data_o [16]
);
import aes_pkg::*;
// Row 0 is left untouched
assign data_o[0] = data_i[0];
assign data_o[4] = data_i[4];
assign data_o[8] = data_i[8];
assign data_o[12] = data_i[12];
// Row 2 does not depend on mode_i
assign data_o[2] = data_i[10];
assign data_o[6] = data_i[14];
assign data_o[10] = data_i[2];
assign data_o[14] = data_i[6];
// Rows 1 and 3
always_comb begin : shift_row_1_3
if (mode_i == AES_ENC) begin
// Row 1
data_o[1] = data_i[5];
data_o[5] = data_i[9];
data_o[9] = data_i[13];
data_o[13] = data_i[1];
// Row 3
data_o[3] = data_i[15];
data_o[7] = data_i[3];
data_o[11] = data_i[7];
data_o[15] = data_i[11];
end else begin
// Row 1
data_o[1] = data_i[13];
data_o[5] = data_i[1];
data_o[9] = data_i[5];
data_o[13] = data_i[9];
// Row 3
data_o[3] = data_i[7];
data_o[7] = data_i[11];
data_o[11] = data_i[15];
data_o[15] = data_i[3];
end
end
endmodule