enclaveUnsealData 函数 (winenclaveapi.h)

将加密的二进制大型对象 (blob) 解密。

语法

HRESULT EnclaveUnsealData(
  [in]            const VOID       *ProtectedBlob,
  [in]            UINT32           ProtectedBlobSize,
  [out]           PVOID            DecryptedData,
  [in]            UINT32           BufferSize,
  [out]           UINT32           *DecryptedDataSize,
  [out, optional] ENCLAVE_IDENTITY *SealingIdentity,
  [out, optional] UINT32           *UnsealingFlags
);

参数

[in] ProtectedBlob

指向要解封的密封数据的指针。 此数据可以存储在 enclave 的地址范围或主机进程的地址空间中

[in] ProtectedBlobSize

要解封的密封数据的大小(以字节为单位)。

[out] DecryptedData

指向应放置未加密数据的缓冲区的指针。 此数据可以存储在 enclave 的地址范围内,也可以存储在主机进程的地址空间中。 如果此参数为 NULL,则仅计算解密数据的大小。

[in] BufferSize

DecryptedData 参数指向的缓冲区的大小(以字节为单位)。 如果 DecryptedDataNULLBufferSize 必须为零。 如果 DecryptedData 不是 NULL,并且解密数据的大小大于此值,则返回错误。

[out] DecryptedDataSize

指向变量的指针,该变量接收解密数据的实际大小(以字节为单位)。

[out, optional] SealingIdentity

指向缓冲区的可选指针,该缓冲区应填充用于密封数据的 enclave 的标识。 如果此指针为 NULL,则不返回密封 enclave 的标识。

[out, optional] UnsealingFlags

指向变量的可选指针,该变量接收描述加密二进制大型对象的零个或多个以下标志。

含义
ENCLAVE_UNSEAL_FLAG_STALE_KEY
1
数据已使用过时的密钥进行加密。 密封密钥在需要安全时轮换,并且系统只能维护固定数量的最近已知密钥。 确定数据已使用过时密钥加密的 enclave 应使用当前密钥重新加密数据,以最大程度地降低用于加密数据的密钥不再保留在密钥列表中的可能性。

返回值

如果此函数成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

调用 EnclaveUnsealData 的 enclave 必须满足与通过调用 EnclaveSealData 来密封数据的 enclave 指定的ENCLAVE_SEALING_IDENTITY_POLICY值对应的条件。

EnclaveUnsealData 必须从 enclave 内部调用,并且仅在具有 ENCLAVE_TYPE_VBS enclave 类型的 enclave 中受支持。

要求

要求
最低受支持的客户端 Windows 10版本 1709 [仅限桌面应用]
最低受支持的服务器 Windows Server 2016 [仅限桌面应用]
目标平台 Windows
标头 winenclaveapi.h
Library Vertdll.lib
DLL Vertdll.dll

另请参阅

Enclave 函数

ENCLAVE_SEALING_IDENTITY_POLICY

EnclaveSealData

VBS enclave 中可用的 Vertdll API