CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
tropic_slot_map.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4
5// Compile-time TROPIC01 slot map (edit before build)
6//
7// You have 32 ECC slots and 512 R-Memory slots.
8// Slot 0 (ECC and RMEM) is reserved.
9//
10// Syntax is always:
11// ECC_SLOT_<MODULENAME>_START / ECC_SLOT_<MODULENAME>_END
12// RMEM_SLOT_<MODULENAME>_START / RMEM_SLOT_<MODULENAME>_END
13//
14// Module names should match module runtime names (IModule::getName()).
15
16namespace cdc::tropic_map {
17
18static constexpr uint8_t ECC_SLOT_MIN = 0;
19static constexpr uint8_t ECC_SLOT_MAX = 31;
20static constexpr uint8_t ECC_SLOT_RESERVED = 0;
21
22static constexpr uint16_t RMEM_SLOT_MIN = 0;
23static constexpr uint16_t RMEM_SLOT_MAX = 511;
24static constexpr uint16_t RMEM_SLOT_RESERVED = 0;
25static constexpr uint16_t RMEM_SLOT_MIN_ALLOC = 1;
26
27// Module IDs (must be unique, 0-254). 255 is reserved for UNKNOWN.
28// MODULE_ID values are permanent on-device identifiers; never reassign them.
29// Add new modules with new IDs only, never reuse a freed slot/ID.
30#define MODULE_ID_MOD_SYSTEM 0
31#define MODULE_ID_MOD_GPG 2
32#define MODULE_ID_MOD_CA 3
33#define MODULE_ID_MOD_FIDO2 4
34#define MODULE_ID_MOD_2FA 5
35#define MODULE_ID_MOD_PASSWORD 6
36#define MODULE_ID_PLUGIN_POOL 7
37#define MODULE_ID_UNKNOWN 255
38
39// ECC slot ranges
40#define ECC_SLOT_MOD_GPG_START 1
41#define ECC_SLOT_MOD_GPG_END 3
42#define ECC_SLOT_MOD_CA_START 4
43#define ECC_SLOT_MOD_CA_END 4
44#define ECC_SLOT_MOD_FIDO2_START 5
45#define ECC_SLOT_MOD_FIDO2_END 30
46// Plugin ECC pool (single reserved slot, the last physical ECC slot).
47#define ECC_SLOT_MOD_PLUGINS_START 31
48#define ECC_SLOT_MOD_PLUGINS_END 31
49
50// RMEM slot ranges (must be >= RMEM_SLOT_MIN_ALLOC)
51#define RMEM_SLOT_MOD_GPG_START 1
52#define RMEM_SLOT_MOD_GPG_END 3
53#define RMEM_SLOT_MOD_CA_START 4
54#define RMEM_SLOT_MOD_CA_END 4
55#define RMEM_SLOT_MOD_FIDO2_START 5
56#define RMEM_SLOT_MOD_FIDO2_END 31
57#define RMEM_SLOT_MOD_2FA_START 32
58#define RMEM_SLOT_MOD_2FA_END 131
59#define RMEM_SLOT_MOD_PASSWORD_START 132
60#define RMEM_SLOT_MOD_PASSWORD_END 500
61// Plugin pool. The named sub-slots inside this range are assigned dynamically
62// at runtime, but the range itself is part of the central map so it is bounds-
63// and overlap-validated and consumers fetch it via the TropicSlotMap API.
64#define RMEM_SLOT_MOD_PLUGINS_START 501
65#define RMEM_SLOT_MOD_PLUGINS_END 511
66
67// Slot map entries (do not include reserved slots)
68#define TROPIC_ECC_SLOT_MAP(X) \
69 X("mod_gpg", MODULE_ID_MOD_GPG, ECC_SLOT_MOD_GPG_START, ECC_SLOT_MOD_GPG_END) \
70 X("mod_ca", MODULE_ID_MOD_CA, ECC_SLOT_MOD_CA_START, ECC_SLOT_MOD_CA_END) \
71 X("mod_fido2", MODULE_ID_MOD_FIDO2, ECC_SLOT_MOD_FIDO2_START, ECC_SLOT_MOD_FIDO2_END) \
72 X("mod_plugins", MODULE_ID_PLUGIN_POOL, ECC_SLOT_MOD_PLUGINS_START, ECC_SLOT_MOD_PLUGINS_END)
73
74#define TROPIC_RMEM_SLOT_MAP(X) \
75 X("mod_gpg", MODULE_ID_MOD_GPG, RMEM_SLOT_MOD_GPG_START, RMEM_SLOT_MOD_GPG_END) \
76 X("mod_ca", MODULE_ID_MOD_CA, RMEM_SLOT_MOD_CA_START, RMEM_SLOT_MOD_CA_END) \
77 X("mod_fido2", MODULE_ID_MOD_FIDO2, RMEM_SLOT_MOD_FIDO2_START, RMEM_SLOT_MOD_FIDO2_END) \
78 X("mod_2fa", MODULE_ID_MOD_2FA, RMEM_SLOT_MOD_2FA_START, RMEM_SLOT_MOD_2FA_END) \
79 X("mod_password", MODULE_ID_MOD_PASSWORD, RMEM_SLOT_MOD_PASSWORD_START, RMEM_SLOT_MOD_PASSWORD_END) \
80 X("mod_plugins", MODULE_ID_PLUGIN_POOL, RMEM_SLOT_MOD_PLUGINS_START, RMEM_SLOT_MOD_PLUGINS_END)
81
82} // namespace cdc::tropic_map
static constexpr uint16_t RMEM_SLOT_MAX
static constexpr uint8_t ECC_SLOT_MAX
static constexpr uint16_t RMEM_SLOT_MIN
static constexpr uint16_t RMEM_SLOT_RESERVED
static constexpr uint8_t ECC_SLOT_RESERVED
static constexpr uint8_t ECC_SLOT_MIN
static constexpr uint16_t RMEM_SLOT_MIN_ALLOC