AP_HAL_ChibiOS: allow HW without HW_RNG to SW-based create psuedo-random

This commit is contained in:
Tom Pittenger 2023-07-03 18:18:21 -07:00 committed by Andrew Tridgell
parent f885cb2eb6
commit d841d250d8
3 changed files with 21 additions and 5 deletions

View File

@ -705,9 +705,7 @@ bool Util::get_random_vals(uint8_t* data, size_t size)
{
#if HAL_USE_HW_RNG && defined(RNG)
size_t true_random_vals = stm32_rand_generate_nonblocking(data, size);
if (true_random_vals == size) {
return true;
} else {
if (true_random_vals != size) {
if (!(true_random_vals % 2)) {
data[true_random_vals] = (uint8_t)(get_random16() & 0xFF);
true_random_vals++;
@ -718,10 +716,18 @@ bool Util::get_random_vals(uint8_t* data, size_t size)
true_random_vals+=sizeof(uint16_t);
}
}
return true;
#else
return false;
size_t true_random_vals = 0;
while(true_random_vals < size) {
uint16_t val = get_random16();
memcpy(&data[true_random_vals], &val, sizeof(uint16_t));
true_random_vals+=sizeof(uint16_t);
}
if (size % 2) {
data[size-1] = get_random16() & 0xFF;
}
#endif
return true;
}
/**

View File

@ -177,6 +177,9 @@ bool stm32_rand_generate_blocking(unsigned char* output, unsigned int sz, uint32
unsigned int stm32_rand_generate_nonblocking(unsigned char* output, unsigned int sz);
#endif
// To be defined in HAL code
extern uint32_t chibios_rand_generate(void);
void stm32_flash_protect_flash(bool bootloader, bool protect);
void stm32_flash_unprotect_flash(void);

View File

@ -304,6 +304,13 @@ void __entry_hook()
}
#endif
uint32_t chibios_rand_generate()
{
uint32_t val;
hal.util->get_random_vals((uint8_t*)&val, sizeof(val));
return val;
}
}
namespace AP_HAL {