Autosar Crypto Interface学习笔记

前言

之前介绍过Crypto Driver,本文接着学习Crypto上面一个模块,CryIf.

Functional specification

Crypto Interface位于Crypto Service Manager和底层Crypto drivers之间,是访问所有上层(BSW)加密操作的唯一接口。Crypto Interface也是Crypto drivers的唯一使用者,并提供独特的接口来管理不同的加密硬件和软件解决方案。抽象层封装了不同的硬件和软件访问机制,因此Crypto Interface的实现独立于底层的Crypto Drivers(可以在硬件或软件中实现)

它还确保了对crypto services的并发访问,从而使同时处理多个加密任务成为可能。
image

Error classification

image
image

Error detection

如果参数job->jobPrimitiveInfo->primitiveInfo->service被设置为CRYPTO_KEYSETVALID
Crypto_RANDOMSEED,CRYPTO_KEYGENERATE, CRYPTO_KEYDERIVECRYPTO_KEYEXCHANGECALCPUBVALCRYPTO_KEYEXCHANGECALCSECRET时,检查参数job->jobPrimitiveInputOutput->cryIfKeyId及job->jobPrimitiveInputOutput->targetCryIfKeyId(如果适用)是否在有效范围内。

如果调用一个作业,并且参数job->jobPrimitiveInfo->primitiveInfo->service被设置为
CRYPTO_MACGENERATE, CRYPTO_MACVERIFY, CRYPTO_ENCRYPT,CRYPTO_DECRYPT, CRYPTO_AEADENCRYPT, CRYPTO_AEADDECRYPT,CRYPTO_SIGNATUREGENERATE或CRYPTO_SIGNATUREVERIFY时,
检查job->jobPrimitiveInfo->cryIfKeyId参数是否在有效范围内。

如果Key超出范围,它将向开发模式中的DET报告CRYPTO_E_PARAM_HANDLE,否则返回E_NOT_OK。

API specification

注意:

CRYPTO_E_KEY_NOT_AVAILABLE表示该密钥之前已被编程,但目前无法访问(例如,它暂时不可访问,例如,当密钥由于调试器连接或参数错误而被禁用时)。
CRYPTO_E_KEY_EMPTY表示所引用的密钥内容到目前为止还没有被写入,并且没有默认值(例如,在SHE 1.1中,错误代码ERC_KEY_EMPTY将返回,“如果应用程序试图使用尚未初始化的密钥”)。

Type Definitions

Function definitions

General API

CryIf_Init

image
配置指针configPtr当前未使用,因此应设置为空指针。

如果CRYIF模块初始化失败,CRYIF将向DET报告CRYIF_E_INIT_FAILED

CryIf_Init()服务将初始化CRYIF的全局变量和数据结构,包括标志和缓冲区。

CryIf_GetVersionInfo

image
image
如果启用了CRYIF模块的开发错误检测:如果模块尚未初始化,则CryIf_GetVersionInfo函数将向DET报告CRYIF_E_UNINIT

如果启用了CRYIF模块的开发错误检测:如果参数versioninfo为空指针,则CryIf_GetVersionInfo函数将向DET报告CRYIF_E_PARAM_POINTER

Job Processing Interface

CryIf_ProcessJob

为了统一单个调用函数和加密服务的流方法,有一个接口CryIf_ProcessJob()。它的Crypto_JobType作业参数包含一个Crypto_OperationModeType标志字段(job->jobPrimitiveInputOutput.mode),可以设置为" START ", " UPDATE ",“FINISH”或它们的组合。它显式声明应该执行什么操作。这些操作模式可以混合,一次执行多个操作。

image
image
如果启用了CRYIF的开发错误检测:函数CryIf_ProcessJob将向DET报告CRYIF_E_UNINIT并返回
E_NOT_OK,如果模块尚未初始化。

如果启用了CRYIF的开发错误检测:函数CryIf_ProcessJob将向DET报告CRYIF_E_PARAM_HANDLE,如果参数channelId超出范围,则返回E_NOT_OK

如果启用了CRYIF的开发错误检测:函数CryIf_ProcessJob将向DET报告CRYIF_E_PARAM_POINTER,如果参数job是空指针,则返回E_NOT_OK。

如果CRYIF没有检测到错误,则服务
CryIf_ProcessJob()将为映射到服务的驱动配置调用Crypto_<vi>_<ai>_ProcessJob()并传递返回值

如果作业处理重定向用于作业,则crypto
interface需要将传入的crypto
interface密钥引用和密钥元素引用调整为加密驱动程序各自值的相应密钥引用和密钥元素引用。

Dispatch Key IDs匹配KeyId

CryIf应使用job->jobPrimitiveInputOutput->cryIfKeyId对应的加密驱动程序的密钥ID设置job->cryptoKeyId,如果适用,还应设置 job->targetCryptoKeyId为 job->jobPrimitiveInputOutput->targetCryIfKeyId

如果 job->jobPrimitiveInfo->primitiveInfo->service配置为CRYPTO_KEYSETVALID,CRYPTO_RANDOMSEED, CRYPTO_KEYGENERATE, CRYPTO_KEYDERIVE, CRYPTO_KEYEXCHANGECALCPUBVAL or CRYPTO_KEYEXCHANGECALCSECRET,则job->cryIfKeyId必须在范围内,否则 CryIf_ProcessJob函数报告CRYPTO_E_PARAM_HANDLE给DET并返回E_NOT_OK

如果参数job->jobPrimitiveInfo->primitiveInfo->service设置为CRYPTO_KEYDERIVE,参数job->cryIfTargetKeyId必须在范围内;否则函数CryIf_ProcessJob将报告
CRYPTO_E_PARAM_HANDLE给DET并返回E_NOT_OK

CryIf使用job->jobPrimitiveInfo->cryIfKeyId对应的crypto driver的密钥ID设置job->cryptoKeyId

Job Cancellation Interface

CryIf_CancelJob

image
如果启用了CRYIF的开发错误检测:函数CryIf_CancelJob将向DET报告CRYIF_E_UNINIT并返回
E_NOT_OK,如果模块尚未初始化

如果启用了CRYIF的开发错误检测:函数CryIf_CancelJob将向DET报告CRYIF_E_PARAM_HANDLE,如果参数channelId超出或超出范围,则返回E_NOT_OK

如果启用了CRYIF的开发错误检测:函数CryIf_CancelJob将向DET报告CRYIF_E_PARAM_POINTER,如果参数job是空指针,则返回E_NOT_OK。

如果CRYIF没有检测到错误,则服务
CryIf_CancelJob()将为映射到服务的驱动配置调用Crypto_<vi>_<ai>_CancelJob(),并传递返回值

Key Management Interface

Key Setting Interface

cryIfKeyId对应Crypto Driver中的Keyid
image
CryIf_KeyElementSet:该函数用来将指定cryIfKeyId及keyElementId的密钥值和长度

image
CryIf_KeySetValid:该函数用来将指定KeyIfId的密钥设置为有效

Key Extraction Interface

image
image
CryIf_KeyElementGet:提取指定cryIfKeyId及keyElementId的密钥值和长度

Key Copying Interface

image
CryIf_KeyElementCopy:将指定的keyElement的密钥复制到目标keyElement中

image
image
image
CryIf_KeyElementCopyPartial:将一个key element复制到另一个key element。keyElementOffsets和keyElementCopyLength允许将源key element的部分复制到目标key element中

image
image
CryIf_KeyCopy:将cryIfKeyId中的所有密钥拷贝到targetCryIfKeyId中

Key Generation Interface

image
CryIf_RandomSeed:该函数输入随机数生成的种子。

image
image
CryIf_KeyGenerate:该函数用来生成cryIfKeyId中的密钥。

Key Derivation Interface

image
image
CryIf_KeyDerive:将cryIfKeyId中的密钥派生给targetCryIfKeyId(密钥派生服务需要salt和password来派生新密钥)

Key Exchange Interface

image
image
CryIf_KeyExchangeCalcPubVal:计算密钥交换的public value

image
CryIf_KeyExchangeCalcSecret:计算密钥交换的共享密钥

Call-back notifications

CryIf_CallbackNotification

image
image
CryIf_CallbackNotification:Crypto Driver通知CryIf,该函数中会调用Csm_CallbackNotification并传递结果

Containers and configuration parameters

CryIf

image
CryIf需要配置CryIfGeneral,CryIfChannel,CryIfKey

CryIfGeneral

image
CryIfDevErrorDetect:是否启用开发错误检测

image
CryIfVersionInfoApi:是否使用CryIf_GetVersionInfo()函数

CryIfChannel

image
CryIfChannelId:crypto channel的ID

image
CryIfDriverObjectRef:配置关联的Crypto Driver Object

CryIfKey

image
CryIfKeyId:CryIf key的ID

image
CryIfKeyRef:配置关联的crypto driver key

相关推荐

  1. 学习笔记

    2024-03-27 17:42:01       29 阅读
  2. 学习笔记:机器学习

    2024-03-27 17:42:01       79 阅读
  3. 【OpenCV学习笔记】- 学习笔记目录

    2024-03-27 17:42:01       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 17:42:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 17:42:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 17:42:01       87 阅读
  4. Python语言-面向对象

    2024-03-27 17:42:01       96 阅读

热门阅读

  1. Qt智能指针--QScopedPointer

    2024-03-27 17:42:01       44 阅读
  2. windows抓hash抓明文

    2024-03-27 17:42:01       43 阅读
  3. 【数据结构】复杂度计算

    2024-03-27 17:42:01       41 阅读
  4. 浅析移动终端深度学习推理框架之MNN

    2024-03-27 17:42:01       33 阅读
  5. TypeScript实战使用技巧分享

    2024-03-27 17:42:01       37 阅读
  6. python-自动化测试- 多接口动态参数设计

    2024-03-27 17:42:01       39 阅读
  7. yolo_tracking项目val代码解析

    2024-03-27 17:42:01       38 阅读
  8. Z字形变换

    2024-03-27 17:42:01       40 阅读
  9. Tomcat启动后快速闪退解决方法

    2024-03-27 17:42:01       43 阅读