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_MOD_GPG_RSA 8
38#define MODULE_ID_UNKNOWN 255
39
40// ECC slot ranges
41#define ECC_SLOT_MOD_GPG_START 1
42#define ECC_SLOT_MOD_GPG_END 3
43#define ECC_SLOT_MOD_CA_START 4
44#define ECC_SLOT_MOD_CA_END 4
45#define ECC_SLOT_MOD_FIDO2_START 5
46#define ECC_SLOT_MOD_FIDO2_END 30
47// Plugin ECC pool (single reserved slot, the last physical ECC slot).
48#define ECC_SLOT_MOD_PLUGINS_START 31
49#define ECC_SLOT_MOD_PLUGINS_END 31
50
51// RMEM slot ranges (must be >= RMEM_SLOT_MIN_ALLOC)
52// mod_gpg owns 1-3 (slot 1 unused, slot 2 = DEC ECC key, slot 3 = AES key).
53// mod_gpg_rsa owns 131-136: three RSA private-key blobs, 2 slots each (an
54// RSA-4096 blob spans two slots). Carved from the 2FA tail (one slot) and the
55// front of the oversized password pool (five slots).
56#define RMEM_SLOT_MOD_GPG_START 1
57#define RMEM_SLOT_MOD_GPG_END 3
58#define RMEM_SLOT_MOD_CA_START 4
59#define RMEM_SLOT_MOD_CA_END 4
60#define RMEM_SLOT_MOD_FIDO2_START 5
61#define RMEM_SLOT_MOD_FIDO2_END 30
62#define RMEM_SLOT_MOD_2FA_START 31
63#define RMEM_SLOT_MOD_2FA_END 130
64#define RMEM_SLOT_MOD_GPG_RSA_START 131
65#define RMEM_SLOT_MOD_GPG_RSA_END 136
66#define RMEM_SLOT_MOD_PASSWORD_START 137
67#define RMEM_SLOT_MOD_PASSWORD_END 500
68// Plugin pool. The named sub-slots inside this range are assigned dynamically
69// at runtime, but the range itself is part of the central map so it is bounds-
70// and overlap-validated and consumers fetch it via the TropicSlotMap API.
71#define RMEM_SLOT_MOD_PLUGINS_START 501
72#define RMEM_SLOT_MOD_PLUGINS_END 511
73
74// Slot map entries (do not include reserved slots)
75#define TROPIC_ECC_SLOT_MAP(X) \
76 X("mod_gpg", MODULE_ID_MOD_GPG, ECC_SLOT_MOD_GPG_START, ECC_SLOT_MOD_GPG_END) \
77 X("mod_ca", MODULE_ID_MOD_CA, ECC_SLOT_MOD_CA_START, ECC_SLOT_MOD_CA_END) \
78 X("mod_fido2", MODULE_ID_MOD_FIDO2, ECC_SLOT_MOD_FIDO2_START, ECC_SLOT_MOD_FIDO2_END) \
79 X("mod_plugins", MODULE_ID_PLUGIN_POOL, ECC_SLOT_MOD_PLUGINS_START, ECC_SLOT_MOD_PLUGINS_END)
80
81#define TROPIC_RMEM_SLOT_MAP(X) \
82 X("mod_gpg", MODULE_ID_MOD_GPG, RMEM_SLOT_MOD_GPG_START, RMEM_SLOT_MOD_GPG_END) \
83 X("mod_ca", MODULE_ID_MOD_CA, RMEM_SLOT_MOD_CA_START, RMEM_SLOT_MOD_CA_END) \
84 X("mod_fido2", MODULE_ID_MOD_FIDO2, RMEM_SLOT_MOD_FIDO2_START, RMEM_SLOT_MOD_FIDO2_END) \
85 X("mod_2fa", MODULE_ID_MOD_2FA, RMEM_SLOT_MOD_2FA_START, RMEM_SLOT_MOD_2FA_END) \
86 X("mod_gpg_rsa", MODULE_ID_MOD_GPG_RSA, RMEM_SLOT_MOD_GPG_RSA_START, RMEM_SLOT_MOD_GPG_RSA_END) \
87 X("mod_password", MODULE_ID_MOD_PASSWORD, RMEM_SLOT_MOD_PASSWORD_START, RMEM_SLOT_MOD_PASSWORD_END) \
88 X("mod_plugins", MODULE_ID_PLUGIN_POOL, RMEM_SLOT_MOD_PLUGINS_START, RMEM_SLOT_MOD_PLUGINS_END)
89
90} // 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