BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO 结构 (bcrypt.h)

BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO 结构与 BCryptEncrypt 和BCryptDecrypt 函数一起使用,以包含与经过身份验证的密码模式相关的其他信息。

语法

typedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO {
  ULONG     cbSize;
  ULONG     dwInfoVersion;
  PUCHAR    pbNonce;
  ULONG     cbNonce;
  PUCHAR    pbAuthData;
  ULONG     cbAuthData;
  PUCHAR    pbTag;
  ULONG     cbTag;
  PUCHAR    pbMacContext;
  ULONG     cbMacContext;
  ULONG     cbAAD;
  ULONGLONG cbData;
  ULONG     dwFlags;
} BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO, *PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO;

成员

cbSize

此结构的大小(以字节为单位)。 请勿直接设置此字段。 请改用 BCRYPT_INIT_AUTH_MODE_INFO 宏。

dwInfoVersion

结构的版本号。 唯一支持的值是 BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO_VERSION。 请勿直接设置此字段。 请改用 BCRYPT_INIT_AUTH_MODE_INFO 宏。

pbNonce

指向包含 nonce 的缓冲区的指针。 高级加密标准 (AES) 的 Microsoft 算法提供程序需要 CBC-MAC (CCM) 和 Galois/Counter Mode (GCM) 链接模式的计数器的 nonce,如果没有,则返回错误。 如果未使用 nonce,则必须将此成员设置为 NULL

cbNonce

pbNonce 成员指向的缓冲区的大小(以字节为单位)。 如果未使用 nonce,则必须将此成员设置为零。

pbAuthData

指向包含经过身份验证的数据的缓冲区的指针。 这是将包含在 消息身份验证代码 (MAC) 但未加密的数据。 如果没有经过身份验证的数据,则必须将此成员设置为 NULL

cbAuthData

pbAuthData 成员指向的缓冲区的大小(以字节为单位)。 如果没有经过身份验证的数据,则必须将此成员设置为零。

pbTag

指向缓冲区的指针。

此成员的用法取决于将结构传递到的函数。

函数 说明
BCryptEncrypt
缓冲区将收到身份验证标记。
BCryptDecrypt
缓冲区包含要检查的身份验证标记。
 

如果没有标记,则必须将此成员设置为 NULL

cbTag

pbTag 缓冲区的大小(以字节为单位)。 缓冲区必须足够长才能包含整个身份验证标记。 某些身份验证模式(如 CCM 和 GCM)支持针对具有多个长度的标记进行检查。 若要获取有效的身份验证标记长度,请使用 BCryptGetProperty 查询 BCRYPT_AUTH_TAG_LENGTH 属性。 如果没有标记,则必须将此成员设置为零。

pbMacContext

指向缓冲区的指针,该缓冲区在链接加密或解密时,在调用 BCryptEncryptEncryptBCryptDecrypt 之间存储部分计算的 MAC。

如果加密或解密的输入分散在多个缓冲区中,则必须将调用链接到 BCryptEncryptBCryptDecrypt 函数。 链接是通过在 dwFlags 成员中设置BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG标志来指示的。

此缓冲区必须由调用方提供,并且必须至少与所使用的密码的身份验证标记的最大长度一样大。 若要获取有效的身份验证标记长度,请使用 BCryptGetProperty 查询 BCRYPT_AUTH_TAG_LENGTH 属性。

如果未链接 BCryptEncryptBCryptDecrypt 调用,则必须将此成员设置为 NULL

cbMacContext

pbMacContext 成员指向的缓冲区的大小(以字节为单位)。 如果未链接 BCryptEncryptBCryptDecrypt 调用,则必须将此成员设置为零。

cbAAD

BCryptEncrypt 和 BCryptDecrypt 函数要使用的其他经过身份验证的数据的长度(以字节为单位) (AAD) 。 仅当链接调用时才使用此成员。

仅当设置了 dwFlags 成员中的BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG标志时,才使用此成员。

首次调用 BCryptEncrypt 或BCryptDecrypt 时,必须将此字段设置为零。

注意 在链接序列期间,此成员在内部维护,不得更改,否则计算 MAC 的值将损坏。
 

cbData

加密或解密的有效负载数据的长度(以字节为单位)。 仅当链接调用时才使用此成员。

仅当设置了 dwFlags 成员中的BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG标志时,才使用此成员。

首次调用 BCryptEncrypt 或BCryptDecrypt 时,必须直接或通过调用 BCRYPT_INIT_AUTH_INFO 宏将此字段设置为零

注意 在链接序列期间,此成员在内部维护,不得更改,否则计算 MAC 的值将损坏。
 

dwFlags

链接 BCryptEncrypt 或BCryptDecrypt 函数调用时使用此标志。 如果未链接调用,则必须将此成员设置为零。

含义
0x00000000
对于 BCryptEncrypt,计算身份验证标记并将其放置在 pbTag 成员指向的缓冲区中。

对于 BCryptDecrypt,计算身份验证标记,并将其与传递到 pbTag 成员指向的缓冲区的标记进行比较。 将多个调用链接到 BCryptEncrypt 或BCryptDecrypt 时,此值表示链的末尾。

BCRYPT_AUTH_MODE_CHAIN_CALLS_FLAG
0x00000001
指示 BCryptEncryptBCryptDecrypt 函数调用被链接,并且不会计算 MAC 值。 在链中最后一次调用时,清除此值以计算整个链的 MAC 值。
BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG
0x00000002
指示此 BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO 结构正用于链接的 BCryptEncrypt 或BCryptDecrypt 函数调用序列中。 此标志在内部设置和维护。
注意 在链接序列期间,此标志值在内部维护,不得更改,否则计算的 MAC 的值将损坏。
 

注解

此结构的大小在 64 位和 32 位操作系统之间有所不同。 在 64 位操作系统上,64 位和 32 位进程的大小不同。 此结构的实例不得在线程之间共享或在进程之间传递。

要求

要求
最低受支持的客户端 Windows Vista SP1 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
标头 bcrypt.h