blob: 6fd58e989508b71746b8adceaa4ddd7b5eff36ce [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 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