| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| // |
| // AES SubBytes |
| |
| module aes_sub_bytes import aes_pkg::*; |
| #( |
| parameter sbox_impl_e SBoxImpl = SBoxImplLut |
| ) ( |
| input ciph_op_e op_i, |
| input logic [3:0][3:0][7:0] data_i, |
| input logic [3:0][3:0][7:0] in_mask_i, |
| input logic [3:0][3:0][7:0] out_mask_i, |
| output logic [3:0][3:0][7:0] data_o |
| ); |
| |
| // Individually substitute bytes |
| for (genvar j = 0; j < 4; j++) begin : gen_sbox_j |
| for (genvar i = 0; i < 4; i++) begin : gen_sbox_i |
| aes_sbox #( |
| .SBoxImpl ( SBoxImpl ) |
| ) u_aes_sbox_ij ( |
| .op_i ( op_i ), |
| .data_i ( data_i[i][j] ), |
| .in_mask_i ( in_mask_i[i][j] ), |
| .out_mask_i ( out_mask_i[i][j] ), |
| .data_o ( data_o[i][j] ) |
| ); |
| end |
| end |
| |
| endmodule |