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

현재 정의된 플래그는 다음 표에 나와 있습니다.

의미
CMSG_BARE_CONTENT_FLAG
스트리밍된 출력에 외부 ContentInfo 래퍼가 없음을 나타냅니다(PKCS #7에 정의된 대로). 이렇게 하면 묶은 메시지로 스트리밍하는 것이 적합합니다.
CMSG_DETACHED_FLAG
CryptMsgUpdate에 대한 후속 호출에 대해 제공되는 분리된 데이터가 있음을 나타냅니다.
CMSG_CONTENTS_OCTETS_FLAG
봉투형 메시지 내에 중첩될 메시지의 DER 인코딩 크기를 계산하는 데 사용됩니다. 이는 스트리밍을 수행할 때 특히 유용합니다.
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
데이터 형식이 아닌 내부 콘텐츠 는 OCTET STRING 내에 캡슐화됩니다. 이 플래그는 서명된 메시지와 봉투 메시지 모두에 적용할 수 있습니다.

[in] dwMsgType

현재 정의된 메시지 유형은 다음 표에 나와 있습니다.

의미
CMSG_DATA
OCTET(BYTE) 문자열입니다.
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
구현되지 않았습니다.
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
구현되지 않았습니다.

[in] pvMsgEncodeInfo

인코딩할 데이터에 대한 포인터입니다. 가리키는 데이터 형식은 dwMsgType 값에 따라 달라집니다. 자세한 내용은 dwMsgType 테이블을 참조하세요.

[in, optional] pszInnerContentObjID

CryptMsgUpdate에 이미 인코딩된 데이터를 사용하여 CryptMsgCalculateEncodedLength를 호출하면 적절한 개체 식별자가 pszInnerContentObjID로 전달됩니다. pszInnerContentObjIDNULL인 경우 내부 콘텐츠 형식은 이전에 인코딩되지 않은 것으로 간주되며, 8진수 문자열로 인코딩되고 CMSG_DATA 형식이 지정됩니다.

스트리밍을 사용하는 경우 pszInnerContentObjIDNULL 또는 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

콘텐츠의 크기(바이트)입니다.

반환 값

인코딩된 암호화 메시지에 필요한 길이를 반환합니다. 이 길이는 정확한 길이가 아닐 수도 있지만 필요한 길이보다 작지는 않습니다. 함수가 실패하면 0이 반환됩니다.

확장된 오류 정보를 검색하려면 GetLastError 함수를 사용합니다. 다음 표에서는 가장 일반적으로 반환되는 오류 코드를 나열합니다.

반환 코드 설명
CRYPT_E_INVALID_MSG_TYPE
메시지 유형이 잘못되었습니다.
CRYPT_E_UNKNOWN_ALGO
암호화 알고리즘을 알 수 없습니다.
E_INVALIDARG
하나 이상의 인수가 잘못되었습니다.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 wincrypt.h
라이브러리 Crypt32.lib
DLL Crypt32.dll

추가 정보

CryptMsgOpenToEncode

하위 수준 메시지 함수

간소화된 메시지 함수