blob: 45013dade604bdf78fac2b0d863771f84883ad52 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
module sha3_fpv
import sha3_pkg::*;
#(
// Enable Masked Keccak if 1
parameter bit EnMasking = 0,
localparam int Share = (EnMasking) ? 2 : 1
)(
input clk_i,
input rst_ni,
// MSG interface
input msg_valid_i,
input [MsgWidth-1:0] msg_data_i [Share],
input [MsgStrbW-1:0] msg_strb_i, // one masking for shares
output logic msg_ready_o,
// Entropy interface
input rand_valid_i,
input rand_early_i,
input [StateW-1:0] rand_data_i,
input rand_aux_i,
output logic rand_consumed_o,
// N, S: Used in cSHAKE mode only
input [NSRegisterSize*8-1:0] ns_data_i, // See kmac_pkg for details
// configurations
input sha3_mode_e mode_i, // see sha3pad for details
input keccak_strength_e strength_i, // see sha3pad for details
// controls
input start_i, // see sha3pad for details
input process_i, // see sha3pad for details
input run_i,
input done_i, // see sha3pad for details
output logic absorbed_o,
output sha3_st_e sha3_fsm_o,
// digest output
// This value is valid only after all absorbing process is completed.
output logic state_valid_o,
output logic [StateW-1:0] state_o [Share],
output err_t error_o
);
sha3 #(
.EnMasking(EnMasking)
) u_sha3 (
.*
);
// Assumption for testvector
`ASSUME(Sha3Only_a, mode_i == Sha3)
`ASSUME(L256Only_a, strength_i == L256)
endmodule