summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/net/rng.c
diff options
context:
space:
mode:
authorUros Majstorovic <majstor@majstor.org>2026-01-07 22:58:33 +0100
committerUros Majstorovic <majstor@majstor.org>2026-01-07 22:58:33 +0100
commit46b08fc235f3f068034355970697acc0956e5c99 (patch)
tree96e2bde5d95c295a57afae353684a25544fb09fa /fw/fe310/eos/net/rng.c
parent285ddd410a559449b7e2cbab9b2b10e850efbd08 (diff)
introduced EOSMessage struct for SPI and Event queue messages; added APP <-> FE310 bridge SPI messages; LCD/touch panel driver for app module; save relevant state to AON module before sleep;
Diffstat (limited to 'fw/fe310/eos/net/rng.c')
-rw-r--r--fw/fe310/eos/net/rng.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/fw/fe310/eos/net/rng.c b/fw/fe310/eos/net/rng.c
index 7d05a81..414a6fa 100644
--- a/fw/fe310/eos/net/rng.c
+++ b/fw/fe310/eos/net/rng.c
@@ -2,26 +2,34 @@
#include <stdint.h>
#include <string.h>
+#include "eos.h"
+#include "event.h"
#include "dev/net.h"
int getentropy(unsigned char *b, size_t sz) {
unsigned char type;
- unsigned char *buffer;
+ EOSMessage msg;
uint16_t len;
int rv;
- buffer = eos_net_alloc();
-
type = EOS_NET_MTYPE_RNG;
len = sizeof(uint16_t);
- buffer[0] = sz >> 8;
- buffer[1] = sz;
- rv = eos_net_xchg(&type, buffer, &len);
+ eos_net_alloc(&msg);
+
+ if ((msg.size < len) || (msg.size < sz)) {
+ eos_net_free(&msg, 1);
+ return -1;
+ }
+
+ msg.buffer[0] = sz >> 8;
+ msg.buffer[1] = sz;
+
+ rv = eos_net_xchg(&type, &msg, &len);
if (rv || (len != sz)) rv = -1;
- if (!rv) memcpy(b, buffer, sz);
- eos_net_free(buffer, 1);
+ if (!rv) memcpy(b, msg.buffer, sz);
+ eos_net_free(&msg, 1);
return rv;
}