|  | // 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." | 
|  | } | 
|  | ] | 
|  | } |