[sw/silicon_creator] Remove NULL checks from hmac functions
Signed-off-by: Alphan Ulusoy <alphan@google.com>
diff --git a/sw/device/silicon_creator/lib/boot_data.c b/sw/device/silicon_creator/lib/boot_data.c
index 15f489a..54076a4 100644
--- a/sw/device/silicon_creator/lib/boot_data.c
+++ b/sw/device/silicon_creator/lib/boot_data.c
@@ -57,8 +57,8 @@
* @param[out] digest Digest of the boot data entry.
* @return The result of the operation.
*/
-static rom_error_t boot_data_digest_compute(const void *boot_data,
- hmac_digest_t *digest) {
+static void boot_data_digest_compute(const void *boot_data,
+ hmac_digest_t *digest) {
enum {
kDigestRegionOffset = sizeof((boot_data_t){0}.digest),
kDigestRegionSize = sizeof(boot_data_t) - kDigestRegionOffset,
@@ -67,10 +67,9 @@
"`digest` must be the first field of `boot_data_t`.");
hmac_sha256_init();
- RETURN_IF_ERROR(hmac_sha256_update(
- (const char *)boot_data + kDigestRegionOffset, kDigestRegionSize));
- RETURN_IF_ERROR(hmac_sha256_final(digest));
- return kErrorOk;
+ hmac_sha256_update((const char *)boot_data + kDigestRegionOffset,
+ kDigestRegionSize);
+ hmac_sha256_final(digest);
}
/**
@@ -87,7 +86,7 @@
*is_valid = kHardenedBoolFalse;
hmac_digest_t act_digest;
- RETURN_IF_ERROR(boot_data_digest_compute(boot_data, &act_digest));
+ boot_data_digest_compute(boot_data, &act_digest);
if (memcmp(&act_digest, boot_data, sizeof(act_digest.digest)) == 0) {
*is_valid = kHardenedBoolTrue;
}
@@ -509,7 +508,7 @@
// Note: Not checking for wraparound since a successful write will
// invalidate the old entry.
new_entry.counter = active_page.last_valid_entry.counter + 1;
- RETURN_IF_ERROR(boot_data_digest_compute(&new_entry, &new_entry.digest));
+ boot_data_digest_compute(&new_entry, &new_entry.digest);
if (active_page.has_empty_entry == kHardenedBoolTrue) {
RETURN_IF_ERROR(boot_data_entry_write(active_page.page,
active_page.first_empty_index,
@@ -530,7 +529,7 @@
// Erase the first page and write the entry there if the active page cannot
// be found, i.e. the storage is not initialized yet.
new_entry.counter = kBootDataDefault.counter + 1;
- RETURN_IF_ERROR(boot_data_digest_compute(&new_entry, &new_entry.digest));
+ boot_data_digest_compute(&new_entry, &new_entry.digest);
RETURN_IF_ERROR(
boot_data_entry_write(kPages[0], 0, &new_entry, kHardenedBoolTrue));
} else {
diff --git a/sw/device/silicon_creator/lib/boot_data_functest.c b/sw/device/silicon_creator/lib/boot_data_functest.c
index a720097..078695b 100644
--- a/sw/device/silicon_creator/lib/boot_data_functest.c
+++ b/sw/device/silicon_creator/lib/boot_data_functest.c
@@ -172,9 +172,9 @@
hmac_digest_t act_digest;
hmac_sha256_init();
- RETURN_IF_ERROR(hmac_sha256_update(
- (const char *)boot_data + kDigestRegionOffset, kDigestRegionSize));
- RETURN_IF_ERROR(hmac_sha256_final(&act_digest));
+ hmac_sha256_update((const char *)boot_data + kDigestRegionOffset,
+ kDigestRegionSize);
+ hmac_sha256_final(&act_digest);
if (memcmp(&act_digest, &boot_data->digest, sizeof(act_digest)) != 0) {
return kErrorUnknown;
}
diff --git a/sw/device/silicon_creator/lib/drivers/hmac.c b/sw/device/silicon_creator/lib/drivers/hmac.c
index dba3ec4..c407673 100644
--- a/sw/device/silicon_creator/lib/drivers/hmac.c
+++ b/sw/device/silicon_creator/lib/drivers/hmac.c
@@ -36,10 +36,7 @@
abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_CMD_REG_OFFSET, reg);
}
-rom_error_t hmac_sha256_update(const void *data, size_t len) {
- if (data == NULL) {
- return kErrorHmacInvalidArgument;
- }
+void hmac_sha256_update(const void *data, size_t len) {
const uint8_t *data_sent = (const uint8_t *)data;
// Individual byte writes are needed if the buffer isn't word aligned.
@@ -60,14 +57,9 @@
abs_mmio_write8(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET,
*data_sent++);
}
- return kErrorOk;
}
-rom_error_t hmac_sha256_final(hmac_digest_t *digest) {
- if (digest == NULL) {
- return kErrorHmacInvalidArgument;
- }
-
+void hmac_sha256_final(hmac_digest_t *digest) {
uint32_t reg = 0;
reg = bitfield_bit32_write(reg, HMAC_CMD_HASH_PROCESS_BIT, true);
abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_CMD_REG_OFFSET, reg);
@@ -86,5 +78,4 @@
abs_mmio_read32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_DIGEST_7_REG_OFFSET -
(i * sizeof(uint32_t)));
}
- return kErrorOk;
}
diff --git a/sw/device/silicon_creator/lib/drivers/hmac.h b/sw/device/silicon_creator/lib/drivers/hmac.h
index eaa58e8..c0a51c1 100644
--- a/sw/device/silicon_creator/lib/drivers/hmac.h
+++ b/sw/device/silicon_creator/lib/drivers/hmac.h
@@ -47,19 +47,15 @@
*
* @param data Buffer to copy data from.
* @param len size of the `data` buffer.
- * @return The result of the operation.
*/
-HMAC_WARN_UNUSED_RESULT
-rom_error_t hmac_sha256_update(const void *data, size_t len);
+void hmac_sha256_update(const void *data, size_t len);
/**
* Finalizes SHA256 operation and writes `digest` buffer.
*
* @param[out] digest Buffer to copy digest to.
- * @return The result of the operation.
*/
-HMAC_WARN_UNUSED_RESULT
-rom_error_t hmac_sha256_final(hmac_digest_t *digest);
+void hmac_sha256_final(hmac_digest_t *digest);
#ifdef __cplusplus
}
diff --git a/sw/device/silicon_creator/lib/drivers/hmac_functest.c b/sw/device/silicon_creator/lib/drivers/hmac_functest.c
index a51885d..c32667e 100644
--- a/sw/device/silicon_creator/lib/drivers/hmac_functest.c
+++ b/sw/device/silicon_creator/lib/drivers/hmac_functest.c
@@ -37,11 +37,10 @@
rom_error_t hmac_test(void) {
hmac_sha256_init();
- RETURN_IF_ERROR(
- hmac_sha256_update(kGettysburgPrelude, sizeof(kGettysburgPrelude) - 1));
+ hmac_sha256_update(kGettysburgPrelude, sizeof(kGettysburgPrelude) - 1);
hmac_digest_t digest;
- RETURN_IF_ERROR(hmac_sha256_final(&digest));
+ hmac_sha256_final(&digest);
const size_t len = ARRAYSIZE(digest.digest);
for (int i = 0; i < len; ++i) {
diff --git a/sw/device/silicon_creator/lib/drivers/hmac_unittest.cc b/sw/device/silicon_creator/lib/drivers/hmac_unittest.cc
index 28d517d..706744a 100644
--- a/sw/device/silicon_creator/lib/drivers/hmac_unittest.cc
+++ b/sw/device/silicon_creator/lib/drivers/hmac_unittest.cc
@@ -46,10 +46,6 @@
class Sha256UpdateTest : public HmacTest {};
-TEST_F(Sha256UpdateTest, NullArgs) {
- EXPECT_EQ(hmac_sha256_update(nullptr, 0), kErrorHmacInvalidArgument);
-}
-
TEST_F(Sha256UpdateTest, SendData) {
constexpr std::array<uint8_t, 16> kData = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
@@ -59,11 +55,11 @@
// Trigger 8bit aligned writes.
EXPECT_ABS_WRITE8(base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x01);
EXPECT_ABS_WRITE8(base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x02);
- EXPECT_EQ(hmac_sha256_update(&kData[1], 2), kErrorOk);
+ hmac_sha256_update(&kData[1], 2);
// Trigger a single 32bit aligned write.
EXPECT_ABS_WRITE32(base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x03020100);
- EXPECT_EQ(hmac_sha256_update(&kData[0], 4), kErrorOk);
+ hmac_sha256_update(&kData[0], 4);
// Trigger 8bit/32bit/8bit sequence.
EXPECT_ABS_WRITE8(base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x02);
@@ -71,15 +67,11 @@
EXPECT_ABS_WRITE32(base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x07060504);
EXPECT_ABS_WRITE8(base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x08);
EXPECT_ABS_WRITE8(base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x09);
- EXPECT_EQ(hmac_sha256_update(&kData[2], 8), kErrorOk);
+ hmac_sha256_update(&kData[2], 8);
}
class Sha256FinalTest : public HmacTest {};
-TEST_F(Sha256FinalTest, NullArgs) {
- EXPECT_EQ(hmac_sha256_final(nullptr), kErrorHmacInvalidArgument);
-}
-
TEST_F(Sha256FinalTest, GetDigest) {
constexpr std::array<uint32_t, 8> kExpectedDigest = {
0x00000000, 0x11111111, 0x22222222, 0x33333333,
@@ -116,7 +108,7 @@
EXPECT_ABS_READ32(base_ + HMAC_DIGEST_0_REG_OFFSET, kExpectedDigest[7]);
hmac_digest_t got_digest;
- EXPECT_EQ(hmac_sha256_final(&got_digest), kErrorOk);
+ hmac_sha256_final(&got_digest);
EXPECT_THAT(got_digest.digest, ElementsAreArray(kExpectedDigest));
}
diff --git a/sw/device/silicon_creator/lib/error.h b/sw/device/silicon_creator/lib/error.h
index 6f1950b..8db048e 100644
--- a/sw/device/silicon_creator/lib/error.h
+++ b/sw/device/silicon_creator/lib/error.h
@@ -27,7 +27,6 @@
kModuleUnknown = 0,
kModuleAlertHandler = MODULE_CODE('A', 'H'),
kModuleUart = MODULE_CODE('U', 'A'),
- kModuleHmac = MODULE_CODE('H', 'M'),
kModuleSigverify = MODULE_CODE('S', 'V'),
kModuleKeymgr = MODULE_CODE('K', 'M'),
kModuleManifest = MODULE_CODE('M', 'A'),
@@ -74,7 +73,6 @@
X(kErrorOk, 0x739), \
X(kErrorUartInvalidArgument, ERROR_(1, kModuleUart, kInvalidArgument)), \
X(kErrorUartBadBaudRate, ERROR_(2, kModuleUart, kInvalidArgument)), \
- X(kErrorHmacInvalidArgument, ERROR_(1, kModuleHmac, kInvalidArgument)), \
X(kErrorSigverifyBadEncodedMessage, ERROR_(1, kModuleSigverify, kInvalidArgument)), \
X(kErrorSigverifyBadKey, ERROR_(2, kModuleSigverify, kInvalidArgument)), \
X(kErrorSigverifyBadOtpValue, ERROR_(3, kModuleSigverify, kInternal)), \
diff --git a/sw/device/silicon_creator/lib/sigverify.c b/sw/device/silicon_creator/lib/sigverify.c
index db22db0..6cb8303 100644
--- a/sw/device/silicon_creator/lib/sigverify.c
+++ b/sw/device/silicon_creator/lib/sigverify.c
@@ -244,10 +244,7 @@
default:
HARDENED_UNREACHABLE();
}
- RETURN_IF_ERROR(
- sigverify_encoded_message_check(&enc_msg, act_digest, flash_exec));
-
- return kErrorOk;
+ return sigverify_encoded_message_check(&enc_msg, act_digest, flash_exec);
}
void sigverify_usage_constraints_get(
diff --git a/sw/device/silicon_creator/lib/sigverify_functest.c b/sw/device/silicon_creator/lib/sigverify_functest.c
index 4a0b6a1..4ad8d4d 100644
--- a/sw/device/silicon_creator/lib/sigverify_functest.c
+++ b/sw/device/silicon_creator/lib/sigverify_functest.c
@@ -120,11 +120,10 @@
},
};
-rom_error_t compute_digest(void) {
+void compute_digest(void) {
hmac_sha256_init();
- RETURN_IF_ERROR(hmac_sha256_update(&kMessage, sizeof(kMessage) - 1));
- RETURN_IF_ERROR(hmac_sha256_final(&act_digest));
- return kErrorOk;
+ hmac_sha256_update(&kMessage, sizeof(kMessage) - 1);
+ hmac_sha256_final(&act_digest);
}
rom_error_t sigverify_test_exp_3(void) {
@@ -163,7 +162,7 @@
bool test_main(void) {
rom_error_t result = kErrorOk;
- CHECK(compute_digest() == kErrorOk);
+ compute_digest();
EXECUTE_TEST(result, sigverify_test_exp_3);
EXECUTE_TEST(result, sigverify_test_exp_65537);
diff --git a/sw/device/silicon_creator/mask_rom/mask_rom.c b/sw/device/silicon_creator/mask_rom/mask_rom.c
index 02b9e96..fab44b9 100644
--- a/sw/device/silicon_creator/mask_rom/mask_rom.c
+++ b/sw/device/silicon_creator/mask_rom/mask_rom.c
@@ -122,15 +122,15 @@
manifest_usage_constraints_t usage_constraints_from_hw;
sigverify_usage_constraints_get(manifest->usage_constraints.selector_bits,
&usage_constraints_from_hw);
- RETURN_IF_ERROR(hmac_sha256_update(&usage_constraints_from_hw,
- sizeof(usage_constraints_from_hw)));
+ hmac_sha256_update(&usage_constraints_from_hw,
+ sizeof(usage_constraints_from_hw));
// Hash the remaining part of the image.
manifest_digest_region_t digest_region = manifest_digest_region_get(manifest);
- RETURN_IF_ERROR(
- hmac_sha256_update(digest_region.start, digest_region.length));
+
+ hmac_sha256_update(digest_region.start, digest_region.length);
// Verify signature
hmac_digest_t act_digest;
- RETURN_IF_ERROR(hmac_sha256_final(&act_digest));
+ hmac_sha256_final(&act_digest);
return sigverify_rsa_verify(&manifest->signature, key, &act_digest, lc_state,
flash_exec);
}
diff --git a/sw/device/silicon_creator/mask_rom/primitive_bootstrap.c b/sw/device/silicon_creator/mask_rom/primitive_bootstrap.c
index ef499b4..a412ebe 100644
--- a/sw/device/silicon_creator/mask_rom/primitive_bootstrap.c
+++ b/sw/device/silicon_creator/mask_rom/primitive_bootstrap.c
@@ -106,12 +106,11 @@
/**
* Computes the SHA256 of the given data.
*/
-static rom_error_t compute_sha256(const void *data, size_t len,
- hmac_digest_t *digest) {
+static void compute_sha256(const void *data, size_t len,
+ hmac_digest_t *digest) {
hmac_sha256_init();
- RETURN_IF_ERROR(hmac_sha256_update(data, len));
- RETURN_IF_ERROR(hmac_sha256_final(digest));
- return kErrorOk;
+ hmac_sha256_update(data, len);
+ hmac_sha256_final(digest);
}
/**
@@ -119,16 +118,14 @@
*
* Returns true if the hashes match.
*/
-static rom_error_t check_frame_hash(const spiflash_frame_t *frame,
- bool *result) {
+static bool check_frame_hash(const spiflash_frame_t *frame) {
hmac_digest_t digest;
size_t digest_len = sizeof(digest.digest);
uint8_t *data = ((uint8_t *)frame) + digest_len;
- RETURN_IF_ERROR(
- compute_sha256(data, sizeof(spiflash_frame_t) - digest_len, &digest));
- *result = memcmp(digest.digest, frame->header.hash.digest, digest_len) == 0;
- return kErrorOk;
+
+ compute_sha256(data, sizeof(spiflash_frame_t) - digest_len, &digest);
+ return memcmp(digest.digest, frame->header.hash.digest, digest_len) == 0;
}
/**
@@ -149,9 +146,7 @@
uint32_t frame_num = SPIFLASH_FRAME_NUM(frame.header.frame_num);
if (frame_num == expected_frame_num) {
- bool frame_result = false;
- RETURN_IF_ERROR(check_frame_hash(&frame, &frame_result));
- if (!frame_result) {
+ if (!check_frame_hash(&frame)) {
log_printf("Detected hash mismatch on frame 0x%x\n\r",
(unsigned int)frame_num);
RETURN_IF_ERROR(
@@ -159,7 +154,7 @@
continue;
}
- RETURN_IF_ERROR(compute_sha256(&frame, sizeof(spiflash_frame_t), &ack));
+ compute_sha256(&frame, sizeof(spiflash_frame_t), &ack);
RETURN_IF_ERROR(
spi_device_send((uint8_t *)&ack.digest, sizeof(ack.digest)));
diff --git a/sw/device/silicon_creator/rom_ext/rom_ext.c b/sw/device/silicon_creator/rom_ext/rom_ext.c
index a3ca7c5..fe00dd3 100644
--- a/sw/device/silicon_creator/rom_ext/rom_ext.c
+++ b/sw/device/silicon_creator/rom_ext/rom_ext.c
@@ -78,19 +78,17 @@
manifest_usage_constraints_t usage_constraints_from_hw;
sigverify_usage_constraints_get(manifest->usage_constraints.selector_bits,
&usage_constraints_from_hw);
- RETURN_IF_ERROR(hmac_sha256_update(&usage_constraints_from_hw,
- sizeof(usage_constraints_from_hw)));
+ hmac_sha256_update(&usage_constraints_from_hw,
+ sizeof(usage_constraints_from_hw));
// Hash the remaining part of the image.
manifest_digest_region_t digest_region = manifest_digest_region_get(manifest);
- RETURN_IF_ERROR(
- hmac_sha256_update(digest_region.start, digest_region.length));
+ hmac_sha256_update(digest_region.start, digest_region.length);
// Verify signature
hmac_digest_t act_digest;
- RETURN_IF_ERROR(hmac_sha256_final(&act_digest));
+ hmac_sha256_final(&act_digest);
uint32_t flash_exec = 0;
- RETURN_IF_ERROR(sigverify_rsa_verify(&manifest->signature, key, &act_digest,
- lc_state, &flash_exec));
- return kErrorOk;
+ return sigverify_rsa_verify(&manifest->signature, key, &act_digest, lc_state,
+ &flash_exec);
}
static rom_error_t rom_ext_boot(const manifest_t *manifest) {