Autosar Crypto Driver学习笔记(二)

文章目录

    • Crypto Driver
      • Function definitions
        • General API
          • Crypto_Init
          • Crypto_GetVersionInfo
        • Job Processing Interface
          • Crypto_ProcessJob
        • Job Cancellation Interface
        • Key Management Interface
          • Key Setting Interface密钥设置接口
            • Crypto_KeyElementSet
            • Crypto_KeySetValid
          • Key Extraction Interface密钥提取接口
            • Crypto_KeyElementGet
          • Key Copying Interface密钥拷贝接口
            • Crypto_KeyElementCopy
            • Crypto_KeyElementCopyPartial
            • Crypto_KeyCopy
            • Crypto_KeyElementIdsGet
          • Key Generation Interface密钥生成接口
            • Crypto_RandomSeed
            • Crypto_KeyGenerate
          • Key Derivation Interface密钥派生接口
            • Crypto_KeyDerive
          • Key Exchange Interface密钥交换接口
            • Crypto_KeyExchangeCalcPubVal
            • Crypto_KeyExchangeCalcSecret
      • Scheduled functions
        • Crypto_MainFunction
      • Containers and configuration parameters
        • Crypto
        • CryptoGeneral
        • CryptoDriverObjects
        • CryptoDriverObject
        • CryptoKeys
        • CryptoKey
        • CryptoKeyElements
        • CryptoKeyElement
        • CryptoKeyTypes
        • CryptoKeyType
        • CryptoPrimitives
        • CryptoPrimitive
        • CryptoPrimitiveService

Crypto Driver

Function definitions

介绍了Autosar标准定义的函数

General API
Crypto_Init

image-20240304212832258
初始化Crypto Driver

Crypto_GetVersionInfo

image-20240304213041820
读取Crypto Driver版本

Job Processing Interface
Crypto_ProcessJob

image-20240304213128507
image-20240304213138021
如果模块未初始化,并且启用了Crypto Driver的开发错误检测,则函数Crypto_ProcessJob将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK

如果参数objectId超出范围,并且启用了Crypto Driver的开发错误检测,则该函数Crypto_ProcessJob将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK。

如果参数job是空指针,并且启用了Crypto Driver的开发错误检测,则函数Crypto_ProcessJob将向DET报告CRYPTO_E_PARAM_POINTER并返回E_NOT_OK。

如果加密驱动对象不支持参数job->jobPrimitiveInfo->primitiveInfo-service,并且启用了Crypto Driver的开发错误检测,则函数Crypto_ProcessJob将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK

如果参数job->jobPrimitiveInfo->primitiveInfo->service is set to CRYPTO_KEYSETVALID, CRYPTO_RANDOMSEED, CRYPTO_KEYGENERATE, CRYPTO_KEYDERIVE, CRYPTO_KEYEXCHANGECALCPUBVAL or CRYPTO_KEYEXCHANGECALCSECRET,则参数 job->cryptoKeyId必须在范围内,否则 Crypto_ProcessJob报告CRYPTO_E_PARAM_HANDLE to DET并返回E_NOT_OK

如果参数r job->jobPrimitiveInfo->primitiveInfo->service is set to CRYPTO_KEYDERIVE,则参数job->cryptoTargetKeyId必须在范围内,否则 Crypto_ProcessJob报告CRYPTO_E_PARAM_HANDLE to DET并返回E_NOT_OK

如果 job->jobPrimitiveInfo->primitiveInfo- >service is set to CRYPTO_HASH or CRYPTO_MACGENERATE,则需要输入参数job->jobPrimitiveInfo->primitiveInfo->resultLength,如果job的result length小于所选算法的result length,则将结果的最高有效位截断为配置的result length

如果参数job->jobPrimitiveInfo->primitiveInfo->algorithm不被Crypto Driver支持,且开启了开发错误检测,则Crypto_ProcessJob需要报告CRYPTO_E_PARAM_HANDLE to the DET且返回 E_NOT_OK.

根据job->jobPrimitiveInfo-> primitiveInfo->service中配置的加密服务,需要将job->jobPrimitiveInput的不同参数设置为有效值。SWS_Crypto_00071中的表指定了服务在不同模式下需要或可选的参数

如果需要一个指向缓冲区的指针作为参数,但它是一个空指针,如果启用了加密驱动程序的开发错误检测,则Crypto_ProcessJob()函数将向DET报告CRYPTO_E_PARAM_POINTER且返回E_NOT_OK

如果处理服务请求需要长度信息(作为变量或指针),但指示的长度值为零,并且如果启用了Crypto Driver的开发错误检测,则Crypto_ProcessJob()函数会报告CRYPTO_E_PARAM_VALUE给DET并返回E_NOT_OK。

image-20240305204549451
*:服务名称来源于Crypto_ServiceInfoType (job struct的一部分)

**:在输入重定向的情况下,使用相应的 key element作为输入,而不是使用inputBuffer。

***:在输出重定向的情况下,使用相应的 key element作为输出,而不是outputBuffer

S:Start模式下需要的成员。

U: Update模式下需要的成员。

F:Finish模式所需成员。

G:Finish模式下的可选成员。

CRYPTO_HASH和CRYPTO_RANDOMGENERATE外,在Crypto_ServiceInfoType中列出的所有加密服务都需要一个密钥表示为密钥标识符

在下表中列出了作业的不同输入和输出缓冲区的内容。jobPrimitiveInputOutputType指定:

image-20240305205104737
*:服务名称来源于Crypto_ServiceInfoType。

**:在输入重定向的情况下,使用相应的 key element作为输入,而不是使用inputBuffer。

***:在输出重定向的情况下,使用相应的 key element作为输出,而不是 outputbuffer

如果crypto primitive需要输入数据,则其内存位置由指针job->jobPrimitiveInput.inputPtr引用。在调用Crypto_ProcessJob时,该数据的长度存储在job-> jobPrimitiveInput.inputLength中。

如果输入被重定向到一个key element,则必须使用相应key element的输入缓冲区。

如果 crypto primitive需要为结果提供缓冲区,则其内存位置由指针job->jobPrimitiveInput.outputPtr引用。在调用这个函数时,job->jobPrimitiveInput.outputLengthPtr应该包含相关缓冲区的大小。当请求完成时,将存储返回值的实际长度

如果输出被重定向到一个key element,则必须使用相应key element的输出缓冲区。

如果选择了随机生成器服务和对应的熵,则函数返回CRYPTO_E_ENTROPY_EXHAUSTED。函数Crypto_ProcessJob应该另外报告运行时错误CRYPTO_E_RE_ENTROPY_EXHAUSTED。

Job Cancellation Interface

image-20240305210213652
该接口从队列中删除提供的作业,并在可能的情况下取消对该作业的处理。

Key Management Interface

注意:如果要修改的实际key element直接映射到flash,那么在调用key管理函数时可能会有更大的延迟(同步操作)

如果底层加密硬件不允许在处理作业的同时执行密钥管理功能,则密钥管理功能应等待当前作业执行,然后开始处理密钥管理功能

注意:必须确保作业的处理速度足够快,以避免密钥管理功能必须等待很长时间。

还建议对作业使用CRYPTO_OPERATIONMODE_SINGLECALL

Key Setting Interface密钥设置接口
Crypto_KeyElementSet

加密驱动程序仅在以下情况下执行此操作

CryptoKeyElement/CryptoKeyElementWriteAccess设置为

CRYPTO_WA_ALLOWEDCRYPTO_WA_ENCRYPTED

注意:如果key元素引用了SHE-key,建议设置

CryptoKeyElementWriteAccess to CRYPTO_WA_ENCRYPTED。密钥本身必须以M1M2M3格式的she密钥提供。

image-20240305210847839
image-20240305210856004
cryptoKeyId:保存要设置key id(包含对应的key element)

keyElement Id :保存要设置的key element的id

keyPtr:key数据指针

keyLength:key element长度

注意:此服务以同步方式工作。然而,key material 有可能驻留在 flash memory中。因此,执行这个函数可能需要一些时间

如果尚未初始化Crypto Driver,并且启用了加密驱动程序的开发错误检测,则该函数

Crypto_KeyElementSet将向DET报告CRYPTO_E_UNINIT并返回

E_NOT_OK。

如果cryptoKeyId超出范围,并且启用了加密驱动程序的开发错误检测,则Crypto_KeyElementSet函数将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK

如果参数keyElementId超出范围,并且启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyElementSet将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK。

如果参数keyPtr是空指针,并且启用了加密驱动程序的开发错误检测,则该函数

Crypto_KeyElementSet将向DET报告CRYPTO_E_PARAM_POINTER并返回E_NOT_OK。

如果keyLength为零,并且启用了加密驱动程序的开发错误检测,则函数Crypto_KeyElementSet将向DET报告CRYPTO_E_PARAM_VALUE并返回E_NOT_OK。

Crypto_KeySetValid

image-20240305211606904
将由cryptoKeyId标识的密钥的密钥状态设置为有效

如果模块尚未初始化并且启用了加密驱动程序的开发错误检测,则函数Crypto_KeySetValid将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK。

如果cryptoKeyId超出范围,并且启用了加密驱动程序的开发错误检测,则Crypto_KeyElementSet函数将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK

如果Crypto Driver没有检测到错误,服务Crypto_KeySetValid()将密钥cryptoKeyId设置为“valid”

Key Extraction Interface密钥提取接口
Crypto_KeyElementGet

加密驱动程序仅在以下情况下执行此操作

CryptoKeyElement/CryptoKeyElementReadAccess设置为

CRYPTO_RA_ALLOWEDCRYPTO_RA_ENCRYPTED

注意:从SHE硬件读取密钥是不可能的,除非它是SHE RAMKey。在本例中,读取SHEKey将提供M1M2M3。在本例中,密钥元素应该设置为CRYPTO_RA_ENCRYPTED

image-20240305211956526
image-20240305212004511
如果函数Crypto_KeyElementGet返回CRYPTO_E_KEY_NOT_AVAILABLE,则该函数应另外报告运行时错误CRYPTO_E_RE_KEY_NOT_AVAILABLE

如果函数Crypto_KeyElementGet返回CRYPTO_E_KEY_READ_FAIL,函数将额外报告运行时错误CRYPTO_E_RE_KEY_READ_FAIL

如果模块尚未初始化,并且启用了加密驱动程序的开发错误检测,则函数Crypto_KeyElementGet将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK

如果cryptoKeyId超出范围,并且启用了加密驱动程序的开发错误检测,则Crypto_KeyElementGet函数将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK

如果参数keyElementId超出范围,并且启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyElementGet将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK。

如果resultPtr参数为空指针,并且启用了加密驱动程序的开发错误检测,则该函数

Crypto_KeyElementGet将向DET报告CRYPTO_E_PARAM_POINTER并返回E_NOT_OK。

如果参数resultLengthPtr为空指针,并且启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyElementGet将向DET报告CRYPTO_E_PARAM_POINTER并返回E_NOT_OK

如果该值(由resultLengthPtr指向)为零,并且启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyElementGet将向DET报告CRYPTO_E_PARAM_VALUE并返回E_NOT_OK

如果Crypto Driver没有检测到错误,服务Crypto_KeyElementGet()将检索key element的值并将其存储在由resultPtr指向的缓冲区中。

指针resultPtr保存着存放键元素数据的内存位置。在调用这个函数时,resultLengthPtr应该包含resultPtr提供的缓冲区的大小。当请求完成时,将存储返回值的实际长度。

Key Copying Interface密钥拷贝接口
Crypto_KeyElementCopy

image-20240305212508005
image-20240305212516932
将key element复制到同一加密驱动程序中的另一个key element。注意:如果实际的key element直接映射到flash,调用此函数(同步操作)时可能会有更大的延迟。

Crypto_KeyElementCopyPartial

image-20240305212710083
image-20240305213640477
将key element复制到同一加密驱动程序中的另一个key element.

keyElementSourceOffset和keyElementCopyLength允许将源key element的一部分复制到目标中。目标key的偏移量也可以用这个函数指定

注意:如果实际的key element直接映射到闪存,调用此函数(同步操作)时可能会有更大的延迟。

如果尚未初始化加密驱动程序,并且启用了加密驱动程序的开发错误检测,则该函数

Crypto_KeyElementCopyPartial将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK。

如果cryptoKeyId, keyElementId, targetKeyElementId或targetCryptoKeyId超出范围,并且如果启用了加密驱动程序的开发错误检测,则该函数将Crypto_KeyElementCopyPartial报告CRYPTO_E_PARAM_HANDLE给DET并返回E_NOT_OK。

如果使用keyElementId指定的密钥元素的总长度小于keyElementSourceOffset + keyElementCopyLength,则Crypto_KeyElementCopyPartial将返回

CRYPTO_E_KEY_SIZE_MISMATCH

如果targetCryptoKeyId引用的key的targetKeyElementId指定的key element的最大可用缓冲区小于keyElementTargetOffset + keyElementCopyLength,则函数Crypto_KeyElementCopyPartial返回
CRYPTO_E_KEY_SIZE_MISMATCH

如果加密驱动程序未检测到错误,则函数

Crypto_KeyElementCopyPartial将keyElementSourceOffset偏移量和keyElementCopyLength指定长度的keyelemententid所引用的key element的一部分复制到targetCryptoKeyId所引用的key的targetKeyElementId所引用的key element。

如果目标key element的当前长度大于或等于(keyElementTargetOffset + keyElementCopyLength),则key element的长度保持不变

如果目标key element的当前长度小于

(keyElementTargetOffset + keyElementCopyLength)且key element的最大长度大于或等于(keyElementTargetOffset + keyElementCopyLength),则将源数据复制到目标key element中,并将长度设置为(keyElementTargetOffset + keyElementCopyLength)。

Crypto_KeyCopy

image-20240306205801436
image-20240306205809671

将密钥及其所有元素复制到同一加密驱动程序中的另一个密钥。注意:如果实际的key element直接映射到闪存,调用此函数(同步操作)时可能会有更大的延迟。

如果尚未初始化加密驱动程序,并且启用了加密驱动程序的开发错误检测,则函数Crypto_KeyCopy将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK

如果cryptoKeyId超出范围,并且启用了加密驱动程序的开发错误检测,则Crypto_KeyCopy函数将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK

如果targetCryptoKeyId超出范围,并且启用了加密驱动程序的开发错误检测,则函数Crypto_KeyCopy应向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK

如果 Crypto Driver没有检测到错误,则该函数应将cryptoKeyId引用的密钥中的所有key elements复制到targetCryptoKeyId引用的密钥中。

Crypto_KeyElementIdsGet

image-20240306212029922
如果加密驱动程序尚未初始化,并且加密驱动程序的开发错误检测已启用,则该函数

Crypto_KeyElementIdsGet将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK

如果cryptoKeyId超出范围,并且如果启用了加密驱动程序的开发错误检测,则该功能

Crypto_KeyElementIdsGet将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK。

如果加密驱动程序没有检测到错误,则该函数将由cryptoKeyId标识的密钥中可用的 key elements的所有id存储到keyElementIdsPtr提供的数组中。它还将elements的数量存储到由keyElementIdsLengthPtr指向的值

注意:当CRYIF应该将整个密钥从一个Crypto Driver复制到另一个Crypto Driver时,CRYIF需要此函数。

Key Generation Interface密钥生成接口
Crypto_RandomSeed

image-20240306212806508
如果模块尚未初始化,并且启用了加密驱动程序的开发错误检测,则函数Crypto_RandomSeed将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK。

如果参数cryptoKeyId超出范围,并且如果启用了加密驱动程序的开发错误检测,则该函数Crypto_RandomSeed将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK。

如果参数seedPtr为空指针,并且启用了加密驱动程序的开发错误检测,则该函数

Crypto_RandomSeed将向DET报告CRYPTO_E_PARAM_POINTER并返回E_NOT_OK。

如果seedLength为零,并且启用了加密驱动程序的开发错误检测,则将报告Crypto_RandomSeed函数将CRYPTO_E_PARAM_VALUE转换为DET并返回E_NOT_OK

如果Crypto Driver没有检测到错误,服务Crypto_RandomSeed()将使用从熵源派生的种子状态提供给定的密钥。随机数生成器的内部状态存储在key元素中

CRYPTO_KE_RANDOM_SEED

Crypto_KeyGenerate

image-20240307205143041
如果模块尚未初始化,并且启用了加密驱动程序的开发错误检测,则函数Crypto_KeyGenerate将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK

如果参数cryptoKeyId超出范围,并且启用了加密驱动程序的开发错误检测,则返回该函数Crypto_KeyGenerate将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK。

如果加密驱动程序未检测到错误,则该服务Crypto_KeyGenerate()生成相应的密钥。

Key Derivation Interface密钥派生接口
Crypto_KeyDerive

image-20240307205411144
如果模块尚未初始化,并且启用了加密驱动程序的开发错误检测,则函数crypto_keyderived应向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK。

如果参数cryptoKeyId超出范围,并且如果启用了加密驱动程序的开发错误检测,则该函数crypto_keyderived将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK。

如果参数targetCryptoKeyId超出范围,并且启用了加密驱动程序的开发错误检测,则该函数crypto_keyderived将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK

如果加密驱动程序未检测到任何错误,则服务crypto_keyderived()通过salt和password派生一个 key element

密钥派生服务需要salt和password来派生新密钥。因此,salt和password作为key element在由cryptoKeyId引用的密钥中。

Key Exchange Interface密钥交换接口
Crypto_KeyExchangeCalcPubVal

image-20240307205928327
image-20240307205935898
如果模块尚未初始化并且启用了加密驱动程序的开发错误检测:函数Crypto_KeyExchangeCalcPubVal将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK。

如果参数cryptoKeyId超出范围,并且如果启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyExchangeCalcPubVal将向DET报告CRYPTO_E_PARAM_HANDLE并返回E_NOT_OK

如果参数publicValuePtr是空指针,并且启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyExchangeCalcPubVal将向DET报告CRYPTO_E_PARAM_POINTER并返回E_NOT_OK

如果参数pubValueLengthPtr是空指针,并且如果启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyExchangeCalcPubVal将向DET报告CRYPTO_E_PARAM_POINTER并返回E_NOT_OK。

如果由pubValueLengthPtr指向的值为零,并且如果启用了加密驱动程序的开发错误检测,则该函数将Crypto_KeyExchangeCalcPubVal报告CRYPTO_E_PARAM_VALUE给DET并返回E_NOT_OK

如果Crypto Driver没有检测到错误,服务Crypto_KeyExchangeCalcPubVal()计算当前作业的密钥交换的公共值

指针publicValuePtr保存着存放公共值数据的内存位置。在调用这个函数时,publicValueLengthPtr应该包含由publicValuePtr提供的缓冲区的大小。当请求完成时,将存储返回值的实际长度。

Crypto_KeyExchangeCalcSecret

image-20240307210447405
image-20240307211014799

如果模块尚未初始化,并且启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyExchangeCalcSecret将向DET报告CRYPTO_E_UNINIT并返回E_NOT_OK

如果参数cryptoKeyId超出范围,并且启用了加密驱动程序的开发错误检测,则返回该函数将Crypto_KeyExchangeCalcSecret报告CRYPTO_E_PARAM_HANDLE给DET并返回E_NOT_OK

如果参数partnerPublicValuePtr是空指针,并且如果启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyExchangeCalcSecret将向DET报告CRYPTO_E_PARAM_POINTER并返回E_NOT_OK。。

如果partnerPublicValueLength为零,并且启用了加密驱动程序的开发错误检测,则该函数Crypto_KeyExchangeCalcSecret将向DET报告CRYPTO_E_PARAM_VALUE并返回E_NOT_OK。

如果Crypto未检测到错误,则服务Crypto_KeyExchangeCalcSecret()计算密钥交换的共享密钥,并将其作为密钥元素存储在cryptoKeyId中

Scheduled functions

Crypto_MainFunction

Crypto_MainFunction()对于异步作业处理是必需的。对于同步作业处理,提供main函数是可选的
image-20240307211354743

Containers and configuration parameters

以下章节总结了所有配置参数。

注意:配置容器中的id必须是连续的,无间隙的,且必须从零开始

Crypto

image-20240307213529960
Crypto配置至少包括CryptoGeneralCryptoDriverObjects。一般还包括CryptoKeyElements(配置key中的参数),CryptoKeyTypes(关联一个或多个KeyElement),CryptoKeys(包含KeyType和KeyId),CryptoPrimitives(配置具体的安全算法)

CryptoGeneral

image-20240309204214414
CryptoDevErrorDetect:启用开发错误检测
image-20240309204523692

CryptoInstanceId:crypto driver的实例ID。此ID用于识别多个crypto driver,以防在同一ECU中使用多个driver。
image-20240309204657110
image-20240309204707612

CryptoMainFunctionPeriod:配置Crypto_MainFunction周期
image-20240309204805485

CryptoVersionInfoApi:配置是否使用版本读取函数Crypto_GetVersionInfo().
image-20240309204913985
CryptoEcucPartitionRef:将 Crypto driver映射到零或多个ECUC分区,以使该分区中的模块API可用。该模块将作为每个分区中的独立实例运行
image-20240309205014337

CryptoDriverObjects

image-20240309205221099
配置一个或多个CRYPTO Object
image-20240309205244348

CryptoDriverObject

image-20240309205341301
image-20240309205349515
CryptoDriverObjectId:配置Crypto Driver Object的ID,Crypto Driver Object关联不同的crypto primitives
image-20240309205631008
CryptoQueueSize:Crypto Driver中队列的大小。定义Crypto Driver Object队列中的最大作业数。如果设置为0,则在Crypto Driver Object中禁用排队
image-20240309205730962
CryptoDefaultRandomKeyRef:通过关联CryptoDefaultRandomPrimitiveRef实现对CryptoKey的引用。该key包含为随机数生成器提供种子所需的key elements。只有当被CryptoDefaultRandomPrimitiveRef引用的原语需要一个种子值时,才需要设置该元素。
image-20240309210321444
image-20240309210329226
CryptoDefaultRandomPrimitiveRef:这是对配置默认随机数生成器的原语的引用。如果crypto driver object需要执行需要随机数生成器的加密原语,但该原语的配置没有为随机数生成器提供参数,则应使用此默认随机数生成器

示例:加密驱动程序需要基于椭圆曲线生成签名,但是生成签名的原语缺少随机数生成器的信息。
image-20240309210638103
CryptoDriverObjectEcucPartitionRef:将crypto driver object映射到零个或多个ECUC分区。引用的ECUC分区是 Crypto driver映射到的ECUC分区的子集

注意:像HSM这样的CryptoDriverObjects只能映射到一个分区
image-20240309210737233
CryptoPrimitiveRef:crypto driver object关联的CryptoPrimitive,也就是对应的安全算法

CryptoKeys

image-20240309210934434
CryptoKeys包含多个CryptoKey

CryptoKey

image-20240309211031286
CryptoKeyId:CRYPTO Key的id
image-20240309211055314
CryptoKeyTypeRef:关联CryptoKeyType。CryptoKeyType将关联key elements

CryptoKeyElements

image-20240309211506141
CryptoKeyElements包含一个或多个CryptoKeyElement
image-20240309211956244

CryptoKeyElement

image-20240309212020606
CryptoKeyElementAllowPartialAccess:启用或禁用数据小于元素大小的 key element的写入和读取。
image-20240309212600549
CryptoKeyElementFormat:定义key element的格式。这是用于从驱动程序中提供或提取key data的格式。
image-20240309212759808
image-20240309212808858
CryptoKeyElementId:配置CRYPTO key element的id
image-20240309212837156
CryptoKeyElementInitValue:该值将用于在启动期间填充key element
(i)对于所有非持久性关键元素,以及

(ii)对于那些从未被写入的持久性关键元素
image-20240309213120692
CryptoKeyElementPersist:启用或禁用在非易失性存储中持久化关键元素。

True:启用关键元素的持久化。

False:禁用key元素的持久化。
image-20240309213218185
image-20240309213224525
CryptoKeyElementReadAccess:配置KeyElement的Read权限

CRYPTO_RA_DENIED = key element不能从Crypto Driver外部读取

CRYPTO_RA INTERNAL_COPY = key element可以复制到同一Crypto Driver中的另一个key element。

CRYPTO_RA_ALLOWED = key element可以作为明文读取

CRYPTO_RA_ENCRYPTED = key element可以被加密读取。例如:SHE Ram-Key导出。
image-20240309213556238
CryptoKeyElementSize:配置KeyElement的大小,byte为单位
image-20240309213628310
image-20240309213636037
CryptoKeyElementWriteAccess:配置KeyElement的写入访问权限

CRYPTO_WA_DENIED = key element不能从Crypto Driver外部写入

CRYPTO_WA INTERNAL_COPY = key element可以用同一Crypto Driver中的另一个key element填充。

CRYPTO_WA_ALLOWED = key element可以重写为明文

CRYPTO_WA_ENCRYPTED = key element可以加密写入。例如:SHE载入钥匙

CryptoKeyTypes

image-20240309213835930
CryptoKeyTypes包含一个或多个CryptoKeyType

CryptoKeyType

image-20240309213920659
CryptoKeyElementRef:CryptoKeyType关联Key Element,可以关联一个或多个KeyElement

CryptoPrimitives

image-20240309214447330
CryptoPrimitives包含CryptoPrimitive
image-20240309214458322

CryptoPrimitive

image-20240309214554872
image-20240309215333043
CryptoPrimitiveAlgorithmFamily:确定用于加密服务的算法Family
image-20240309215534328
image-20240309215542292
CryptoPrimitiveAlgorithmMode:配置加密算法的模式
image-20240309220120148
image-20240309220128780
CryptoPrimitiveAlgorithmSecondaryFamily:确定用于加密服务的第二算法Family

CryptoPrimitiveService

image-20240309220209667
CryptoPrimitiveService:确定加密服务的功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ集群部署

集群部署 我们看看如何安装RabbitMQ的集群。 1.集群分类 在RabbitMQ的官方文档中,讲述了两种集群的配置方式: 普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同…

2024年高压电工证模拟考试题库及高压电工理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年高压电工证模拟考试题库及高压电工理论考试试题是由安全生产模拟考试一点通提供,高压电工证模拟考试题库是根据高压电工最新版教材,高压电工大纲整理而成(含2024年高压电工证…

【Leetcode每日一题】 递归 - Pow(x, n)(难度⭐⭐)(40)

1. 题目解析 题目链接:50. Pow(x, n) 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 在这个算法中,递归函数的任务是求出 x 的 n 次方。那么,这个函数是怎么工作的呢?它…

es 集群核心概念以及实践

节点概念: 节点是一个Elasticsearch的实例 本质上就是一个JAVA进程一台机器上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例 每一个节点都有名字,通过配置文件配置,或者启动时候 -…

软件工程-第5章 结构化设计

5.1 总体设计的目标及其表示方法 5.2 总体设计 变换设计基本步骤: 第1步:设计准备--复审并精华系统模型; 第2步:确定输入、变换、输出这三部分之间的边界; 第3步:第一级分解--系统模块结构图顶层和第一层…

产品软文怎么写?媒介盒子分享公式

软文写出来的目的除了提高品牌知名度外,还需要推广产品,当企业新品上市、推广产品以及营销产品的时候,就需要产品类软文出手。然而产品软文想要写好还需要一定的技巧,今天媒介盒子就来和大家分享:产品软文写作公式。 一…

把txt、pdf等文件转为一行一行的doccano数据集输入格式

文章目录 doccano 数据集导入简介代码实现代码运行结果代码公开 doccano 数据集导入 在Doccano 导入数据集时,使用TextLine的文件格式,导入的文件需要为一行一行文本的数据格式,每一行文本在导入Doccano后就是一条数据。 简介 主要工作说明…

[linux]--关于进程概念(下)

目录 孤儿进程 环境变量 将程序放到PATH路径下 设置PATH环境变量 设置别名 环境变量相关的命令 环境变量的组织方式​编辑 通过系统调用获取环境变量 环境变量通常是具有全局属性的 进程优先级 查看系统进程 用top命令更改已存在进程的nice: 程序地址空…

(附源码)基于SSM的校园兼职系统设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

uniapp ios证书失效

前面是按照网上查找的方法 作者大大的地址 1、一个ios账户(688付费版) 2、登录 Apple Developer 3、创建Identifiers ps:创建时需继承苹果的sdk,只需要一个就行 点击continue再点击Register即可 4、创建.cer证书 &…

tcp seq ack

seq(Sequence Number):32bits,表示这个tcp包的序列号。tcp协议拼凑接收到的数据包时,根据seq来确定顺序,并且能够确定是否有数据包丢失。 ack(Acknowledgment Number):3…

安卓开发日记:实现APP重启逻辑,适用于热更后重启游戏进行加载

可根据合适的弹窗搭配使用重启逻辑,建议使用在热更包加载后使用,帮助部分热更后未及时生效的逻辑范围首先,在逻辑调用Activity类中创建一个成员变量,给后续逻辑接口直接使用 如下 public class MainActivity extends Activity {…

想当初级爬虫工程师,需要把爬虫学到什么程度?

这篇文章会说说我自己的心得体验,关于爬虫、关于工作,仅供参考。 学到哪种程度 暂且把目标定位初级爬虫工程师,简单列一下吧: (必要部分) 语言选择:一般是了解Python、Java、Golang之一 熟悉…

SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

Vue2在一个页面内动态切换菜单显示对应的路由组件

项目的需求是在一个页面内动态获取导航菜单,导航菜单切换的时候显示对应的路由页面,类似于tab切换的形式,切换的导航菜单和页面左侧导航菜单是同一个路由组件,只是放到了一个页面上,显示的个数不同,所有是动…

基于Python的Django开发接口框架搭建

1、安装Django,如图1 命令行执行:pip install django 2、创建Django项目,如图2 django-admin startproject imooc 3、创建Django的应用项目,如图3 必须进入项目文件下执行命令: python3 manage.py startapp app 4、…

Python基础学习笔记(一)

Python简介 Python 语言是一种跨平台、开源、免费、解释型、面向对象、动态数据类型的高级程序设计语言。早期版本的 Python 被称作是 Python1;Python2 最后一个版本是 2.7;Python3 是目前最活跃的版 本,基本上新开发的 Python 代码都会支持…

线程池实现“线程复用”的原理

线程池实现“线程复用”的原理 学习线程复用的原理,以及对线程池的 execute 这个非常重要的方法进行源码解析。 线程复用原理 我们知道线程池会使用固定数量或可变数量的线程来执行任务,但无论是固定数量或可变数量的线程,其线程数量都远远…

27-4 文件上传漏洞 - 黑名单绕过

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、黑名单绕过和黑白名单机制: 黑名单:黑名单中的文件不允许通过。白名单:白名单中的文件允许通过。二、黑白名单判断: 当输入一串后缀如"sfahkfhakj"时,黑名单不…

2024/03/21(网络编程·day7)

一、思维导图 二、 //定义删除函数 int do_delete(sqlite3 *ppDb) {int del_numb0;printf("请输入要删除的学生的学号:");scanf("%d",&del_numb);getchar();//准备sql语句char sql[128]"select *from Stu";sprintf(sql,"delete from …