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 源文件描述

表 3-1 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() Cry

pto_<vi>_<ai>_KeyElementCopyPartial()

Crypto_<vi>_<ai>_KeyCopy() Crypto_<vi>_<ai>_RandomSeed() Crypto_<vi>_<ai>_KeyGenerate() Crypto_<vi>_<ai>_KeyDerive() Cry

pto_<vi>_<ai>_KeyExchangeCalcPubVal()

Cry

pto_<vi>_<ai>_KeyExchangeCalcSecret()

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

函数名称:

ProcessJob

函数原型:

FUNC(Std_R eturnType,

C

RYIF_CODE)

CryIf_P

rocessJob(

uint32

channelId,

P

2VAR(Crypt o_JobType,

AUTOMATIC,

CRYIF_APP

L_DATA)job

)

服务编号:

0x03

同步/异步:

取决于配置

否可重入:

输入参数:

channelId

域:

CRYIF_CHANNELS_MAX_CONFIGURED

输入

输出参数:

job

输出参数:

返回值:

E_OK

:请求成功

E_NOT_OK

:请求失败

CRYPTO_E_BUSY:请求失败,Crypro 驱动对象忙 CRYPTO_E_KEY_NOT_VALID:请求失败,密钥无效 C

RYPTO_E_KEY_SIZE_MISMATCH:请求失败,一个密钥元素的大

小错误,请求失败,队列已满

CRYPTO_E_KEY_READ_FAIL:服务请求失败,因为不允许提取

key 元素 CR

YPTO_E_KEY_WRITE_FAIL:服务请求失败,因为写入访问失败

C

RYPTO_E_KEY_NOT_AVAILABLE:服务请求失败,因为密钥不可

CRYPTO_E_SMALL_BUFFER:提供的存储结果缓冲区太小 C

RYPTO_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_ReturnType, CRYIF_CODE) CryIf_KeyElementGet(

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:请求加密失败

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_KeyElementCopy

函数原型:

FUNC(Std_ReturnType, 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

素大小不兼容

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:请求失败,不 允许写入密钥元素

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:请求失败

E_BUSY:请求失败 ,密码驱动对象忙

CRYPTO

_E_KEY_NOT_AVAIL ABLE:请求失败, 请求的密钥元素不

可用

CRYPTO_E_KEY

_READ_FAIL:请求 失败,不允许提取

key 元素 CRYPT

O_E_KEY_WRITE_FA IL:请求失败,不 允许写入密钥元素

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

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:提供的缓冲区太 小,无法存储结果

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

图 5-1 CryIfGeneralConfig 容器配置图

表 5-1 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

image4

图 5-2 CryIfChannelConfig 容器配置图

表 5-2 CryIfChannelConfig 属性描述

UI 名称

描述

CryI

fChannelId

取值范围

0 .. 4294967295

默认取值

参数描述

密码通道的标识符。

指定 CSM 队列连

接到哪个加密通道。

依赖关系

创建后自动生成 ID

CryIf

DriverObje

ctRef

取值范围

默认取值

参数描述

此参数引用

加密驱动程序对象。

定密码通道连接到哪 个密码驱动程序对象

依赖关系

依赖于 Crypto Driver 中配置的 Channel

CryIfKeyConfig

image5

图 5-3 CryIfKeyConfig 容器配置图

表 5-3 CryIfKeyConfig 属性描述

UI 名称

描述

CryIfKeyId

取值范围

0 .. 4294967295

默认取值

参数描述

CryIfkey 的标识符。

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

依赖关系

创建后自动生成 ID

C

ryIfKeyRef

取值范围

默认取值

参数描述

此参数引用

密码驱动程序密钥。

指定 CryIf 密钥映射到哪个

加密驱动程序密钥。

依赖关系

依赖于 Crypto Driver 中配置的 Key