mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-04 05:42:34 +00:00
fix /dev/urandom problem
This commit is contained in:
parent
ffedf8a4d0
commit
00954da5fe
22
rand.c
22
rand.c
@ -26,17 +26,13 @@
|
|||||||
|
|
||||||
#include "rand.h"
|
#include "rand.h"
|
||||||
|
|
||||||
static FILE *f;
|
static FILE *frand = NULL;
|
||||||
|
|
||||||
void init_rand(void)
|
|
||||||
{
|
|
||||||
f = fopen("/dev/urandom", "r");
|
|
||||||
}
|
|
||||||
|
|
||||||
int finalize_rand(void)
|
int finalize_rand(void)
|
||||||
{
|
{
|
||||||
int err = fclose(f);
|
if (!frand) return 0;
|
||||||
f = NULL;
|
int err = fclose(frand);
|
||||||
|
frand = NULL;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +40,10 @@ uint32_t random32(void)
|
|||||||
{
|
{
|
||||||
uint32_t r;
|
uint32_t r;
|
||||||
size_t len = sizeof(r);
|
size_t len = sizeof(r);
|
||||||
size_t len_read = fread(&r, 1, len, f);
|
if (!frand) {
|
||||||
|
frand = fopen("/dev/urandom", "r");
|
||||||
|
}
|
||||||
|
size_t len_read = fread(&r, 1, len, frand);
|
||||||
(void)len_read;
|
(void)len_read;
|
||||||
assert(len_read == len);
|
assert(len_read == len);
|
||||||
return r;
|
return r;
|
||||||
@ -59,7 +58,10 @@ uint32_t random_uniform(uint32_t n)
|
|||||||
|
|
||||||
void random_buffer(uint8_t *buf, size_t len)
|
void random_buffer(uint8_t *buf, size_t len)
|
||||||
{
|
{
|
||||||
size_t len_read = fread(buf, 1, len, f);
|
if (!frand) {
|
||||||
|
frand = fopen("/dev/urandom", "r");
|
||||||
|
}
|
||||||
|
size_t len_read = fread(buf, 1, len, frand);
|
||||||
(void)len_read;
|
(void)len_read;
|
||||||
assert(len_read == len);
|
assert(len_read == len);
|
||||||
}
|
}
|
||||||
|
1
rand.h
1
rand.h
@ -27,7 +27,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
void init_rand(void);
|
|
||||||
int finalize_rand(void);
|
int finalize_rand(void);
|
||||||
uint32_t random32(void);
|
uint32_t random32(void);
|
||||||
uint32_t random_uniform(uint32_t n);
|
uint32_t random_uniform(uint32_t n);
|
||||||
|
@ -38,7 +38,6 @@ int main(int argc, char *argv[])
|
|||||||
EC_GROUP *ecgroup;
|
EC_GROUP *ecgroup;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
init_rand();
|
|
||||||
ecgroup = EC_GROUP_new_by_curve_name(NID_secp256k1);
|
ecgroup = EC_GROUP_new_by_curve_name(NID_secp256k1);
|
||||||
|
|
||||||
unsigned long max_iterations = -1;
|
unsigned long max_iterations = -1;
|
||||||
|
1
tests.c
1
tests.c
@ -1442,7 +1442,6 @@ Suite *test_suite(void)
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int number_failed;
|
int number_failed;
|
||||||
init_rand(); // needed for scalar_multiply()
|
|
||||||
Suite *s = test_suite();
|
Suite *s = test_suite();
|
||||||
SRunner *sr = srunner_create(s);
|
SRunner *sr = srunner_create(s);
|
||||||
srunner_run_all(sr, CK_VERBOSE);
|
srunner_run_all(sr, CK_VERBOSE);
|
||||||
|
Loading…
Reference in New Issue
Block a user