DEENESPTFRRUARHIKOZHNL

Crypto Driver (Crypto)

ModulCrypto (Crypto Driver)
BSW-Modul-ID114
Standard-Header#include "Crypto.h"
SWS-SpezifikationAUTOSAR_SWS_CryptoDriver.pdf
ClusterCrypto Services

模块指南人工智能生成

为面向硬件的 AUTOSAR Classic 加密栈提供加密原语和密钥管理。
AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 79b1b64c6bf7 来源 未决问题(2)
因果锚点:R20-11 自 R20-11 起有效 为此规范版本重新合成。
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

为面向硬件的 AUTOSAR Classic 加密栈提供加密原语和密钥管理。

Crypto Driver 作为 MCAL 模块,为 AUTOSAR Classic 加密栈提供面向硬件的加密计算以及密钥管理(EXP_UtilizationOfCryptoServices 第8页)。它将硬件安全模块(HSM)或软件库封装在 Driver Objects 中,并通过中央接口 Crypto_ProcessJob 处理同步和异步作业([SWS_Crypto_91003])。密钥访问受可配置权限的约束,并且只有在成功进行密钥验证时才会触发在 NVM 中的持久化存储(SWS_CryptoDriver 第37页)。

Crypto Driver(模块 Crypto)作为 MCAL 驱动程序构成了 AUTOSAR Classic 加密栈的最底层基础,并将硬件安全模块(HSM)、加密加速器以及软件例程直接连接到加密接口(CryIf)(EXP_UtilizationOfCryptoServices 第8页、SWS_CryptoDriver 第15页)。在多重实现的情况下,实例根据模式 Crypto_<vi>_<ai> 进行特定于供应商的命名([SWS_Crypto_00012])。初始化通过 [SWS_Crypto_91000] 同步进行,且 [SWS_Crypto_91016] 必须传入空指针([SWS_Crypto_00215])。在内部,该模块将独立的计算单元封装在 Crypto Driver Objects 中,其中每个对象在同一时间只能精确执行一个作业([SWS_Crypto_00014]),而 n 个对象则支持并行计算([SWS_Crypto_00117])。在此过程中,Driver Object 0 作为中央随机数生成器,用于同一实例的所有其他驱动程序对象的内部需求([SWS_Crypto_00224]、[SWS_Crypto_00225])。

diag_architektur CSM CSM CryIf CryIf CSM->CryIf Csm_Job CryptoDriver CryptoDriver CryIf->CryptoDriver Crypto_ProcessJob / Key APIs Object0 Object0 CryptoDriver->Object0 RNG Default ObjectN ObjectN CryptoDriver->ObjectN Primitive Job NvM NvM CryptoDriver->NvM NvM_WriteBlock Det DET CryptoDriver->Det Det_ReportError HW_HSM HW_HSM Object0->HW_HSM Hardware Kanal (HSM) SW_Crypto SW_Crypto ObjectN->SW_Crypto Software / Beschleuniger NvM->CryptoDriver NvBlock Callbacks

上下文图:Crypto Driver 在包含 Driver Objects 以及 NvM 和 DET 接口的 AUTOSAR 加密栈中的嵌入情况。来源:SWS_CryptoDriver 第 15 页、SWS_Crypto_00012、SWS_Crypto_91017

加密作业通过 [SWS_Crypto_91003](Crypto_ProcessJob)进行处理,其中模式位字段(START、UPDATE、FINISH)统一了流式传输和整体调用(SWS_CryptoDriver 第25页、[SWS_Crypto_00017])。异步作业通过周期性函数 [SWS_Crypto_91012](Crypto_MainFunction)进行计算,并在完成后通过 CRYIF_CallbackNotification 向 CryIf 报告([SWS_Crypto_00027]、[SWS_Crypto_00028])。正在运行的作业可以通过 [SWS_Crypto_00122] 同步取消([SWS_Crypto_00183]、[SWS_Crypto_00214]),而直接重定向到密钥元素的缓冲区重定向则减少了复制操作([SWS_Crypto_00203]、[SWS_Crypto_00221])。

通过 Crypto Driver 进行异步作业处理CryIfCrypto DriverDriver ObjectSchM / OSCrypto_ProcessJob(objectId, job)检查参数 & 密钥句柄E_OK (Auftrag angenommen)Crypto_MainFunction()触发计算 (START/UPDATE/FINISH)执行密码学计算Ergebnis bereitstellenCRYIF_CallbackNotification(job, result)返回

时序图:通过 Crypto_ProcessJob 进行的异步处理流程、Crypto_MainFunction 中的周期以及通过 CRYIF_CallbackNotification 的反馈。来源:SWS_Crypto_91003、SWS_Crypto_00027、SWS_Crypto_00028、SWS_Crypto_91012

密钥管理包括在严格的访问权限控制下对密钥元素进行设置([SWS_Crypto_91004])、读取([SWS_Crypto_91006])、复制([SWS_Crypto_00155]、[SWS_Crypto_91015])、生成([SWS_Crypto_91007])和派生([SWS_Crypto_91008])([SWS_Crypto_00219]、[SWS_Crypto_00220])。出于一致性原因,在 Non-Volatile RAM Manager(NvM)中的持久化绝不会在单次写入时触发,而仅在通过 [SWS_Crypto_91014](Crypto_KeySetValid)进行密钥验证时触发(SWS_CryptoDriver 第37页、[SWS_Crypto_91025])。在多核环境中,该模块在每个分区中独立运行([SWS_Crypto_CONSTR_00001]),其中 HSM 对象最多只能分配给一个分区([SWS_Crypto_CONSTR_00003])。

Crypto Driver 在 Classic 加密栈中的角色和系统边界

Crypto Driver(模块缩写 Crypto)位于微控制器抽象层(MCAL)中 AUTOSAR Classic 基础软件的最底层(EXP_UtilizationOfCryptoServices 第8页)。它直接位于加密接口(Crypto Interface, CryIf)下方,并通过该接口为 Crypto Service Manager(CSM)提供服务(SWS_CryptoDriver 第15页)。其主要任务在于封装具体的加密计算单元——无论是硬件安全模块(Hardware Security Modules, HSM)、专用加密加速器(如 AES 引擎)还是纯软件库(SWS_CryptoDriver 第15页)。除了加密原语的实际计算之外,其功能范围还包括加密密钥的存储、配置和管理(SWS_CryptoDriver 第24页)。

在一个 ECU 中,可以并行存在来自不同供应商的多个驱动程序实例;在这种情况下,文件、API 和配置标识符通过符合模式 Crypto_<vi>_<ai> 的特定于供应商的中缀进行唯一定义和区分([SWS_Crypto_00012])。模块的初始化通过函数 [SWS_Crypto_91000] 进行(Crypto_Init)。作为一项特殊规定,类型为 [SWS_Crypto_91016] 的配置指针(Crypto_ConfigType)必须始终作为空指针传递([SWS_Crypto_00215])。版本信息可以通过 [SWS_Crypto_91001](Crypto_GetVersionInfo)同步查询,如果在开发错误检测处于激活状态时传递空指针,则会以错误 CRYPTO_E_PARAM_POINTER 报告给 DET(SWS_CryptoDriver 第56页)。

diag_architektur CSM CSM CryIf CryIf CSM->CryIf Csm_Job CryptoDriver CryptoDriver CryIf->CryptoDriver Crypto_ProcessJob / Key APIs Object0 Object0 CryptoDriver->Object0 RNG Default ObjectN ObjectN CryptoDriver->ObjectN Primitive Job NvM NvM CryptoDriver->NvM NvM_WriteBlock Det DET CryptoDriver->Det Det_ReportError HW_HSM HW_HSM Object0->HW_HSM Hardware Kanal (HSM) SW_Crypto SW_Crypto ObjectN->SW_Crypto Software / Beschleuniger NvM->CryptoDriver NvBlock Callbacks

上下文图:Crypto Driver 在包含 Driver Objects 以及 NvM 和 DET 接口的 AUTOSAR 加密栈中的嵌入情况。来源:SWS_CryptoDriver 第 15 页、SWS_Crypto_00012、SWS_Crypto_91017

Crypto Driver Objects 的管理和硬件抽象

Crypto Driver 的每个实例在内部划分为一个或多个逻辑驱动程序对象(Crypto Driver Objects)(SWS_CryptoDriver 第15页)。Crypto Driver Object 构成了加密通道的功能端点,并代表独立的硬件计算单元或软件实现(SWS_CryptoDriver 第15页)。原则上,单个 Driver Object 在给定时间只能主动执行一个作业(Job)([SWS_Crypto_00014])。因此,具有 n 个 Driver Objects 的 Crypto Driver 具备并行计算 n 个加密作业的能力([SWS_Crypto_00117])。所分配对象的性能决定了支持哪些数学和安全相关的原语([SWS_Crypto_00013])。

如果驱动程序对象需要内部随机数(例如在通过 [SWS_Crypto_91009] 进行密钥交换的框架下计算公开值)且自身没有随机数生成器,则必须强制使用同一驱动程序的 Crypto Driver Object 0([SWS_Crypto_00224]、[SWS_Crypto_00225])。在此情况下,驱动程序对象在任何情况下均不得寻址其他加密驱动程序实例的随机数生成器([SWS_Crypto_00226])。解读:Driver Object 0 因此充当同一分区中所有其他驱动程序对象的中央内部参考随机数生成器。 问题 Q-4e8e30714cbc9c80 (未决)

同步直接调用与异步流式传输之间的作业处理

加密处理作为类型为 Crypto_JobType 的作业结构,通过中央接口 [SWS_Crypto_91003](Crypto_ProcessJob)传递给该模块([SWS_Crypto_00042]、AUTOSAR_CP_SWS_CryptoServiceManager 第21页)。该接口通过模式特定的位字段统一了基于块的整体调用和连续数据流传输:操作 START、UPDATE 和 FINISH 可以单独或组合传递(SWS_CryptoDriver 第25页)。设置 START 标志标记了一个新作业,并中止同一作业的所有先前实例([SWS_Crypto_00017])。在组合传递的情况下,各步骤始终以固定顺序执行:START、UPDATE,最后是 FINISH(SWS_CryptoDriver 第25页)。

作业是同步处理还是异步处理,属于 Crypto_JobType 中元数据配置的一部分(SWS_CryptoDriver 第26页)。在异步模式下,[SWS_Crypto_91003] 仅接收作业数据;实际执行由周期性主函数 [SWS_Crypto_91012](Crypto_MainFunction)触发或处理([SWS_Crypto_00027]、[SWS_Crypto_91012])。在异步计算完成后,Crypto Driver 通过调用回调函数 CRYIF_CallbackNotification 并返回状态和结果指针,规范地通知上层 CryIf([SWS_Crypto_00028])。解读:与此相反,同步调用在调用方的上下文中以阻塞方式执行加密操作,而无需通过主函数进行解耦。 问题 Q-0447ed9db11aa30b (未决)

通过 Crypto Driver 进行异步作业处理CryIfCrypto DriverDriver ObjectSchM / OSCrypto_ProcessJob(objectId, job)检查参数 & 密钥句柄E_OK (Auftrag angenommen)Crypto_MainFunction()触发计算 (START/UPDATE/FINISH)执行密码学计算Ergebnis bereitstellenCRYIF_CallbackNotification(job, result)返回

时序图:通过 Crypto_ProcessJob 进行的异步处理流程、Crypto_MainFunction 中的周期以及通过 CRYIF_CallbackNotification 的反馈。来源:SWS_Crypto_91003、SWS_Crypto_00027、SWS_Crypto_00028、SWS_Crypto_91012

正在运行或待处理的加密作业可以通过函数 [SWS_Crypto_00122](Crypto_CancelJob)取消。如果请求的作业未处于驱动程序对象的主动处理中,则该作业会立即被移除,并且该调用返回 E_OK([SWS_Crypto_00214])。然而,如果硬件无法立即中断活动计算过程,则该 API 会以 CRYPTO_E_JOB_CANCELED 确认该尝试,并且取消操作将在下一个可到达的步骤完成([SWS_Crypto_00183])。

通过 Crypto_CancelJob 取消作业CryIfCrypto DriverDriver ObjectCrypto_CancelJob(objectId, job)alt作业未处于活动处理状态从驱动程序队列中移除作业E_OK (Job sofort entfernt)作业处于活动状态 & 硬件无法立即取消Hardware-Abbruch anfordernCRYPTO_E_JOB_CANCELED

时序图:通过 Crypto_CancelJob 同步取消加密作业,包含活动硬件执行情况下的分支处理。来源:SWS_Crypto_00122、SWS_Crypto_00183、SWS_Crypto_00214

为了避免应用程序和硬件内存之间不必要的复制操作,Crypto Driver 支持直接缓冲区重定向(作业重定向):输入和输出数据可以通过 jobRedirectionInfoRef 直接引用到内部密钥元素([SWS_Crypto_00203]、[SWS_Crypto_00204])。为了防止数据泄漏,此处适用严格的权限检查:对于加密和解密服务的输入重定向,密钥元素必须至少具有权限 CRYPTO_RA_ENCRYPTED;对于纯读取重定向,至少需要 CRYPTO_RA_INTERNAL_COPY([SWS_Crypto_00221])。

密钥管理、访问权限和加密密钥操作

在 Crypto Driver 中,逻辑密钥(Key)由一个或多个密钥元素(Key Elements)组成,这些元素容纳实际的密钥材料、初始化向量(IV)、随机种子或 SHE 证明(Proof)(SWS_CryptoDriver 第28页)。对每个单独元素的访问均受到严格规范:根据配置的权限层次结构(例如 CRYPTO_RA_ALLOWED、CRYPTO_RA_ENCRYPTED、CRYPTO_RA_INTERNAL_COPY)监视读写访问,其中较小的枚举值代表更高级别的访问权限(SWS_CryptoDriver 第28页、[SWS_Crypto_00219])。直接读取操作仅在 CRYPTO_RA_ALLOWED 或 CRYPTO_RA_ENCRYPTED 时被允许([SWS_Crypto_00222]);写入访问至少需要 CRYPTO_WA_ALLOWED 或 CRYPTO_WA_ENCRYPTED([SWS_Crypto_00223])。复制时,源元素必须至少具有 CRYPTO_RA_INTERNAL_COPY,且其权限不得低于目标元素([SWS_Crypto_00220])。

为了直接操作密钥及其元素,Crypto Driver 提供了一系列同步 API:数据的设置和读取分别通过 [SWS_Crypto_91004](Crypto_KeyElementSet)和 [SWS_Crypto_91006](Crypto_KeyElementGet)进行。密钥的现有元素标识符可以通过 [SWS_Crypto_00160](Crypto_KeyElementIdsGet)确定。完整的密钥或单个元素通过 [SWS_Crypto_00155](Crypto_KeyCopy)或 [SWS_Crypto_00148](Crypto_KeyElementCopy)进行复制。对于部分复制,存在 [SWS_Crypto_91015](Crypto_KeyElementCopyPartial),它对源缓冲区和目标缓冲区强制执行精确的长度和偏移量检查([SWS_Crypto_00207]、[SWS_Crypto_00208]、[SWS_Crypto_00209]),并动态调整目标长度([SWS_Crypto_00210]、[SWS_Crypto_00211])。

此外,该模块还支持复杂的密钥操作:密钥生成通过 [SWS_Crypto_91007](Crypto_KeyGenerate)基于先前通过 [SWS_Crypto_91013](Crypto_RandomSeed)初始化的熵数据进行。新密钥材料的派生由 [SWS_Crypto_91008](Crypto_KeyDerive)接管。对于 Diffie-Hellman 密钥交换协议,提供了用于生成公开值的函数 [SWS_Crypto_91009](Crypto_KeyExchangeCalcPubVal)以及用于确定共享秘密的函数 [SWS_Crypto_91010](Crypto_KeyExchangeCalcSecret)(SWS_CryptoServiceManager 第70页)。

每个逻辑密钥都维护一个状态,该状态可以通过 [SWS_Crypto_91019](Crypto_KeyGetStatus)查询。新写入的密钥最初处于 invalid 状态,并且仅在通过 [SWS_Crypto_91014](Crypto_KeySetValid)成功验证后才释放为 valid,而 [SWS_Crypto_91020](Crypto_KeySetInvalid)则显式锁定该密钥。在数据格式方面,该驱动程序处理符合 RFC 5958 且采用 ASN.1-PKCS#8 编码的非对称密钥([SWS_Crypto_00184])、符合 RFC 8017 且具有固定算法 OID 1.2.840.113549.1.1.1 的 RSA 密钥结构([SWS_Crypto_00185]、[SWS_Crypto_00186]、[SWS_Crypto_00187]、[SWS_Crypto_00188]),以及采用小端点坐标的 ECC 曲线数据(NIST、Brainpool、ED25519)([SWS_Crypto_00189]、[SWS_Crypto_00190]、[SWS_Crypto_00191]、[SWS_Crypto_00192]、[SWS_Crypto_00193])。面向硬件的 SHE 密钥以格式 M1M2M3 传递;其验证证明 M4M5 在验证后立即可在密钥元素 2 中临时读取([SWS_Crypto_00255])。

diag_schluessel_lebenszyklus UNINITIALIZED UNINITIALIZED INVALID INVALID UNINITIALIZED->INVALID Crypto_Init / NVM-Ladefehler INVALID->INVALID Crypto_KeyElementSet / Crypto_KeyGenerate VALID VALID INVALID->VALID Crypto_KeySetValid(检查 OK) VALID->INVALID Crypto_KeySetInvalid VALID->VALID Crypto_KeyElementSet (Re-Validierung ausstehend) NVM_SYNC NVM_SYNC VALID->NVM_SYNC NVM-Schreibanforderung NVM_SYNC->VALID Persistierung erfolgreich

状态图:密钥从填充、验证到持久化和错误处理的状态转换。来源:SWS_Crypto_00198、SWS_Crypto_00242、SWS_Crypto_91014、SWS_Crypto_91019、SWS_Crypto_91020

通过 Non-Volatile RAM Manager 持久化密钥元素

如果要使密钥在跨电压周期中保持非易失性,则将 Crypto Driver 连接到 Non-Volatile RAM Manager(NvM)(SWS_CryptoDriver 第35页、AUTOSAR_CP_SWS_CryptoDriver 第37页)。一项核心架构原则规定,向 NvM 的写入过程绝不能在通过 Crypto_KeyElementSet 填充单个元素时直接触发(SWS_CryptoDriver 第37页)。相反,持久化完全由状态验证 KEYSETVALID 通过 [SWS_Crypto_91014](Crypto_KeySetValid)或等效的加密作业发起(SWS_CryptoDriver 第37页)。这确保了相互依赖的密钥元素得到一致的检查,并在单次 NvM 写入访问中保存,从而节省 Flash 周期(SWS_CryptoDriver 第37页)。

与 NvM 的交互通过专用回调接口进行:在 ECU 启动期间,NvM 通过 [SWS_Crypto_91023](Crypto_<vi>_<ai>_NvBlock_Init_<NvBlock>)提供初始化块。从 NvM 的 RAM 镜像加载持久化数据通过 [SWS_Crypto_91024](Crypto_<vi>_<ai>_NvBlock_ReadFrom_<NvBlock>)进行。在写入之前,NvM 调用 [SWS_Crypto_91025](Crypto_<vi>_<ai>_NvBlock_WriteTo_<NvBlock>),以便加密驱动程序将其内部密钥数据复制到 NvM 缓冲区中;异步块传输的完成通过 [SWS_Crypto_91026](Crypto_<vi>_<ai>_NvBlock_Callback_<NvBlock>)报告。为了进行控制,驱动程序使用 NvM 服务 NvM_SetRamBlockStatus 和 NvM_WriteBlock([SWS_Crypto_91017])。如果在启动时加载持久密钥失败,则驱动程序会规范地将该密钥标记为 invalid([SWS_Crypto_00198])。

校验时将密钥持久化在 NVM 中CryIf / ApplikationCrypto DriverNvMCrypto_KeySetValid(cryptoKeyId)检查元素的一致性 & 依赖关系NvM_WriteBlock(BlockId, NvM_Buffer)Crypto_<vi>_<ai>_NvBlock_WriteTo_<NvBlock>(NvmBuffer)将密钥数据传输至 NvM RAM 镜像E_OKCrypto_<vi>_<ai>_NvBlock_Callback_<NvBlock>(BlockRequest, JobResult)将密钥状态设置为 VALIDE_OKE_OK

时序图:在通过 NvM_WriteBlock 和特定于驱动程序的回调进行验证时,密钥元素在 NVM 中的持久化。来源:SWS_Crypto_00242、SWS_Crypto_91017、SWS_Crypto_91025、SWS_Crypto_91026

分区和多核运行规则

为了在多核系统上高效分配加密操作,加密栈可以分布到多个软件分区中(BSWDistributionGuide 第59页)。Crypto 模块在每个分区中作为完全独立的实例运行:每个 API 调用仅在发起该调用的分区内处理数据([SWS_Crypto_CONSTR_00001])。驱动程序对象的分区遵循固定的配置规则:由 CryptoDriverObjectEcucPartitionRef 引用的分区必须强制构成分配给该模块的分区(CryptoEcucPartitionRef)的真子集([SWS_Crypto_CONSTR_00002])。如果 Crypto Driver Object 耦合到硬件安全模块(HSM),出于硬件隔离的原因,它最多只能分配给 0 个或 1 个分区([SWS_Crypto_CONSTR_00003])。

发生错误时的行为

Crypto Driver 实现了由开发错误检测(Development Errors)和运行时错误(Runtime Errors)组成的两级错误监控。当开发安全模式(DET)激活时,形式接口违规将发送至 Det_ReportError([SWS_Crypto_91017])。这包括驱动程序初始化之前的调用(CRYPTO_E_UNINIT, 0x00)([SWS_Crypto_00040]、[SWS_Crypto_00196]、[SWS_Crypto_00205])、无效的初始化数据(CRYPTO_E_INIT_FAILED, 0x01)以及不允许的空指针(CRYPTO_E_PARAM_POINTER, 0x02)([SWS_Crypto_00040])。如果密钥标识符或目标密钥句柄超出允许的值范围,驱动程序将以 E_NOT_OK 中止该调用,并报告 CRYPTO_E_PARAM_HANDLE(0x04)([SWS_Crypto_00040]、[SWS_Crypto_00180]、[SWS_Crypto_00197]、[SWS_Crypto_00202]、[SWS_Crypto_00217])。

如果传入的输入或输出缓冲区不足以执行某项操作,则拒绝执行,并在 DET 激活时报告错误 CRYPTO_E_SMALL_BUFFER([SWS_Crypto_00195]、SWS_CryptoDriver 第49页)。服务 CRYPTO_HASH 和 CRYPTO_MACGENERATE 适用一项规范性例外:如果此处的输出缓冲区小于本机哈希或 MAC 长度,则结果不会被丢弃,而是以最高有效位(MSB)的形式截断写入缓冲区([SWS_Crypto_00065])。在运行过程中,驱动程序通过返回值报告特定的运行时错误:随机熵耗尽时,[SWS_Crypto_91003] 会以返回码 CRYPTO_E_ENTROPY_EXHAUSTED 进行确认,并报告运行时错误 CRYPTO_E_RE_ENTROPY_EXHAUSTED(0x03)([SWS_Crypto_00141]、[SWS_Crypto_00194]、[SWS_Crypto_91018])。如果对 NVM 的读写访问失败,则发出 CRYPTO_E_RE_NVM_ACCESS_FAILED(0x04)信号([SWS_Crypto_00194])。其他标准化的 API 返回值包括 CRYPTO_E_BUSY、CRYPTO_E_KEY_READ_FAIL、CRYPTO_E_KEY_WRITE_FAIL、CRYPTO_E_KEY_NOT_AVAILABLE、CRYPTO_E_KEY_NOT_VALID、CRYPTO_E_KEY_SIZE_MISMATCH 和 CRYPTO_E_KEY_EMPTY([SWS_Crypto_00155]、[SWS_Crypto_00207]、[SWS_Crypto_91018])。

进一步详细证据

Crypto Driver 的基本特性基于以下功能规范要求和架构要点:

主题领域核心规范要素文档参考
模块框架与实例化[SWS_Crypto_00012], [SWS_Crypto_91000], [SWS_Crypto_91016], [SWS_Crypto_00215]SWS_CryptoDriver S. 15
作业处理与取消[SWS_Crypto_91003], [SWS_Crypto_00017], [SWS_Crypto_00027], [SWS_Crypto_00122], [SWS_Crypto_00183]SWS_CryptoDriver S. 25
密钥与权限管理[SWS_Crypto_91004], [SWS_Crypto_91006], [SWS_Crypto_00219], [SWS_Crypto_00220], [SWS_Crypto_91014]SWS_CryptoDriver S. 28
加密操作与交换[SWS_Crypto_91007], [SWS_Crypto_91008], [SWS_Crypto_91009], [SWS_Crypto_91010]SWS_CryptoServiceManager S. 70
NvM 持久化与回调[SWS_Crypto_91023], [SWS_Crypto_91024], [SWS_Crypto_91025], [SWS_Crypto_91026]SWS_CryptoDriver S. 37
多核与分区[SWS_Crypto_CONSTR_00001], [SWS_Crypto_CONSTR_00002], [SWS_Crypto_CONSTR_00003]BSWDistributionGuide S. 59

本指南完全基于 AUTOSAR Classic R20-11 规范的规范性规定。

Crypto Driver (Crypto)

Low-level driver executing cryptographic primitives on hardware security modules (HSM) or software libraries.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

函数 Crypto_Init [SWS_Crypto_91000] 📄 PDF

void Crypto_Init (const Crypto_ConfigType* configPtr);

Initializes the Crypto Driver.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 4040b6dde00b 来源 未决问题(2)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

函数 Crypto_Init 用于根据 [SWS_Crypto_91000] 初始化 Crypto Driver。该接口在头文件 Crypto.h 中声明,其服务 ID 为 0x00 [SWS_Crypto_91000]。

针对调用和接口参数指定了以下属性:

  • 配置指针:通过类型为 const Crypto_ConfigType* 的输入参数 configPtr 传递指向所选配置结构的指针 [SWS_Crypto_91000]。
  • 返回值:该函数没有返回值(void);既不存在输入/输出参数,也不存在单独的输出参数 [SWS_Crypto_91000]。
  • 执行特性:初始化例程以同步方式执行(Synchronous)[SWS_Crypto_91000]。
  • 可重入性:该函数被定义为不可重入(Non Reentrant)[SWS_Crypto_91000]。不允许并行或重叠调用。

由于被归类为不可重入,且规范未返回特定的错误代码,因此调用通常应在 ECU 启动阶段集中进行,且早于所有其他驱动程序访问(解释)。 问题 Q-008bb5a45b823891 (未决)调用方还应负责确保所引用的配置结构在内存中持续有效(解释)。 问题 Q-6271a86fad440121 (未决)

本使用说明由 AI 基于 AUTOSAR CP R20-11 规范生成。

实现者指南即将推出(复杂度 I1)

函数 Crypto_ProcessJob [SWS_Crypto_91003] 📄 PDF

Std_ReturnType Crypto_ProcessJob (uint32 objectId, Crypto_JobType* job);

Service Crypto_ProcessJob.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 58fc9052e1fa 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

函数 Crypto_ProcessJob 在由 objectId 引用的 Crypto Driver Object 上执行在参数 job 中配置的加密原语 [SWS_Crypto_91003]。该调用是可重入的,并根据作业配置以同步或异步方式工作 [SWS_Crypto_91003]。通过指向 Crypto_JobType 的指针,既传递原语的配置数据,也传递用于结果数据的缓冲区 [SWS_Crypto_91003]。

在实际执行作业之前,驱动程序会检查密钥标识符的有效性:如果 job->cryptoKeyId 或(在适用情况下)job->targetCryptoKeyId 超出允许范围,该函数将向 DET 报告错误 CRYPTO_E_PARAM_HANDLE 并返回 E_NOT_OK [SWS_Crypto_00217]。如果 job->targetCryptoKeyId 无效,这也同样适用于服务 CRYPTO_KEYDERIVE(job->jobPrimitiveInfo->primitiveInfo->service)[SWS_Crypto_00202]。

除了 E_OK 和 E_NOT_OK 之外,特定的错误代码也指示请求失败 [SWS_Crypto_91003]:

  • CRYPTO_E_BUSY,如果驱动程序对象被占用或其队列已满 [SWS_Crypto_91003],
  • 与密钥相关的错误,例如 CRYPTO_E_KEY_NOT_VALID、CRYPTO_E_KEY_SIZE_MISMATCH、CRYPTO_E_KEY_READ_FAIL、CRYPTO_E_KEY_WRITE_FAIL、CRYPTO_E_KEY_NOT_AVAILABLE 或 CRYPTO_E_KEY_EMPTY [SWS_Crypto_91003],
  • CRYPTO_E_JOB_CANCELED,在同步作业被中止时 [SWS_Crypto_91003],以及
  • CRYPTO_E_ENTROPY_EXHAUSTED,在随机数生成器的熵不足时;此时,该函数还会报告运行时错误 CRYPTO_E_RE_ENTROPY_EXHAUSTED [SWS_Crypto_00141], [SWS_Crypto_91003]。

该文本由 AI 基于 AUTOSAR R20-11 规范数据生成。

实现者指南即将推出(复杂度 I1)

函数 Crypto_CancelJob [SWS_Crypto_00122] 📄 PDF

Std_ReturnType Crypto_CancelJob (uint32 objectId, Crypto_JobType* job);

This interface removes the provided job from the queue and cancels the processing of the job if possible.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 53c6dc327c97 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

同步函数 Crypto_CancelJob 从队列中移除传入的作业,并尽可能中止其处理 [SWS_Crypto_00122]。调用时,会传递 Crypto Driver Object 的标识符(objectId)以及指向作业配置的指针(job)[SWS_Crypto_00122]。

返回值指示中止尝试的结果:

  • E_OK:请求成功,作业已被移除 [SWS_Crypto_00122]。如果驱动程序中不存在错误且该作业当前未被处理,则该服务同样返回 E_OK,无需采取进一步操作 [SWS_Crypto_00214]。
  • E_NOT_OK:请求失败,因为无法移除作业 [SWS_Crypto_00122]。
  • CRYPTO_E_JOB_CANCELED:作业已被取消,但仍在继续执行;不会向应用程序返回任何结果 [SWS_Crypto_00122]。这适用于驱动程序工作正常,但(例如由于硬件限制)无法中止该作业的情况 [SWS_Crypto_00183]。

并发性与限制

该接口针对不同实例是可重入的,但不得针对同一个 Crypto Driver Object 同时调用 [SWS_Crypto_00122]。

该使用提示系自动生成,且完全基于 AUTOSAR R20-11 的规范数据。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeyElementSet [SWS_Crypto_91004] 📄 PDF

Std_ReturnType Crypto_KeyElementSet (uint32 cryptoKeyId, uint32 keyElementId, const uint8* keyPtr, uint32 keyLength);

Sets the given key element bytes to the key identified by crypto Key Id.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: c644721999af 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 Crypto_KeyElementSet 用于在加密驱动程序中为通过 cryptoKeyId 标识的密钥设置特定密钥元素的原始数据 [SWS_Crypto_91004]。

参数与返回值

通过 keyElementId 寻址目标密钥元素,而 keyPtr 指向数据缓冲区,keyLength 指向其字节大小 [SWS_Crypto_91004]。赋值成功时,接口返回 E_OK [SWS_Crypto_91004]。

错误处理

如果处理过程中出现错误,函数将返回特定的返回值 [SWS_Crypto_91004]:

  • CRYPTO_E_BUSY:关联的加密驱动程序对象被占用。
  • CRYPTO_E_KEY_WRITE_FAIL:对密钥元素的写访问被拒绝。
  • CRYPTO_E_KEY_NOT_AVAILABLE:请求的密钥元素或密钥不可用。
  • CRYPTO_E_KEY_SIZE_MISMATCH:传入的数据长度与密钥元素的大小不匹配。
  • E_NOT_OK:请求由于其他原因失败。

并发性

该函数被指定为不可重入(Non Reentrant)[SWS_Crypto_91004]。解释:调用方应负责对并行调用相互进行同步,以防止驱动程序中的数据不一致。 问题 Q-d7ef7a774052a212 (未决)

该使用提示基于规范 SWS_Crypto_91004 (R20-11) 自动生成。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeySetValid [SWS_Crypto_91014] 📄 PDF

Std_ReturnType Crypto_KeySetValid (uint32 cryptoKeyId);

Sets the key state of the key identified by crypto Key Id to valid.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 234814436706 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 Crypto_KeySetValid 用于将通过标识符 cryptoKeyId 指定的密钥的状态设置为有效([SWS_Crypto_91014])。该接口可通过头文件 Crypto.h 获取,其服务 ID 为 0x05([SWS_Crypto_91014])。

使用时定义了以下参数和返回值([SWS_Crypto_91014]):

在并发性方面,该函数被指定为不可重入(“Non Reentrant”)([SWS_Crypto_91014])。Interpretation:调用方可能需要在任务之间外部协调并行调用以避免冲突,并且在收到 CRYPTO_E_BUSY 时应安排在稍后时间重试调用。 问题 Q-32d775a9e61e5731 (未决)

本文由 AI 生成,基于 AUTOSAR R20-11 规范版本。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeySetInvalid [SWS_Crypto_91020] 📄 PDF

Std_ReturnType Crypto_KeySetInvalid (uint32 cryptoKeyId);

Sets invalid for the status of the key identifi ed by crypto Key Id.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: f9c09a4552e9 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

用法与语义

同步函数 Crypto_KeySetInvalid 将通过 cryptoKeyId 标识的密钥的状态设置为无效 [SWS_Crypto_91020]。该函数在头文件 Crypto.h 中定义,并通过服务 ID 0x15 进行调用 [SWS_Crypto_91020]。作为唯一的传递参数,输入值 cryptoKeyId(类型 uint32)包含目标密钥的唯一标识符;不存在输入/输出参数以及输出参数 [SWS_Crypto_91020]。

错误处理与返回值

函数执行的结果通过类型为 Std_ReturnType 的返回值发出指示 [SWS_Crypto_91020]:

并发性与限制

该接口被指定为不可重入(Non Reentrant)[SWS_Crypto_91020]。因此不允许并发或中断调用。由于该函数是同步执行的,它仅在状态更改完成或确定错误后才会返回给调用方 [SWS_Crypto_91020]。

本使用说明基于规范自动生成。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeyElementGet [SWS_Crypto_91006] 📄 PDF

Std_ReturnType Crypto_KeyElementGet (uint32 cryptoKeyId, uint32 keyElementId, uint8* resultPtr, uint32* resultLengthPtr);

This interface shall be used to get a key element of the key identified by the crypto

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: c68d666a4fd9 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步且可重入的函数 Crypto_KeyElementGet 用于从密钥 cryptoKeyId 中读取由 keyElementId 标识的密钥元素,并保存在内存区域 resultPtr 中 [SWS_Crypto_91006]。该接口通过头文件 Crypto.h 提供,服务 ID 为 0x06 [SWS_Crypto_91006]。调用时,调用方通过输入输出参数 resultLengthPtr 传递缓冲区大小,或在配置了部分访问时传递所需的读取大小;执行完成后,驱动程序将在其中存放实际复制的数据量 [SWS_Crypto_91006]。

成功时,函数返回 E_OK [SWS_Crypto_91006]。如果操作失败,则通过特定的错误代码发出信号:在加密驱动程序对象被占用时返回 CRYPTO_E_BUSY,在密钥元素不可用时返回 CRYPTO_E_KEY_NOT_AVAILABLE,在读取访问被拒绝时返回 CRYPTO_E_KEY_READ_FAIL,在源元素未初始化时返回 CRYPTO_E_KEY_EMPTY,以及通用的 E_NOT_OK [SWS_Crypto_91006]。

尽管该接口被指定为可重入,但规范指出,在密钥元素直接映射到 Flash 存储器的情况下,同步执行期间可能会出现明显的延迟 [SWS_Crypto_91006]。解释:由于存在这些潜在的延迟,该调用主要应在任务上下文中进行,而不宜在时间关键的中断服务例程内调用。 问题 Q-ff4e2843b9aad46d (未决)

该使用提示系自动生成,并基于 AUTOSAR Classic R20-11 规范版本。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeyGetStatus [SWS_Crypto_91019] 📄 PDF

Std_ReturnType Crypto_KeyGetStatus (uint32 cryptoKeyId, Crypto_KeyStatusType* keyStatusPtr);

Returns the key state of the key identified by crypto Key Id.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 4f6e929a170d 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 Crypto_KeyGetStatus 用于查询 Crypto 驱动程序 [SWS_Crypto_91019] 内特定密钥的当前状态。它通过头文件 Crypto.h 提供,并具有服务 ID 0x14 [SWS_Crypto_91019]。

用法与参数

该调用为同步执行,并需要两个参数 [SWS_Crypto_91019]:

  • cryptoKeyId:要确定其状态的密钥标识符。
  • keyStatusPtr:指向类型为 Crypto_KeyStatusType 的存储区域的指针,状态将返回到该区域。

作为返回值,该接口返回 Std_ReturnType。成功执行时报告 E_OK,而出错时返回 E_NOT_OK [SWS_Crypto_91019]。

并发性与限制

该函数声明为不可重入(Non Reentrant)[SWS_Crypto_91019]。因此,调用方必须确保通过上层同步机制避免并发调用。未列出特定的 DET 错误消息;大概率错误的调用(例如无效指针或无效 ID)会直接导致返回 E_NOT_OK [SWS_Crypto_91019]。 问题 Q-5703fab02905e91a (未决)

此文本由 AI 创建,基于 AUTOSAR R20-11 规范。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeyElementCopy [SWS_Crypto_00148] 📄 PDF

Std_ReturnType Crypto_KeyElementCopy (uint32 cryptoKeyId, uint32 keyElementId, uint32 targetCryptoKeyId, uint32 targetKeyElementId);

Service Crypto_KeyElementCopy.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 0bf976054e55 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 Crypto_KeyElementCopy 用于在同一个加密驱动程序内将一个密钥元素复制到另一个密钥元素 [SWS_Crypto_00148]。传递的参数包括源密钥(cryptoKeyId)和源密钥元素(keyElementId)以及目标密钥(targetCryptoKeyId)和目标密钥元素(targetKeyElementId)的标识符 [SWS_Crypto_00148]。

在时序特性方面需要注意,对于直接映射在 Flash 存储器中的密钥元素,由于同步执行,函数调用时可能会产生较大的延迟 [SWS_Crypto_00148]。因此,尤其是在时间关键型上下文中,必须考虑运行时间特性。

该函数被设计为可重入的,但明确不能针对相同的 cryptoKeyId [SWS_Crypto_00148]。因此,使用相同源密钥的并发调用必须由调用方进行同步或排除。

成功时,函数返回 E_OK [SWS_Crypto_00148]。出现错误时,返回值指示具体原因 [SWS_Crypto_00148]:

此使用说明基于 AUTOSAR Classic R20-11 规范自动生成。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeyElementCopyPartial [SWS_Crypto_91015] 📄 PDF

Std_ReturnType Crypto_KeyElementCopyPartial (uint32 cryptoKeyId, uint32 keyElementId, uint32 keyElementSourceOffset, uint32 keyElementTargetOffset, uint32 keyElementCopyLength, uint32 targetCryptoKeyId, uint32 targetKeyElementId);

Service Crypto_KeyElementCopyPartial.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: a5ad7cce8b26 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 Crypto_KeyElementCopyPartial 用于将数据从源密钥元素部分复制到同一加密驱动程序内的目标密钥元素中 [SWS_Crypto_91015]。通过参数 keyElementSourceOffset 和 keyElementCopyLength 确定源元素中要复制的片段(cryptoKeyId、keyElementId),而 keyElementTargetOffset 确定目标元素中的起始位置(targetCryptoKeyId、targetKeyElementId)。若检查无误,驱动程序将同步执行复制过程并返回 E_OK [SWS_Crypto_00209]。

在执行之前,驱动程序会验证缓冲区状态和驱动程序状态:

  • 若加密驱动程序未初始化且开发错误检测已启用,该函数将向 DET 报告 CRYPTO_E_UNINIT 并返回 E_NOT_OK [SWS_Crypto_00205]。
  • 若源密钥元素的总长度小于 keyElementSourceOffset + keyElementCopyLength,则调用失败并返回 CRYPTO_E_KEY_SIZE_MISMATCH [SWS_Crypto_00207]。
  • 若目标密钥元素的最大缓冲区提供的空间少于 keyElementTargetOffset + keyElementCopyLength,同样会报告 CRYPTO_E_KEY_SIZE_MISMATCH [SWS_Crypto_00208]。
  • 其他指定的错误值包括 CRYPTO_E_BUSY(驱动对象被占用)、CRYPTO_E_KEY_EMPTY(未初始化的源元素)、CRYPTO_E_KEY_NOT_AVAILABLE 以及读或写访问错误(CRYPTO_E_KEY_READ_FAIL、CRYPTO_E_KEY_WRITE_FAIL)等 [SWS_Crypto_91015]。

该函数是可重入的,但不得针对同一密钥 ID cryptoKeyId 同时调用 [SWS_Crypto_91015]。若某个密钥元素直接存储在闪存中,同步执行可能会导致明显的时延 [SWS_Crypto_91015]。

本使用说明基于 AUTOSAR 规范 R20-11 自动生成。

实现者指南即将推出(复杂度 I2)

函数 Crypto_KeyCopy [SWS_Crypto_00155] 📄 PDF

Std_ReturnType Crypto_KeyCopy (uint32 cryptoKeyId, uint32 targetCryptoKeyId);

Copies a key with all its elements to another key in the same crypto driver. Note: If the actual key element is directly mapped to flash memory, there could be a bigger delay when calling this function (synchronous operation)

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 4fed74be6625 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

同步函数 Crypto_KeyCopy 将一个密钥连同其所有密钥元素复制到同一 Crypto 驱动程序内的目标密钥中 [SWS_Crypto_00155]。映射通过用于源密钥的输入参数 cryptoKeyId 以及用于目标密钥的 targetCryptoKeyId 进行 [SWS_Crypto_00155]。成功的复制过程将通过 E_OK 进行确认 [SWS_Crypto_00155]。

并发性与运行时行为

该接口设计为可重入,但不允许同时针对同一 cryptoKeyId 执行 [SWS_Crypto_00155]。由于执行是同步进行的,对于直接存储在闪存中的密钥元素,调用期间可能会出现明显的时延 [SWS_Crypto_00155]。

错误处理

在出错的情况下,该函数提供类型为 Std_ReturnType 的特定返回值 [SWS_Crypto_00155]:

本使用说明由 AI 基于 AUTOSAR CP R20-11 规范生成。

函数 Crypto_KeyElementIdsGet [SWS_Crypto_00160] 📄 PDF

Std_ReturnType Crypto_KeyElementIdsGet (uint32 cryptoKeyId, uint32* keyElementIdsPtr, uint32* keyElementIdsLengthPtr);

Used to retrieve information which key elements are available in a given key.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 73fbfa8804b7 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 Crypto_KeyElementIdsGet 用于查询给定密钥中存在哪些可用密钥元素的信息 [SWS_Crypto_00160]。通过输入参数 cryptoKeyId 传递要导出其可用元素 ID 的密钥标识符 [SWS_Crypto_00160]。确定的标识符将保存在由指针 keyElementIdsPtr 引用的数组中 [SWS_Crypto_00160]。

缓冲区大小的管理通过输入/输出参数 keyElementIdsLengthPtr 进行:调用时,该参数必须包含所提供缓冲区的大小 keyElementIdsPtr [SWS_Crypto_00160]。操作完成后,其中将存放现有密钥元素的实际数量 [SWS_Crypto_00160]。

作为返回值,服务在查询成功时返回 E_OK,如果请求失败则返回 E_NOT_OK [SWS_Crypto_00160]。若负责的加密驱动程序对象在调用时处于忙状态,则返回错误代码 CRYPTO_E_BUSY [SWS_Crypto_00160]。

关于并发性,该函数是可重入的,但不得针对相同的 cryptoKeyId 同时调用 [SWS_Crypto_00160]。声明可在头文件 Crypto.h 中获取 [SWS_Crypto_00160]。

此文本由 AI 基于 AUTOSAR 规范生成。

实现者指南即将推出(复杂度 I1)

函数 Crypto_RandomSeed [SWS_Crypto_91013] 📄 PDF

Std_ReturnType Crypto_RandomSeed (uint32 cryptoKeyId, const uint8* seedPtr, uint32 seedLength);

This function generates the internal seed state using the pro vided entropy source. Furthermore, this function can be used to update the seed state with new entropy

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 7ee33749b38a 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

根据 [SWS_Crypto_91013],同步函数 Crypto_RandomSeed(服务 ID 0x0d)用于利用所提供的熵源生成以及更新密钥的内部种子状态。函数声明包含在头文件 Crypto.h 中。

用法和调用参数

根据 [SWS_Crypto_91013],除了初始生成之外,该函数还可用于使用新熵更新种子状态。该同步调用需要三个输入参数:

  • cryptoKeyId:传递要为其生成新种子的密钥标识符。
  • seedPtr:保存指向包含用于注入种子的数据之存储区域的指针。
  • seedLength:以字节为单位定义所传递种子数据的长度。

返回值与错误处理

作为返回值,Crypto_RandomSeed 根据 [SWS_Crypto_91013] 返回类型为 Std_ReturnType 的状态:

  • E_OK:请求已成功执行。
  • E_NOT_OK:请求失败。
  • CRYPTO_E_KEY_NOT_VALID:执行失败,因为由 cryptoKeyId 标识的密钥之密钥状态处于“invalid”状态。

并发性与限制

根据 [SWS_Crypto_91013],该函数被指定为可重入,但明确指出对于相同的 cryptoKeyId 不可重入。因此,调用方必须防止针对同一密钥的并行调用。

此文本由 AI 生成,且仅基于有效载荷中的规范数据。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeyGenerate [SWS_Crypto_91007] 📄 PDF

Std_ReturnType Crypto_KeyGenerate (uint32 cryptoKeyId);

Generates new key material store it in the key identified by crypto Key Id.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 9465afa4791c 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

通过头文件 Crypto.h 提供的函数 Crypto_KeyGenerate 生成新的密钥材料并更新通过标识符 cryptoKeyId 寻址的密钥 [SWS_Crypto_91007]。该函数完全同步工作,并定义在服务 ID 0x07 下 [SWS_Crypto_91007]。除密钥标识符外,不存在其他参数 [SWS_Crypto_91007]。

并发性与限制

关于并发性,Crypto_KeyGenerate 被指定为可重入,但明确有限制条件,即这不适用于相同的 cryptoKeyId [SWS_Crypto_91007]。如果针对同一个密钥提出多个请求,则必须在调用方进行同步,以避免驱动程序冲突。

返回值与错误处理

通过基本类型为 Std_ReturnType 的返回值,调用方可获得关于操作成功或特定错误原因的详细反馈 [SWS_Crypto_91007]:

  • E_OK:密钥生成成功执行 [SWS_Crypto_91007]。
  • CRYPTO_E_BUSY:请求失败,因为负责的 Crypto Driver Object 当前处于占用状态 [SWS_Crypto_91007]。
  • CRYPTO_E_KEY_EMPTY:生成失败,因为所需的源密钥元素未初始化 [SWS_Crypto_91007]。
  • CRYPTO_E_KEY_NOT_VALID:操作失败,因为由 cryptoKeyId 引用的密钥的密钥状态被标记为无效 [SWS_Crypto_91007]。
  • E_NOT_OK:密钥生成请求由于其他原因失败 [SWS_Crypto_91007]。

此使用说明基于 AUTOSAR Classic R20-11 规范自动生成。

函数 Crypto_KeyDerive [SWS_Crypto_91008] 📄 PDF

Std_ReturnType Crypto_KeyDerive (uint32 cryptoKeyId, uint32 targetCryptoKeyId);

Derives a new key by using the key elements in the given key identified by the crypto Key Id. The given key contains the key elements for the password, salt. The derived key is stored in the key element with the id 1 of the key identified by target Crypto Key Id. The number of iterations is given in the key element CRYPTO_ KE_ KEYDERIVATION_ ITERATIONS.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 5847568b736a 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 Crypto_KeyDerive 从源密钥(cryptoKeyId)的密钥元素派生出新的加密密钥,并将其存储在目标密钥(targetCryptoKeyId)中 ID 为 1 的密钥元素中 [SWS_Crypto_91008]。源密钥必须包含用于密码和 Salt 的必要密钥元素;迭代次数通过密钥元素 CRYPTO_KE_KEYDERIVATION_ITERATIONS 指定 [SWS_Crypto_91008]。

调用与并发性

该接口是可重入的,但不得针对相同的 cryptoKeyId 同时调用 [SWS_Crypto_91008]。因此,调用方必须确保并行派生操作在不同的源密钥上进行。

返回值与错误处理

该函数通过类型为 Std_ReturnType 的已定义返回值指示结果 [SWS_Crypto_91008]:

  • E_OK:密钥派生成功执行。
  • E_NOT_OK:派生失败。如果参数 targetCryptoKeyId 超出有效范围,且在开发错误检测激活时,该函数还会向 DET 报告 CRYPTO_E_PARAM_HANDLE [SWS_Crypto_00180]。
  • CRYPTO_E_BUSY:负责的 Crypto Driver Object 正忙 [SWS_Crypto_91008]。
  • CRYPTO_E_KEY_EMPTY:所需的源密钥元素未初始化 [SWS_Crypto_91008]。
  • CRYPTO_E_KEY_NOT_VALID:由 cryptoKeyId 引用的密钥状态无效 [SWS_Crypto_91008]。

本使用说明基于规范自动生成。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeyExchangeCalcPubVal [SWS_Crypto_91009] 📄 PDF

Std_ReturnType Crypto_KeyExchangeCalcPubVal (uint32 cryptoKeyId, uint8* publicValuePtr, uint32* publicValueLengthPtr);

Calculates the public value for the key exchange a nd stores the public key in the memory location pointed by the public value pointer.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: c27ddd0a9e75 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

同步函数 Crypto_KeyExchangeCalcPubVal 计算密钥交换协议的公开值并将其保存在 publicValuePtr 的存储位置([SWS_Crypto_91009])。调用方通过 cryptoKeyId 传递用于该协议的密钥标识符。通过输入输出参数 publicValueLengthPtr,在调用时必须传递所提供存储区的缓冲区大小;执行完成后,将在其中存放计算出的公开值的实际长度([SWS_Crypto_91009])。

错误处理与返回值

执行成功时,函数返回 E_OK。如果发生错误,则返回 E_NOT_OK 或特定的错误代码([SWS_Crypto_91009]):

  • CRYPTO_E_BUSY:请求失败,因为 Crypto Driver Object 被占用。
  • CRYPTO_E_KEY_EMPTY:请求失败,因为源密钥元素未初始化。
  • CRYPTO_E_KEY_NOT_VALID:请求失败,因为通过 cryptoKeyId 引用的密钥状态无效。

并发性与系统集成

根据 [SWS_Crypto_91009],该函数是可重入的,但不能针对相同的 cryptoKeyId。如果加密驱动程序出于内部目的(如 Crypto_KeyExchangeCalcPubVal)需要随机数生成器(RNG)的服务,则必须将第一个 Crypto Driver Object(对象编号 0)配置用于此目的([SWS_Crypto_00224])。

该文本由 AI 生成。所有信息均基于 AUTOSAR Classic R20-11 规范。

实现者指南即将推出(复杂度 I1)

函数 Crypto_KeyExchangeCalcSecret [SWS_Crypto_91010] 📄 PDF

Std_ReturnType Crypto_KeyExchangeCalcSecret (uint32 cryptoKeyId, const uint8* partnerPublicValuePtr, uint32 partnerPublicValueLength);

Calculates the shared secret key for the key exchange with the key material of the key identified by the crypto Key Id and the partner public key. The shared secret key is stored as a key element in the same key.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: c3912e0f8927 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 Crypto_KeyExchangeCalcSecret 用于计算密钥交换协议的共享密钥(Shared Secret Key)[SWS_Crypto_91010]。它处理通过 cryptoKeyId 指定的密钥的密钥材料以及通过 partnerPublicValuePtr 传递的伙伴公开值,后者的字节数通过 partnerPublicValueLength 指定 [SWS_Crypto_91010]。计算出的共享密钥直接作为密钥元素存储在同一个密钥内 [SWS_Crypto_91010]。

作为返回值,函数通过 Std_ReturnType 提供状态 [SWS_Crypto_91010]:

该接口以可重入方式实现,但不得针对相同的 cryptoKeyId 并发调用 [SWS_Crypto_91010]。因此,调用方必须确保避免使用相同密钥 ID 进行并发调用,并预先初始化所引用的密钥材料且使其处于有效状态,以防止出现错误状态 [SWS_Crypto_91010]。

该使用提示基于 SWS_Crypto_91010 规范自动生成。

函数 Crypto_MainFunction [SWS_Crypto_91012] 📄 PDF

void Crypto_MainFunction (void);

If asynchronous job processing is configured and there are job queues, the function is called cyclically to process queued jobs. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_CryptoDriver

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 0801a980dea9 来源 未决问题(3)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

函数 Crypto_MainFunction 用于周期性处理加密驱动程序的作业队列中排队的加密作业 [SWS_Crypto_91012]。使用该函数的前提条件是,模块中已配置了异步作业处理,并且存在相应的作业队列 [SWS_Crypto_91012]。

调用与语义

该函数的签名是 void Crypto_MainFunction(void),指定的服务 ID 为 0x0c [SWS_Crypto_91012]。它不接受任何输入参数,也不提供返回值。该接口通过头文件 SchM_Crypto.h 提供 [SWS_Crypto_91012]。这允许做出如下解释:周期性调用通常由 BSW 调度器(Schedule Manager)在操作系统周期任务的上下文中触发。

并发性与限制

该调用严格绑定到异步作业队列的配置 [SWS_Crypto_91012]。由于规范未指出 Crypto_MainFunction 具有可重入性,因此该函数应被视为不可重入;因此应避免从多个线程或任务中进行并行调用。 问题 Q-038d384305c8c5c3 (未决)

错误处理

在规范中,未为此函数定义特定的错误代码或 DET 条目 [SWS_Crypto_91012]。由于该函数不提供返回值,异步处理期间发生的任何错误大概率会通过状态查询或各作业的反馈通道传递给上层。 问题 (未决)

本使用说明由 AI 基于 AUTOSAR CP R20-11 规范生成。

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_Crypto
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_Crypto@rel:R20-11#bbe93190
Content hash
bbe93190
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CryptoDriver.pdf#nameddest=SWS_Crypto_91000

初始化与状态

Returns the version information of this module.

void Crypto_GetVersionInfo (Std_VersionInfoType* versioninfo);

Initializes the Crypto Driver.

void Crypto_Init (const Crypto_ConfigType* configPtr);

服务 · KeyElement…

Service Crypto_KeyElementCopy.

Std_ReturnType Crypto_KeyElementCopy (uint32 cryptoKeyId, uint32 keyElementId, uint32 targetCryptoKeyId, uint32 targetKeyElementId);

Service Crypto_KeyElementCopyPartial.

Std_ReturnType Crypto_KeyElementCopyPartial (uint32 cryptoKeyId, uint32 keyElementId, uint32 keyElementSourceOffset, uint32 keyElementTargetOffset, uint32 keyElementCopyLength, uint32 targetCryptoKeyId, uint32 targetKeyElementId);

This interface shall be used to get a key element of the key identified by the crypto

Std_ReturnType Crypto_KeyElementGet (uint32 cryptoKeyId, uint32 keyElementId, uint8* resultPtr, uint32* resultLengthPtr);

Used to retrieve information which key elements are available in a given key.

Std_ReturnType Crypto_KeyElementIdsGet (uint32 cryptoKeyId, uint32* keyElementIdsPtr, uint32* keyElementIdsLengthPtr);

Sets the given key element bytes to the key identified by crypto Key Id.

Std_ReturnType Crypto_KeyElementSet (uint32 cryptoKeyId, uint32 keyElementId, const uint8* keyPtr, uint32 keyLength);

服务 · Key…

Copies a key with all its elements to another key in the same crypto driver. Note: If the actual key element is directly mapped to flash memory, there could be a bigger delay when calling this function (synchronous operation)

Std_ReturnType Crypto_KeyCopy (uint32 cryptoKeyId, uint32 targetCryptoKeyId);

Derives a new key by using the key elements in the given key identified by the crypto Key Id. The given key contains the key elements for the password, salt. The derived key is stored in the key element with the id 1 of the key identified by target Crypto Key Id. The number of iterations is given in the key element CRYPTO_ KE_ KEYDERIVATION_ ITERATIONS.

Std_ReturnType Crypto_KeyDerive (uint32 cryptoKeyId, uint32 targetCryptoKeyId);

Calculates the public value for the key exchange a nd stores the public key in the memory location pointed by the public value pointer.

Std_ReturnType Crypto_KeyExchangeCalcPubVal (uint32 cryptoKeyId, uint8* publicValuePtr, uint32* publicValueLengthPtr);

Calculates the shared secret key for the key exchange with the key material of the key identified by the crypto Key Id and the partner public key. The shared secret key is stored as a key element in the same key.

Std_ReturnType Crypto_KeyExchangeCalcSecret (uint32 cryptoKeyId, const uint8* partnerPublicValuePtr, uint32 partnerPublicValueLength);

Generates new key material store it in the key identified by crypto Key Id.

Std_ReturnType Crypto_KeyGenerate (uint32 cryptoKeyId);

Returns the key state of the key identified by crypto Key Id.

Std_ReturnType Crypto_KeyGetStatus (uint32 cryptoKeyId, Crypto_KeyStatusType* keyStatusPtr);

Sets invalid for the status of the key identifi ed by crypto Key Id.

Std_ReturnType Crypto_KeySetInvalid (uint32 cryptoKeyId);

Sets the key state of the key identified by crypto Key Id to valid.

Std_ReturnType Crypto_KeySetValid (uint32 cryptoKeyId);

服务 · 其他

This interface removes the provided job from the queue and cancels the processing of the job if possible.

Std_ReturnType Crypto_CancelJob (uint32 objectId, Crypto_JobType* job);

Service Crypto_ProcessJob.

Std_ReturnType Crypto_ProcessJob (uint32 objectId, Crypto_JobType* job);

This function generates the internal seed state using the pro vided entropy source. Furthermore, this function can be used to update the seed state with new entropy

Std_ReturnType Crypto_RandomSeed (uint32 cryptoKeyId, const uint8* seedPtr, uint32 seedLength);

周期性

If asynchronous job processing is configured and there are job queues, the function is called cyclically to process queued jobs. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_CryptoDriver

void Crypto_MainFunction (void);

类型

Configuration data structure of Cry If module