The EdgeLock Enclave offers a key store the mailbox driver did not reach. A key generated in there is permitted one algorithm and one usage, and export can be withheld, so the private half has no command that returns it. Adds the session, key store and key management services, key generation, signing by handle, and the storage exchange that makes a key store outlive a boot. Storage runs the other way round from every other command: the enclave asks the host to write its key store down and to give it back, and those requests arrive while a command of this side's is still outstanding, so the reply tag is what tells them apart. Two things a port has to know and neither reference nor header says. Key store commands carry a trailing crc, the exclusive or of every word including the header, without which the enclave answers rating 0xb9. And a persistent key lifetime is a statement of intent: the strict flag on key generation is what writes the key to the store, and without it a store exported around the key comes back without it. Every mailbox wait is bounded. An enclave that stops answering must not take the calling thread with it, and a reply buffer is a kilobyte, which does not belong on the stack of whatever task asked for a signature. Tested on an i.MX93: a P-256 key generated in the enclave, signing a digest whose signature verifies against the returned public half on a host, and still doing so after the board has been powered off. Signed-off-by: Royyan Zahir <royzah@gmail.com> |
||
|---|---|---|
| .github | ||
| arch | ||
| audio | ||
| binfmt | ||
| boards | ||
| cmake | ||
| crypto | ||
| Documentation | ||
| drivers | ||
| dummy | ||
| fs | ||
| graphics | ||
| include | ||
| libs | ||
| mm | ||
| net | ||
| openamp | ||
| pass1 | ||
| sched | ||
| syscall | ||
| tools | ||
| video | ||
| wireless | ||
| .asf.yaml | ||
| .codespell-ignore-lines | ||
| .codespellrc | ||
| .editorconfig | ||
| .gitignore | ||
| .gitmessage | ||
| .mcp.json | ||
| .pre-commit-config.yaml | ||
| .yamllint | ||
| AUTHORS | ||
| CMakeLists.txt | ||
| CONTRIBUTING.md | ||
| INVIOLABLES.md | ||
| Kconfig | ||
| LICENSE | ||
| Makefile | ||
| NOTICE | ||
| README.md | ||
| ReleaseNotes | ||
Apache NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 64-bit microcontroller environments, the primary governing standards in NuttX are POSIX and ANSI standards. Additional standard APIs from Unix and other common RTOSs (such as VxWorks) are adopted for functionality not available under these standards, or for functionality that is not appropriate for deeply-embedded environments (such as fork()).
For brevity, many parts of the documentation will refer to Apache NuttX as simply NuttX.
Getting Started
First time on NuttX? Read the Getting Started guide! If you don't have a board available, NuttX has its own simulator that you can run on terminal.
Documentation
You can find the current NuttX documentation on the Documentation Page.
Alternatively, you can build the documentation yourself by following the Documentation Build Instructions.
The old NuttX documentation is still available in the Apache wiki.
Supported Boards
NuttX supports a wide variety of platforms. See the full list on the Supported Platforms page.
Contributing
If you wish to contribute to the NuttX project, read the Contributing guidelines for information on Git usage, coding standard, workflow and the NuttX principles.
License
The code in this repository is under either the Apache 2 license, or a license compatible with the Apache 2 license. See the License Page for more information.