Merge pull request #13137 from PeterKietzmann/pr_puf_opt_softreset

sys/puf_sram: counter based seed after soft reset
This commit is contained in:
Marian Buschsieweke
2020-01-21 13:20:11 +01:00
committed by GitHub
3 changed files with 20 additions and 0 deletions
+7
View File
@@ -89,6 +89,13 @@ extern uint32_t puf_sram_seed;
*/
extern uint32_t puf_sram_state;
/**
* @brief Counter variable allocated in puf_sram.c. It is incremented
during each soft reset when no new PUF measurement was taken
and it gets reset to zero after a power cycle was detected.
*/
extern uint32_t puf_sram_softreset_cnt;
/**
* @brief checks source of reboot by @p puf_sram_softreset and conditionally
calls @p puf_sram_generate
+12
View File
@@ -24,6 +24,9 @@ PUF_SRAM_ATTRIBUTES uint32_t puf_sram_seed;
/* Allocation of the PUF seed state */
PUF_SRAM_ATTRIBUTES uint32_t puf_sram_state;
/* Allocation of the PUF soft reset conter*/
PUF_SRAM_ATTRIBUTES uint32_t puf_sram_softreset_cnt;
/* Allocation of the memory marker */
PUF_SRAM_ATTRIBUTES uint32_t puf_sram_marker;
@@ -42,6 +45,8 @@ void puf_sram_generate(const uint8_t *ram, size_t len)
puf_sram_marker = PUF_SRAM_MARKER;
/* setting state to 0 means seed was generated from SRAM pattern */
puf_sram_state = 0;
/* reset counter of detected soft resets */
puf_sram_softreset_cnt = 0;
}
bool puf_sram_softreset(void)
@@ -51,5 +56,12 @@ bool puf_sram_softreset(void)
return 0;
}
puf_sram_state = 1;
/* increment number of detected soft resets */
puf_sram_softreset_cnt++;
/* generate alterntive seed value */
puf_sram_seed ^= puf_sram_softreset_cnt;
puf_sram_seed = dek_hash((uint8_t *)&puf_sram_seed, sizeof(puf_sram_seed));
return 1;
}
+1
View File
@@ -3,5 +3,6 @@ BOARD ?= nucleo-f411re
include ../Makefile.tests_common
USEMODULE += puf_sram
DISABLE_MODULE += test_utils_interactive_sync
include $(RIOTBASE)/Makefile.include