From 6880468862a498d359a0a6ed4bd9dd116a478fa9 Mon Sep 17 00:00:00 2001 From: jaseg Date: Mon, 9 Mar 2020 22:10:46 +0100 Subject: WIP cryptographic design --- controller/fw/src/crypto.c | 48 ++++++++++++++++++++++++++++++++++++++++++ controller/fw/src/crypto.h | 33 +++++++++++++++++++++++++++++ controller/fw/src/dsss_demod.c | 2 -- controller/fw/src/dsss_demod.h | 2 +- 4 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 controller/fw/src/crypto.c create mode 100644 controller/fw/src/crypto.h (limited to 'controller/fw/src') diff --git a/controller/fw/src/crypto.c b/controller/fw/src/crypto.c new file mode 100644 index 0000000..73ad783 --- /dev/null +++ b/controller/fw/src/crypto.c @@ -0,0 +1,48 @@ + +#include +#include +#include +#include + +#include + +#include "crypto.h" +#include "simulation.h" + +void debug_hexdump(const char *name, uint8_t *buf, size_t len); +void debug_hexdump(const char *name, uint8_t *buf, size_t len) { + DEBUG_PRINTN("%20s: ", name); + for (size_t i=0; i + +#include + + +#define OOB_TRIGGER_LEN 16 +#define PRESIG_MSG_LEN 16 + + +enum trigger_domain { + TRIGGER_DOMAIN_ALL, + TRIGGER_DOMAIN_VENDOR, + TRIGGER_DOMAIN_SERIES, + TRIGGER_DOMAIN_COUNTRY, + TRIGGER_DOMAIN_REGION, + _TRIGGER_DOMAIN_COUNT +}; + +extern uint8_t presig_store[_TRIGGER_DOMAIN_COUNT][PRESIG_STORE_SIZE][crypto_sign_BYTES]; +extern uint8_t oob_trigger_pubkey[crypto_sign_PUBLICKEYBYTES]; +extern uint8_t presig_messages[_TRIGGER_DOMAIN_COUNT][PRESIG_STORE_SIZE][PRESIG_MSG_LEN]; +extern uint8_t oob_presig_iv[16]; +extern int presig_first_serial; + + +extern void oob_trigger_activated(enum trigger_domain domain, int serial); + +int oob_message_received(uint8_t msg[static OOB_TRIGGER_LEN]); + +#endif /* __CRYPTO_H__ */ diff --git a/controller/fw/src/dsss_demod.c b/controller/fw/src/dsss_demod.c index 97cc039..c5a2070 100644 --- a/controller/fw/src/dsss_demod.c +++ b/controller/fw/src/dsss_demod.c @@ -248,7 +248,6 @@ void group_received(struct dsss_demod_state *st) { /* If we found empty entries, replace one by a new decoding starting at this group */ if (empty_idx >= 0) { - DEBUG_PRINT("Writing to %zd", empty_idx); assert(0 <= empty_idx && empty_idx < DSSS_MATCHER_CACHE_SIZE); st->matcher_cache[empty_idx].last_phase = group_phase; st->matcher_cache[empty_idx].candidate_score = base_score; @@ -261,7 +260,6 @@ void group_received(struct dsss_demod_state *st) { /* If the weakest decoding in cache is weaker than a new decoding starting here, replace it */ } else if (min_score < base_score && min_idx >= 0) { - DEBUG_PRINT("Writing to %zd", min_idx); assert(0 <= min_idx && min_idx < DSSS_MATCHER_CACHE_SIZE); st->matcher_cache[min_idx].last_phase = group_phase; st->matcher_cache[min_idx].candidate_score = base_score; diff --git a/controller/fw/src/dsss_demod.h b/controller/fw/src/dsss_demod.h index e7e5cf9..98cf590 100644 --- a/controller/fw/src/dsss_demod.h +++ b/controller/fw/src/dsss_demod.h @@ -63,7 +63,7 @@ struct dsss_demod_state { }; -extern void handle_dsss_received(uint8_t data[TRANSMISSION_SYMBOLS]); +extern void handle_dsss_received(uint8_t data[static TRANSMISSION_SYMBOLS]); void dsss_demod_init(struct dsss_demod_state *st); void dsss_demod_step(struct dsss_demod_state *st, float new_value, uint64_t ts); -- cgit