SecOC

目标

本集成手册用于指导用户进行SecOC模块集成,文档主要包括的内容为:SecOC模块集成指导、基于示例应用的集成讲解。

由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。

缩写词和术语

表

缩写词/术语

描述

SecOC

Security On board Communication安全板载通信

MCAL

Microcontroller Abstraction Layer微控制器抽象层

CryIf

Crypto Interface Crypto接口

Csm

Crypto ServiceManager Crypto服务管理

MAC

Message Authentication Code消息认证码

参考文档

[1]《参考手册_CryIf.pdf》

[2]《参考手册_CSM.pdf》

[3]《参考手册_Crypto.pdf》

[4]《参考手册_SecOC.pdf》

SecOC集成

项目交付的内容为:SecOC源码和ORIENTAIS Studio配置工具。

SecOC相关配置模块的功能介绍,参见表 SecOC相关配置模块介绍。

使用SecOC源码和配置工具,进行SecOC的集成的步骤,参见表 SecOC集成的步骤。

表 SecOC相关配置模块介绍

模块名

功能

Can

提供SecOC所需要的邮箱

CANIf

CANIf模块主要处理上层模块与底层驱动的之间PDU的传递,为上层模块提供统一的接口来管理不同的CAN硬件模块

EcuC

用于辅助配置工具完成配置的模块。主要提供PDU的定义,其它模块通过关联EcuC中PDU,相互关联起来。

PduR

PDU Router主要为通讯接口模块(CANIf)、传输协议模块(CAN TP、J1939 TP)、诊断通讯管理模块(DCM、J1939DCM)以及通讯模块(COM、LDCOM)以及IPDUM、SECOC等模块提供基于I-PDU的路由服务。

Com

COM模块主要提供I-PDU和信号相关管理功能

Crypto

为SecOC提供底层加密驱动程序

Csm

Csm模块为Crypto进行抽象并为上层提供标准化接口

SecOC

SecOC模块主要管理参与信息安全收发的PDU及相关属性

表 SecOC集成的步骤

步骤

操作

说明

1

ORIENTAIS Studio配置工具工程搭建和SecOC相关模块加载

若配置工具已经搭建,则仅需进行SecOC相关模块的加载操作。

2

模块配置及配置文件生成

NA

3

代码集成

现有工程、SecOC相关模块源代码和配置生成文件的集成。

4

验证测试

NA

Note

SecOC模块集成之前,用户须确保已经有基础工程。

新建ORIENTAIS Studio配置工程及模块加载

  1. 安装ORIENTAIS Studio软件后,双击软件图标打开软件。

    image1

    图 新建工程-1

  2. 菜单栏File🡪New🡪Project,新建工程。

    image2

    图 新建工程-2

  3. 在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。

    image3

    图 新建工程-3

  4. 在弹出的窗口中输入工程名,选择Finish。

    image4

    图 新建工程-4

  5. 在弹出的窗口中选择Yes。

    image5

    图 新建工程-5

  6. 选择[Bsw_Builder],右键单击,选择New ECU Configuration。

    image6

    图 新建工程-6

  7. 在弹出的窗口中输入ECU名,然后选择Next。

    image7

    图 新建工程-7

  8. 在弹出的窗口中勾选需添加的模块,点击Finish。

    image8

    图 新建工程-8

  9. 新建工程如下所示,上一步添加的模块已经被加入到工程中。

    image9

    图 新建工程-9

  10. MCAL配置导入,BSW模块需要依赖MCAL生成的CAN模块

    1. 从MCAL配置工具生成arxml

      image10

      图 新建工程-10

      image11

      图 新建工程-11

    2. 导入BSW工具

      image12

      图 新建工程-12

      image13

      图 新建工程-13

      image14

      图 新建工程-14

模块配置及生成代码

该章节主要介绍SecOC模块的配置参数,列举配置项在配置界面显示的名称、可能的取值、默认的取值、参数描述及依赖关系,旨在指导用户如何使用配置工具进行SecOC模块参数的配置。

目标:配置一组报文进行SecOC的正常收发

表 配置目标

类型

CANID

Date

新鲜度长度

MAC值长度

SecOCID

TX

0x3E0

6Bytes

2Bytes

16Bytes

2Bytes

RX

0x2E0

6Bytes

2Bytes

16Bytes

2Bytes

表格名词解析如下表介绍

表 属性描述

UI名称

该配置项在配置工具界面显示的名称

取值范围

该配置项允许的取值区间

默认取值

该配置项默认的配置值

参数描述

该配置项在标准的AUTOSAR_EcucParamDef.arxml文件中的描述

依赖关系

该配置项与其他模块或配置项的关系

Ecuc配置

一帧SecOC报文对应于四组ECUC和PDUR的两组路由组,分别对应于CANIf和COM使用。

EcucConfigSet

如表 配置目标,示例中使用CANFD,数据整体长度是24Bytes(此长度不包含SecOCID)。

配置Ecuc包含的发送、接收信息

COM -> SecOC_Authentic_Tx -> SecOC_Secured_Tx -> SecOC_Tx

SecOC_Rx -> SecOC_Secured_Rx -> SecOC_Authentic_Rx -> COM

image15

图 EcucConfigSet

  1. 配置COM发送、接收信息:

    COM_CAN1_Rx_0x2E0_SecOC/COM_CAN1_Tx_0x3E0_SecOC,长度为6

  2. 配置CANIf的发送、接收信息:

    CANIF_CAN1_Rx_0x2E0_SecOC/CANIF_CAN1_Tx_0x3E0_SecOC,长度为24

  3. 配置SecOC的加密、真实的发送、接收信息:

    1. 加密数据:

      CAN1_Tx_0x3E0_SecOC_Authentic/CAN1_Rx_0x2E0_SecOC_Authentic,长度为6

    2. 安全数据:

      CAN1_Tx_0x3E0_SecOC_Secured/CAN1_Rx_0x2E0_SecOC_Secured,长度为24

CanIf的配置

CanIfRx

CanIf主要是对报文属性的定义,包含了CANID和DLC以及帧类型等重要数据。

image16

图 CanIfInitCfgRX配置

  1. 配置接收报文的ID 0x2E0这个信息和底层的邮箱信息相匹配。

  2. 配置帧类型是STANDARD_FD_CAN。

  3. DLC的长度,接收数据为24字节。

填写接收报文的ID,确定数据帧的类型以及数据长度,选择此数据的PDUHrH,以及CanIfRxPduRef。

表 CanIfRx界面配置说明

UI名称

描述

CanIfRxPduCanId

取值范围

0-0x7FF

默认取值

0x00

参数描述

报文的ID

依赖关系

无

CanIfRxPduCanIdType

取值范围

无

默认取值

STABDARD_CAN

参数描述

帧类型

依赖关系

无

CanIfRxPduDlc

取值范围

0-32

默认取值

8

参数描述

报文长度

依赖关系

无

CanIfRxPduUserRxIndicationUL

取值范围

无

默认取值

PDUR

参数描述

接收报文所属的规范类型

依赖关系

无

CanIfRxPduHrhIdRef

取值范围

无

默认取值

HRH

参数描述

Rx L-PDU所属的HRH通过该参数引用

依赖关系

无

CanIfRxPduRef

取值范围

无

默认取值

参数描述

引用“全局”Pdu结构,以允许协调com堆栈中的句柄id

依赖关系

无

CanIfTx

image17

图 CanIfInitCfgTX配置

  1. 配置发送报文的ID 0x3E0这个信息和底层的邮箱信息相匹配。

  2. 配置帧类型STANDARD_FD_CAN。。

填写发送报文的ID,确定数据帧的类型,选择此数据的PDUHrH,以及CanIfTxPduRef。

表 CanIfTx界面配置说明

UI名称

描述

CanIfTxPduType

取值范围

0-0x7FF

默认取值

0x00

参数描述

报文的ID

依赖关系

无

CanIfTxPduCanIdType

取值范围

无

默认取值

STABDARD_CAN

参数描述

帧类型

依赖关系

无

CanIfTxPduType

取值范围

无

默认取值

STATIC

参数描述

是否可以更改CANID

依赖关系

无

CanIfTxPduUserRxIndicationUL

取值范围

无

默认取值

PDUR

参数描述

接收报文所属的规范类型

依赖关系

无

CanIfTxPduBufferRef

取值范围

无

默认取值

参数描述

对CanIf缓冲区配置的可配置引用

依赖关系

无

CanIfTxPduRef

取值范围

无

默认取值

参数描述

引用“全局”PDU结构,以允许协调com堆栈中的句柄id

依赖关系

无

PDUR

PduRBswModules

image18

图 PduRBswModules配置

  1. 打开发送确认(PduRTxConfirmation)。

  2. Module引用SecOC模块。

此界面包含函数接口的宏开关以及PDU路由器模块应使用传输协议接口指定的API参数。PduRBswModuleRef需要在添加SecOC模块之后才可出现选择项。

表 PduRBswModules界面配置说明

UI名称

描述

PduRCancelTransmit

取值范围

True / False

默认取值

False

参数描述

取消发送函数的宏开关

依赖关系

无

PduRTxConfirmation

取值范围

True / False

默认取值

False

参数描述

发送确认函数的宏开关

依赖关系

无

PduRBswModuleRef

取值范围

无

默认取值

无

参数描述

这是对一个BSW模块配置的引用

依赖关系

无

PduRRoutingTables

在界面配置路由表,包含在ECUC里面配置的句柄信息以及数据流向,本文档中在此只关注SecOC报文。

image19

图 路由表配置

如上述的章节(Ecuc配置)里面已经描述SecOC配置的ECUC的分组信息,在此配置发送是两组,接收是两组,分别在CanIf和COM里面进行传输,普通报文仅只有COM和CanIf两者之间传输而已,并不包含SecOC的附加信息。

发送路由表

发送的数据信息的传输如下图所示:

image20

图 发送数据流

分析路由表的配置以下:

一、真实数据发送PduR组

源发送数据(此数据和下面的数据为一组,在COM往下发的时候传输使用,和安全的数据不一样,此为真实数据组8Bytes)。

image21

图 COM发送数据流Src

  1. 启动传输需要打开,否则无法传输。

  2. 目的PDU参考为COM来的PDU,选择COM_CAN1_Tx_0x3E0_SecOC发送的时候数据从COM源发送真实数据到真实数据配置的ECUCPduRSrcPdus -> PduRDestPdus

表 PduRSrcPdus界面配置说明TxCom

UI名称

描述

PduRSrcPduUpTxConf

取值范围

True / False

默认取值

True

参数描述

启动传输

依赖关系

无

PduRSrcPduRef

取值范围

无

默认取值

无

参数描述

源PDU参考;引用唯一的PDU标识符,应使用用于请求的PDU路由器操作

依赖关系

无

目的发送数据(此数据和上面的数据为一组6Bytes)

image22

图 COM发送数据流Dest

  1. 选择数据的传输方式为直接传输。

  2. 此路由和TP无关报文走的是If,不需勾选PduRTpThreshold。

  3. 目的PDU参考为真实PDU,选择CAN1_Tx_0x3E0_SecOC_Authentic。

表 PduRSrcPdus界面配置说明TxCom

UI名称

描述

PduRDestPduDataProvision

取值范围

无

默认取值

无

参数描述

指定如何提供数据:direct(作为传输调用的一部分)或via

依赖关系

无

PduRTpThreshold

取值范围

0…255

默认取值

0

参数描述

此参数仅与TP路由相关。

依赖关系

无

PduRTransmissionConfirmation

取值范围

True / False

默认取值

True

参数描述

此参数仅用于通信接口。传输协议模块将始终调用TxConfirmation函数

依赖关系

无

PduRDestPduRef

取值范围

无

默认取值

SecOC_Authentic_Tx0

参数描述

目的地PDU参考;当调用目标模块的相关函数时,由PDU路由器引用唯一的PDU标识符应使用而不是源PDU标识符

依赖关系

无

二、安全数据PduR组

CAN1_Tx_0x3E0_SecOC_Secured -> CANIF_CAN1_Tx_0x3E0_SecOC为PduR的数据流向

安全PduR源目的的数据如下:

源发送数据(此数据和下面的数据为一组,在CanIf往外发的时候传输使用,和真实的数据不一样,此为安全数据组24Bytes)。

image23

图 CanIf发送数据流Src

  1. 启动传输需要打开,否则无法传输。

  2. PDU参考为安全的PDU,选择CAN1_Tx_0x3E0_SecOC_Secured

表 PduRSrcPdus界面配置说明TxCanIf

UI名称

描述

PduRSrcPduUpTxConf

取值范围

True / False

默认取值

True

参数描述

启动传输

依赖关系

无

PduRSrcPduRef

取值范围

无

默认取值

无

参数描述

源PDU参考;引用唯一的PDU标识符,应使用用于请求的PDU路由器操作

依赖关系

无

安全PduR目的数据如下:

目的发送数据(此数据和上面的数据为一组24Bytes)

image24

图 CanIf发送数据流Dest

  1. 选择数据的传输方式为直接传输。

  2. 和TP无关报文走的是If,填写0.

  3. 目的PDU参考为CanIf的PDU,选择CANIF_CAN1_Tx_0x3E0_SecOC

表 PduRSrcPdus界面配置说明TxCom

UI名称

描述

PduRDestPduDataProvision

取值范围

无

默认取值

无

参数描述

指定如何提供数据:direct(作为传输调用的一部分)或via

依赖关系

无

PduRTpThreshold

取值范围

0…255

默认取值

0

参数描述

此参数仅与TP路由相关。

依赖关系

无

PduRTransmissionConfirmation

取值范围

True / False

默认取值

True

参数描述

此参数仅用于通信接口。传输协议模块将始终调用TxConfirmation函数

依赖关系

无

PduRDestPduRef

取值范围

无

默认取值

SecOC_Authentic_Tx0

参数描述

目的地PDU参考;当调用目标模块的相关函数时,由PDU路由器引用唯一的PDU标识符应使用而不是源PDU标识符

依赖关系

无

Note

如果已在DBC里面配置SecOC报文,需要删除工具里生成的这一层的PduR,手动的去配置。因为目前DBC需求中没有明确信息表明是SecOC报文,所以会按照非加密报文生成通信栈里面的信息,需要按照本文档写的配置说明去手动更改配置的信息(Ecuc-CanIf-PduR-COM-SecOC的顺序配置)或者在DBC中删除多余信号。

接收路由表

接收数据信息的传输如下图所示:

image25

图 接收数据流

路由表的配置如下:

一、加密数据接收PduR组

源发送数据(此数据和下面的数据为一组,在Can接收的时候传输使用,和真实的数据不一样,此为安全数据组24Bytes)。

image26

图 CanIf接收数据流Src

  1. 启动传输需要打开,否则无法传输。

  2. 源PDU参考为CanIf的PDU,选择CANIF_CAN1_Rx_0x2E0_SecOC

表 PduRSrcPdus界面配置说明RxCanIf

UI名称

描述

PduRSrcPduUpTxConf

取值范围

True / False

默认取值

True

参数描述

启动传输

依赖关系

无

PduRSrcPduRef

取值范围

无

默认取值

无

参数描述

源PDU参考;引用唯一的PDU标识符,应使用用于请求的PDU路由器操作

依赖关系

无

接收时,安全数据从CanIf源接收外部的数据,路由到SecOC安全的数据配置的ECUC。

image27

图 CanIf接收数据流Dest

  1. 选择数据的传输方式为直接传输。

  2. 和TP无关报文走的是If,填写0.

  3. 目的PDU参考为安全的PDU,选择CAN1_Rx_0x2E0_SecOC_Secured

表 PduRSrcPdus界面配置说明RxCanIf

UI名称

描述

PduRDestPduDataProvision

取值范围

无

默认取值

无

参数描述

指定如何提供数据:direct(作为传输调用的一部分)或via

依赖关系

无

PduRTpThreshold

取值范围

0…255

默认取值

0

参数描述

此参数仅与TP路由相关。

依赖关系

无

PduRTransmissionConfirmation

取值范围

True / False

默认取值

True

参数描述

此参数仅用于通信接口。传输协议模块将始终调用TxConfirmation函数

依赖关系

无

PduRDestPduRef

取值范围

无

默认取值

无

参数描述

目的地PDU参考;当调用目标模块的相关函数时,由PDU路由器引用唯一的PDU标识符应使用而不是源PDU标识符

依赖关系

无

二、真实数据接收PduR组

这是PduR源目的的数据如下:

源发送数据(此数据和下面的数据为一组,在COM接收的时候传输使用,和安全的数据不一样,此为安全数据组6Bytes)。

image28

图 COM接收数据流Src

  1. 启动传输需要打开,否则无法传输。

  2. 源PDU参考为真实的PDU,选择CAN1_Rx_0x2E0_SecOC_Authentic

表 PduRSrcPdus界面配置说明RxCom

UI名称

描述

PduRSrcPduUpTxConf

取值范围

True / False

默认取值

True

参数描述

启动传输

依赖关系

无

PduRSrcPduRef

取值范围

无

默认取值

无

参数描述

源PDU参考;引用唯一的PDU标识符,应使用用于请求的PDU路由器操作

依赖关系

无

真实PduR目的的数据如下:

目的接收数据(此数据和上面的数据为一组6Bytes)

image29

图 COM接收数据流Dest

  1. 选择数据的传输方式为直接传输。

  2. 和TP无关报文走的是If,填写0.

  3. 目的PDU参考为COM的PDU,选择COM_CAN1_Rx_0x2E0_SecOC

表 PduRDestPdus界面配置说明RxCom

UI名称

描述

PduRDestPduDataProvision

取值范围

无

默认取值

无

参数描述

指定如何提供数据:direct(作为传输调用的一部分)或via

依赖关系

无

PduRTpThreshold

取值范围

0…255

默认取值

0

参数描述

此参数仅与TP路由相关。

依赖关系

无

PduRTransmissionConfirmation

取值范围

True / False

默认取值

True

参数描述

此参数仅用于通信接口。传输协议模块将始终调用TxConfirmation函数

依赖关系

无

PduRDestPduRef

取值范围

无

默认取值

无

参数描述

目的地PDU参考;当调用目标模块的相关函数时,由PDU路由器引用唯一的PDU标识符应使用而不是源PDU标识符

依赖关系

无

COM

DBC的配置

  1. TX(信号只需要定义有效数据即可,本文档采用大端法)

image30

图 TX_DBC的定义

  1. RX(信号只需要定义有效数据即可,本文档采用大端法)

image31

图 RX_DBC的定义

  1. 附加的信息不必要占用任何的DBC里面的信息,描述包含:新鲜度、MAC、SecOCID。

ComConfig

Tx信号的配置

CAN1_Tx_0x3E0_Sig_1_U48_CAN1_Tx_0x3E0_SecOC信号的定义

image32

图 TX信号

  1. 数据的起始位和位长度可以根据DBC的导入获得,或者根据大端和小端的方式来确定,本示例使用大端配置。

  2. 信号类型采用:大端法。

  3. 信号的初始值:此处可人为填写,也可以在测试的时候更改这个值,验证功能,示例按照图所示字节填写即可。

  4. 信号类型:这个很重要,后面的测试转发报文的需要信号的类型相匹配,此选项是48Bits,选择UINT64。

表 ComConfig界面配置说明

UI名称

描述

ComBitPosition

取值范围

0..4294967295

默认取值

无

参数描述

I-PDU内的起始位置该参数指的是I-PDU中的位置,而不是影子缓冲区中的位置如果将字节序转换配置为不透明,则参数ComBitPosition应定义第一个字节的bit0,如小端字节顺序

依赖关系

无

ComSignalEndianness

取值范围

BIG_ENDIAN

LITTLE_ENDIAN

OPAQUE

默认取值

无

参数描述

定义信号网络表示的字节顺序

依赖关系

无

ComSignalInitValue

取值范围

与信号类型有关

默认取值

0

参数描述

此信号的初始值在UINT8_N的情况下,默认值是一个长度为ComSignalLength的字符串,所有字节都设置为0x00在UINT8_DYN的情况下,初始大小应为0

依赖关系

在UINT8_N的情况下,ComSignalInitValue的长度必须与ComSignalLength的长度相同。

ComTransferProperty

取值范围

PENDING

TRIGGERED TRIGGERED_ON_CHANGE

TRIGGERED_ON_CHANGE_WITHOUT_REPETITION

TRIGGERED_WITHOUT_REPETITION

默认取值

PENDING

参数描述

定义对此信号的写访问是否可以触发相应I-PDU的传输如果I-PDU被触发,则还取决于相应I-PDU的传输模式

依赖关系

无

ComUpdateBitPosition

取值范围

0..4294967295

默认取值

无

参数描述

更新位在I-PDU内的位位置

依赖关系

无

ComGwIPduRef

取值范围

引用[ComIPdu]

默认取值

无

参数描述

引用Signal Gateway源或目的地描述的I-PDU

依赖关系

无

Rx信号的配置

CAN1_Rx_0x2E0_Sig_1_U48_CAN1_Rx_0x2E0_SecOC的定义

image33

图 RX信号

  1. 数据的起始位和位长度可以根据DBC的导入获得,或者根据大端和小端的方式来确定,在这里采用大端法。

  2. 信号类型采用:大端法。

  3. 信号的初始值:接收数据无需配置,默认即可。

  4. 信号类型:这个很重要,后面的测试转发报文的需要信号的类型相匹配,此选项是48Bits,选择UINT64。

表 ComConfig界面配置说明R

UI名称

描述

ComBitPosition

取值范围

0..4294967295

默认取值

无

参数描述

I-PDU内的起始位置该参数指的是I-PDU中的位置,而不是影子缓冲区中的位置如果将字节序转换配置为不透明,则参数ComBitPosition应定义第一个字节的bit0,如小端字节顺序

依赖关系

无

ComSignalEndianness

取值范围

BIG_ENDIAN

LITTLE_ENDIAN

OPAQUE

默认取值

无

参数描述

定义信号网络表示的字节顺序

依赖关系

无

ComSignalInitValue

取值范围

与信号类型有关

默认取值

0

参数描述

此信号的初始值在UINT8_N的情况下,默认值是一个长度为ComSignalLength的字符串,所有字节都设置为0x00在UINT8_DYN的情况下,初始大小应为0

依赖关系

在UINT8_N的情况下,ComSignalInitValue的长度必须与ComSignalLength的长度相同。

ComTransferProperty

取值范围

PENDING

TRIGGERED TRIGGERED_ON_CHANGE

TRIGGERED_ON_CHANGE_WITHOUT_REPETITION

TRIGGERED_WITHOUT_REPETITION

默认取值

PENDING

参数描述

定义对此信号的写访问是否可以触发相应I-PDU的传输如果I-PDU被触发,则还取决于相应I-PDU的传输模式

依赖关系

无

ComUpdateBitPosition

取值范围

0..4294967295

默认取值

无

参数描述

更新位在I-PDU内的位位置

依赖关系

无

ComGwIPduRef

取值范围

引用[ComIPdu]

默认取值

无

参数描述

引用Signal Gateway源或目的地描述的I-PDU

依赖关系

无

Crypto

CryptoDriverObjects

设置CryptoQueueSize大小为5,选择后面设置的CryptoPrimitive.

image34

图 Crypto设置

CryptoKeyElements

添加密钥元素,后面的CryptoKeyTypes可选择此处设置的CryptoKeyElements作为密钥类型参考值。

image35

image36

图 CryptoKeyElement设置

CryptoPrimitives

设置算法类型,此处设置为AES-CMAC算法,选择算法加密服务为MAC_GENERATE。

image37

图 Crypto设置

CryIf

CryIfIncludes

此处主要设置CryIf需要的头文件名,不需要添加.h后缀

image38

图 CryIf设置

CryIfChannel

选择对应的底层驱动

image39

图 CryIf设置

CryIfKey

添加底层驱动的密钥参考值

image40

图 CryIf设置

Csm

CsmJobs

添加密钥管理服务的任务设置

CsmJobPriority:设置任务优先级

CsmProcessingMode:设置任务处理模式,可选择同步或者异步

CsmJobKeyRef:设置参考的密钥,在后面的CsmKeys中配置

CsmJobPrimitiveRef:设置任务原型,在后面的CsmPrimitives中配置

CsmJobQueueRef:设置任务队列,在后面的CsmQueues中配置

image41

图 Csm设置

CsmKeys

image42

图 Csm设置

添加从If层设置的密钥

CsmPrimitives

设置加密原型

CsmMacGenerateAlgorithmFamily:设置加密服务的算法族

CsmMacGenerateAlgorithmKeyLength:设置MAC的长度16byte

CsmMacGenerateAlgorithmMode:设置加密算法服务

CsmMacGenerateResultLength:设置输出的MAC长度16bytes

image43

图 Csm设置

CsmQueues

设置Csm序列大小、If层设置的参考通道

image44

图 Csm设置

SecOC

Genernal

image45

图 General

  1. MainFunction所放置的周期,通常放在10ms里面,此处写0.01。

表 General界面说明

UI名称

描述

SecOCDevErrorDetect

取值范围

True / False

默认取值

False

参数描述

错误检查开关,表示是否打开DET错误检查机制

依赖关系

无

SecOCMainFunctionPeriodRx/Tx

取值范围

0 .. 0.255

默认取值

无

参数描述

SecOC模块MainFunction的调度周期

依赖关系

无

依赖关系

无

SecOCVersionInfoApi

取值范围

True / False

默认取值

False

参数描述

用于配置SecOC_GetVersionInfo函数接口是否可用

依赖关系

无

SecOCRxPduProcessing

image46

图 SecOCRxPduProcessings

如上图,SecOCRxPduProcessings为SecOCRxPduProcessing对象的集合,在该对象的右键菜单中,可添加0 .. n个SecOCRxPduProcessing对象。

image47

图 SecOCRxPduProcessing

  1. SecOCAuthInfoTxLength:描述的是MAC的长度。

  2. SecOCDataId :和发送的ID需要一致,接收和发送是一组,具有唯一性。

  3. SecOCFreshnessCounterSyncAttempts:新鲜度的尝试次数,也许会出现偶然新鲜度失败,可以通过多次尝试依旧接收报文。

  4. SecOCFreshnessValueId:和发送的ID需要一致,接收和发送是一组,具有唯一性。

  5. SecOCFreshnessValueLength:新鲜度在加密信息里所占用的长度,单位:Bits。

  6. SecOCFreshnessValueTxLength:和SecOCFreshnessValueId保持一致即可。

  7. SecOCVerificationStatusPropagationMode:参数用于描述从SecOC模块到SWCs的每次验证尝试状态的传播,此处包含失败通知,成功通知,和不通知,为了提高代码的效率,选择NONE。

  8. SecOCRxAuthServiceConfigRef:算法选择,根据在Csm模块中配置的算法进行选择。

  9. SecOCSecuredPduBuffLength:大于等于所有信息的长度即可,数组缓存SecOC报文(此例程大于16即可,单位Bytes)。

表 SecOCRxPduProcessing参数说明

UI名称

描述

SecOCAuthInfoTxLength

取值范围

0 .. 64

默认取值

0

参数描述

定义了添加在Secured I-PDU后面的Authentication code的长度,单位为bit

依赖关系

无

SecOCDataId

取值范围

0 .. 65535

默认取值

0

参数描述

Secured I-PDU唯一的标识符

依赖关系

无

SecOCFreshnessCounterSyncAttempts

取值范围

0 .. 65535

默认取值

0

参数描述

该参数定义了在校验Secured I-PDU失败后,尝试再校验的次数。

依赖关系

无

SecOCFreshnessTimestampTimePeriodFactor

取值范围

无

默认取值

无

参数描述

该参数目前不可用,不可配置

依赖关系

无

SecOCFreshnessValueLength

取值范围

0 .. 64

默认取值

0

参数描述

定义了Freshness Value的完整长度,单位为bit

依赖关系

无

SecOCFreshnessValueTxLength

取值范围

0 .. 64

默认取值

0

参数描述

定义了添加在Secured I-PDU后面的Freshness Value的长度,单位为bit

依赖关系

无

参数描述

定义了用于认证和校验MAC时使用的key在本地的标识符

依赖关系

无

SecOCRxAcceptanceWindow

取值范围

无

默认取值

无

参数描述

该参数目前未使用,不可配置

依赖关系

无

SecOCSecondaryFreshnessValueId

取值范围

0 .. 65535

默认取值

0xFFFF

参数描述

Secondary Freshness Value的Id

依赖关系

无

SecOCUseFreshnessTimestamp

取值范围

False

默认取值

False

参数描述

该参数固定为False,不可配置

依赖关系

无

SecOCVerificationStatusPropagationMode

取值范围

BOTH FAILURE_ONLY

NONE

默认取值

NONE

参数描述

用于定义在那种校验结果下,通知用户:

BOTH: 在校验结果成功和失败时都通知用户

FAILURE_ONLY:只在校验失败时通知用户

NONE:任何结果都不通知用户

依赖关系

无

SecOCRxAuthServiceConfigRef

取值范围

Csm模块选择

默认取值

参数描述

进行校验时使用的算法

依赖关系

无

SecOCAuthenticPduBuffLength

取值范围

0 .. 65535

默认取值

0

参数描述

用于存储Authentic PDU的buffer的长度

依赖关系

无

SecOCSecuredPduBuffLength

取值范围

0 .. 65535

默认取值

0

参数描述

用于存储Secured PDU的buffer的长度

依赖关系

无

参数描述

CSM或CAL模块中用于提供该PDU校验服务所配置的Id

依赖关系

无

SecOCSameBufferPduRef

取值范围

引用到配置的samebuffer对象

默认取值

无

参数描述

如果使用SameBuffer,则指向一个配置的SameBuffer对象

依赖关系

无

SecOCRxAuthenticPduLayer

image48

图 SecOCRxAuthenticPduLayer

  1. SecOCPduType:选择所走的协议,此例程为If。

  2. SecOCRxAuthenticLayerPduRef:SecOc_RxPduA。

表 SecOCRxAuthenticPduLayer参数说明

UI名称

描述

SecOCPduType

取值范围

SECOC_IFPDU

SECOC_TPPDU

默认取值

SECOC_IFPDU

参数描述

表示PDU的类型是IF PDU还是TP PDU

依赖关系

无

SecOCRxAuthenticLayerPduRef

取值范围

ECUC中定义的PDU

默认取值

无

参数描述

SecOCRxAuthenticPduLayer对应的PDU

依赖关系

无

SecOCRxSecuredPduLayer

SecOCRxSecuredLayerPduRef:SecOc_RxPduS。

image49

图 SecOCRxSecuredPduLayer

表 SecOCRxSecuredPduLayer参数说明

UI名称

描述

SecOCRxSecuredPduLayer

取值范围

ECUC中定义的PDU

默认取值

无

参数描述

SecOCRxSecuredPduLayer对应的PDU

依赖关系

无

SecOCTxPduProcessing

image50

图 SecOCTxPduProcessings

如上图,SecOCTxPduProcessings为SecOCTxPduProcessing对象的集合,在该对象的右键菜单中,可添加0 .. n个SecOCTxPduProcessing对象。

image51

图 SecOCTxPduProcessing

  1. SecOCAuthInfoTxLength:描述的是MAC的长度。

  2. SecOCDataId :和发送的ID需要一致,接收和发送是一组,具有唯一性。

  3. SecOCAuthenticationBuildAttempts:新鲜度的尝试次数,也许会出现偶然新鲜度失败,可以通过多次尝试依旧接收报文。

  4. SecOCFreshnessValueId:和发送的ID需要一致,接收和发送是一组,具有唯一性。

  5. SecOCFreshnessValueLength:新鲜度在加密信息里所占用的长度,单位:Bits。

  6. SecOCFreshnessValueTruncLength:和SecOCFreshnessValueLength保持一致即可。

  7. SecOCAuthenticPduBuffLength:大于等于真实信息的长度即可,数组缓存SecOC报文(此例程大于8即可,单位Bytes)。

  8. SecOCSecuredPduBuffLength:大于等于所有信息的长度即可,数组缓存SecOC报文(此例程大于16即可,单位Bytes)。

  9. SecOCTxAuthServiceConfigRef:算法选择,从Csm中选择对应的CsmJob。

表 SecOCTxPduProcessing参数说明

UI名称

描述

SecOCAuthInfoTxLength

取值范围

0 .. 64

默认取值

0

参数描述

定义了添加在Secured I-PDU后面的Authentication code的长度,单位为bit

依赖关系

无

SecOCAuthenticationRetries

取值范围

0 .. 65535

默认取值

0

参数描述

定义了在生成认证信息失败后再次尝试的次数

依赖关系

无

SecOCDataId

取值范围

0 .. 65535

默认取值

0

参数描述

Secured I-PDU唯一的标识符

依赖关系

无

SecOCFreshnessTimestampTimePeriodFactor

取值范围

无

默认取值

无

参数描述

该参数目前不可用,不可配置

依赖关系

无

SecOCFreshnessValueLength

取值范围

0 .. 64

默认取值

0

参数描述

定义了Freshness Value的完整长度,单位为bit

依赖关系

无

SecOCFreshnessValueTxLength

取值范围

0 .. 64

默认取值

0

参数描述

定义了添加在Secured I-PDU后面的Freshness Value的长度,单位为bit

依赖关系

无

SecOCKeyId

取值范围

0 .. 65535

默认取值

0

参数描述

定义了用于认证和校验MAC时使用的key在本地的标识符

依赖关系

无

SecOCUseFreshnessTimestamp

取值范围

False

默认取值

False

参数描述

该参数固定为False,不可配置

依赖关系

无

SecOCAuthenticPduBuffLength

取值范围

0 .. 65535

默认取值

0

参数描述

用于存储Authentic PDU的buffer的长度

依赖关系

无

SecOCSecuredPduBuffLength

取值范围

0 .. 65535

默认取值

0

参数描述

用于存储Secured PDU的buffer的长度

依赖关系

无

SecOCCsmCalCfgId

取值范围

0 .. 65535

默认取值

0

参数描述

Csm或CAL模块中用于提供该PDU校验服务所配置的Id

依赖关系

无

SecOCRxAuthServiceConfigRef

取值范围

SECOC_CALMAC

SECOC_CALSIGNATURE

SECOC_CSMMAC

SECOC_CSMSIGNATURE

默认取值

SECOC_CSMMAC

参数描述

进行校验时使用的算法

依赖关系

无

SecOCSameBufferPduRef

取值范围

引用到配置的samebuffer对象

默认取值

无

参数描述

如果使用SameBuffer,则指向一个配置的SameBuffer对象

依赖关系

无

SecOCTxAuthenticPduLayer

image52

图 SecOCTxAuthenticPduLayer

  1. SecOCPduType:选择所走的协议,此例程为If。

  2. SecOCTxAuthenticLayerPduRef:SecOc_TxPduA。

表 SecOCTxAuthenticPduLayer参数说明

UI名称

描述

SecOCPduType

取值范围

SECOC_IFPDU

SECOC_TPPDU

默认取值

SECOC_IFPDU

参数描述

表示PDU的类型是IF PDU还是TP PDU

依赖关系

无

SecOCTxAuthenticLayerPduRef

取值范围

ECUC中定义的PDU

默认取值

无

参数描述

SecOCTxAuthenticPduLayer对应的PDU

依赖关系

无

SecOCTxSecuredPduLayer

image53

图 SecOCTxSecuredPduLayer

SecOCTxSecuredLayerPduRef:SecOc_TxPduS。

表 SecOCTxSecuredPduLayer参数说明

UI名称

描述

SecOCTxSecuredPduLayer

取值范围

ECUC中定义的PDU

默认取值

无

参数描述

SecOCTxSecuredPduLayer对应的PDU

依赖关系

无

代码例程

代码结构

示例集成通讯安全模块代码框架如下:

image54

图 代码框架

源代码调度集成

包含了模块初始化和Csm密钥的有效性验证。

image55

图 代码初始化

信息的加密和解密是下函数,放置在5ms周期里面,进行周期的处理发送和接收的SecOC报文。

image56

图 周期处理函数

测试结果

发送测试

需要在Rte_SecOC.c的函数FreshnessManagement_GetTxFreshness中添加对入参freshnessValue的操作,作为观察周期发送的新鲜度值的依据,以下为一个简单的周期更新计算方法:

image57

在CAN监测工具里面观察数据新鲜度的变化是否连续。新鲜度在本例程里占2Bytes,在真实数据的后面。

image58

图 发送报文验证

接收测试

向对应的SecOC邮箱发送一条报文,检查是否可以进对应的SecOC_RxIndication。

收到校验通过的报文后,可进入COM配置中信号接收callout函数。

image59

图 配置测试用callout函数

image60

图 接收报文验证