USMP Protocol
Unified Secure Multi-transport Protocol. Highly optimized, secure, and transport-agnostic communication protocol. Designed from scratch for resource-constrained microcontrollers, bringing mutual authentication and AES-256-GCM encryption with just three function calls.
Built for Extreme Environments
Standard security protocols (TLS, SSH) are too heavy for low-power MCUs. USMP fills this gap, offering robust modern cryptography with minimal resource overhead.
Zero Heap Allocation
Relies entirely on statically-sized static/stack buffers. Prevents heap fragmentation, ensuring year-round MCU uptime.
Transport Agnostic
Operates smoothly over TCP sockets, UDP datagrams, BLE attributes, raw UART, RS-485, or CAN bus.
Mutual Authentication
Ensures both the server and client cryptographically verify each other before establishing a shared ephemeral session key.
Hardware Accelerable
Designed to map directly onto hardware acceleration blocks (AES/GCM) present on ESP32, STM32, and other SOCs.
Interactive Handshake Explorer
USMP initiates a secure session using Elliptic-Curve Diffie-Hellman (ECDH) mixed with a Pre-Shared Key (PSK). Click through the steps below to inspect how a session is established.
{
"frame_type": "HANDSHAKE_HELLO",
"protocol_version": "1.0.0",
"client_ephemeral_pub": "04a8b1f2e96d...",
"nonce": "4a28f89d10e5"
}Integrates in Minutes
USMP is designed for simplicity. Initialize the session, bind to your transport, and start sending secure data.
Clean, Expressive APIs
Whether you are compiling for pure C targets (like ESP-IDF or STM32), writing C++ sketches in Arduino, or setting up a gateway server in Python, USMP offers consistent APIs.
- No dependency on huge standard libraries
- Simple callback binding for custom physical transports
- Includes built-in auto-retry & packet serialization
// Initialize a USMP session (ESP-IDF / Pure C)
UsmpSession session;
usmp_init(&session, my_transport_write_callback);
// Perform secure mutual handshake
if (usmp_handshake(&session) != USMP_SUCCESS) {
printf("Security handshake failed!\n");
return;
}
// Send encrypted frames over any transport (UART, BLE, Sockets)
uint8_t payload[] = "telemetry_data";
usmp_send(&session, payload, sizeof(payload));Flash ROM Usage (Kilobytes)
A Fraction of the Resource Cost
Standard TLS implementations require huge memory allocations for handshake buffers and crypt-state structures, which can trigger Out-Of-Memory crashes on small systems.
USMP bypasses the dynamic allocation altogether. Its static buffers fit comfortably in internal SRAM, even on low-cost microcontrollers.
Frequently Asked Questions
Clear up common questions about integration, security properties, and protocol operations.
Secure Your Embedded Sockets Today
Get started by reading our Quick Start guides, importing the library, or exploring the protocol design specs.