Add bypass (untested)
This commit is contained in:
@@ -6,6 +6,7 @@ module chacha20_poly1305_32_ll_core (
|
||||
input logic [95:0] i_nonce,
|
||||
|
||||
input logic i_encrypt,
|
||||
input logic i_bypass,
|
||||
|
||||
input logic [31:0] i_data,
|
||||
input logic [1:0] i_countm1,
|
||||
@@ -89,6 +90,7 @@ logic [511:0] post_skid_data;
|
||||
logic [5:0] post_skid_countm1;
|
||||
|
||||
logic meta_fifo_encrypt;
|
||||
logic meta_fifo_bypass;
|
||||
logic meta_fifo_read;
|
||||
logic meta_fifo_empty;
|
||||
|
||||
@@ -156,15 +158,15 @@ fifo_fwft #(
|
||||
);
|
||||
|
||||
fifo_fwft #(
|
||||
.DATA_WIDTH(1), // can increase when we have more metadata
|
||||
.DATA_WIDTH(2), // can increase when we have more metadata
|
||||
.DEPTH_WIDTH(4)
|
||||
) u_meta_fifo (
|
||||
.clk (i_clk),
|
||||
.rst (i_rst),
|
||||
.din (i_encrypt),
|
||||
.din ({i_encrypt, i_bypass}),
|
||||
.wr_en (sop),
|
||||
.full (),
|
||||
.dout (meta_fifo_encrypt),
|
||||
.dout ({meta_fifo_encrypt, meta_fifo_bypass}),
|
||||
.rd_en (meta_fifo_read),
|
||||
.empty (meta_fifo_empty)
|
||||
);
|
||||
@@ -206,7 +208,8 @@ chacha20_poly1305_mid_fsm u_mid_fsm (
|
||||
.i_chacha_valid (chacha_o_valid),
|
||||
.o_chacha_ready (chacha_o_ready),
|
||||
|
||||
.i_metadata_din (meta_fifo_encrypt),
|
||||
.i_metadata_encrypt (meta_fifo_encrypt),
|
||||
.i_metadata_bypass (meta_fifo_bypass),
|
||||
.o_metadata_read (meta_fifo_read),
|
||||
|
||||
.i_fifo_data (fifo_data),
|
||||
|
||||
@@ -13,7 +13,8 @@ module chacha20_poly1305_mid_fsm (
|
||||
|
||||
output logic o_fifo_rd_en,
|
||||
|
||||
input logic [0:0] i_metadata_din,
|
||||
input logic [0:0] i_metadata_encrypt,
|
||||
input logic [0:0] i_metadata_bypass,
|
||||
output logic o_metadata_read,
|
||||
|
||||
output logic [511:0] o_ciphertext,
|
||||
@@ -30,10 +31,6 @@ module chacha20_poly1305_mid_fsm (
|
||||
|
||||
localparam R_MASK = 128'h0ffffffc0ffffffc0ffffffc0fffffff;
|
||||
|
||||
logic encrypt;
|
||||
|
||||
assign encrypt = i_metadata_din[0];
|
||||
|
||||
enum logic {IDLE, DATA} state, state_next;
|
||||
|
||||
logic [127:0] r, r_next;
|
||||
@@ -87,13 +84,18 @@ always_comb begin
|
||||
end
|
||||
|
||||
DATA: begin
|
||||
if (encrypt) begin
|
||||
if (i_metadata_encrypt) begin
|
||||
o_ciphertext = i_fifo_data ^ i_chacha_state;
|
||||
end else begin
|
||||
o_ciphertext = i_fifo_data;
|
||||
end
|
||||
|
||||
o_post = i_fifo_data ^ i_chacha_state;
|
||||
// Bypass will still output a tag, but we can ignore it.
|
||||
if (i_metadata_bypass) begin
|
||||
o_post = i_fifo_data;
|
||||
end else begin
|
||||
o_post = i_fifo_data ^ i_chacha_state;
|
||||
end
|
||||
o_ciphertext_countm1 = i_fifo_countm1;
|
||||
o_ciphertext_last = i_fifo_last;
|
||||
o_ciphertext_valid = i_fifo_valid & i_chacha_valid;
|
||||
|
||||
Reference in New Issue
Block a user