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.mfbz.cn/a/473079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

206.翻转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3: 输入:head [] 输…

软件设计师:03 - 数据库系统

一、数据模型的分类 1.1、概念数据模型 1.2、结构数据模型 1.3 真题 二、三级模式 概念模式对应的是基本表,概念模式也称为模式 外模式对应的是视图,也称用户模式或者子模式 内模式对应的是数据库里面的存储文件,也称存储模式 真题 三、两级…

使用Dockerfile打包java项目生成镜像部署到Linux

1、Dockerfile 介绍 如果说容器就是“小板房”,镜像就是“样板间”。那么,要造出这个“样板间”,就必然要有一个“施工图纸”,由它来规定如何建造地基、铺设水电、开窗搭门等动作。这个“施工图纸”就是“Dockerfile”。 比起容…

探秘ChatGPT:智能聊天系统的真实面貌

最近,“ChatGPT”这款聊天机器人在网上广受追捧。 该软件被众多人誉为“时代的里程碑”、“科技领域的新冠军”,上次有如此形容的技术便是互联网。 微软创始人比尔盖茨对ChatGPT的描述是,你可能预想出五年后的形态,但是对于十年…

sqlalchemy和moke生成实体类(一)

前言 如果通过java生成实体类,可以通过mybatis或者mybatis-plus的generator。 而sqlalchemy也可以生成实体类,通过sqlalcodegen或者flask-sqlalcodegen。 使用flask-sqlalcodegen生成实体类 建表 建立学生表,如下。 create table stude…

redis关联和非关联

1.1.2.关联和非关联 传统数据库的表与表之间往往存在关联,例如外键: 而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合: {id: 1,name: "张三",orders: [{id: 1,ite…

基于Spring Boot+Vue的社区医院管理系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 一、研究背景 二…

BUUCTF-Misc11

[SWPU2019]神奇的二维码1 1.打开附件 2.扫码 提示这里没有flag 3.binwalk 把图片放在kali,用binwalk 发现;里面有好几个压缩包和一张图片 binwalk -e 分离的文件 得到以下内容 4.base64 点开总共有一个加密的图片,和一个加密的音频,还有一…

【算法】差分算法(空调)

可用于求一个数组要变为另一个数组最少要改变多少次的次数 Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。 有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。 Farmer John 的牛棚包含一排 N 个牛栏,编号为 1…N,每个牛栏里有一头…

(一)基于IDEA的JAVA基础3

通过之前的内容,我们在建好的文件夹下建一个java文件,我们来在IDEA中写一下之前用记事本写的helloworld,我们先看一下java代码的规范: 1.java程序文件名一定要有意义,首字母一定要大写。 2.class后面的名字:由大小写字母&#x…

Apipost数据模型上线,解决相似数据结构复用问题

在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。 为了解决这个问题&a…

【mac M3】idea删除不用或者失效的jdk

【mac M3】idea删除不用或者失效的jdk 不用(重复)或者失效的jdk如下: 重复或者已失效的JDK版本出现在下拉列表中不仅影响美观,也影响效率,删除jdk的步骤如下: 步骤1.点击File 步骤2.选择Project Structure…

运行jpsall脚本时报命令找不到

1、问题记录 2、解决 进入脚本文件排查问题 [rootnode01 ~]# vim /usr/local/bin/jpsall 错误原因:第四行本来是注释,没有加#,所以总是报这个命令没找到,上一次出现这个问题是因为user打错了,所以一定要细心检查 #…

MySQL - 单表访问

单表访问 查询方式 MySQL查询的执行方式大致分为下边两种: 使用全表扫描进行查询 这种执行方式很好理解,就是把表的每一行记录都扫一遍嘛,把符合搜索条件的记录加入到结果集就完了。不管是啥查询都可以使用这种方式执行,当然&am…

基于springboot+vue的交通管理在线服务系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

代码随想录算法训练营Day52 ||leetCode 300.最长递增子序列 || 674. 最长连续递增序列 || 718. 最长重复子数组

300.最长递增子序列 class Solution { public:int lengthOfLIS(vector<int>& nums) {if (nums.size() < 1) return nums.size();vector<int> dp(nums.size(), 1);int result 0;for (int i 1; i < nums.size(); i) {for (int j 0; j < i; j) {if (…

Jmeter的自动化测试实施方案

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 Jmeter是目前最流行的一种测试工具&#xff0c;基于此…

JUnit5的条件测试、嵌套测试、重复测试

条件测试 JUnit5支持条件注解&#xff0c;根据布尔值判断是否执行测试。 自定义条件 EnabledIf和DisabledIf注解用来设置自定义条件&#xff0c;示例&#xff1a; Test EnabledIf("customCondition") void enabled() { // ... } Test DisabledIf("cust…

【干货详解】全网最全白盒测试攻略大全

白盒测试&#xff08;White Box Testing&#xff09;又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程&#xff0c;而不测试软件产品的功能&#xff0c;用于纠正软件系统在描述、表示和规格上的错误&#xff0c;是进一步测…

Docker常用命令练习

文章目录 Docker常用命令练习1.docker 基础命令2.镜像命令3.保存镜像4.加载镜像5.容器命令6.环境变量7. --rm8. --networkhost Docker常用命令练习 1.docker 基础命令 安装docker yum install docker启动docker systemctl start docker关闭docker systemctl stop docker重…
最新文章