CryptVerifySignatureA 함수(wincrypt.h)

중요 이 API는 더 이상 사용되지 않습니다. 신규 및 기존 소프트웨어는 Cryptography Next Generation API 사용을 시작해야 합니다. Microsoft는 향후 릴리스에서 이 API를 제거할 수 있습니다.
 
CryptVerifySignature 함수는 해시 개체의 서명을 확인합니다.

이 함수를 호출하기 전에 CryptCreateHash 를 호출하여 해시 개체의 핸들을 만들어야 합니다. CryptHashData 또는 CryptHashSessionKey 는 해시 개체에 데이터 또는 세션 키를 추가하는 데 사용됩니다.

CryptVerifySignature가 완료되면 hHash 핸들을 사용하여 CryptDestroyHash만 호출할 수 있습니다.

구문

BOOL CryptVerifySignatureA(
  [in] HCRYPTHASH hHash,
  [in] const BYTE *pbSignature,
  [in] DWORD      dwSigLen,
  [in] HCRYPTKEY  hPubKey,
  [in] LPCSTR     szDescription,
  [in] DWORD      dwFlags
);

매개 변수

[in] hHash

확인할 해시 개체에 대한 핸들입니다.

[in] pbSignature

확인할 서명 데이터의 주소입니다.

[in] dwSigLen

pbSignature 서명 데이터의 바이트 수입니다.

[in] hPubKey

서명을 인증하는 데 사용할 공개 키 에 대한 핸들입니다. 이 공개 키는 원래 디지털 서명을 만드는 데 사용된 키 쌍에 속해야 합니다.

[in] szDescription

이 매개 변수는 더 이상 사용되지 않아야 하며 보안 취약성을 방지하려면 NULL 로 설정해야 합니다. 그러나 Microsoft 기본 암호화 공급자에서 이전 버전과의 호환성을 위해 계속 지원됩니다.

[in] dwFlags

다음 플래그 값이 정의됩니다.

의미
CRYPT_NOHASHOID
0x00000001
이 플래그는 RSA 공급자와 함께 사용됩니다. 서명을 확인할 때 OID(해시 개체 식별자 )가 없거나 선택되어 있지 않습니다. 이 플래그를 설정하지 않으면 기본 서명의 해시 OID가 PKCS #7의 DigestInfo 정의에 지정된 대로 확인됩니다.
CRYPT_TYPE2_FORMAT
0x00000002
이 플래그는 사용되지 않습니다.
CRYPT_X931_FORMAT
0x00000004
RSA(FIPS 186-2 호환 버전)에 X.931 지원을 사용합니다.

반환 값

함수가 성공하면 반환 값은 TRUE입니다.

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

"NTE"가 앞에 있는 오류 코드는 사용 중인 특정 CSP에 의해 생성됩니다. 몇 가지 가능한 오류 코드는 다음과 같습니다.

반환 코드 설명
ERROR_INVALID_HANDLE
매개 변수 중 하나는 유효하지 않은 핸들을 지정합니다.
ERROR_INVALID_PARAMETER
매개 변수 중 하나에 유효하지 않은 값이 포함되어 있습니다. 이는 가장 자주 유효하지 않은 포인터입니다.
NTE_BAD_FLAGS
dwFlags 매개 변수가 0이 아닌 경우
NTE_BAD_HASH
hHash 매개 변수로 지정된 해시 개체가 잘못되었습니다.
NTE_BAD_KEY
hPubKey 매개 변수는 유효한 공개 키에 대한 핸들을 포함하지 않습니다.
NTE_BAD_SIGNATURE
서명이 잘못되었습니다. 이는 데이터 자체가 변경되었거나, 설명 문자열이 일치하지 않거나, hPubKey에서 잘못된 공개 키를 지정했기 때문일 수 있습니다.

해시 또는 서명 알고리즘이 서명을 만드는 데 사용되는 알고리즘과 일치하지 않는 경우에도 이 오류가 반환될 수 있습니다.

NTE_BAD_UID
해시 개체를 만들 때 지정한 CSP( 암호화 서비스 공급자 ) 컨텍스트를 찾을 수 없습니다.
NTE_NO_MEMORY
작업 중에 CSP 메모리가 부족합니다.

설명

CryptVerifySignature 함수는 해시를 완료합니다. 이 호출 후에는 해시에 더 이상 데이터를 추가할 수 없습니다. CryptHashData 또는 CryptHashSessionKey에 대한 추가 호출이 실패합니다. 해시를 사용하여 애플리케이션을 완료한 후 CryptDestroyHash 를 호출하여 해시 개체를 삭제해야 합니다.

.NET Framework API를 사용하여 서명을 생성하고 CryptVerifySignature 함수를 사용하여 서명을 확인하려고 하면 함수가 실패하고 GetLastErrorNTE_BAD_SIGNATURE 반환합니다. 이는 네이티브 Win32 API와 .NET Framework API 간의 바이트 순서가 다르기 때문입니다.

네이티브 암호화 API는 little-endian 바이트 순서를 사용하는 반면 .NET Framework API는 big-endian 바이트 순서를 사용합니다. .NET Framework API를 사용하여 생성된 서명을 확인하는 경우 서명을 확인하기 위해 CryptVerifySignature 함수를 호출하기 전에 서명 바이트 순서를 바꿔야 합니다.

예제

CryptVerifySignature 함수를 사용하는 예제는 예제 C 프로그램: 해시 서명 및 해시 서명 확인을 참조하세요.

참고

wincrypt.h 헤더는 CRYptVerifySignature를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 wincrypt.h
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

CryptCreateHash

CryptDestroyHash

CryptHashData

CryptHashSessionKey

CryptSignHash

해시 및 디지털 서명 함수