다음을 통해 공유


CMSG_SIGNER_ENCODE_INFO 구조체(wincrypt.h)

CMSG_SIGNER_ENCODE_INFO 구조에는 서명자 정보가 포함됩니다. dwMsgType 매개 변수가 CMSG_SIGNED 경우 CryptMsgCountersign, CryptMsgCountersignEncoded 및 필요에 따라 CMSG_SIGNED_ENCODE_INFO 구조체의 멤버로 CryptMsgOpenToEncode에 전달됩니다.

구문

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 구조체에 대한 포인터입니다.

발급자, SerialNumberSubjectPublicKeyInfo 멤버.

발급자SerialNumber 구조체의 pbData 멤버는 인증서를 고유하게 식별합니다. SubjectPublicKeyInfo 구조의 알고리즘 멤버는 사용되는 해시 암호화 알고리즘을 지정합니다.

DUMMYUNIONNAME

DUMMYUNIONNAME.hCryptProv

CSP( 암호화 서비스 공급자 )에 대한 핸들입니다. HashEncryptionAlgorithm이 szOID_PKIX_NO_SIGNATURE 설정된 경우 이 핸들은 CRYPT_VERIFYCONTEXT 설정된 dwFlags 매개 변수를 사용하여 획득한 CSP의 핸들일 수 있습니다. CNG 함수 NCryptIsKeyHandle 은 공용 구조체 선택을 결정하기 위해 호출됩니다.

DUMMYUNIONNAME.hNCryptKey

CNG CSP에 대한 핸들입니다. CNG 함수 NCryptIsKeyHandle 은 공용 구조체 선택을 결정하기 위해 호출됩니다. 새 암호화 알고리즘은 CNG 함수에서만 지원됩니다. CNG 함수 NCryptTranslateHandle 은 필요한 경우 CryptoAPI hCryptProv 선택을 변환하기 위해 호출됩니다. 애플리케이션은 NCryptOpenKey 함수에서 반환되는 CNG CSP 핸들인 hNCryptKey 멤버에 전달하는 것이 좋습니다.

DUMMYUNIONNAME.hBCryptKey

dwKeySpec

사용할 프라이빗 키를 지정합니다. 이 멤버는 hNCryptKey 멤버를 사용할 때 사용되지 않습니다.

dwKeySpec이 0이면 기본 AT_KEYEXCHANGE 값이 사용됩니다.

다음 dwKeySpec 값은 기본 공급자에 대해 정의됩니다.

의미
AT_KEYEXCHANGE
세션 키를 암호화/암호 해독하는 데 사용되는 키입니다.
AT_SIGNATURE
디지털 서명을 만들고 확인하는 데 사용되는 키입니다.

HashAlgorithm

해시 알고리즘을 지정하는 CRYPT_ALGORITHM_IDENTIFIER 구조체입니다.

pvHashAuxInfo

사용되지 않습니다. 이 멤버는 NULL로 설정해야 합니다.

cAuthAttr

rgAuthAttr 배열의 요소 수입니다. rgAuthAttr에 인증된 특성이 없으면 cAuthAttr은 0입니다.

rgAuthAttr

각각 인증된 특성 정보를 포함하는 CRYPT_ATTRIBUTE 구조체에 대한 포인터 배열입니다.

PKCS #9 표준은 특성이 있는 경우 OID(콘텐츠 형식 개체 식별자 ) 및 메시지 해시의 두 개 이상이 있어야 한다고 지시합니다. 이러한 특성은 시스템에서 자동으로 추가됩니다.

cUnauthAttr

rgUnauthAttr 배열의 요소 수입니다. 인증되지 않은 특성이 없으면 cUnauthAttr 은 0입니다.

rgUnauthAttr

각각 인증되지 않은 특성 정보를 포함하는 CRYPT_ATTRIBUTE 구조체에 대한 포인터 배열입니다. 인증되지 않은 특성에는 다른 용도 중에서도 카운터 서명이 포함될 수 있습니다.

SignerId

서명자 인증서의 고유 식별자를 포함하는 CERT_ID 구조체입니다. 이 멤버는 필요에 따라 CMS(암호화 메시지 구문)와 함께 PKCS #7과 함께 사용할 수 있습니다. 이 멤버가 NULL이 아니고 dwIdChoice 멤버가 0이 아닌 경우 pCertInfo가 가리키는 CERT_INFO 구조체의 발급자SerialNumber 멤버 대신 인증서를 식별하는 데 사용됩니다. CMS는 KEY_IDENTIFIER 및 ISSUER_SERIAL_NUMBER CERT_ID 구조를 지원합니다. PKCS 버전 1.5는 ISSUER_SERIAL_NUMBER CERT_ID 선택만 지원합니다. 이 멤버는 PKCS #7 처리를 위해 CMS와 함께 사용되며 CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS 정의된 경우에만 사용할 수 있습니다.

HashEncryptionAlgorithm

선택적으로 CMS에서 PKCS #7과 함께 사용되는 CRYPT_ALGORITHM_IDENTIFIER 구조체입니다. 이 멤버가 NULL이 아닌 경우 식별된 알고리즘은 SubjectPublicKeyInfo.Algorithm 알고리즘 대신 사용됩니다. 이 멤버가 szOID_PKIX_NO_SIGNATURE 설정된 경우 서명 값에는 해시 옥텟만 포함됩니다.

RSA의 경우 해시 암호화 알고리즘은 일반적으로 공개 키 알고리즘과 동일합니다. DSA의 경우 해시 암호화 알고리즘은 일반적으로 DSS 서명 알고리즘입니다.

이 멤버는 PKCS #7 처리를 위해 CMS와 함께 사용되며 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