1
6
7
8
9
15
16
17
18
19
20
21
22
23
24
30
31
34
39
40
43
46
47
50
55
56
57
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* ... */
#pragma once
#include <stdbool.h>
#include "esp_err.h"
#include "soc/soc_caps.h"
#include "nvs_flash.h"
#include "esp_partition.h"5 includes
#if SOC_HMAC_SUPPORTED
#include "esp_hmac.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define ESP_ERR_NVS_SEC_BASE 0xF000
#define ESP_ERR_NVS_SEC_HMAC_KEY_NOT_FOUND (ESP_ERR_NVS_SEC_BASE + 0x01)
#define ESP_ERR_NVS_SEC_HMAC_KEY_BLK_ALREADY_USED (ESP_ERR_NVS_SEC_BASE + 0x02)
#define ESP_ERR_NVS_SEC_HMAC_KEY_GENERATION_FAILED (ESP_ERR_NVS_SEC_BASE + 0x03)
#define ESP_ERR_NVS_SEC_HMAC_XTS_KEYS_DERIV_FAILED (ESP_ERR_NVS_SEC_BASE + 0x04) 5 defines
/* ... */
typedef enum {
NVS_SEC_SCHEME_FLASH_ENC = 0,
NVS_SEC_SCHEME_HMAC,
NVS_SEC_SCHEME_MAX
}{ ... } nvs_sec_scheme_id_t;
/* ... */
typedef struct {
const esp_partition_t *nvs_keys_part;
}{ ... } nvs_sec_config_flash_enc_t;
/* ... */
#define NVS_SEC_PROVIDER_CFG_FLASH_ENC_DEFAULT() { \
.nvs_keys_part = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, \
ESP_PARTITION_SUBTYPE_DATA_NVS_KEYS, \
NULL), \
}{...}
#if SOC_HMAC_SUPPORTED
/* ... */
typedef struct {
hmac_key_id_t hmac_key_id;
}{...} nvs_sec_config_hmac_t;
/* ... */
#define NVS_SEC_PROVIDER_CFG_HMAC_DEFAULT() { \
.hmac_key_id = (hmac_key_id_t)(CONFIG_NVS_SEC_HMAC_EFUSE_KEY_ID), \
}{...}
/* ... */#endif
/* ... */
esp_err_t nvs_sec_provider_register_flash_enc(const nvs_sec_config_flash_enc_t *sec_scheme_cfg, nvs_sec_scheme_t **sec_scheme_handle_out);
#if SOC_HMAC_SUPPORTED
/* ... */
esp_err_t nvs_sec_provider_register_hmac(const nvs_sec_config_hmac_t *sec_scheme_cfg, nvs_sec_scheme_t **sec_scheme_handle_out);/* ... */
#endif
/* ... */
esp_err_t nvs_sec_provider_deregister(nvs_sec_scheme_t *sec_scheme_handle);
#ifdef __cplusplus
}{...}
#endif