CryptMsgCalculateEncodedLength 函式 (wincrypt.h)
CryptMsgCalculateEncodedLength函式會根據訊息類型、編碼參數,以及要編碼之資料的總長度,計算編碼密碼編譯訊息所需的位元組數目上限。 請注意,結果一律大於或等於所需的實際位元組數目。
語法
DWORD CryptMsgCalculateEncodedLength(
[in] DWORD dwMsgEncodingType,
[in] DWORD dwFlags,
[in] DWORD dwMsgType,
[in] void const *pvMsgEncodeInfo,
[in, optional] LPSTR pszInnerContentObjID,
[in] DWORD cbData
);
參數
[in] dwMsgEncodingType
指定使用的編碼類型。 將憑證和 訊息編碼類型 與位OR 作業結合在一起,一律可以接受,如下列範例所示:
X509_ASN_ENCODING |PKCS_7_ASN_ENCODING
目前定義的編碼類型如下:
- X509_ASN_ENCODING
- PKCS_7_ASN_ENCODING
[in] dwFlags
下表顯示目前定義的旗標。
值 | 意義 |
---|---|
|
表示串流輸出不會有外部 ContentInfo 包裝函式 (,如 PKCS #7) 所定義。 這可讓它適合串流到封入訊息中。 |
|
指出後續呼叫 CryptMsgUpdate時,會提供中斷連結的資料。 |
|
用來計算要巢狀在信封訊息內之訊息 的 DER 編碼大小。 執行串流時,這特別有用。 |
|
非資料類型 內部內容 會封裝在 OCTET STRING 內。 此旗標適用于已簽署和信封訊息。 |
[in] dwMsgType
下表顯示目前定義的訊息類型。
值 | 意義 |
---|---|
|
八位 (BYTE) 字串。 |
|
|
|
|
|
未實作。 |
|
|
|
未實作。 |
[in] pvMsgEncodeInfo
要編碼之資料的指標。 所指向的資料類型取決於 dwMsgType的值。 如需詳細資訊,請參閱 dwMsgType 資料表。
[in, optional] pszInnerContentObjID
呼叫 CryptMsgCalculateEncodedLength 時,提供給 CryptMsgUpdate 的資料已經編碼,適當的物件識別碼會在 pszInnerContentObjID中傳遞。 如果 pszInnerContentObjID 為 Null,則會假設 內部內容類型 不是先前編碼的,並且會編碼為八位字串,並指定類型CMSG_DATA。
使用串流時, pszInnerContentObjID 必須是 Null 或szOID_RSA_data。
通常會使用下列演算法物件識別碼:
- szOID_RSA_data
- szOID_RSA_signedData
- szOID_RSA_envelopedData
- szOID_RSA_signEnvData
- szOID_RSA_digestedData
- szOID_RSA_encryptedData
- SPC_INDIRECT_DATA_OBJID
[in] cbData
內容的大小,以位元組為單位。
傳回值
傳回編碼密碼編譯訊息的必要長度。 此長度可能不是確切的長度,但長度不會小於所需的長度。 如果函式失敗,則會傳回零。
若要擷取擴充的錯誤資訊,請使用 GetLastError 函式。 下表列出最常傳回的錯誤碼。
傳回碼 | 描述 |
---|---|
|
訊息類型無效。 |
|
密碼編譯演算法未知。 |
|
一或多個引數無效。 |
規格需求
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | wincrypt.h |
程式庫 | Crypt32.lib |
Dll | Crypt32.dll |