blob: d416e5a3acd08001244c16485b569b47dc21f2f0 [file] [log] [blame]
// 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."
}
]
}