本规约规约 AUTOSAR 基础软件模块密码驱动(Crypto Driver, CRYPTO)的功能、API 与配置。
密码驱动位于微控制器抽象层(Microcontroller Abstraction Layer, MCAL),位于密码硬件抽象层(Crypto Interface, CRYIF)与上层服务层(Crypto Service Manager, CSM)之下。CRYPTO 是针对特定设备的驱动,仅抽象硬件支持的特性。
密码驱动允许定义不同的密码驱动对象(CDO)(如 AES 加速器、SW 组件等),用于在不同缓冲区的并发请求。每个硬件对象应支持基于优先级的作业处理。密码软件解决方案(即基于软件的 CDD)可定义与密码驱动相同的接口,以与上层交互,为应用提供接口。
| 缩略语 | 描述 |
|---|---|
| CDD | Complex Device Driver(复杂设备驱动) |
| CSM | Crypto Service Manager(密码服务管理器) |
| CRYIF | Crypto Interface(密码接口) |
| CRYPTO | Crypto Driver(密码驱动) |
| DET | Default Error Tracer(默认错误追踪器) |
| HSM | Hardware Security Module(硬件安全模块) |
| HW | Hardware(硬件) |
| SHE | Security Hardware Extension(安全硬件扩展) |
| SW | Software(软件) |
| 术语 | 描述 |
|---|---|
| 密码驱动对象(Crypto Driver Object, CDO) | 密码驱动实现一个或多个密码驱动对象。密码驱动对象可在硬件或软件中提供不同的密码原语。一个密码驱动的密码驱动对象彼此独立。每个密码驱动对象仅有一个工作区(即同时只能执行一个密码原语)。 |
| 密钥(Key) | 密钥可被 CSM 中的作业引用。在密码驱动中,密钥引用特定密钥类型。 |
| 密钥类型(Key Type) | 密钥类型由对密钥元素的引用组成。密钥类型通常由密码驱动的厂商预配置。 |
| 密钥元素(Key Element) | 密钥元素用于存储数据。这些数据可以是密钥材料或 AES 加密所需的 IV。它也可用于配置密钥管理函数的行为。 |
| 通道(Channel) | 通道是从密码服务管理器队列经密码接口到特定密码驱动对象的路径。 |
| 作业(Job) | 作业是作业已配置的密码原语的实例。 |
| 密码原语(Crypto Primitive) | 密码原语是已配置密码算法在密码驱动对象中实现的实例。 |
| 操作(Operation) | 密码原语的操作声明应执行密码原语的哪一部分。有三种不同的操作模式:START(指示密码原语的新请求,且应取消同一作业和原语的所有先前请求)、UPDATE(指示密码原语期望输入数据)、FINISH(指示此后所有数据完全馈送,密码原语可完成计算)。也可通过连接 operation_mode 参数的对应位一次执行多于一个操作。 |
| 优先级(Priority) | 作业的优先级定义其重要性。优先级越高(值越大),作业将被越即时地执行。密码作业的优先级是配置的一部分。 |
AUTOSAR_EXP_LayeredSoftwareArchitecture — 分层软件架构AUTOSAR_SRS_BSWGeneral — 基础软件通用需求AUTOSAR_SWS_BSWGeneral — 基础软件通用规范AUTOSAR_SWS_CryptoInterface — 密码接口规范AUTOSAR_SWS_CryptoServiceManager — 密码服务管理器规范AUTOSAR_SRS_CryptoStack — 密码栈需求无。
无其他。
本 SWS 仅适用于 CRYPTO 模块,不涵盖 CRYIF、CSM 与 KeyM 的完整规范。
CRYPTO 适用于所有汽车域。
Crypto.c # 主源文件
Crypto_Lcfg.c # Link-time 配置
Crypto_PBcfg.c # PostBuild 配置
头文件结构遵循 MCAL 通用结构。
CRYPTO 满足的 RS_BRF_NNNNN 需求:
| 需求 | 描述 |
|---|---|
| RS_BRF_01000 | AUTOSAR 架构应将 BSW 组织为硬件独立与硬件依赖两层 |
| RS_BRF_01056 | AUTOSAR BSW 模块应提供标准化接口 |
| RS_BRF_01456 | AUTOSAR 服务应提供系统范围的密码功能 |
| RS_BRF_02031 | AUTOSAR 应提供对软件或硬件实现的密码方案的统一访问 |
| RS_BRF_02032 | AUTOSAR 安全应允许密码原语集成到密码服务管理器 |
CRYPTO 自身的 SWS_Crypto_NNNNN 规范项 ID 约 150+ 条(详细列表见原文第 6/7/8/10 章)。
CRYPTO 应在预配置中声明:
CRYPTO 应在预配置中声明可用密钥集合:
CRYPTO 的正常操作流程:
Crypto_<vi>_<ai>_CallbackNotification() 通知完成。CRYPTO 应支持的功能:
CRYPTO 应提供:
Crypto_<vi>_<ai>_KeyElementSet/Get/Copy);Crypto_KeyGenerate);Crypto_KeyDerive);Crypto_KeyExchange);Crypto_KeyWrap/Unwrap);CRYPTO 支持的密钥格式:
| 错误码 | 值 | 含义 |
|---|---|---|
CRYPTO_E_UNINIT | 0x00 | CRYPTO 未初始化 |
CRYPTO_E_INIT_FAILED | 0x01 | 初始化失败 |
CRYPTO_E_PARAM_POINTER | 0x02 | 无效的指针 |
CRYPTO_E_PARAM_HANDLE | 0x03 | 无效的句柄 |
CRYPTO_E_PARAM_VALUE | 0x04 | 无效的参数值 |
CRYPTO_E_KEY_SIZE_MISMATCH | 0x05 | 密钥大小不匹配 |
CRYPTO_E_KEY_EMPTY | 0x06 | 密钥为空 |
CRYPTO_E_KEY_READ_FAILED | 0x07 | 密钥读取失败 |
CRYPTO_E_KEY_WRITE_FAILED | 0x08 | 密钥写入失败 |
CRYPTO_E_KEY_NOT_AVAILABLE | 0x09 | 密钥不可用 |
CRYPTO_E_JOB_CANCELLED | 0x0A | 作业被取消 |
CRYPTO_E_QUEUE_FULL | 0x0B | 队列已满 |
CRYPTO_E_NO_KEY_ELEMENT | 0x0C | 无密钥元素 |
CRYPTO_E_SMALL_BUFFER | 0x0D | 缓冲区过小 |
| 错误码 | 值 | 含义 |
|---|---|---|
CRYPTO_E_ENTROPY_EXHAUSTED | 0x01 | 熵耗尽 |
无。
无(CRYPTO 不直接产生生产错误;由 Dem 报告)。
无。
Std_ReturnType、Std_VersionInfoTypeCrypto_JobType、Crypto_PrimitiveInfoType、Crypto_OperationModeTypeCrypto_KeyElementIdType、Crypto_KeyFormat、Crypto_KeyState、Crypto_AlgorithmInfoType、Crypto_KeyDeriveAlgorithmInfoTypetypedef uint16 Crypto_ConfigType; // 抽象配置类型
typedef uint16 Crypto_AlgorithmFamilyType;
| API | 签名 | 功能 |
|---|---|---|
Crypto_<vi>_<ai>_Init | void Crypto_<vi>_<ai>_Init(const Crypto_ConfigType* ConfigPtr) | 初始化 CRYPTO |
Crypto_<vi>_<ai>_GetVersionInfo | void Crypto_<vi>_<ai>_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr) | 获取版本信息 |
| API | 签名 | 功能 |
|---|---|---|
Crypto_<vi>_<ai>_ProcessJob | Std_ReturnType Crypto_<vi>_<ai>_ProcessJob(Crypto_JobType* job) | 处理作业(同步) |
Crypto_<vi>_<ai>_Update | ... | 更新作业输入 |
Crypto_<vi>_<ai>_Finish | ... | 完成作业 |
Crypto_<vi>_<ai>_Start | ... | 开始新作业 |
Crypto_<vi>_<ai>_CallbackNotification | void Crypto_<vi>_<ai>_CallbackNotification(Crypto_JobType* job, Crypto_ResultType result) | 异步完成回调 |
Crypto_<vi>_<ai>_GetJobType | ... | 获取作业类型 |
| API | 签名 | 功能 |
|---|---|---|
Crypto_<vi>_<ai>_CancelJob | Std_ReturnType Crypto_<vi>_<ai>_CancelJob(Crypto_JobType* job) | 取消单个作业 |
Crypto_<vi>_<ai>_CancelJobs | ... | 取消队列中的所有作业 |
| API | 签名 | 功能 |
|---|---|---|
Crypto_<vi>_<ai>_KeyElementSet | Std_ReturnType KeyElementSet(uint32 cryptoKeyId, uint32 keyElementId, const uint8* keyElement, uint32 keyElementLength) | 设置密钥元素 |
Crypto_<vi>_<ai>_KeyElementGet | ... | 获取密钥元素 |
Crypto_<vi>_<ai>_KeyElementCopy | ... | 复制密钥元素 |
Crypto_<vi>_<ai>_KeyCopy | ... | 复制密钥 |
Crypto_<vi>_<ai>_KeyGenerate | ... | 生成密钥 |
Crypto_<vi>_<ai>_KeyDerive | ... | 派生密钥 |
Crypto_<vi>_<ai>_KeyExchange | ... | 交换密钥 |
Crypto_<vi>_<ai>_KeyWrap | ... | 包装密钥 |
Crypto_<vi>_<ai>_KeyUnwrap | ... | 解包密钥 |
Crypto_<vi>_<ai>_CertificateParse | ... | 解析证书 |
Crypto_<vi>_<ai>_CertificateVerify | ... | 验证证书 |
Crypto_<vi>_<ai>_KeyElementIdsGet | ... | 获取密钥元素 ID 列表 |
共 12+ 密钥管理 API 函数。
CRYPTO 可定义调度函数 Crypto_<vi>_<ai>_MainFunction(),由 RTE 周期性调用以处理后台作业(如作业队列轮询、密钥管理后台处理)。
Det_ReportError() — 开发错误报告;Dem_SetEventStatus() — 运行时错误报告(若支持);Crypto_<vi>_<ai>_CallbackNotification() — 异步完成回调(CRYIF 调用)。Det_ReportError()(强制)。Dem_SetEventStatus()(可选)。序列图 9.1 描述 CRYPTO 在同步作业处理中的角色:
Crypto_<vi>_<ai>_ProcessJob() 调用 CRYPTO;序列图 9.2-9.5 分别描述异步作业、作业取消、密钥设置、密钥派生等流程。
CRYPTO 模块根容器包含:
| 参数 | 描述 |
|---|---|
| CryptoDevErrorDetect | 开发错误检测开关 |
| CryptoVersionInfoApi | Crypto_GetVersionInfo() API 开关 |
| CryptoEcucPartitionRef | ECU 分区引用 |
| 参数 | 描述 |
|---|---|
| CryptoNumberOfCryptoDriverObjects | CDO 数量 |
| CryptoNumberOfKeys | 密钥数量 |
包含多个 CryptoDriverObject 子容器。
| 参数 | 描述 |
|---|---|
| CryptoDriverObjectId | CDO ID |
| CryptoDriverObjectQueueSize | 队列大小 |
| CryptoDriverObjectPriority | 优先级 |
| CryptoPrimitiveRef | 支持的密码原语引用列表 |
包含多个 CryptoKey 子容器。
| 参数 | 描述 |
|---|---|
| CryptoKeyId | 密钥 ID |
| CryptoKeyTypeRef | 密钥类型引用 |
| CryptoKeyElementList | 密钥元素列表 |
包含多个 CryptoKeyElement 子容器。
| 参数 | 描述 |
|---|---|
| CryptoKeyElementId | 元素 ID |
| CryptoKeyElementInitValueLength | 初始值长度 |
| CryptoKeyElementInitValue | 初始值 |
| CryptoKeyElementReadAccess | 读访问权限 |
| CryptoKeyElementWriteAccess | 写访问权限 |
| CryptoKeyElementFormat | 格式 |
包含多个 CryptoKeyType 子容器。
| 参数 | 描述 |
|---|---|
| CryptoKeyTypeId | 类型 ID |
| CryptoKeyElementList | 支持的元素列表 |
| CryptoAlgorithmRef | 支持的算法引用 |
包含多个 CryptoPrimitive 子容器。
| 参数 | 描述 |
|---|---|
| CryptoPrimitiveId | 原语 ID |
| CryptoAlgorithmFamily | 算法族(AES、SHA、RSA、ECC 等) |
| CryptoAlgorithmMode | 算法模式(ECB、CBC、GCM 等) |
| CryptoAlgorithmSecondaryFamily | 二级算法族 |
| CryptoKeyLength | 密钥长度 |
| CryptoKeyElementList | 密钥元素列表 |
| CryptoServiceCode | 服务代码(HASH、AESENCRYPT 等) |
发布信息包括 CRYPTO 模块版本、配置变体、支持的算法列表、密钥数量、CDO 数量等。
校对轮次:L1 自动校对(2026-06-13)
CRYPTO_E_UNINIT=0x00/INIT_FAILED=0x01/PARAM_POINTER=0x02/PARAM_HANDLE=0x03/PARAM_VALUE=0x04/KEY_SIZE_MISMATCH=0x05/KEY_EMPTY=0x06/KEY_READ_FAILED=0x07/KEY_WRITE_FAILED=0x08/KEY_NOT_AVAILABLE=0x09/JOB_CANCELLED=0x0A/QUEUE_FULL=0x0B/NO_KEY_ELEMENT=0x0C/SMALL_BUFFER=0x0D) + 1 个运行时错误 CRYPTO_E_ENTROPY_EXHAUSTED=0x01 完整翻译。CRYPTO_KE_FORMAT_BIN_BIN、BIN_OCTET_STRING、BIN_PEM、BIN_DER_SEQUENCE、BIN_DER_KEY)完整翻译。