9 #include "gmock/gmock.h"
10 #include "gtest/gtest.h"
12 #include "sw/device/lib/base/mock_mmio.h"
15 #include "hmac_regs.h"
17 namespace dif_hmac_unittest {
30 .digest_size = kDifSHA256,
31 .key_length = kDifHMACKey256,
35 bool hmac_enable =
false;
36 bool sha_enable =
true;
37 bool msg_big_endian =
false;
38 bool digest_big_endian =
false;
39 uint32_t key_length = HMAC_CFG_KEY_LENGTH_VALUE_KEY_256;
40 uint32_t digest_size = HMAC_CFG_DIGEST_SIZE_VALUE_SHA2_256;
45 void ExpectConfig(
void) {
49 {HMAC_CFG_HMAC_EN_BIT, config_reg_.hmac_enable},
50 {HMAC_CFG_SHA_EN_BIT, config_reg_.sha_enable},
51 {HMAC_CFG_ENDIAN_SWAP_BIT, config_reg_.msg_big_endian},
52 {HMAC_CFG_DIGEST_SWAP_BIT, config_reg_.digest_big_endian},
53 {HMAC_CFG_DIGEST_SIZE_OFFSET, config_reg_.digest_size},
54 {HMAC_CFG_KEY_LENGTH_OFFSET, config_reg_.key_length},
58 void ExpectKey(
const uint8_t *key,
size_t size) {
59 for (
size_t i = 0; i < size; i +=
sizeof(uint32_t)) {
61 memcpy(&word, &key[i],
sizeof(uint32_t));
62 EXPECT_WRITE32(HMAC_KEY_7_REG_OFFSET - i, word);
69 static constexpr std::array<uint8_t, 32> kKey = {
70 0x68, 0x56, 0x6D, 0x59, 0x71, 0x33, 0x74, 0x36, 0x77, 0x39, 0x7A,
71 0x24, 0x43, 0x26, 0x46, 0x29, 0x4A, 0x40, 0x4E, 0x63, 0x51, 0x66,
72 0x54, 0x6A, 0x57, 0x6E, 0x5A, 0x72, 0x34, 0x75, 0x37, 0x78};
76 EXPECT_READ32(HMAC_CFG_REG_OFFSET, 0);
77 ExpectKey(kKey.data(), kKey.size());
79 EXPECT_READ32(HMAC_CMD_REG_OFFSET, 0);
80 EXPECT_WRITE32(HMAC_CMD_REG_OFFSET, {{HMAC_CMD_HASH_START_BIT,
true}});
85 constexpr std::array<uint8_t, 32> HmacMacTest::kKey;
87 TEST_F(
HmacMacTest, StartSuccess) { SuccessPath(); }
89 TEST_F(HmacMacTest, StartMsgBigEndianSuccess) {
90 config_reg_.msg_big_endian =
true;
96 TEST_F(HmacMacTest, StartDigestLittleEndianSuccess) {
97 config_reg_.digest_big_endian =
false;
103 TEST_F(HmacMacTest, StartBadArg) {
108 TEST_F(HmacMacTest, StartError) {
111 EXPECT_READ32(HMAC_CFG_REG_OFFSET, 0);
115 EXPECT_READ32(HMAC_CFG_REG_OFFSET, 0);
127 EXPECT_READ32(HMAC_CFG_REG_OFFSET, 0);
129 EXPECT_READ32(HMAC_CMD_REG_OFFSET, 0);
130 EXPECT_WRITE32(HMAC_CMD_REG_OFFSET, {{HMAC_CMD_HASH_START_BIT,
true}});
135 TEST_F(HmacSha256Test, StartMsgBigEndianSuccess) {
136 config_reg_.msg_big_endian =
true;
139 EXPECT_READ32(HMAC_CFG_REG_OFFSET, 0);
141 EXPECT_READ32(HMAC_CMD_REG_OFFSET, 0);
142 EXPECT_WRITE32(HMAC_CMD_REG_OFFSET, {{HMAC_CMD_HASH_START_BIT,
true}});
147 TEST_F(HmacSha256Test, StartDigestLittleEndianSuccess) {
148 config_reg_.digest_big_endian =
false;
151 EXPECT_READ32(HMAC_CFG_REG_OFFSET, 0);
153 EXPECT_READ32(HMAC_CMD_REG_OFFSET, 0);
154 EXPECT_WRITE32(HMAC_CMD_REG_OFFSET, {{HMAC_CMD_HASH_START_BIT,
true}});
159 TEST_F(HmacSha256Test, StartBadArg) {
163 TEST_F(HmacSha256Test, StartError) {
166 EXPECT_READ32(HMAC_CFG_REG_OFFSET, 0);
169 EXPECT_READ32(HMAC_CFG_REG_OFFSET, 0);
180 EXPECT_READ32(HMAC_CMD_REG_OFFSET, 0);
181 EXPECT_WRITE32(HMAC_CMD_REG_OFFSET, {{HMAC_CMD_HASH_PROCESS_BIT,
true}});
185 TEST_F(HmacProcessTest, ProcessBadArg) {
195 EXPECT_READ32(HMAC_MSG_LENGTH_LOWER_REG_OFFSET, 0xfd257515);
196 EXPECT_READ32(HMAC_MSG_LENGTH_UPPER_REG_OFFSET, 0xaf3975bc);
199 EXPECT_EQ(len, 0xaf3975bcfd257515);
202 TEST_F(HmacGetMessageLengthTest, BadArgHmac) {
207 TEST_F(HmacGetMessageLengthTest, BadArgLen) {