mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-21 15:08:12 +00:00
core: Use PRNG when generating random delays.
This commit is contained in:
parent
1d9e125fd4
commit
f677a0f0db
@ -26,7 +26,9 @@ SOURCE_MOD += [
|
||||
'vendor/trezor-crypto/ed25519-donna/ed25519-donna-32bit-tables.c',
|
||||
'vendor/trezor-crypto/ed25519-donna/ed25519-donna-impl-base.c',
|
||||
'vendor/trezor-crypto/ed25519-donna/modm-donna-32bit.c',
|
||||
'vendor/trezor-crypto/hmac_drbg.c',
|
||||
'vendor/trezor-crypto/memzero.c',
|
||||
'vendor/trezor-crypto/rand.c',
|
||||
'vendor/trezor-crypto/sha2.c',
|
||||
]
|
||||
|
||||
|
@ -12,7 +12,10 @@ CPPPATH_MOD += [
|
||||
'vendor/trezor-crypto',
|
||||
]
|
||||
SOURCE_MOD += [
|
||||
'vendor/trezor-crypto/hmac_drbg.c',
|
||||
'vendor/trezor-crypto/memzero.c',
|
||||
'vendor/trezor-crypto/rand.c',
|
||||
'vendor/trezor-crypto/sha2.c',
|
||||
]
|
||||
|
||||
# modtrezorui
|
||||
|
@ -234,6 +234,7 @@ static void check_bootloader_version(void) {
|
||||
#endif
|
||||
|
||||
int main(void) {
|
||||
drbg_init();
|
||||
touch_init();
|
||||
touch_power_on();
|
||||
|
||||
|
@ -43,6 +43,9 @@
|
||||
#include "touch.h"
|
||||
|
||||
int main(void) {
|
||||
// initialize pseudo-random number generator
|
||||
drbg_init();
|
||||
|
||||
// reinitialize HAL for Trezor One
|
||||
#if TREZOR_MODEL == 1
|
||||
HAL_Init();
|
||||
|
@ -371,6 +371,7 @@ static secbool startswith(const char *s, const char *prefix) {
|
||||
|
||||
int main(void) {
|
||||
display_orientation(0);
|
||||
drbg_init();
|
||||
sdcard_init();
|
||||
touch_init();
|
||||
sbu_init();
|
||||
|
@ -25,13 +25,15 @@
|
||||
#include "display.h"
|
||||
#include "flash.h"
|
||||
#include "rand.h"
|
||||
#include "rng.h"
|
||||
#include "hmac_drbg.h"
|
||||
|
||||
#include "stm32f4xx_ll_utils.h"
|
||||
|
||||
// from util.s
|
||||
extern void shutdown(void);
|
||||
|
||||
static HMAC_DRBG_CTX drbg_ctx;
|
||||
|
||||
#define COLOR_FATAL_ERROR RGB16(0x7F, 0x00, 0x00)
|
||||
|
||||
void __attribute__((noreturn))
|
||||
@ -121,7 +123,7 @@ void __assert_func(const char *file, int line, const char *func,
|
||||
void hal_delay(uint32_t ms) { HAL_Delay(ms); }
|
||||
|
||||
void delay_random(void) {
|
||||
int wait = rng_get() & 0xff;
|
||||
int wait = drbg_random32() & 0xff;
|
||||
volatile int i = 0;
|
||||
volatile int j = wait;
|
||||
while (i < wait) {
|
||||
@ -185,3 +187,23 @@ void collect_hw_entropy(void) {
|
||||
FLASH_OTP_BLOCK_SIZE),
|
||||
NULL);
|
||||
}
|
||||
|
||||
void drbg_init() {
|
||||
uint8_t entropy[48];
|
||||
random_buffer(entropy, sizeof(entropy));
|
||||
hmac_drbg_init(&drbg_ctx, entropy, sizeof(entropy), NULL, 0);
|
||||
}
|
||||
|
||||
void drbg_reseed(const uint8_t *entropy, size_t len) {
|
||||
hmac_drbg_reseed(&drbg_ctx, entropy, len, NULL, 0);
|
||||
}
|
||||
|
||||
void drbg_generate(uint8_t *buf, size_t len) {
|
||||
hmac_drbg_generate(&drbg_ctx, buf, len);
|
||||
}
|
||||
|
||||
uint32_t drbg_random32(void) {
|
||||
uint32_t value;
|
||||
drbg_generate((uint8_t *)&value, sizeof(value));
|
||||
return value;
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#ifndef __TREZORHAL_COMMON_H__
|
||||
#define __TREZORHAL_COMMON_H__
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "secbool.h"
|
||||
|
||||
@ -75,6 +76,11 @@ void collect_hw_entropy(void);
|
||||
#define HW_ENTROPY_LEN (12 + 32)
|
||||
extern uint8_t HW_ENTROPY_DATA[HW_ENTROPY_LEN];
|
||||
|
||||
void drbg_init();
|
||||
void drbg_reseed(const uint8_t *entropy, size_t len);
|
||||
void drbg_generate(uint8_t *buf, size_t len);
|
||||
uint32_t drbg_random32(void);
|
||||
|
||||
// the following functions are defined in util.s
|
||||
|
||||
void memset_reg(volatile void *start, volatile void *stop, uint32_t val);
|
||||
|
Loading…
Reference in New Issue
Block a user