fw: Rename partition digest to checksum

- Rename functions, defines, et c to indicate that it's a checksum
  over the partition, not necessarily a cryptographic hash digest even
  though we use a version of BLAKE2s.

- Add comments describing where the checksum is stored and what it is
  used for.

Co-authored-by: Mikael Ågren <mikael@tillitis.se>
This commit is contained in:
Michael Cardell Widerkrantz 2025-04-25 16:24:33 +02:00
parent 106a7a5613
commit 66ea8df1d9
No known key found for this signature in database
GPG key ID: D3DB3DDF57E704E5
2 changed files with 16 additions and 12 deletions

View file

@ -17,11 +17,13 @@ enum part_status part_get_status(void)
return part_status; return part_status;
} }
static void part_digest(struct partition_table *part_table, uint8_t *out_digest, static void part_checksum(struct partition_table *part_table,
size_t out_len); uint8_t *out_digest, size_t out_len);
static void part_digest(struct partition_table *part_table, uint8_t *out_digest, // part_digest computes a checksum over the partition table to detect
size_t out_len) // flash problems
static void part_checksum(struct partition_table *part_table,
uint8_t *out_digest, size_t out_len)
{ {
int blake2err = 0; int blake2err = 0;
@ -50,7 +52,7 @@ int part_table_read(struct partition_table_storage *storage)
ADDR_PARTITION_TABLE_0, ADDR_PARTITION_TABLE_0,
ADDR_PARTITION_TABLE_1, ADDR_PARTITION_TABLE_1,
}; };
uint8_t check_digest[PART_DIGEST_SIZE] = {0}; uint8_t check_digest[PART_CHECKSUM_SIZE] = {0};
if (storage == NULL) { if (storage == NULL) {
return -1; return -1;
@ -64,10 +66,10 @@ int part_table_read(struct partition_table_storage *storage)
sizeof(*storage)) != 0) { sizeof(*storage)) != 0) {
return -1; return -1;
} }
part_digest(&storage->table, check_digest, part_checksum(&storage->table, check_digest,
sizeof(check_digest)); sizeof(check_digest));
if (memeq(check_digest, storage->check_digest, if (memeq(check_digest, storage->checksum,
sizeof(check_digest))) { sizeof(check_digest))) {
if (i == 1) { if (i == 1) {
part_status = PART_SLOT0_INVALID; part_status = PART_SLOT0_INVALID;
@ -91,8 +93,8 @@ int part_table_write(struct partition_table_storage *storage)
return -1; return -1;
} }
part_digest(&storage->table, storage->check_digest, part_checksum(&storage->table, storage->checksum,
sizeof(storage->check_digest)); sizeof(storage->checksum));
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
flash_sector_erase(offset[i]); flash_sector_erase(offset[i]);

View file

@ -46,7 +46,7 @@
#define SIZE_STORAGE_AREA 0x20000UL // 128KiB #define SIZE_STORAGE_AREA 0x20000UL // 128KiB
#define N_STORAGE_AREA 4 #define N_STORAGE_AREA 4
#define PART_DIGEST_SIZE 16 #define PART_CHECKSUM_SIZE 16
enum part_status { enum part_status {
PART_SLOT0_INVALID = 1, PART_SLOT0_INVALID = 1,
@ -70,6 +70,8 @@ enum part_status {
/* - 1 byte status. */ /* - 1 byte status. */
/* - 16 bytes random nonce. */ /* - 16 bytes random nonce. */
/* - 16 bytes authentication tag. */ /* - 16 bytes authentication tag. */
/**/
/*- Checksum over the above */
struct auth_metadata { struct auth_metadata {
uint8_t nonce[16]; uint8_t nonce[16];
@ -99,7 +101,7 @@ struct partition_table {
struct partition_table_storage { struct partition_table_storage {
struct partition_table table; struct partition_table table;
uint8_t check_digest[PART_DIGEST_SIZE]; uint8_t checksum[PART_CHECKSUM_SIZE]; // Helps detect flash problems
} __attribute__((packed)); } __attribute__((packed));
enum part_status part_get_status(void); enum part_status part_get_status(void);