From 68f43f3cb238a71c8560829f77e3fdeccdb75712 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Fri, 16 Sep 2022 00:49:10 +0200 Subject: [PATCH] Adding functions for calling random in core0. Signed-off-by: Pol Henarejos --- src/rng/hwrng.c | 11 +++++++++++ src/rng/hwrng.h | 4 ++++ src/rng/random.c | 12 ++++++++++-- src/rng/random.h | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/rng/hwrng.c b/src/rng/hwrng.c index f0296a6..8022588 100644 --- a/src/rng/hwrng.c +++ b/src/rng/hwrng.c @@ -176,6 +176,17 @@ void neug_wait_full(void) { //should be called only on core1 } } +void neug_wait_full_ext(bool blocking) { + struct rng_rb *rb = &the_ring_buffer; + + while (!rb->full) { + if (blocking == true) + sleep_ms(1); + else + neug_task(); + } +} + void neug_fini(void) { neug_get(); } diff --git a/src/rng/hwrng.h b/src/rng/hwrng.h index a2d8b6e..2cea994 100644 --- a/src/rng/hwrng.h +++ b/src/rng/hwrng.h @@ -20,10 +20,14 @@ #define NEUG_PRE_LOOP 32 +#include +#include "pico/stdlib.h" + void neug_init(uint32_t *buf, uint8_t size); uint32_t neug_get(); void neug_flush(void); void neug_wait_full(void); +void neug_wait_full_ext(bool); void neug_fini(void); #endif \ No newline at end of file diff --git a/src/rng/random.c b/src/rng/random.c index 0ce3b94..5d3bbfb 100644 --- a/src/rng/random.c +++ b/src/rng/random.c @@ -79,13 +79,13 @@ void random_get_salt(uint8_t *p) { /* * Random byte iterator */ -int random_gen(void *arg, unsigned char *out, size_t out_len) { +int random_gen_ext(void *arg, unsigned char *out, size_t out_len, bool blocking) { uint8_t *index_p = (uint8_t *)arg; uint8_t index = index_p ? *index_p : 0; size_t n; while (out_len) { - neug_wait_full(); + neug_wait_full_ext(blocking); n = RANDOM_BYTES_LENGTH - index; if (n > out_len) @@ -107,3 +107,11 @@ int random_gen(void *arg, unsigned char *out, size_t out_len) { return 0; } + +int random_gen(void *arg, unsigned char *out, size_t out_len) { + return random_gen_ext(arg, out, out_len, true); +} + +int random_gen_core0(void *arg, unsigned char *out, size_t out_len) { + return random_gen_ext(arg, out, out_len, false); +} diff --git a/src/rng/random.h b/src/rng/random.h index b6dc6bf..8d05c00 100644 --- a/src/rng/random.h +++ b/src/rng/random.h @@ -34,5 +34,6 @@ void random_get_salt (uint8_t *p); /* iterator returning a byta at a time */ extern int random_gen (void *arg, unsigned char *output, size_t output_len); +extern int random_gen_core0(void *arg, unsigned char *out, size_t out_len); #endif \ No newline at end of file