function WinCryptoAvailable: Boolean;
function WinCmsVerificationAvailable: Boolean;
function VerifyWinDetachedCms(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal): TWinCmsVerifyResult;
function VerifyWinDetachedCmsEx(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal; const Options: TWinCmsVerifyOptions): TWinCmsVerifyResult;
function VerifyWinAttachedCmsEx(const CmsDer: TBytes; const Options: TWinCmsVerifyOptions): TWinCmsVerifyResult;
function ResolveWinSigner(const Options: TPadesSignerOptions): TPadesResolvedSigner;
function TestBuildWinCmsTrust(SignerCert: Pointer;
const Options: TWinCmsVerifyOptions; GetChain, VerifyPolicy,
FreeChain: Pointer): TWinCmsVerifyResult; // PDFIUMPAS_CRYPTO_TESTS only
FPdfCryptoWin은 FPdfCrypto가 사용하는 Windows 전용 크립토 백엔드입니다. CryptoAPI로 현재 사용자와 로컬 머신 인증서 저장소를 열고 요청된 썸프린트와 일치하는 인증서를 찾아 연결된 NCRYPT 개인 키 핸들을 얻은 뒤, CNG로 서명하는 ICmsSigner를 가진 TPadesResolvedSigner를 반환합니다
WinCryptoAvailable은 Crypt32 / ncrypt 바인딩이 해석되는지 가볍게 확인하므로, 호출자는 시작 시 이 머신에서 PAdES 서명이 가능한지 판단할 수 있습니다
VerifyWinDetachedCms는 호출자 소유 바이트 세그먼트 두 개에 대해 detached CMS 값을 검증하고 서명자 인증서를 반환하며, 네트워크 검색 없이 캐시 전용 Windows 기본 정책으로 체인을 평가합니다
확장 검증 함수들은 TWinCmsVerifyOptions를 받으므로, 호출자가 온라인 인증서 검색을 켜고 폐기 검사를 요청하며 검색 시간 초과를 정하고 검증 checkpoint를 관찰할 수 있습니다
서명 유효성과 인증서 신뢰는 독립된 결과이므로, 신뢰할 수 없거나 자가 서명된 인증서의 진짜 서명이 변조된 콘텐츠와 계속 구별됩니다
| Function | Description |
|---|---|
WinCryptoAvailable | Windows Crypt32와 ncrypt 바인딩이 실행 시점에 해석될 수 있으면 True를 반환합니다 |
WinCmsVerificationAvailable | detached CMS 검증과 인증서 체인 정책 API를 쓸 수 있으면 True를 반환합니다 |
VerifyWinDetachedCms | 두 detached 콘텐츠 세그먼트에 대한 CMS signed 속성과 서명을 검증하고, 현재 캐시 전용 시스템 신뢰를 따로 보고합니다 |
VerifyWinDetachedCmsEx | 명시적인 온라인 검색, 폐기, 시간 초과, checkpoint 옵션으로 detached CMS 콘텐츠를 검증합니다 |
VerifyWinAttachedCmsEx | attached CMS 값을 검증하고 전달된 옵션으로 서명자 인증서를 평가합니다 |
ResolveWinSigner | Windows 인증서 저장소와 CNG 개인 키로 썸프린트를 서명자, 인증서 DER, 체인으로 해석합니다 |
TestBuildWinCmsTrust | PDFIUMPAS_CRYPTO_TESTS 조건부로만 컴파일되는 테스트 훅입니다. CNG 체인 정책 함수 포인터를 호출자가 넘긴 스텁으로 교체해 신뢰 구축을 실행한 뒤 포인터를 복원하므로, crypto 유닛 테스트가 실제 인증서 체인 없이 BuildWinCmsTrust를 실행해 볼 수 있습니다 |
| Type | Members and purpose |
|---|---|
TWinCmsVerifyStatus | wcvsUnavailable, wcvsValid, wcvsInvalid, wcvsUnsupported, wcvsIndeterminate |
TWinCmsVerifyStage | wcvstCryptographicSignature, wcvstChainBuild, wcvstOnlineRetrieval, wcvstRevocationCheck |
TWinCmsVerifyCheckpoint | 각 TWinCmsVerifyStage를 받는 객체 메서드 콜백 |
TWinCmsVerifyOptions | OnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs, OnCheckpoint, static Default 팩토리 |
TWinCmsVerifyResult | TPdfCmsVerifyResult의 alias로, SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason, RevocationError를 담습니다 |
CheckRevocation이 켜져 있으면 백엔드가 별도의 폐기 체인을 구축해 RevocationStatus, RevocationReason, RevocationError를 채웁니다. 폐기 실패가 서명 결과나 독립적으로 평가된 TrustStatus와 TrustError를 덮어쓰지는 않습니다
형태가 올바른 네이티브 체인에서 확인된 폐기는 wcvsInvalid에 pcrrCertificateRevoked를 냅니다. 확인된 폐기가 없다면 신뢰할 수 없는 체인은 wcvsIndeterminate에 pcrrChainUntrusted이고, 불완전한 네이티브 구조와 그 외 미해결 폐기 검사는 wcvsIndeterminate에 pcrrUnknown으로 남습니다
유효한 결과가 나오려면 신뢰되는 체인, 체인 오류 없음, 폐기 검사가 필요한 인증서 최소 하나, 그런 인증서 각각에 대한 성공적인 네이티브 폐기 결과가 모두 필요합니다. 종단 인증서가 자가 서명 또는 신뢰된 CA 앵커로 명시적으로 표시된 경우만 이 커버리지 요구에서 제외됩니다. 루트만 있는 체인이나 인증서별 증거가 없으면 여전히 indeterminate입니다
RevocationError는 CERT_REVOCATION_INFO.dwRevocationResult에서 나온 raw DWORD를, 폐기 체인 호출이 실패하면 그 순간의 GetLastError 값을 보존합니다. 0은 네이티브 진단이 없다는 뜻이며, 체인 상태가 대응하는 공급자 코드 없이 폐기를 확정하는 경우도 포함됩니다. 집합 CERT_TRUST_STATUS.dwErrorStatus 비트는 분류에 쓰일 뿐, 만들어낸 네이티브 오류로 이 필드에 복사되지는 않습니다
raw 값은 Windows 공급자나 API 문맥 안에서 해석해야 하며 HRESULT라고 보장되지 않습니다. offline이거나 오래되었거나 알 수 없는 폐기 근거는 CRL 만료, CRL 형식 오류, CRL 서명 불량을 특정해 주지 않으므로, 이 백엔드는 그런 세부 reason을 추론하지 않습니다
OnlineRetrieval = False이면 체인 구축과 폐기 검사 모두 캐시된 검색만 사용합니다. 온라인 검색을 켜면 구성된 검색 시간 초과 안에서 Windows 체인 엔진이 뒷받침 근거를 가져올 수 있습니다
PadesCryptoAvailable = False를 보고합니다TWinCmsVerifyOptions.Default는 캐시 전용 검증을 유지합니다. 온라인 검색과 폐기 검사는 애플리케이션이 네트워크 접근과 그 지연을 감수할 때만 선택하세요RevocationReason: TPdfCmsRevocationReason과 RevocationError: Cardinal이 들어 있습니다. 폐기가 꺼져 있거나 해당 패스에 도달하지 못하면 이 필드들은 pcrrNone과 0을 유지하고, 검사가 성공했을 때도 같은 값이 나올 수 있으니 판정은 RevocationStatus로 하세요NativeRevocationError와 NativeTimeStampRevocationError로 각각 따로 보존합니다