mbed-os/features/storage/FEATURE_STORAGE/cfstore/README.md

103 lines
4.5 KiB
Markdown
Raw Normal View History

# Secure Key-Value Storage #
## Executive Summary
The Configuration Store (CFSTORE) is a secure,
associative key-value (KV) store C-Language Hardware Abstraction Layer.
CFSTORE provides the secure and persistent storage for:
- Storing encryption keys data.
- Storing configuration data.
- Storing firmware, firmware updates and incremental firmware blocks for assembling into a firmware update.
These services are presented to clients with:
- A conceptually simple, file-like interface for storing and managing data using (key, value) pairs in
persistent storage media.
- A simple, hardware-independent API to promote portability across multiple platforms and a low attack surface.
- A very small code/memory footprint so CFSTORE is capable of running on highly-constrained memory systems (~10kB free memory)
where typically available SRAM << NV storage.
- A simple (low complexity) storage capability at the expense of features. For example, CFSTORE only supports the storage of
binary blobs rather than a rich set of data types.
Current support includes:
- NV-backed support. Integration with Flash Abstraction (Flash Journal Strategy Sequential) for persistent storage on the Freescale FRDM K64F target.
- SRAM backed support.
- More than 60 test cases with >80% test coverage.
- Comprehensive documentation including doxygen generated API and test case documentation.
# Configuration-Store Software Architecture
```C
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Configuration Store Client |
| e.g. FOTA |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Configuration Store | | uvisor |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| Flash Abstraction Layer | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| Flash Driver Layer | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
SW
-----------------------------------------------------------------------
HW
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NV Storage Media e.g. Flash |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Configuration Store Software Architecture
```
The above figure shows the following entities (from top to bottom):
- A Configuration Store client e.g. FOTA.
- Configuration Store, the associative KV pair store.
- Flash Abstraction Layer, portable across the driver layer.
- Flash Driver layer e.g. CMSIS-Driver.
- NV Storage Media. These are the physical storage media.
# Providing Feedback
If you would like to make a contribution to CFSTORE, please provide feedback/designs/comments/code in one of the following ways:
- By logging an issue in the CFSTORE repo.
- By submitting a Pull Request to the CFSTORE repo.
- By sending an email to:
-- simon.hughes@arm.com
-- milosch.meriac@arm.com
# Further Reading
* The [CFSTORE Getting Started Guide][CFSTORE_GETSTART] including examples.
* The [CFSTORE Engineering Requirements.][CFSTORE_ENGREQ]
* The [CFSTORE High Level Design Document.][CFSTORE_HLD]
* The [CFSTORE Low Level Design Document.][CFSTORE_LLD]
* The [CFSTORE Test Plan.][CFSTORE_TESTPLAN]
* The [CFSTORE Application Note 0001: NXP Freescale Kinetis FRDM-K64F Flash Memory Usage.][CFSTORE_APPNOTE_0001]
* The [CFSTORE Releases][CFSTORE_RELEASE] provides requirements tracking by listing the requirements supported for a CFSTORE version.
20160714
[CFSTORE_ENGREQ]: doc/design/configuration_store_requirements.md
[CFSTORE_EX1]: ../TESTS/cfstore/example1/example1.cpp
[CFSTORE_EX3]: ../TESTS/cfstore/example3/example3.cpp
[CFSTORE_GETSTART]: doc/design/configuration_store_getting_started.md
[CFSTORE_HLD]: doc/design/configuration_store_hld.md
[CFSTORE_LLD]: doc/design/configuration_store_lld.md
[CFSTORE_TESTPLAN]: doc/design/configuration_store_test_plan.md
[CFSTORE_PROJPLAN]:doc/design/configuration_store_project.md
[CFSTORE_RELEASE]: doc/project/configuration_store_releases.md
[CFSTORE_TERM]: doc/design/configuration_store_terminology.md
[CFSTORE_APPNOTE_0001]: doc/design/configuration_store_app_note_0001.md