// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
  name: "keymgr"
  import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/intr_test_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/alert_test_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/tl_device_access_types_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/stress_all_with_reset_testplan.hjson"]
  entries: [
    {
      name: smoke
      desc: '''
            Smoke test accessing a major datapath within the keymgr.
            Test operations (advance, gen-id and gen-sw-out) in every state

            Stimulus:
            - Go through state from `StReset` to `StDisabled`.
            - Issue gen-id, gen-sw-output operation in each state, including invalid operations in
              states other than normal operating states (`StCreatorRootKey`, `StOwnerIntKey` and
              `StOwnerRootKey`).

            Checks:
            - Check STATUS reg for each operation.
            - Check interrupts `op_done` is triggered when operation is done.
            - Check `err` and alert `operation_err` are triggered after invalid operation.
            - Check KMAC key, KMAC data and output SW data for correctness.
            - For invalid operations, check KMAC key, KMAC data and output SW data don't match to
              any of saved meaningful data, which are collected from valid operations. This
              checking method is also applied to other error cases.
            '''
      milestone: V1
      tests: ["keymgr_smoke"]
    }
    {
      name: random
      desc: '''
            Extend from smoke to randomize all SW input data
            - Fully randomize SW input: rom_ext_desc_*, software_binding_*, salt_*, max_*_key_ver,
              *_key_ver_en.
            - Randomize key_version any value less than max_*_key_ver, to avoid triggerring
              `invalid_kmac_input` error.
            - Fully randomize HW input from flash, otp and life cycle.

            Most of other sequences are derived from this to have similar init and sequence.

            Stimulus and checks are the same as smoke.
            '''
      milestone: V1
      tests: ["keymgr_random"]
    }
    {
      name: cfgen_during_op
      desc: '''
            CFGEN is RO reg and it gates bunch of write access of other registers, which isn't
            tested in common CSR tests.

            Stimulus and checks:
            Test command and reg access gated by CFGEN is ignored during operation.
            '''
      milestone: V2
      tests: ["keymgr_cfgen"]
    }
    {
      name: cfgen_at_st_random
      desc: '''
            `StRandom` is a temporary state during init operation, which will set CSR CFGEN.

            Stimulus and checks:
            Test command and reg access gated by CFGEN is ignored during `StRandom`.
            '''
      milestone: V2
      tests: ["keymgr_cfgen"]
    }
    {
      name: sideload
      desc: '''
            Keymgr contains HW sideload interfaces to output keys for KMAC, HMAC, AES.

            Stimulus:
            Generate a keymgr output to HW sideload interface, excising all the sideload interfaces.

            Checks:
            Verify the sideload data and status for correctness.
            '''
      milestone: V2
      tests: ["keymgr_sideload"]
    }
    {
      name: init_n_start
      desc: '''
            Stimulus and checks:
            Verify all combinations of `init` and `start`.
            - If both are set in `StReset`, check `INVALID_OP` error is triggered.
            - If it's in other state, `init` is ignored.
            '''
      milestone: V2
      tests: ["keymgr_random"]
    }
    {
      name: direct_to_disabled_state
      desc: '''
            Stimulus and checks:
            Directly go to `StDisabled` from any state and check `StDisabled` is entered correctly.
            '''
      milestone: V2
      tests: ["keymgr_direct_to_disabled"]
    }
    {
      name: lc_disable
      desc: '''
            Life cycle can disable keymgr and let keymgr wipe secret immediately.

            Stimulus:
            Test life cycle disables keymgr in any state.

            Checks:
            - If keymgr is not initialized, check it can't be initialized until life cycle enables
              keymgr.
            - If keymgr is in a valid state after init, key output to KMAC is wiped immediately and
              SW output will be invalid after OP is done.
            - If keymgr in disabled state, check the behavior is consistent with normal behavior.
            '''
      milestone: V2
      tests: []
    }
    {
      name: invalid_cmd
      desc: '''
            Verify `keymgr` security countermeasures on fault injection.

            Stimulus:
            Force one of these or both
            - Force advance, gen_id and gen_out to not one-hot
              - Path: `dut.u_ctrl.adv_en_o/id_en_o/gen_en_o`
            - Force KMAC FSM to default branch to trigger FSM error
              - Path: `dut.u_kmac_if.state_d`

            Checks:
            - Check interrupts `err` is triggered.
            - Check alert `fault_err` is triggered and err_code is `INVALID_CMD`.
            - Check KMAC output key and output data to SW are corrupted, also keymgr enters
              StDisabled.
            '''
      milestone: V2
      tests: []
    }
    {
      name: kmac_error
      desc: '''
            Verify `keymgr` behavior on error response received from `KMAC` after sending data to
            it.

            Stimulus:
            Drive error from KMAC interface when VALID is high.

            Checks:
            Same as above entry - "invalid_cmd".
            '''
      milestone: V2
      tests: []
    }
    {
      name: invalid_kmac_input
      desc: '''
            Verify `keymgr` behavior with invalid key version.

            Stimulus:
            Randomize KEY_VERSION and MAX_*_VER registers.

            Checks:
            when KEY_VERSION > MAX_*_VER
            - Check interrupts `err` is triggered.
            - Check alert `operation_err` is triggered and err_code is `INVALID_KMAC_INPUT`.
            - Check KMAC output key is corrupted and working state remains the same.
            '''
      milestone: V2
      tests: []
    }
    {
      name: invalid_kmac_data
      desc: '''
            Verify `keymgr` behavior with invalid data patterns.

            Stimulus:
            Use all 0s or 1s as KMAC input digest data

            Checks:
            - Check interrupts `err` is triggered.
            - Check alert `operation_err` is triggered and err_code is `INVALID_KMAC_DATA`.
            - Check SW output isn't updated and working state remains the same.
            '''
      milestone: V2
      tests: []
    }
    {
      name: stress_all
      desc: '''
            - Combine above sequences in one test to run sequentially, except csr sequence and
              keymgr_cfgen (requires zero_delays)
            - Randomly add reset between each sequence'''
      milestone: V2
      tests: ["keymgr_stress_all"]
    }
  ]
}
