BCryptVerifySignature 函数验证指定的签名是否与指定的哈希匹配。
语法
NTSTATUS BCryptVerifySignature(
  [in]           BCRYPT_KEY_HANDLE hKey,
  [in, optional] VOID              *pPaddingInfo,
  [in]           PUCHAR            pbHash,
  [in]           ULONG             cbHash,
  [in]           PUCHAR            pbSignature,
  [in]           ULONG             cbSignature,
  [in]           ULONG             dwFlags
);
参数
[in] hKey
用于解密签名的密钥句柄。 这必须是用于使用 BCryptSignHash 函数对数据进行签名的密钥对的相同键或公钥部分。
[in, optional] pPaddingInfo
指向包含填充信息的结构的指针。 此参数指向的结构的实际类型取决于 dwFlags 参数的值。 此参数仅用于非对称密钥,否则必须为 NULL 其他参数。
              pPaddingInfo 必须为 NULL LMS 和 XMSS,因为生成密钥和输入以外的签名不需要其他信息。
[in] pbHash
包含数据的哈希的缓冲区的地址。 cbHash 参数包含此缓冲区的大小。
[in] cbHash
pbHash 缓冲区的大小(以字节为单位)。
[in] pbSignature
包含数据的有符号哈希的缓冲区的地址。 BCryptSignHash 函数用于创建签名。 cbSignature 参数包含此缓冲区的大小。
[in] cbSignature
pbSignature 缓冲区的大小(以字节为单位)。 BCryptSignHash 函数用于创建签名。
[in] dwFlags
一组标志,用于修改此函数的行为。 允许的标志集取决于 hKey 参数指定的键类型。
对于 LMS 和 XMSS,dwFlags 必须为零,因为生成密钥和输入以外的签名不需要其他信息。
如果密钥是对称密钥,则不使用此参数,应为零。
如果密钥是非对称密钥,则可以是以下值之一:
| 价值 | 含义 | 
|---|---|
| BCRYPT_PAD_PKCS1 | 创建签名时使用 PKCS1 填充方案。 pPaddingInfo 参数是指向BCRYPT_PKCS1_PADDING_INFO结构的指针。 | 
| BCRYPT_PAD_PQDSA | 将 PQ 填充方案用于 ML-DSA 或 SLH-DSA。 
              pPaddingInfo 参数是指向BCRYPT_PQDSA_PADDING_INFO结构的指针。 注意: 如果使用预哈希 ML-DSA 变体,则必须设置此设置。 | 
| BCRYPT_PAD_PSS | 创建签名时使用概率签名方案 (PSS) 填充方案。 pPaddingInfo 参数是指向BCRYPT_PSS_PADDING_INFO结构的指针。 | 
返回值
返回一个状态代码,指示函数的成功或失败。
可能的返回代码包括但不限于以下代码:
| 返回代码 | DESCRIPTION | 
|---|---|
| STATUS_SUCCESS | 函数成功。 | 
| STATUS_INVALID_SIGNATURE | 未验证签名。 | 
| NTE_NO_MEMORY | 发生内存分配失败。 | 
| STATUS_INVALID_PARAMETER | 提供的参数之一无效。 | 
| STATUS_INVALID_HANDLE | hKey 参数指定的密钥句柄无效。 | 
| STATUS_NOT_SUPPORTED | 用于创建 hKey 参数指定的密钥句柄的算法提供程序不是签名算法。 | 
注解
此函数使用提供的密钥计算签名,然后将计算的签名值与指定的签名值进行比较。
若要使用此函数,必须使用用于创建已签名哈希值的相同哈希算法对数据进行哈希处理。 如果适用,还必须指定创建签名时指定的相同填充方案。
对于 ML-DSA 和 SLH-DSA,pbHash 和 cbHash 不必是哈希值,并且可以是任意长度输入。
根据提供程序支持的处理器模式,可以从用户模式或内核模式调用 BCryptVerifySignature 。 内核模式调用方可以在 PASSIVE_LEVELIRQL 或 DISPATCH_LEVEL IRQL 上执行。 如果当前 IRQL 级别 DISPATCH_LEVEL,则 hKey 参数中提供的句柄必须派生自使用 BCRYPT_PROV_DISPATCH 标志打开的提供程序返回的算法句柄,并且传递给 BCryptVerifySignature 函数的任何指针都必须引用非分页(或锁定)内存。
若要在内核模式下调用此函数,请使用 Cng.lib,这是驱动程序开发工具包(DDK)的一部分。 
              Windows Server 2008 和 Windows Vista: 若要在内核模式下调用此函数,请使用 Ksecdd.lib。
要求
| 要求 | 价值 | 
|---|---|
| 最低支持的客户端 | Windows Vista [桌面应用 |UWP 应用] | 
| 支持的最低服务器 | Windows Server 2008 [桌面应用 |UWP 应用] | 
| 目标平台 | Windows操作系统 | 
| 标头 | bcrypt.h | 
| 图书馆 | Bcrypt.lib | 
| DLL | Bcrypt.dll |