|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  | // | 
|  | // AES SBox | 
|  |  | 
|  | module aes_sbox import aes_pkg::*; | 
|  | #( | 
|  | parameter sbox_impl_e SBoxImpl = SBoxImplLut | 
|  | ) ( | 
|  | input  ciph_op_e   op_i, | 
|  | input  logic [7:0] data_i, | 
|  | input  logic [7:0] in_mask_i, | 
|  | input  logic [7:0] out_mask_i, | 
|  | output logic [7:0] data_o | 
|  | ); | 
|  |  | 
|  | import aes_pkg::*; | 
|  | localparam bit SBoxMasked = (SBoxImpl == SBoxImplCanrightMasked || | 
|  | SBoxImpl == SBoxImplCanrightMaskedNoreuse) ? 1'b1 : 1'b0; | 
|  |  | 
|  | if (!SBoxMasked) begin : gen_sbox_unmasked | 
|  | // Tie off unused mask inputs. | 
|  | logic [15:0] unused_masks; | 
|  | assign unused_masks = {in_mask_i, out_mask_i}; | 
|  |  | 
|  | if (SBoxImpl == SBoxImplCanright) begin : gen_sbox_canright | 
|  | aes_sbox_canright u_aes_sbox ( | 
|  | .op_i, | 
|  | .data_i, | 
|  | .data_o | 
|  | ); | 
|  | end else begin : gen_sbox_lut // SBoxImpl == SBoxImplLut | 
|  | aes_sbox_lut u_aes_sbox ( | 
|  | .op_i, | 
|  | .data_i, | 
|  | .data_o | 
|  | ); | 
|  | end | 
|  | end else begin : gen_sbox_masked | 
|  |  | 
|  | if (SBoxImpl == SBoxImplCanrightMaskedNoreuse) begin : gen_sbox_canright_masked_noreuse | 
|  | aes_sbox_canright_masked_noreuse u_aes_sbox ( | 
|  | .op_i, | 
|  | .data_i, | 
|  | .in_mask_i, | 
|  | .out_mask_i, | 
|  | .data_o | 
|  | ); | 
|  | end else begin : gen_sbox_canright_masked // SBoxImpl == SBoxImplCanrightMasked | 
|  | aes_sbox_canright_masked u_aes_sbox ( | 
|  | .op_i, | 
|  | .data_i, | 
|  | .in_mask_i, | 
|  | .out_mask_i, | 
|  | .data_o | 
|  | ); | 
|  | end | 
|  | end | 
|  |  | 
|  | endmodule |