mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
4dc2ace0b7
1) Added new Key Manager APIs 2) Added crypto locking layer for Key Manager 3) Remove support for deploying known key 4) Format key manager support 5) Fix build header error 6) Updated the key_mgr_types.h file 7) Added key manager tests
142 lines
4.3 KiB
C
142 lines
4.3 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
// The HAL layer for Key Manager
|
|
|
|
#pragma once
|
|
|
|
#include "soc/soc_caps.h"
|
|
|
|
#if SOC_KEY_MANAGER_SUPPORTED
|
|
#include "hal/key_mgr_types.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* @brief Start the key manager at IDLE state */
|
|
void key_mgr_hal_start(void);
|
|
|
|
/* @brief Continue the key manager operation */
|
|
void key_mgr_hal_continue(void);
|
|
|
|
/**
|
|
* @brief Set the key manager to use the software provided init key
|
|
*/
|
|
void key_mgr_hal_use_sw_init_key(void);
|
|
|
|
/**
|
|
* @brief Configure the key manager key usage policy for a particular key type
|
|
*/
|
|
void key_mgr_hal_set_key_usage(const esp_key_mgr_key_type_t key_type, const esp_key_mgr_key_usage_t key_usage);
|
|
|
|
/*
|
|
* @brief Get the configured key usage for a given key type
|
|
*/
|
|
esp_key_mgr_key_usage_t key_mgr_hal_get_key_usage(const esp_key_mgr_key_type_t key_type);
|
|
|
|
/* @brief Configure the key purpose to be used by the Key Manager for key generator opearation */
|
|
void key_mgr_hal_set_key_purpose(const esp_key_mgr_key_purpose_t key_purpose);
|
|
|
|
/**
|
|
* @bfief Configure the mode which is used by the Key Manager for the generator key deployement process
|
|
*/
|
|
void key_mgr_hal_set_key_generator_mode(const esp_key_mgr_key_generator_mode_t mode);
|
|
|
|
/**
|
|
* @brief Read the key manager process result
|
|
* @return 1 for Success
|
|
* 0 for failure
|
|
*/
|
|
bool key_mgr_hal_is_result_success(void);
|
|
|
|
/**
|
|
* @brief Check if the deployed key is valid or not
|
|
* @return 1 for Success
|
|
* 0 for failure
|
|
*/
|
|
bool key_mgr_hal_is_key_deployment_valid(const esp_key_mgr_key_type_t key_type);
|
|
|
|
/**
|
|
* @brief Check if the HUK is valid or not
|
|
* @return 1 for Success
|
|
* 0 for failure
|
|
*/
|
|
bool key_mgr_hal_is_huk_valid(void);
|
|
|
|
/*
|
|
* @brief Write the SW init key in the key manager registers
|
|
*
|
|
* @input
|
|
* sw_init_key_buf Init key buffer, this should be a readable buffer of data_len size which should contain the sw init key. The buffer must be 32 bit aligned
|
|
* data_len Length of the init key buffer
|
|
*/
|
|
void key_mgr_hal_write_sw_init_key(const uint8_t *sw_init_key_buf, const size_t data_len);
|
|
|
|
/*
|
|
* @brief Write the Assist info in the key manager registers
|
|
*
|
|
* @input
|
|
* assist_info_buf Assist info buffer, this should be a readable buffer of data_len size which should contain the assist info. The buffer must be 32 bit aligned
|
|
* data_len Length of the assist info buffer
|
|
*/
|
|
void key_mgr_hal_write_assist_info(const uint8_t *assist_info_buf, const size_t data_len);
|
|
|
|
/*
|
|
* @brief Read the Assist info from the key manager registers
|
|
*
|
|
* @input
|
|
* assist_info_buf Assist info buffer, this should be a writable buffer of size KEY_MGR_ASSIST_INFO_LEN. The buffer must be 32 bit aligned
|
|
* data_len Length of the assist info buffer
|
|
*/
|
|
void key_mgr_hal_read_assist_info(uint8_t *assist_info_buf);
|
|
|
|
/*
|
|
* @brief Write the Public info in the key manager registers
|
|
*
|
|
* @input
|
|
* public_info_buf Public info buffer, this should be a readable buffer of data_len size which should contain the public info. The buffer must be 32 bit aligned
|
|
* data_len Length of the public info buffer
|
|
*/
|
|
void key_mgr_hal_write_public_info(const uint8_t *public_info_buf, const size_t data_len);
|
|
|
|
/*
|
|
* @brief Read the Public info in the key manager registers
|
|
*
|
|
* @input
|
|
* public_info_buf Public info buffer, this should be a writable buffer of read_len, The buffer must be 32 bit aligned
|
|
* read_len Length of the public info buffer
|
|
*/
|
|
void key_mgr_hal_read_public_info(uint8_t *public_info_buf, const size_t read_len);
|
|
|
|
/* @brief Set the AES-XTS key length for the Key Manager */
|
|
void key_mgr_hal_set_xts_aes_key_len(const esp_key_mgr_xts_aes_key_len_t key_len);
|
|
|
|
/* @brief Get the AES-XTS key length for the Key Manager */
|
|
esp_key_mgr_xts_aes_key_len_t key_mgr_hal_get_aes_xts_key_len(void);
|
|
|
|
/**
|
|
* @brief Read state of Key Manager
|
|
*
|
|
* @return esp_key_mgr_state_t
|
|
*/
|
|
esp_key_mgr_state_t key_mgr_hal_get_state(void);
|
|
|
|
/**
|
|
* @brief Read the Key Manager date information
|
|
*/
|
|
uint32_t key_mgr_hal_get_date_info(void);
|
|
|
|
/**
|
|
* @brief Set the Key Manager date information
|
|
* Only the least siginificant 28 bits shall be considered
|
|
*/
|
|
void key_mgr_hal_set_date_info(const uint32_t date_info);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|