Share via


BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO結構 (bcrypt.h)

BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO 結構會與 BCryptEncryptBCryptDecrypt 函式搭配使用,以包含與已驗證加密模式相關的其他資訊。

語法

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) 鏈結模式的 Counter 的 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

在鏈結加密或解密時,在呼叫 BCryptEncrypt 和 BCryptDecrypt 之間儲存部分計算 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

鏈結 BCryptEncryptBCryptDecrypt 函式呼叫時,會使用此旗標。 如果未鏈結呼叫,這個成員必須設定為零。

意義
0x00000000
針對 BCryptEncrypt,計算驗證標記,並將它放在 pbTag 成員指向的緩衝區中。

針對 BCryptDecrypt,計算驗證標記,並將它與傳遞給 pbTag 成員所指向緩衝區的標記進行比較。 將多個呼叫鏈結至 BCryptEncryptBCryptDecrypt 時,此值會向鏈結結尾發出訊號。

BCRYPT_AUTH_MODE_CHAIN_CALLS_FLAG
0x00000001
表示 BCryptEncryptBCryptDecrypt 函數調用正在鏈結中,而且不會計算 MAC 值。 在鏈結的最後一個呼叫上,清除此值以計算整個鏈結的 MAC 值。
BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG
0x00000002
表示這個 BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO 結構正用於鏈結 的 BCryptEncryptBCryptDecrypt 函數調用序列中。 此旗標是在內部設定和維護。
注意 在鏈結順序期間,此旗標值會在內部維護,不得變更或計算 MAC 的值將會損毀。
 

備註

此結構的大小在64位和32位操作系統之間不同。 在 64 位作業系統上,大小在 64 位和 32 位進程之間不同。 此結構的實例不得跨線程共用,或於進程之間傳遞。

規格需求

需求
最低支援的用戶端 Windows Vista SP1 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
標頭 bcrypt.h