다음을 통해 공유


CryptMsgGetParam 함수(wincrypt.h)

CryptMsgGetParam 함수는 암호화 메시지가 인코딩 또는 디코딩된 후 메시지 매개 변수를 가져옵니다. 이 함수는 마지막 CryptMsgUpdate 호출 후에 호출됩니다.

구문

BOOL CryptMsgGetParam(
  [in]      HCRYPTMSG hCryptMsg,
  [in]      DWORD     dwParamType,
  [in]      DWORD     dwIndex,
  [out]     void      *pvData,
  [in, out] DWORD     *pcbData
);

매개 변수

[in] hCryptMsg

암호화 메시지의 핸들입니다.

[in] dwParamType

검색할 데이터의 매개 변수 형식을 나타냅니다. 검색할 데이터 형식은 pvData에 사용할 구조체의 형식을 결정합니다.

인코딩된 메시지의 경우 CMSG_BARE_CONTENT, CMSG_ENCODE_SIGNER, CMSG_CONTENT_PARAM 및 CMSG_COMPUTED_HASH_PARAM dwParamTypes만 유효합니다.

의미
CMSG_ATTR_CERT_COUNT_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

SIGNED 또는 ENVELOPED 메시지의 특성 인증서 수를 반환합니다.

CMSG_ATTR_CERT_PARAM
pvData 데이터 형식: BYTE 배열에 대한 포인터

특성 인증서를 검색합니다. 모든 특성 인증서를 얻으려면 CryptMsgGetParam 다양한 dwIndex 를 0으로 설정하여 특성 수에서 1을 뺀 값으로 호출합니다.

CMSG_BARE_CONTENT_PARAM
pvData 데이터 형식: BYTE 배열에 대한 포인터

CONTENT_INFO 구조체의 외부 계층 없이 인코딩된 암호화 메시지의 인코딩된 콘텐츠를 검색합니다. 즉, PKCS #7 정의된 ContentInfo.content 필드의 인코딩만 반환됩니다.

CMSG_CERT_COUNT_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

받은 SIGNED 또는 ENVELOPED 메시지의 인증서 수를 반환합니다.

CMSG_CERT_PARAM
pvData 데이터 형식: BYTE 배열에 대한 포인터

서명자의 인증서를 반환합니다. 서명자의 모든 인증서를 얻으려면 CryptMsgGetParam을 호출하여 dwIndex 를 0에서 사용 가능한 인증서 수에서 1을 뺀 값으로 변경합니다.

CMSG_COMPUTED_HASH_PARAM
pvData 데이터 형식: BYTE 배열에 대한 포인터

메시지의 데이터를 계산한 해시를 반환합니다. 이 형식은 인코딩 및 디코딩 모두에 적용할 수 있습니다.

CMSG_CONTENT_PARAM
pvData 데이터 형식: BYTE 배열에 대한 포인터

인코딩하기 위해 열린 메시지에서 전체 PKCS #7 메시지를 반환합니다. 디코딩하기 위해 열린 메시지의 내부 콘텐츠를 검색합니다. 메시지가 봉투에 넣으면 내부 형식이 데이터이고 CryptMsgControl 이 호출되어 메시지 암호를 해독하면 암호 해독된 콘텐츠가 반환됩니다. 내부 형식이 데이터가 아닌 경우 추가 디코딩이 필요한 인코딩된 BLOB이 반환됩니다. 메시지가 봉투에 포함되지 않고 내부 콘텐츠가 DATA인 경우 반환된 데이터는 내부 콘텐츠의 옥텟입니다. 이 형식은 인코딩 및 디코딩 모두에 적용할 수 있습니다.

디코딩의 경우 형식이 CMSG_DATA 콘텐츠의 8진수가 반환됩니다. 인코딩된 내부 콘텐츠가 반환됩니다.

CMSG_CRL_COUNT_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

받은, SIGNED 또는 ENVELOPED 메시지의 CRL 수를 반환합니다.

CMSG_CRL_PARAM
pvData 데이터 형식: BYTE 배열에 대한 포인터

CRL을 반환합니다. 모든 CRL을 얻으려면 CryptMsgGetParam을 호출하여 dwIndex 를 0에서 사용 가능한 CRL 수에서 1을 뺀 값으로 변경합니다.

CMSG_ENCODED_MESSAGE
pvData 데이터 형식: BYTE 배열에 대한 포인터

이미 인코딩된 메시지의 내용을 변경합니다. 먼저 CryptMsgOpenToDecode 호출을 사용하여 메시지를 디코딩해야 합니다. 그런 다음 CryptMsgControl, CryptMsgCountersign 또는 CryptMsgCountersignEncoded를 호출하여 메시지를 변경합니다. 그런 다음 , CryptMsgGetParam을 호출하여 메시지를 다시 인코딩하여 변경 내용을 반영하는 새 인코딩을 가져올 CMSG_ENCODED_MESSAGE 지정합니다. instance 메시지에 타임스탬프를 추가하는 데 사용할 수 있습니다.

CMSG_ENCODED_SIGNER
pvData 데이터 형식: BYTE 배열에 대한 포인터

메시지 서명자에 대한 인코딩된 CMSG_SIGNER_INFO 서명자 정보를 반환합니다.

CMSG_ENCRYPTED_DIGEST
pvData 데이터 형식: BYTE 배열에 대한 포인터

서명의 암호화된 해시를 반환합니다. 일반적으로 타임스탬프를 수행하는 데 사용됩니다.

CMSG_ENCRYPT_PARAM
pvData 데이터 형식: CRYPT_ALGORITHM_IDENTIFIER 구조체에 대한 BYTE 배열에 대한 포인터입니다.

메시지를 암호화하는 데 사용되는 암호화 알고리즘을 반환합니다.

CMSG_ENVELOPE_ALGORITHM_PARAM
pvData 데이터 형식: CRYPT_ALGORITHM_IDENTIFIER 구조체에 대한 BYTE 배열에 대한 포인터입니다.

ENVELOPED 메시지를 암호화하는 데 사용되는 암호화 알고리즘을 반환합니다.

CMSG_HASH_ALGORITHM_PARAM
pvData 데이터 형식: CRYPT_ALGORITHM_IDENTIFIER 구조체에 대한 BYTE 배열에 대한 포인터입니다.

메시지를 만들 때 해시하는 데 사용되는 해시 알고리즘을 반환합니다.

CMSG_HASH_DATA_PARAM
pvData 데이터 형식: BYTE 배열에 대한 포인터

메시지를 만들 때 메시지에 저장된 해시 값을 반환합니다.

CMSG_INNER_CONTENT_TYPE_PARAM
pvData 데이터 형식: Null로 종료된 OID(개체 식별자) 문자열을 수신하는 BYTE 배열에 대한 포인터입니다.

받은 메시지의 내부 콘텐츠 형식을 반환합니다. 이 형식은 DATA 형식의 메시지에는 적용되지 않습니다.

CMSG_RECIPIENT_COUNT_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

ENVELOPED 수신 메시지의 주요 전송 수신자 수를 반환합니다.

CMSG_CMS_RECIPIENT_COUNT_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

키 계약 및 메일 목록 받는 사람을 포함하여 모든 메시지 받는 사람의 총 수를 반환합니다.

CMSG_RECIPIENT_INDEX_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

ENVELOPED 메시지의 암호를 해독하는 데 사용되는 키 전송 받는 사람의 인덱스 를 반환합니다. 이 값은 메시지의 암호를 해독한 후에만 사용할 수 있습니다.

CMSG_CMS_RECIPIENT_INDEX_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

ENVELOPED 메시지의 암호를 해독하는 데 사용되는 키 전송, 키 계약 또는 메일 목록 받는 사람의 인덱스 를 반환합니다.

CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

ENVELOPED 메시지의 암호를 해독하는 데 사용되는 키 계약 수신자의 암호화된 키 인덱스 를 반환합니다.

CMSG_RECIPIENT_INFO_PARAM
pvData 데이터 형식: CERT_INFO 구조를 수신하기 위한 BYTE 배열에 대한 포인터입니다.

키 전송 메시지의 받는 사람에 대한 인증서 정보를 반환합니다. 모든 키 전송 메시지의 받는 사람에 대한 인증서 정보를 얻으려면 CryptMsgGetParam을 반복적으로 호출하여 dwIndex 를 0에서 받는 사람 수에서 1을 뺀 값으로 변경합니다. 반환된 CERT_INFO 구조체의 발급자, SerialNumber 및 PublicKeyAlgorithm 멤버만 사용할 수 있고 유효합니다.

CMSG_CMS_RECIPIENT_INFO_PARAM
pvData 데이터 형식: CMSG_CMS_RECIPIENT_INFO 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

키 전송, 키 계약 또는 메일 목록 받는 사람에 대한 정보를 반환합니다. 키 전송 메시지 수신자에 국한되지 않습니다. 메시지의 모든 받는 사람에 대한 정보를 얻으려면 CryptMsgGetParam을 반복적으로 호출하여 dwIndex 를 0에서 받는 사람 수에서 1을 뺀 값으로 변경합니다.

CMSG_SIGNER_AUTH_ATTR_PARAM
pvData 데이터 형식: CRYPT_ATTRIBUTES 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

메시지 서명자의 인증된 특성을 반환합니다. 지정된 서명자에 대한 인증된 특성을 검색하려면 해당 서명자의 인덱스와 동일한 dwIndex를 사용하여 CryptMsgGetParam을 호출합니다.

CMSG_SIGNER_CERT_INFO_PARAM
pvData 데이터 형식: CERT_INFO 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

서명자의 인증서를 식별하는 데 필요한 메시지 서명자에 대한 정보를 반환합니다. 인증서의 발급자 및 SerialNumber를 사용하여 검색할 인증서를 고유하게 식별할 수 있습니다. 모든 서명자에 대한 정보를 검색하려면 CryptMsgGetParam 다양한 dwIndex 를 0에서 1을 뺀 서명자 수까지 반복적으로 호출합니다. 반환된 CERT_INFO 구조체의 발급자 및 SerialNumber 필드에만 사용 가능한 유효한 데이터가 포함됩니다.

CMSG_SIGNER_CERT_ID_PARAM
pvData 데이터 형식: CERT_ID 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

서명자의 공개 키를 식별하는 데 필요한 메시지 서명자에 대한 정보를 반환합니다. 인증서의 발급자 및 SerialNumber, KeyID 또는 HashId일 수 있습니다. 모든 서명자에 대한 정보를 검색하려면 CryptMsgGetParam 다양한 dwIndex 를 0에서 서명자 수에서 1을 뺀 값으로 호출합니다.

CMSG_SIGNER_COUNT_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

받은 SIGNED 메시지의 서명자 수를 반환합니다.

CMSG_SIGNER_HASH_ALGORITHM_PARAM
pvData 데이터 형식: CRYPT_ALGORITHM_IDENTIFIER 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

메시지 서명자가 사용하는 해시 알고리즘을 반환합니다. 지정된 서명자에 대한 해시 알고리즘을 가져오려면 해당 서명자의 인덱스와 동일한 dwIndex를 사용하여 CryptMsgGetParam을 호출합니다.

CMSG_SIGNER_INFO_PARAM
pvData 데이터 형식: CMSG_SIGNER_INFO 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

메시지 서명자에 대한 정보를 반환합니다. 여기에는 서명자 인증서의 발급자 및 일련 번호와 서명자 인증서의 인증 및 인증되지 않은 특성이 포함됩니다. 메시지의 모든 서명자에 대한 서명자 정보를 검색하려면 CryptMsgGetParam 다양한 dwIndex 를 0에서 서명자 수에서 1을 뺀 값으로 호출합니다.

CMSG_CMS_SIGNER_INFO_PARAM
pvData 데이터 형식: CMSG_CMS_SIGNER_INFO 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

메시지 서명자에 대한 정보를 반환합니다. 여기에는 signerId 및 인증되고 인증되지 않은 특성이 포함됩니다. 메시지의 모든 서명자에 대한 서명자 정보를 검색하려면 CryptMsgGetParam 다양한 dwIndex 를 0에서 서명자 수에서 1을 뺀 값으로 호출합니다.

CMSG_SIGNER_UNAUTH_ATTR_PARAM
pvData 데이터 형식: CRYPT_ATTRIBUTES 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

메시지 서명자의 인증되지 않은 특성을 반환합니다. 지정된 서명자에 대한 인증되지 않은 특성을 검색하려면 해당 서명자의 인덱스와 동일한 dwIndex를 사용하여 CryptMsgGetParam을 호출합니다.

CMSG_TYPE_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

알 수 없는 형식의 디코딩된 메시지의 메시지 유형을 반환합니다. 검색된 메시지 유형을 지원되는 형식과 비교하여 처리를 계속할 수 있는지 여부를 결정할 수 있습니다. 지원되는 메시지 유형은 CryptMsgOpenToDecodedwMessageType 매개 변수를 참조하세요.

CMSG_UNPROTECTED_ATTR_PARAM
pvData 데이터 형식: CMSG_ATTR 구조를 수신하는 BYTE 배열에 대한 포인터입니다.

봉투 메시지에서 보호되지 않는 특성을 반환합니다.

CMSG_VERSION_PARAM
pvData 데이터 형식: DWORD에 대한 포인터

디코딩된 메시지의 버전을 반환합니다. 자세한 내용은 설명 섹션의 표를 참조하세요.

[in] dwIndex

검색되는 매개 변수의 인덱스입니다(해당하는 경우). 매개 변수를 검색하지 않으면 이 매개 변수는 무시되고 0으로 설정됩니다.

[out] pvData

검색된 데이터를 수신하는 버퍼에 대한 포인터입니다. 이 데이터의 형식은 dwParamType 매개 변수의 값에 따라 달라집니다.

이 매개 변수는 메모리 할당을 위해 이 정보의 크기를 설정하는 NULL 일 수 있습니다. 자세한 내용은 알 수 없는 길이의 데이터 검색을 참조하세요.

이 버퍼에서 반환된 데이터를 처리할 때 애플리케이션은 반환된 데이터의 실제 크기를 사용해야 합니다. 실제 크기는 입력에 지정된 버퍼의 크기보다 약간 작을 수 있습니다. (입력에서 버퍼 크기는 일반적으로 가능한 가장 큰 출력 데이터가 버퍼에 맞도록 충분히 크게 지정됩니다.) 출력에서 이 매개 변수가 가리키는 변수는 버퍼에 복사된 데이터의 실제 크기를 반영하도록 업데이트됩니다.

[in, out] pcbData

pvData 매개 변수가 가리키는 버퍼의 크기(바이트)를 지정하는 변수에 대한 포인터입니다. 함수가 반환되면 pcbData 매개 변수가 가리키는 변수에 버퍼에 저장된 바이트 수가 포함됩니다.

반환 값

함수가 성공하면 반환 값은 0이 아닌 값(TRUE)입니다.

함수가 실패하면 반환 값은 0(FALSE)입니다. 확장 오류 정보는 GetLastError를 호출합니다.

다음 표에서는 GetLastError 함수에서 가장 일반적으로 반환되는 오류 코드를 나열합니다.

반환 코드 설명
CRYPT_E_ATTRIBUTES_MISSING
메시지에 요청된 특성이 포함되어 있지 않습니다.
CRYPT_E_INVALID_INDEX
인덱스 값이 잘못되었습니다.
CRYPT_E_INVALID_MSG_TYPE
메시지 유형이 잘못되었습니다.
CRYPT_E_NOT_DECRYPTED
메시지 콘텐츠의 암호가 아직 해독되지 않았습니다.
CRYPT_E_OID_FORMAT
개체 식별자의 형식이 잘못되었습니다.
CRYPT_E_UNEXPECTED_ENCODING
메시지가 예상대로 인코딩되지 않습니다.
E_INVALIDARG
하나 이상의 인수가 잘못되었습니다.
ERROR_MORE_DATA
지정된 버퍼가 반환된 데이터를 저장할 만큼 크지 않습니다.
 

dwParamType CMSG_COMPUTED_HASH_PARAM 경우 CryptGetHashParam에서 오류를 전파할 수 있습니다.

함수가 실패하면 GetLastError추상 구문 표기법 1(ASN.1) 인코딩/디코딩 오류를 반환할 수 있습니다. 이러한 오류에 대한 자세한 내용은 ASN.1 반환 값 인코딩/디코딩을 참조하세요.

설명

다음 버전 번호는 dwParamType이 CMSG_VERSION_PARAM 설정된 CryptMsgGetParam 호출에 의해 반환됩니다.

  • CMSG_SIGNED_DATA_V1
  • CMSG_SIGNED_DATA_V3
  • CMSG_SIGNED_DATA_PKCS_1_5_VERSION
  • CMSG_SIGNED_DATA_CMS_VERSION
  • CMSG_SIGNER_INFO_V1
  • CMSG_SIGNER_INFO_V3
  • CMSG_SIGNER_INFO_PKCS_1_5_VERSION
  • CMSG_SIGNER_INFO_CMS_VERSION
  • CMSG_HASHED_DATA_V0
  • CMSG_HASHED_DATA_V2
  • CMSG_HASHED_DATA_PKCS_1_5_VERSION
  • CMSG_HASHED_DATA_CMS_VERSION
  • CMSG_ENVELOPED_DATA_V0
  • CMSG_ENVELOPED_DATA_V2
  • CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION
  • CMSG_ENVELOPED_DATA_CMS_VERSION

예제

이 함수를 사용하는 예제는 예제 C 프로그램: 서명, 인코딩, 디코딩 및 메시지 확인, 봉투 메시지 인코딩을 위한 대체 코드, 예제 C 프로그램: 봉투형, 서명된 메시지 인코딩예제 C 프로그램: 해시된 메시지 인코딩 및 디코딩을 참조하세요.

요구 사항

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

추가 정보

CryptMsgOpenToDecode

CryptMsgOpenToEncode

CryptMsgUpdate

하위 수준 메시지 함수

간소화된 메시지 함수