// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
  name: "hmac"
  import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/alert_test_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/intr_test_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/stress_all_with_reset_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/tl_device_access_types_testplan.hjson",
                     "hmac_sec_cm_testplan.hjson"]
  testpoints: [
    {
      name: smoke
      desc: '''HMAC smoke test performs a few round of HMAC or SHA256-ONLY transactions with the
      prodecures below:
            - Set configuration register to randomly enable SHA256, hmac, endian_swap, and digest_swap
            - Set interrupt enable register to randomly enable fifo_full, hmac_done, and err_code
              interupts
            - Randomly read previous digest result
            - Write key
            - Trigger HMAC hash_start
            - Write HMAC message fifo with message length between 0 and 64 bytes
            - check status and interrupt
            - Trigger HMAC hash_process
            - After hmac_done interrupt, read and check digest data'''
      stage: V1
      tests: ["hmac_smoke"]
    }
    {
      name: long_msg
      desc: '''Long_msg test is based on the smoke test. The message length is between 0 and
            10,000 bytes.'''
      stage: V2
      tests: ["hmac_long_msg"]
    }
    {
      name: back_pressure
      desc: '''Back_pressure test is based on the long_msg test. The test disabled all the protocol
            delays to make sure to have high chance of hitting the FIFO_FULL status.'''
      stage: V2
      tests: ["hmac_back_pressure"]
    }
    {
      name: test_vectors
      desc: '''From [NIST](https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program/Secure-Hashing#shavs)
            and [IETF](https://tools.ietf.org/html/rfc4868) websites, this test intends to use HMAC
            and SHA test vectors to check if the reference model predicts correct data, and check if
            DUT returns correct data.'''
      stage: V2
      tests: ["hmac_test_sha_vectors", "hmac_test_hmac_vectors"]
    }
    {
      name: burst_wr
      desc: '''Burst_wr test is based on the long_msg test. The test intends to test burst write a
            pre-defined size of message without any status or interrupt checking.'''
      stage: V2
      tests: ["hmac_burst_wr"]
    }
    {
      name: datapath_stress
      desc: '''Datapath_stress test is based on the long_msg test. It enabled HMAC and message length
            is set to N*64+1 in order to stress the datapath.'''
      stage: V2
      tests: ["hmac_datapath_stress"]
    }
    {
      name: error
      desc: '''This error case runs sequences that will cause interrupt bit hmac_err to set.
            This sequence includes:
            - Write msg_fifo or set hash_start when sha is disabled
            - Update secret key when hash is in process
            - Set hash_start when hash is active
            - Write msg before hash_start is set'''
      stage: V2
      tests: ["hmac_error"]
    }
    {
      name: wipe_secret
      desc: '''This test issues wipe_secret on hmac process datapath.
            Based on the smoke sequence, this sequence increases the message length, and randomly
            issues wipe_secret in one of the following scenarios:
            - Before entering HMAC secret keys.
              This scenario represents wiping secrets when HMAC is idle.
            - Before issuing HMAC start command.
              This scenario represents wiping secrets when HMAC entered secret keys.
            - Before issuing HMAC process command.
              This scenario represents wiping secrets when HMAC is streaming in message data.
            - Before HMAC finishes hashing process.
              This scenario represents wiping secrets when HMAC is hashing messages and keys.
            **Checks**:
            The scoreboard will check if digest data are corrupted.
            '''
      stage: V2
      tests: ["hmac_wipe_secret"]
    }
    {
      name: stress_all
      desc: "Stress_all test is a random mix of all the test above except csr tests."
      stage: V2
      tests: ["hmac_stress_all"]
    }
    {
      name: write_config_and_secret_key_during_msg_wr
      desc: "Change config registers and secret keys during msg write, make sure access is blocked."
      stage: V3
      tests: ["hmac_smoke"]
    }
  ]

  covergroups: [
    {
      name: cfg_cg
      desc: '''Covers the cfg configurations below and their cross:
            - hmac_en
            - endian_swap
            - digest_swap
            '''
    }
    {
      name: status_cg
      desc: '''Covers the status bits below and cross them with different configurations above:
            - fifo_empty
            - fifo_full
            - fifo_depth
            '''
    }
    {
      name: err_code_cg
      desc: '''Covers the error scenarios below:
            - No error.
            - Push message when sha is disabled.
            - Hash starts when sha is disabled.
            - Update secret key when hash is in progress.
            - Issue hash start again when hash in progress.
            - Push message when hmac is idle.
            '''
    }
    {
      name: msg_len_cg
      desc: "Covers the length of the streamed in message."
    }
  ]
}
