Jetson Linux API 参考文档

32.7.4 版本
tegra_se.h
前往此文件文档。
1 /*
2  * 版权所有 (c) 2020-2021,NVIDIA Corporation。保留所有权利。
3  *
4  * 特此授权,免费授予任何获得本软件和相关文档文件(“软件”)副本的人员
5  * 在软件中进行交易,不受限制,包括但不限于权利
6  * 使用、复制、修改、合并、发布、分发、再许可和/或销售
7  * 软件副本,并允许向其提供软件的人员
8  * 在以下条件下这样做:
9  *
10  * 上述版权声明和本许可声明应包含在
11  * 软件的所有副本或主要部分中。
12  *
13  * 本软件按“原样”提供,不提供任何形式的明示或
14  * 暗示保证,包括但不限于适销性保证,
15  * 适用于特定用途和不侵权。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他
16  * 责任负责,无论是在合同、侵权行为或其他方面的诉讼中,由以下原因引起、
17  * 由于或与软件或使用或软件中的其他交易相关。
18  * 软件。
19  */
20 
21  */
22 
35 #ifndef __TEGRA_SE_H__
36 #define __TEGRA_SE_H__
37 
38 #include <tegra_se_internal.h>
39 
143 /*
144  * @brief 获取 SE 硬件互斥锁并初始化 SE 驱动程序
145  *
146  * @return 如果成功,则返回 NO_ERROR
147  *
148  * @note 此函数应始终在与 SE 交互之前调用
149  * 与 SE 交互
150  */
151 uint32_t se_acquire(void);
152 
153 /*
154  * @brief 释放 SE 硬件
155  *
156  * @return 如果成功,则返回 NO_ERROR
157  *
158  * @note 此函数应始终在与 SE 交互后调用
159  * 与 SE 交互
160  */
161 void se_release(void);
162 
163 /*
164  * @brief 从 SE 密钥槽派生根密钥
165  *
166  * @param *root_key [out] 根密钥将写入此缓冲区
167  * @param root_key_len [in] root_key 缓冲区的长度
168  * @param *fv [in] 固定向量 (fv) 的基地址
169  * @param fv_len [in] 固定向量的长度
170  * @param keyslot [in] 根密钥源的密钥槽索引
171  *
172  * @return 如果成功,则返回 NO_ERROR
173  */
174 uint32_t se_derive_root_key(uint8_t *root_key, size_t root_key_len, uint8_t *fv,
175  size_t fv_len, uint32_t keyslot);
176 
177 /*
178  * @brief: 将密钥写入 SE 密钥槽
179  *
180  * @param *key_in [in] 密钥的基地址
181  * @param keylen [in] 密钥长度
182  * @param key_quad_sel [in] 密钥 QUAD 选择
183  * @param keyslot [in] 密钥槽索引
184  *
185  * @return 如果成功,则返回 NO_ERROR
186  */
187 int se_write_keyslot(uint8_t *key_in, uint32_t keylen, uint32_t key_quad_sel, uint32_t keyslot);
188 
189 /*
190  * @brief 清除保存密钥的 SE 密钥槽
191  *
192  * @return 如果成功,则返回 NO_ERROR
193  *
194  * @note 应始终调用此函数,以使密钥不会
195  * 在 SE 密钥槽中持久存在。
196  */
197 uint32_t se_clear_aes_keyslots(void);
198 
199 typedef struct tegra_se_cmac_context se_cmac_ctx;
200 
207 
213 void tegra_se_cmac_free(se_cmac_ctx *se_cmac);
214 
227 int tegra_se_cmac_init(se_cmac_ctx *se_cmac, se_aes_keyslot_t keyslot,
228  uint32_t keylen);
241 int tegra_se_cmac_update(se_cmac_ctx *se_cmac, void *data, uint32_t dlen);
242 
257 int tegra_se_cmac_final(se_cmac_ctx *se_cmac, uint8_t *out, uint32_t *poutlen);
258 
301 int se_nist_sp_800_108_with_cmac(se_aes_keyslot_t keyslot,
302  uint32_t key_len,
303  char const *context,
304  char const *label,
305  uint32_t dk_len,
306  uint8_t *out_dk);
307 
310 #endif /* __TEGRA_SE_H__ */
se_derive_root_key
uint32_t se_derive_root_key(uint8_t *root_key, size_t root_key_len, uint8_t *fv, size_t fv_len, uint32_t keyslot)
tegra_se_cmac_free
void tegra_se_cmac_free(se_cmac_ctx *se_cmac)
释放 SE CMAC 上下文。
tegra_se_cmac_final
int tegra_se_cmac_final(se_cmac_ctx *se_cmac, uint8_t *out, uint32_t *poutlen)
完成 SE CMAC。
tegra_se_cmac_init
int tegra_se_cmac_init(se_cmac_ctx *se_cmac, se_aes_keyslot_t keyslot, uint32_t keylen)
从用户提供的密钥初始化 SE CMAC。
tegra_se_cmac_new
se_cmac_ctx * tegra_se_cmac_new(void)
创建 SE CMAC 上下文。
se_release
void se_release(void)
se_acquire
uint32_t se_acquire(void)
se_write_keyslot
int se_write_keyslot(uint8_t *key_in, uint32_t keylen, uint32_t key_quad_sel, uint32_t keyslot)
se_cmac_ctx
struct tegra_se_cmac_context se_cmac_ctx
定义: tegra_se.h:199
se_nist_sp_800_108_with_cmac
int se_nist_sp_800_108_with_cmac(se_aes_keyslot_t keyslot, uint32_t key_len, char const *context, char const *label, uint32_t dk_len, uint8_t *out_dk)
基于硬件的 NIST-SP-800-108 KDF;从 SE 密钥槽派生密钥。
tegra_se_cmac_update
int tegra_se_cmac_update(se_cmac_ctx *se_cmac, void *data, uint32_t dlen)
在 SE CMAC 中缓存输入数据。
se_clear_aes_keyslots
uint32_t se_clear_aes_keyslots(void)
. All rights reserved.