* setting up framework for Regions, TransportKeys, etc

This commit is contained in:
Scott Powell
2025-11-03 14:23:32 +11:00
parent 5b4544b9fe
commit 03fc949014
6 changed files with 166 additions and 2 deletions

View File

@@ -0,0 +1,44 @@
#include "TransportKeyStore.h"
#include <SHA256.h>
uint16_t TransportKey::calcTransportCode(const mesh::Packet* packet) const {
uint16_t code;
SHA256 sha;
sha.resetHMAC(key, sizeof(key));
uint8_t type = packet->getPayloadType();
sha.update(&type, 1);
sha.update(packet->payload, packet->payload_len);
sha.finalizeHMAC(key, sizeof(key), &code, 2);
return code;
}
int TransportKeyStore::loadKeysFor(const char* name, uint16_t id, TransportKey keys[], int max_num) {
int n = 0;
for (int i = 0; i < num_cache && n < max_num; i++) { // first, check cache
if (cache_ids[i] == id) {
keys[n++] = cache_keys[i];
}
}
if (n > 0) return n; // cache hit!
if (*name == '#') { // is a publicly-known hashtag region
SHA256 sha;
sha.update(name, strlen(name));
sha.finalize(&keys[0], sizeof(keys[0].key));
n = 1;
} else {
// TODO: retrieve from difficult-to-copy keystore
}
// store in cache (if room)
for (int i = 0; i < n; i++) {
if (num_cache < MAX_TKS_ENTRIES) {
cache_ids[num_cache] = id;
cache_keys[num_cache] = keys[i];
num_cache++;
} else {
// TODO: evict oldest cache entry
}
}
return n;
}