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 解决方案。

image1

图 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 模块配置生成文件。

image2

图 3-1 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

值域:

CRYIF_KEY_MAX_

CONFIGURED

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_OK:请求成功

E_NOT_OK:请求失败

CRYPTO_E_BUSY:请求 失败,密码驱动对象忙 CRYPTO_E_SMAL L_BUFFER:提供的缓冲 区太小,无法存储结果

CRYPTO _E_KEY_EMPTY:请求失 败,因为没有初始化源 key 元素

功能概述:

将密钥交换公共共 享秘密计算函数分配给 配置好的密码驱动对象

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

image3

图 CryIfGeneralConfig 容器配置图

表 ryIfGeneralConfig 属性描述

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

image4

图 CryIfChannelConfig 容器配置图

表 CryIfChannelConfig 属性描述

UI 名称

描述

CryI fChannelId

取值范围

0 .. 4294967295

默认取值

参数描述

密码通道的标识符。

指定 CSM队列连 接到哪个加密通道。

依赖关系

创建后自动生成ID

CryIf DriverObje ctRef

取值范围

默认取值

参数描述

此参数引用 加密驱动程序对象。 指 定密码通道连接到哪 个密码驱动程序对象

依赖关系

依赖于 Crypto Driver 中配置的 Channel

CryIfKeyConfig

image5

图 CryIfKeyConfig 容器配置图

表 CryIfKeyConfig 属性描述

UI 名称

描述

CryIfKeyId

取值范围

0 .. 4294967295

默认取值

参数描述

CryIfkey 的标识符。

指定 CSM 密钥映射到哪个 CryIf 密钥。

依赖关系

创建后自动生成ID

C ryIfKeyRef

取值范围

默认取值

参数描述

此参数引用 密码驱动程序密钥。

指定 CryIf 密钥映射到哪个 加密驱动程序密钥。

依赖关系

依赖于 Crypto Driver 中配置的 Key

CryifIncludesConfig

image6

图 CryifIncludeConfig配置图

表 CryifIncludeConfig属性描述

:ma rk:UI名称

: mark:描述

IncludeName

取值范围

String

默认取值

参数描述

此参数用于c ryif的配置文 件引用头文件

依赖关系