CryIf¶
缩写词注解¶
缩写词 |
英文全称 |
中文解释 |
HSM |
Hardware Security Module |
硬件安全模块 |
SHE |
Security Hardware Extension |
安全硬件扩展 |
SW |
Software |
软件加密算法 |
HW |
Hardware |
硬件加密算法 |
CDD |
Complex Device Driver |
复杂驱动 |
CSM |
Crypto Service Manager |
AUTOSAR 中的加密服务管理 模块 |
CRYIF |
Crypto Interface |
AUTOSAR 中的加密接口模块 |
1 简介¶
CryIf 模块位于底层密码解决方案(Crypto Driver 和基于 sw 的 CDD)和上层 服务层(CSM)之间。它表示到上层服务层的密码驱动程序服务的接口。CryIf 模块 提供了一个独特的接口来管理不同的密码 HW 和 SW 解决方案,如 HSM、SHE 或基于 SW 的 CDD。因此,基于 Crypto 接口维护的映射方案,Crypto 服务管理 模块可以利用多种底层的内部和外部加密 HW 以及 SW 解决方案。
图 1-1 AUTOSAR 加密栈
CryIf 模块的主要功能为:
1、接收 CSM 传输的数据并传输给 Crypto Driver。 2、接收 Crypto Driver返回的信息并返回给 CSM。
1.1 参考资料¶
[1] AUTOSAR_SWS_CryptoInterface.pdf,R19-11
2 功能描述¶
2.1 基本功能¶
CryIf 位于 CSM 和 Crypto Driver 之间,是访问所有上层(BSW)密码操作的 唯一接口。密码接口也是密码驱动程序的唯一用户,并提供了一个独特的接口 来管理不同的密码硬件和软件解决方案。抽象层封装了不同的硬件和软件访问 机制,因此加密接口的实现独立于底层的加密驱动程序,可以在硬件或软件中 实现。它还保证了对加密服务的并发访问,使同时处理多个加密任务成为可 能。
除此之外,CryIf 支持多驱动,当需要支持多驱动时,打开 CryIfMulDriverSupport 开关,并填写不同驱动接口的前缀,即可根据接口名使 用不同的驱动。
3 源文件描述¶
表 CryIf 文件描述
文件 |
说明 |
CryIf.c |
CryIf 模块源文件,包含了 API 函数的实现。 |
CryIf.h |
CryIf 模块头文件,包含了 API 函数的扩展声明并定义了配置的 数据结构。 |
CryIf_Cfg.h |
定义 CryIf 模块预编译时用到的配置参数。 |
CryIf_cfg.c |
CryIf 模块配置生成文件。 |
4 API 接口¶
4.1 类型定义¶
4.1.1 CryIf_ConfigType 类型定义¶
名称 |
CryIf_ConfigType |
类型 |
Structure |
范围 |
无 |
描述 |
CryIf 模块配置数据结构 |
4.2 输入函数描述¶
输入模块 |
API |
Det |
Det_ReportError |
CSM |
Csm_CallbackNotification |
Crypto Driver |
Crypto_<vi>_<ai>_ProcessJob() Crypto_<vi>_<ai>_CancelJob() Crypto_<vi>_<ai>_KeyElementSet() Crypto_<vi>_<ai>_KeySetValid() Crypto_<vi>_<ai>_KeyElementGet() Crypto_<vi>_<ai>_KeyElementCopy() Crypto_<vi>_<ai>_KeyElementCopyPartial() Crypto_<vi>_<ai>_KeyCopy() Crypto_<vi>_<ai>_RandomSeed() Crypto_<vi>_<ai>_KeyGenerate() Crypto_<vi>_<ai>_KeyDerive() Crypto_<vi>_<ai>_KeyExchangeCalcPubVal() Crypto_<vi>_<ai>_KeyExchangeCalcSecret() Crypto_<vi>_<ai>_CertificateParse() Crypto_<vi>_<ai>_CertificateVerify() 多驱动时<vi>_<ai>_与驱动对应,单驱动时无<vi>_<ai> |
Crypto_<vi>_<ai>_CertificateParse() Crypto_<vi>_<ai>_CertificateVerify()
多驱动时<vi>_<ai>_与驱动对应,单驱动时无<vi>_<ai>_
4.3 静态接口函数定义¶
CryIf_Init¶
函数名称: |
CryIf_Init |
||
函数原型: |
FUNC(void, CRYIF_CODE) CryIf_Init( P2CONST( CryIf_ConfigType, AUTOMATIC, CRYIF_APPL_DATA) configPtr ) |
||
服务编号: |
0x00 |
||
同步/异步: |
同步 |
||
是否可重入: |
否 |
||
输入参数: |
configPtr |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
初始化CRYIF模块 |
CryIf_GetVersionInfo¶
函数名称: |
CryIf_GetVersionInfo |
||
函数原型: |
FUNC(void, CRYIF_CODE) CryIf_GetVersionInfo( P2VAR(Std_ VersionInfoType, AUTOMATIC, CRYIF_APPL_ DATA)versioninfo ) |
||
服务编号: |
0x01 |
||
同步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
versioninfo |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
获取版本信息 |
CryIf_ProcessJob¶
函数名称: |
CryIf_ProcessJob |
||
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_ProcessJob( |
|||
uint32 channelId, |
|||
P2VAR(Crypto_JobType, AUTOMATIC, CRYIF_APPL_DATA)job |
|||
函数原型: |
|||
) |
|||
服务编号: |
0x03 |
||
同步/异步: |
取决于配置 |
||
是否可重入: |
是 |
||
输入参数: |
channelId |
值域: |
CRYIF_CHANNELS_MAX_CONFIGURED |
输入输出参数: |
job |
||
输出参数: |
无 |
||
返回值: |
E_OK:请求成功 |
||
E_NOT_OK:请求失败 |
|||
CRYPTO_E_BUSY:请求失败,Crypro 驱动对象忙 CRYPTO_E_KEY_NOT_VALID:请求失败,密钥无效 CRYPTO_E_KEY_SIZE_MISMATCH:请求失败,一个密钥元素的大 小错误,请求失败,队列已满 CRYPTO_E_KEY_READ_FAIL:服务请求失败,因为不允许提取 key 元素 CRYPTO_E_KEY_WRITE_FAIL:服务请求失败,因为写入访问失败 CRYPTO_E_KEY_NOT_AVAILABLE:服务请求失败,因为密钥不可 用 |
|||
CRYPTO_E_SMALL_BUFFER:提供的存储结果缓冲区太小 CRYPTO_E_JOB_CANCELLED:服务请求失败,因为同步作业已被 取消 |
|||
CRYPTO_E_KEY_EMPTY:请求失败,因为未初始化的源 key 元素 |
|||
功能概述: |
将接收到的 Job 分派给配置的加密驱动程序对象 |
CryIf_CancelJob¶
函数名称: |
CryIf_CancelJob |
||
函数原型: |
FUN C(Std_ReturnType, CRYIF_CODE) CryIf_CancelJob( uint32 channelId, P2VA R(Crypto_JobType, AUTOMATIC, CR YIF_APPL_DATA)job ) |
||
服务编号: |
0x0e |
||
同步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
channelId |
值域: |
CRYIF_CHANNELS_MAX_ CONFIGURED |
输入 输出参数: |
job |
||
输出参数: |
无 |
||
返回值: |
E_OK:请求成功, 作业已被删除 E_NOT_OK: 请求失败, 无法删除作业 |
||
功能概述: |
将Job取消函数 分派给配置的加密 驱动程序对象 |
CryIf_KeyElementSet¶
函数名称: |
CryIf _KeyElementSet |
||
函数原型: |
FUNC(S td_ReturnType, CRYIF_CODE) CryIf_ KeyElementSet( uint32 cryIfKeyId, uint32 keyElementId, P2CONST(uint8, AUTOMATIC, CRYIF_APP L_DATA)keyPtr, uint32 keyLength ) |
||
服务编号: |
0x04 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
keyElementId |
CRYIF_KEYELEMENT_MAX_ CONFIGURED |
||
keyPtr |
无 |
||
keyLength |
无 |
||
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
E_OK:请求成功 |
||
E_NOT_OK: 请求失败 |
|||
功能概述: |
将把 set key element 函数分 配给配置好的 crypto driver 对象 |
CryIf_KeySetValid¶
函数名称: |
CryIf_KeySetValid |
||
函数原型: |
FUN C(Std_ReturnType, CRYIF_CODE) C ryIf_KeySetValid( uint32 cryIfKeyId ) |
||
服务编号: |
0x05 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
E_OK:请求成功 E _NOT_OK:请求失败 CRYPTO_E_BUSY: 请求失败,Crypro 驱动对象忙 |
||
功能概述: |
把 设置的密钥有效函 数分派给配置的密 码驱动程序对象。 |
CryIf_KeyElementGet¶
函数名称: |
CryIf _KeyElementGet |
||
函数原型: |
FUNC(Std_ReturnT ype, CRYIF_CODE) CryIf_Key ElementGet( uint32 cryIfKeyId, uint32 keyElementId, P2VAR(uint8, AUTOMATIC, CRYIF_APPL_DATA) resultPtr, P2VAR(uint32, AUTOMATIC, CRYIF_APPL_DATA) resultLengthPtr ) |
||
服务编号: |
0x06 |
||
同步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
keyElementId |
CRYIF_KEYELEMENT_MAX_ CONFIGURED |
||
输入 输出参数: |
resultPtr |
||
输出参数: |
resultLengthPtr |
||
返回值: |
E_OK:请求成功 E_NOT_ OK:请求加密失败 CRYPTO_ E_BUSY:请求失败 ,密码驱动对象忙 CRYPTO _E_KEY_NOT_AVAIL ABLE:请求失败, 被请求的密钥元素 不可用 CRYPTO _E_KEY_READ_FAIL :请求失败,因为 readaccess 被拒绝 CRYPT O_E_SMALL_BUFFER :提供的缓冲区太 小,无法存储结果 CRYPTO _E_KEY_EMPTY:由 于未初始化源密钥 元素而导致请求失 败 |
||
功能概述: |
把 get 密钥元素函 数分派给已配置的 密码驱动程序对象 |
CryIf_KeyElementCopy¶
函数名称: |
CryIf_Key ElementCopy |
||
函数原型: |
FUNC(Std_Retu rnType, CRYIF_CODE) CryIf_Ke yElementCopy( uint32 cryIfKeyId, uint32 keyElementId, uint32 targ etCryIfKeyId, uint32 targe tKeyElementId ) |
||
服务编号: |
0x0f |
||
同 步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_CONFIGURED |
keyElementId |
CRYIF_KEYELEMENT_MAX_ CONFIGURED |
||
tar getCryIfKeyId |
CRYIF_KEY_MAX_CONFIGURED |
||
targe tKeyElementId |
CRYIF_KEYELEMENT_MAX_ CONFIGURED |
||
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
E _OK:请求成功 E_NOT _OK:请求失败 CR YPTO_E_BUSY: 请求失败,密 码驱动对象忙 CRYP TO_E_ KEY_NOT_ AVAILABLE:请 求失败,请求 的密钥元素不 可用 CRYPTO _E_KEY_READ_F AIL:请求失败 ,不允许提取 key 元素 CRY PTO_E_KEY_WRI TE_FAIL:请求 失败,不允许 写入密钥元素 CR YPTO_E_KEY_SI ZE_MISMATCH: 请求失败,key 元 素大小不兼容 CRYPTO_ E_KEY_EMPTY: 由于未初始化 源密钥元素而 导致请求失败 |
||
功能概述: |
将一个key元素 从一个key复制 到一个目标key |
CryIf_KeyElementCopyPartial¶
函数名称: |
CryIf_KeyE lementCopyPartial |
||
函数原型: |
FUN C(Std_ReturnType, CRYIF_CODE) CryIf_KeyEl ementCopyPartial( uint32 cryIfKeyId, uint32 keyElementId, uint32 keyEle mentSourceOffset, uint32 keyEle mentTargetOffset, uint32 keyE lementCopyLength, uint32 targetCryIfKeyId, uint32 t argetKeyElementId ) |
||
服务编号: |
0x12 |
||
同 步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
keyElementId |
CRYIF_KEYELEMENT_MAX_ CONFIGURED |
||
keyEl ementSourceOffset |
无 |
||
keyEl ementTargetOffset |
无 |
||
key ElementCopyLength |
无 |
||
targetCryIfKeyId |
CRYIF_KEY_MAX_ CONFIGURED |
||
t argetKeyElementId |
CRYIF_KEYELEMENT_MAX_ CONFIGURED |
||
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
E_OK:请求成功 E _NOT_OK:请求失败 CRYPTO _E_BUSY:请求失败 ,密码驱动对象忙 CRYPTO _E_KEY_NOT_AVAILA BLE:请求失败,请 求的密钥元素不可 用 CRYPTO_E_KE Y_READ_FAIL:请求 失败,不允许提取 key 元素 CRY PTO_E_KEY_WRITE_F AIL:请求失败,不 允许写入密钥元素 CRYPTO_ E_KEY_SIZE_MISMAT CH:请求失败,key 元素大小不兼容 CRYPTO_ E_KEY_EMPTY:由于 未初始化源密钥元 素而导致请求失败 |
||
功能概述: |
将一个键元素复制 到另一个键元素。 keyElementOffsets 和 key ElementCopyLength 只允许将 源键元素的一部分 复制到目标键元素 中。 |
CryIf_KeyCopy¶
函数名称: |
CryIf_KeyCopy |
||
函数原型: |
FUN C(Std_ReturnType, CRYIF_CODE) CryIf_KeyCopy( uint32 cryIfKeyId, uint32 targetCryIfKeyId ) |
||
服务编号: |
0x10 |
||
同步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
cryIfKeyId |
值域: |
|
targetCryIfKeyId |
CRYIF_KEY_MAX_ CONFIGURED |
||
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
E_OK:请求成功 E_ NOT_OK:请求失败 CRYPTO_ E_BUSY:请求失败 ,密码驱动对象忙 CRYPTO _E_KEY_NOT_AVAIL ABLE:请求失败, 请求的密钥元素不 可用 CRYPTO_E_KEY _READ_FAIL:请求 失败,不允许提取 key 元素 CRYPT O_E_KEY_WRITE_FA IL:请求失败,不 允许写入密钥元素 CRYPTO_E_ KEY_SIZE_MISMATC H:请求失败,key 元素大小不兼 容 CRYPTO _E_KEY_EMPTY:由 于未初始化源密钥 元素而导致请求失 败 |
||
功能概述: |
将源密钥中的所有 key元素 复制到目标密钥中 |
CryIf_RandomSeed¶
函数名称: |
CryIf_RandomSeed |
||
函数原型: |
Std_ReturnType CryIf_RandomSeed ( uint32 cryIfKeyId, const uint8* seedPtr, uint32 seedLength) |
||
服务编号: |
0x07 |
||
同 步/异步: |
同步或异步, 取决于配置 |
||
是 否可重入: |
是 |
||
输 入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
seed Ptr:保存一个指 向内 存位置的指针, 该 内存位置包含为 种 子提供数据的指 针。 |
无 |
||
see dLength:包含种 子的 长度,以字节为 单位 |
uint32 |
||
输入 输出参数: |
无 |
||
输 出参数: |
无 |
||
返回值: |
E_OK:请求成功 E_N OT_OK:请求失败 |
||
功 能概述: |
该函 数将随机种子函 数分配给配置好 的密码驱动对象 |
CryIf_KeyGenerate¶
函数名称: |
CryIf_KeyGenerate |
||
函数原型: |
FUN C(Std_ReturnType, CRYIF_CODE) C ryIf_KeyGenerate( uint32 cryIfKeyId ) |
||
服务编号: |
0x07 |
||
同步/异步: |
取决于配置 |
||
是 否可重入: |
是 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
E_OK:请求成功 E_ NOT_OK:请求失败 |
||
功能概述: |
将随机种 子函数分配给配置 好的密码驱动对象 |
CryIf_KeyDerive¶
函数名称: |
CryIf_KeyDerive |
||
函数原型: |
FUN C(Std_ReturnType, CRYIF_CODE) CryIf_KeyDerive( uint32 cryIfKeyId, uint32 targetCryIfKeyId ) |
||
服务编号: |
0x08 |
||
同步/异步: |
取决于配置 |
||
是 否可重入: |
是 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
targetCryIfKeyId |
CRYIF_KEY_MAX_ CONFIGURED |
||
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
E_OK:请求成功 E _NOT_OK:请求失败 CRYPT O_E_KEY_EMPTY:由 于未初始化源密钥 元素而导致请求失 败 |
功能概述: |
将密钥派生函数分配给已配置的密码驱动程序对象 |
CryIf_KeyExchangeCalcPubVal¶
函数名称: |
CryIf_KeyE xchangeCalcPubVal |
||
函数原型: |
FUN C(Std_ReturnType, CRYIF_CODE) CryIf_KeyEx changeCalcPubVal( uint32 cryIfKeyId, P2VAR(uint8, AUTOMATIC, CRYIF_APPL_DAT A)publicValuePtr, P2VAR(uint32, AUTOMATIC, CR YIF_APPL_DATA)pub licValueLengthPtr ) |
||
服务编号: |
0x0a |
||
同步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
输入 输出参数: |
pub licValueLengthPtr |
||
输出参数: |
publicValuePtr |
||
返回值: |
E_OK:请求成功 E _NOT_OK:请求失败 CRYPTO _E_BUSY:请求失败 ,密码驱动对象忙 CRY PTO_E_SMALL_BUFFE R:提供的缓冲区太 小,无法存储结果 CRYPTO_E_KEY_ EMPTY:请求失败, 因为没有初始化源 key 元素 |
||
功能概述: |
将 密钥交换公共值计 算函数分配给配置 好的密码驱动对象 |
CryIf_KeyExchangeCalcSecret¶
函数名称: |
CryIf_K eyExchangeCalcSecret |
||
函数原型: |
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_Ke yExchangeCalcSecret( uint32 cryIfKeyId, P2CONST(uint8, AUTOMATIC, CRYIF_APPL_DATA)pa rtnerPublicValuePtr, uint32 part nerPublicValueLength ) |
||
服务编号: |
0x0b |
||
同步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
cryIfKeyId |
值域: |
CRYIF_KEY_MAX_ CONFIGURED |
p artnerPublicValuePtr |
无 |
||
part nerPublicValueLength |
无 |
||
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
E_NOT_OK:请求失败
|
||
功能概述: |
将密钥交换公共共 享秘密计算函数分配给 配置好的密码驱动对象 |
CryIf_CallbackNotification¶
函数名称: |
CryIf_Cal lbackNotification |
||
函数原型: |
FUNC(void, CRYIF_CODE) CryIf_Call backNotification( P2VA R(Crypto_JobType, AUTOMATIC,CRY IF_APPL_DATA)job, Std_ReturnType result ) |
||
服务编号: |
0x0d |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
job |
值域: |
无 |
result |
无 |
||
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
通知 CRYIF 关于密码操作 结果的请求的完成 |
4.4 可配置函数定义¶
无。
5 配置¶
CryIfGeneralConfig¶
UI 名称 |
描述 |
|||
CryI fDevErrorD etect |
取值范围 |
TRUE/FALSE |
默认取值 |
FALSE |
参数描述 |
打开或关闭开 发错误检测和通知。 tru e:启用检测和通知。 false: 检测和通知被禁用。 |
|||
依赖关系 |
无 |
|||
CryIfV ersionInfo Api |
取值范围 |
TRUE/FALSE |
默认取值 |
FALSE |
参数描述 |
如预处理程 序切换以启用和禁用 API 的可用性 C ryIf_GetVersionInfo ()。 True: API CryIf_GetVe rsionInfo()是可用的 错误:API CryIf_GetVe rsionInfo()不可用。 |
|||
依赖关系 |
无 |
CryIfChannelConfig¶
UI 名称 |
描述 |
|||
CryI fChannelId |
取值范围 |
0 .. 4294967295 |
默认取值 |
无 |
参数描述 |
密码通道的标识符。 指定 CSM队列连 接到哪个加密通道。 |
|||
依赖关系 |
创建后自动生成ID |
|||
CryIf DriverObje ctRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
此参数引用 加密驱动程序对象。 指 定密码通道连接到哪 个密码驱动程序对象 |
|||
依赖关系 |
依赖于 Crypto Driver 中配置的 Channel |
CryIfKeyConfig¶
UI 名称 |
描述 |
|||
CryIfKeyId |
取值范围 |
0 .. 4294967295 |
默认取值 |
无 |
参数描述 |
CryIfkey 的标识符。 指定 CSM 密钥映射到哪个 CryIf 密钥。 |
|||
依赖关系 |
创建后自动生成ID |
|||
C ryIfKeyRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
此参数引用 密码驱动程序密钥。 指定 CryIf 密钥映射到哪个 加密驱动程序密钥。 |
|||
依赖关系 |
依赖于 Crypto Driver 中配置的 Key |
CryifIncludesConfig¶
图 CryifIncludeConfig配置图
表 CryifIncludeConfig属性描述
:ma rk:UI名称 |
: mark:描述 |
|||
IncludeName |
取值范围 |
String |
默认取值 |
无 |
参数描述 |
此参数用于c ryif的配置文 件引用头文件 |
|||
依赖关系 |
无 |