Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mldsa pcr signing #670

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
2 changes: 1 addition & 1 deletion src/ecc/formal/properties/fv_ecc_dsa_ctrl.sv
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ module fv_ecc_dsa_ctrl_m
hwif_out.ECC_CTRL.PCR_SIGN.value
|->
hwif_in.ECC_MSG[word].MSG.we == !(fv_zeroize) &&
hwif_in.ECC_PRIVKEY_IN[word].PRIVKEY_IN.next == pcr_signing_data.pcr_signing_privkey[word] &&
hwif_in.ECC_PRIVKEY_IN[word].PRIVKEY_IN.next == pcr_signing_data.pcr_ecc_signing_privkey[word] &&
hwif_in.ECC_PRIVKEY_IN[word].PRIVKEY_IN.we == !(fv_zeroize)
;
endproperty
Expand Down
2 changes: 1 addition & 1 deletion src/ecc/rtl/ecc_dsa_ctrl.sv
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ module ecc_dsa_ctrl
//don't store the private key generated in sw accessible register if it's going to keyvault
privkey_reg[dword] = hwif_out.ECC_PRIVKEY_IN[11-dword].PRIVKEY_IN.value;
hwif_in.ECC_PRIVKEY_IN[dword].PRIVKEY_IN.we = (pcr_sign_mode | (kv_privkey_write_en & (kv_privkey_write_offset == dword))) & !zeroize_reg;
hwif_in.ECC_PRIVKEY_IN[dword].PRIVKEY_IN.next = pcr_sign_mode ? pcr_signing_data.pcr_signing_privkey[dword] :
hwif_in.ECC_PRIVKEY_IN[dword].PRIVKEY_IN.next = pcr_sign_mode ? pcr_signing_data.pcr_ecc_signing_privkey[dword] :
kv_privkey_write_en ? kv_privkey_write_data :
read_reg[11-dword];
hwif_in.ECC_PRIVKEY_IN[dword].PRIVKEY_IN.hwclr = zeroize_reg | kv_key_data_present_reset | (kv_privkey_error == KV_READ_FAIL);
Expand Down
2 changes: 1 addition & 1 deletion src/integration/config/compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ requires:
- soc_ifc_coverage
- pcrvault_cov
- keyvault_cov
#- mldsa_coverage //TODO: Add after updating submodule
- mldsa_coverage
targets:
dpi_compile:
directories:
Expand Down
10 changes: 10 additions & 0 deletions src/integration/rtl/caliptra_reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -4039,6 +4039,14 @@
#define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_10 (0x660)
#define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_11 (0x10020664)
#define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_11 (0x664)
#define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_12 (0x10020668)
#define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_12 (0x668)
#define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_13 (0x1002066c)
#define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_13 (0x66c)
#define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_14 (0x10020670)
#define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_14 (0x670)
#define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_15 (0x10020674)
#define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_15 (0x674)
#define CLP_SHA512_REG_INTR_BLOCK_RF_START (0x10020800)
#define CLP_SHA512_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R (0x10020800)
#define SHA512_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R (0x800)
Expand Down Expand Up @@ -4309,6 +4317,8 @@
#define MLDSA_REG_MLDSA_CTRL_CTRL_MASK (0x7)
#define MLDSA_REG_MLDSA_CTRL_ZEROIZE_LOW (3)
#define MLDSA_REG_MLDSA_CTRL_ZEROIZE_MASK (0x8)
#define MLDSA_REG_MLDSA_CTRL_PCR_SIGN_LOW (4)
#define MLDSA_REG_MLDSA_CTRL_PCR_SIGN_MASK (0x10)
#define CLP_MLDSA_REG_MLDSA_STATUS (0x10030014)
#define MLDSA_REG_MLDSA_STATUS (0x14)
#define MLDSA_REG_MLDSA_STATUS_READY_LOW (0)
Expand Down
10 changes: 10 additions & 0 deletions src/integration/rtl/caliptra_reg_defines.svh
Original file line number Diff line number Diff line change
Expand Up @@ -4039,6 +4039,14 @@
`define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_10 (32'h660)
`define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_11 (32'h10020664)
`define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_11 (32'h664)
`define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_12 (32'h10020668)
`define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_12 (32'h668)
`define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_13 (32'h1002066c)
`define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_13 (32'h66c)
`define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_14 (32'h10020670)
`define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_14 (32'h670)
`define CLP_SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_15 (32'h10020674)
`define SHA512_REG_SHA512_GEN_PCR_HASH_DIGEST_15 (32'h674)
`define CLP_SHA512_REG_INTR_BLOCK_RF_START (32'h10020800)
`define CLP_SHA512_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R (32'h10020800)
`define SHA512_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R (32'h800)
Expand Down Expand Up @@ -4309,6 +4317,8 @@
`define MLDSA_REG_MLDSA_CTRL_CTRL_MASK (32'h7)
`define MLDSA_REG_MLDSA_CTRL_ZEROIZE_LOW (3)
`define MLDSA_REG_MLDSA_CTRL_ZEROIZE_MASK (32'h8)
`define MLDSA_REG_MLDSA_CTRL_PCR_SIGN_LOW (4)
`define MLDSA_REG_MLDSA_CTRL_PCR_SIGN_MASK (32'h10)
`define CLP_MLDSA_REG_MLDSA_STATUS (32'h10030014)
`define MLDSA_REG_MLDSA_STATUS (32'h14)
`define MLDSA_REG_MLDSA_STATUS_READY_LOW (0)
Expand Down
36 changes: 19 additions & 17 deletions src/integration/rtl/caliptra_top.sv
Original file line number Diff line number Diff line change
Expand Up @@ -972,23 +972,24 @@ mldsa_top #(
.AHB_DATA_WIDTH(`CALIPTRA_AHB_HDATA_SIZE),
.AHB_ADDR_WIDTH(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_MLDSA))
) mldsa (
.clk (clk_cg),
.rst_b (cptra_noncore_rst_b),
.clk (clk_cg),
.rst_b (cptra_noncore_rst_b),
//TODO: pwrgood
.haddr_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].haddr[`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_MLDSA)-1:0]),
.hwdata_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hwdata),
.hsel_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hsel),
.hwrite_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hwrite),
.hready_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hready),
.htrans_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].htrans),
.hsize_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hsize),
.hresp_o (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hresp),
.hreadyout_o (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hreadyout),
.hrdata_o (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hrdata),
.kv_read (kv_read[2]),
.kv_rd_resp (kv_rd_resp[2]),
.error_intr (mldsa_error_intr),
.notif_intr (mldsa_notif_intr)
.haddr_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].haddr[`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_MLDSA)-1:0]),
.hwdata_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hwdata),
.hsel_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hsel),
.hwrite_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hwrite),
.hready_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hready),
.htrans_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].htrans),
.hsize_i (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hsize),
.hresp_o (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hresp),
.hreadyout_o (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hreadyout),
.hrdata_o (responder_inst[`CALIPTRA_SLAVE_SEL_MLDSA].hrdata),
.kv_read (kv_read[2]),
.kv_rd_resp (kv_rd_resp[2]),
.pcr_signing_data (pcr_signing_data),
.error_intr (mldsa_error_intr),
.notif_intr (mldsa_notif_intr)
);

kv #(
Expand Down Expand Up @@ -1020,7 +1021,8 @@ key_vault1
.kv_write (kv_write),
.kv_rd_resp (kv_rd_resp),
.kv_wr_resp (kv_wr_resp),
.pcr_signing_key (pcr_signing_data.pcr_signing_privkey)
.pcr_ecc_signing_key (pcr_signing_data.pcr_ecc_signing_privkey),
.pcr_mldsa_signing_key (pcr_signing_data.pcr_mldsa_signing_seed)
);

pv #(
Expand Down
4 changes: 2 additions & 2 deletions src/integration/stimulus/L0_regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ contents:
- ../test_suites/c_intr_handler/c_intr_handler.yml
- ../test_suites/smoke_test_ecc/smoke_test_ecc.yml
- ../test_suites/smoke_test_hmac/smoke_test_hmac.yml
#- ../test_suites/smoke_test_mldsa/smoke_test_mldsa.yml //TODO: Add after updating submodule
- ../test_suites/smoke_test_mldsa/smoke_test_mldsa.yml
- ../test_suites/smoke_test_kv/smoke_test_kv.yml
- ../test_suites/smoke_test_sram_ecc/smoke_test_sram_ecc.yml
- ../test_suites/smoke_test_ras/smoke_test_ras.yml
Expand All @@ -41,7 +41,7 @@ contents:
#- ../test_suites/smoke_test_kv_sha512_flow/smoke_test_kv_sha512_flow.yml Removed SHA KV functionality
- ../test_suites/smoke_test_kv_crypto_flow/smoke_test_kv_crypto_flow.yml
- ../test_suites/smoke_test_kv_cg/smoke_test_kv_cg.yml
#- ../test_suites/smoke_test_kv_mldsa/smoke_test_kv_mldsa.yml //TODO: Add after updating submodule
- ../test_suites/smoke_test_kv_mldsa/smoke_test_kv_mldsa.yml
- ../test_suites/pv_hash_and_sign/pv_hash_and_sign.yml
- ../test_suites/smoke_test_pcr_signing/smoke_test_pcr_signing.yml
- ../test_suites/smoke_test_fw_kv_backtoback_hmac/smoke_test_fw_kv_backtoback_hmac.yml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ contents:
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_ecc/smoke_test_ecc.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_hmac/smoke_test_hmac.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_hmac_errortrigger/smoke_test_hmac_errortrigger.yml
# - ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_mldsa_rand/smoke_test_mldsa_rand.yml //TODO: Add after updating submodule
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_mldsa_rand/smoke_test_mldsa_rand.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_kv/smoke_test_kv.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_sram_ecc/smoke_test_sram_ecc.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_ras/smoke_test_ras.yml
Expand All @@ -44,7 +44,7 @@ contents:
# - ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_kv_sha512_flow/smoke_test_kv_sha512_flow.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_kv_crypto_flow/smoke_test_kv_crypto_flow.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_kv_cg/smoke_test_kv_cg.yml
#- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_kv_mldsa/smoke_test_kv_mldsa.yml //TODO: Add after updating submodule
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_kv_mldsa/smoke_test_kv_mldsa.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/pv_hash_and_sign/pv_hash_and_sign.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_pcr_signing/smoke_test_pcr_signing.yml
- ${CALIPTRA_ROOT}/src/integration/test_suites/smoke_test_fw_kv_backtoback_hmac/smoke_test_fw_kv_backtoback_hmac.yml
Expand Down
45 changes: 28 additions & 17 deletions src/integration/tb/caliptra_top_tb_services.sv
Original file line number Diff line number Diff line change
Expand Up @@ -443,21 +443,29 @@ module caliptra_top_tb_services
//inject privkey value to key reg
else if((WriteData[7:0] == 8'h90) && mailbox_write) begin
inject_ecc_privkey <= 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_SIGNING].dest_valid.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_SIGNING].dest_valid.next = 5'b1000;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_SIGNING].last_dword.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_SIGNING].last_dword.next = 'd11;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_SIGNING][dword_i].data.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_SIGNING][dword_i].data.next = ecc_privkey_tb[dword_i][31 : 0];
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_ECC_SIGNING].dest_valid.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_ECC_SIGNING].dest_valid.next = 5'b1000;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_ECC_SIGNING].last_dword.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_ECC_SIGNING].last_dword.next = 'd11;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_ECC_SIGNING][dword_i].data.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_ECC_SIGNING][dword_i].data.next = ecc_privkey_tb[dword_i][31 : 0];

inject_mldsa_seed <= 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_MLDSA_SIGNING].dest_valid.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_MLDSA_SIGNING].dest_valid.next = 5'b100;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_MLDSA_SIGNING].last_dword.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_MLDSA_SIGNING].last_dword.next = 'd7;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_MLDSA_SIGNING][dword_i].data.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_MLDSA_SIGNING][dword_i].data.next = mldsa_seed_tb[dword_i][31 : 0];
end
else if((WriteData[7:0] == 8'h91) && mailbox_write) begin
inject_ecc_privkey <= 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_SIGNING].dest_valid.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_SIGNING].dest_valid.next = 5'b1000;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_SIGNING].last_dword.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_SIGNING].last_dword.next = 'd11;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_SIGNING][dword_i].data.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_SIGNING][dword_i].data.next = ecc_privkey_random[dword_i][31 : 0];
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_ECC_SIGNING].dest_valid.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_ECC_SIGNING].dest_valid.next = 5'b1000;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_ECC_SIGNING].last_dword.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_CTRL[KV_ENTRY_FOR_ECC_SIGNING].last_dword.next = 'd11;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_ECC_SIGNING][dword_i].data.we = 1'b1;
force caliptra_top_dut.key_vault1.kv_reg_hwif_in.KEY_ENTRY[KV_ENTRY_FOR_ECC_SIGNING][dword_i].data.next = ecc_privkey_random[dword_i][31 : 0];
end
//inject valid hmac_key dest and zero hmac_key value to key reg
else if(((WriteData[7:0]) == 8'ha8) && mailbox_write) begin
Expand Down Expand Up @@ -1022,17 +1030,20 @@ endgenerate //IV_NO
end
endtask

logic [0:11][31:0] ecc_msg_tb = 384'hC8F518D4F3AA1BD46ED56C1C3C9E16FB800AF504DB98843548C5F623EE115F73D4C62ABC06D303B5D90D9A175087290D;
logic [0:15][31:0] pcr_to_be_signed = 512'h_C8F518D4F3AA1BD46ED56C1C3C9E16FB800AF504DB98843548C5F623EE115F73D4C62ABC06D303B5D90D9A175087290D_33333333222222221111111101234567;
logic [0:15][31:0] ecc_random_msg;
always_comb ecc_random_msg = {ecc_test_vector.hashed_msg, 128'h00000000000000000000000000000000};

generate
for (genvar dword = 0; dword < 12; dword++) begin
for (genvar dword = 0; dword < 16; dword++) begin
always@(posedge clk) begin
if((WriteData[7:0] == 8'h90) && mailbox_write) begin
force caliptra_top_dut.sha512.sha512_inst.pcr_sign_we = 1'b1;
force caliptra_top_dut.sha512.sha512_inst.pcr_sign[dword] = ecc_msg_tb[11-dword][31 : 0];
force caliptra_top_dut.sha512.sha512_inst.pcr_sign[dword] = pcr_to_be_signed[15-dword][31 : 0];
end
else if((WriteData[7:0] == 8'h91) && mailbox_write) begin
force caliptra_top_dut.sha512.sha512_inst.pcr_sign_we = 1'b1;
force caliptra_top_dut.sha512.sha512_inst.pcr_sign[dword] = ecc_test_vector.hashed_msg[11-dword][31 : 0];
force caliptra_top_dut.sha512.sha512_inst.pcr_sign[dword] = ecc_random_msg[15-dword][31 : 0];
end
else begin
release caliptra_top_dut.sha512.sha512_inst.pcr_sign_we;
Expand Down Expand Up @@ -1953,7 +1964,7 @@ sha512_ctrl_cov_bind i_sha512_ctrl_cov_bind();
sha256_ctrl_cov_bind i_sha256_ctrl_cov_bind();
hmac_ctrl_cov_bind i_hmac_ctrl_cov_bind();
ecc_top_cov_bind i_ecc_top_cov_bind();
// mldsa_top_cov_bind i_mldsa_top_cov_bind(); //TODO: Add after updating submodule
mldsa_top_cov_bind i_mldsa_top_cov_bind();
keyvault_cov_bind i_keyvault_cov_bind();
pcrvault_cov_bind i_pcrvault_cov_bind();
`endif
Expand Down
Loading
Loading