CMSG_SIGNER_ENCODE_INFO 結構 (wincrypt.h)

CMSG_SIGNER_ENCODE_INFO 結構包含簽署者資訊。 它會傳遞至 CryptMsgCountersign、CryptMsgCountersignEncoded,並選擇性地傳遞至 CryptMsgOpenToEncode 做為CMSG_SIGNED_ENCODE_INFO結構的成員,如果 dwMsgType 參數是CMSG_SIGNED。

語法

typedef struct _CMSG_SIGNER_ENCODE_INFO {
  DWORD                      cbSize;
  PCERT_INFO                 pCertInfo;
  union {
    HCRYPTPROV        hCryptProv;
    NCRYPT_KEY_HANDLE hNCryptKey;
    BCRYPT_KEY_HANDLE hBCryptKey;
  } DUMMYUNIONNAME;
  DWORD                      dwKeySpec;
  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  void                       *pvHashAuxInfo;
  DWORD                      cAuthAttr;
  PCRYPT_ATTRIBUTE           rgAuthAttr;
  DWORD                      cUnauthAttr;
  PCRYPT_ATTRIBUTE           rgUnauthAttr;
  CERT_ID                    SignerId;
  CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  void                       *pvHashEncryptionAuxInfo;
} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO;

成員

cbSize

這個結構的大小,以位元組為單位。

pCertInfo

包含的 CERT_INFO 結構的指標

IssuerSerialNumberSubjectPublicKeyInfo 成員。

IssuerSerialNumber 結構的 pbData 成員會唯一識別憑證。 SubjectPublicKeyInfo 結構的演算法成員會指定使用的哈希加密演算法。

DUMMYUNIONNAME

DUMMYUNIONNAME.hCryptProv

密碼 編譯服務提供者 的句柄 (CSP) 。 如果 HashEncryptionAlgorithm 設定為 szOID_PKIX_NO_SIGNATURE,此句柄可以是使用設定為 CRYPT_VERIFYCONTEXTdwFlags 參數取得的 CSP 句柄。 會呼叫 CNG 函式 NCryptIsKeyHandle 來判斷聯集選擇。

DUMMYUNIONNAME.hNCryptKey

CNG CSP 的句柄。 會呼叫 CNG 函式 NCryptIsKeyHandle 來判斷聯集選擇。 CNG 函式僅支援新的加密演算法。 系統會呼叫 CNG 函式 NCryptTranslateHandle ,視需要轉換 CryptoAPI hCryptProv 選擇。 我們建議應用程式傳遞至 hNCryptKey 成員,這是從 NCryptOpenKey 函式傳回的 CNG CSP 句柄。

DUMMYUNIONNAME.hBCryptKey

dwKeySpec

指定要使用的私鑰。 使用 hNCryptKey 成員時,不會使用此成員。

如果 dwKeySpec 為零,則會使用預設AT_KEYEXCHANGE值。

預設提供者定義了下列 dwKeySpec 值。

意義
AT_KEYEXCHANGE
用來加密/解密會話金鑰的金鑰。
AT_SIGNATURE
用來建立和驗證數位簽名的金鑰。

HashAlgorithm

指定哈希演算法 的CRYPT_ALGORITHM_IDENTIFIER 結構。

pvHashAuxInfo

未使用。 這個成員必須設定為 NULL

cAuthAttr

rgAuthAttr 陣列中的元素數目。 如果 rgAuthAttr 中沒有已驗證的屬性, 則 cAuthAttr 為零。

rgAuthAttr

CRYPT_ATTRIBUTE結構的指標數位,其中每一個都包含已驗證的屬性資訊。

PKCS #9 標準會指出如果有任何屬性,則至少必須有兩個:內容類型 物件標識符 (OID) 和訊息的哈希。 系統會自動新增這些屬性。

cUnauthAttr

rgUnauthAttr 陣列中的元素數目。 如果沒有未驗證的屬性, cUnauthAttr 為零。

rgUnauthAttr

CRYPT_ATTRIBUTE結構的指標數位,每個指標都包含未經驗證的屬性資訊。 未經驗證的屬性可以包含 反簽署,以及其他用途。

SignerId

包含簽署者憑證唯一標識碼 的CERT_ID 結構。 這個成員可以選擇性地搭配 PKCS #7 搭配密碼編譯訊息語法使用, (CMS) 。 如果這個成員不是 NULL,而且其 dwIdChoice 成員不是零,則會用來識別憑證,而不是 pCertInfo 所指向之CERT_INFO結構的 IssuerSerialNumber 成員。 CMS 支援KEY_IDENTIFIER和ISSUER_SERIAL_NUMBER CERT_ID結構。 PKCS 1.5 版僅支援ISSUER_SERIAL_NUMBER CERT_ID選擇。 此成員會搭配 CMS 用於 PKCS #7 處理,而且只有在定義CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS時才可使用。

HashEncryptionAlgorithm

CRYPT_ALGORITHM_IDENTIFIER結構選擇性地與 PKCS #7 搭配 CMS 使用。 如果這個成員不是 NULL,則會使用識別的演算法,而不是 SubjectPublicKeyInfo.Algorithm 演算法。 如果這個成員設定為szOID_PKIX_NO_SIGNATURE,簽章值只會包含哈希八位。

針對 RSA, 哈希 加密演算法通常與公鑰演演算法相同。 對於 DSA,哈希加密演算法通常是 DSS 簽章演算法。

此成員會搭配 CMS 用於 PKCS #7 處理,而且只有在定義CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS時才可使用。

pvHashEncryptionAuxInfo

未使用這個成員。 如果這個成員存在於數據結構中,則必須將它設定為 NULL 。 只有在定義CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS時,才會存在這個成員。

規格需求

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

另請參閱

CERT_INFO

CRYPT_ALGORITHM_IDENTIFIER

CRYPT_ATTRIBUTE

CryptMsgControl

CryptMsgCountersign