Crypto: - Replace broken ChaCha20 (static nonce) with ChaCha20-Poly1305 AEAD - HKDF-SHA256 key derivation from per-device factory NVS master keys - Random 12-byte nonce per message (ESP32 hardware RNG) - crypto_init/encrypt/decrypt API with mbedtls legacy (ESP-IDF v5.3.2) - Custom partition table with factory NVS (fctry at 0x10000) Firmware: - crypto.c full rewrite, messages.c device_id prefix + AEAD encrypt - crypto_init() at boot with esp_restart() on failure - Fix command_t initializations across all modules (sub/help fields) - Clean CMakeLists dependencies for ESP-IDF v5.3.2 C3PO (C2): - Rename tools/c2 + tools/c3po -> tools/C3PO - Per-device CryptoContext with HKDF key derivation - KeyStore (keys.json) for master key management - Transport parses device_id:base64(...) wire format Tools: - New tools/provisioning/provision.py for factory NVS key generation - Updated flasher with mbedtls config for v5.3.2 Docs: - Update all READMEs for new crypto, C3PO paths, provisioning - Update roadmap, architecture diagrams, security sections - Update CONTRIBUTING.md project structure
120 lines
1.7 KiB
Plaintext
120 lines
1.7 KiB
Plaintext
/* C3PO TUI Stylesheet - Multi-device view */
|
|
|
|
Screen {
|
|
background: $surface;
|
|
}
|
|
|
|
/* Header/Tab bar */
|
|
#tab-bar {
|
|
height: 1;
|
|
dock: top;
|
|
background: $surface-darken-1;
|
|
}
|
|
|
|
/* Main content area */
|
|
#main-content {
|
|
height: 1fr;
|
|
}
|
|
|
|
/* Left panel: all devices stacked */
|
|
#devices-panel {
|
|
width: 1fr;
|
|
min-width: 30;
|
|
}
|
|
|
|
#no-device-placeholder {
|
|
width: 100%;
|
|
height: 100%;
|
|
content-align: center middle;
|
|
color: $text-muted;
|
|
}
|
|
|
|
/* Right panel: global logs */
|
|
#global-log-container {
|
|
width: 1fr;
|
|
min-width: 30;
|
|
border: solid $primary;
|
|
border-title-color: $text;
|
|
border-title-style: bold;
|
|
}
|
|
|
|
/* Input area */
|
|
#input-container {
|
|
height: 3;
|
|
dock: bottom;
|
|
background: $surface-darken-1;
|
|
border-top: solid $primary;
|
|
padding: 0;
|
|
}
|
|
|
|
#command-input {
|
|
width: 1fr;
|
|
height: 1;
|
|
margin: 0;
|
|
padding: 0 1;
|
|
}
|
|
|
|
#shortcuts-bar {
|
|
height: 1;
|
|
width: 100%;
|
|
background: $surface-darken-2;
|
|
color: $text-muted;
|
|
padding: 0 1;
|
|
}
|
|
|
|
/* Device containers - each device in its own bordered box */
|
|
DeviceContainer {
|
|
height: 1fr;
|
|
min-height: 5;
|
|
border: solid $secondary;
|
|
border-title-color: $text;
|
|
border-title-style: bold;
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
/* Log pane inside device container */
|
|
DeviceLogPane {
|
|
height: 100%;
|
|
scrollbar-size: 1 1;
|
|
}
|
|
|
|
/* Global log pane */
|
|
GlobalLogPane {
|
|
height: 100%;
|
|
scrollbar-size: 1 1;
|
|
}
|
|
|
|
/* Log colors */
|
|
.log-system {
|
|
color: cyan;
|
|
}
|
|
|
|
.log-device {
|
|
color: yellow;
|
|
}
|
|
|
|
.log-error {
|
|
color: red;
|
|
}
|
|
|
|
.log-command {
|
|
color: blue;
|
|
}
|
|
|
|
.log-response {
|
|
color: green;
|
|
}
|
|
|
|
/* Status indicator */
|
|
.status-connected {
|
|
color: green;
|
|
}
|
|
|
|
.status-inactive {
|
|
color: yellow;
|
|
}
|
|
|
|
.status-disconnected {
|
|
color: red;
|
|
}
|