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 ist das Windows-spezifische Krypto-Backend, das von FPdfCrypto konsumiert wird. Es öffnet die Zertifikatsspeicher des aktuellen Benutzers und des lokalen Rechners über die CryptoAPI, findet das Zertifikat zum angeforderten Fingerprint, holt das zugehörige NCRYPT-Private-Key-Handle und gibt eine TPadesResolvedSigner zurück, deren ICmsSigner über CNG signiert
WinCryptoAvailable führt die leichte Prüfung durch, ob die Crypt32-/ncrypt-Bindungen auflösbar sind, sodass Aufrufer beim Start entscheiden können, ob PAdES-Signaturen auf diesem Rechner möglich sein werden
VerifyWinDetachedCms validiert einen getrennten CMS-Wert gegen zwei vom Aufrufer bereitgestellte Byte-Segmente, gibt das Signer-Zertifikat zurück und bewertet seine Kette mit der rein cache-basierten Windows-Basisrichtlinie ohne Netzabruf
Die erweiterten Verifikationsfunktionen akzeptieren TWinCmsVerifyOptions, sodass Aufrufer den Online-Zertifikatsabruf einschalten, Sperrprüfungen anfordern, ein Abruf-Timeout setzen und Verifikations-Kontrollpunkte beobachten können
Signaturgültigkeit und Zertifikatsvertrauen sind unabhängige Ergebnisse, sodass eine authentische Signatur eines nicht vertrauenswürdigen oder selbstsignierten Zertifikats von manipulierten Inhalten unterscheidbar bleibt
| Funktion | Beschreibung |
|---|---|
WinCryptoAvailable | Gibt True zurück, wenn die Windows-Bindungen Crypt32 und ncrypt zur Laufzeit aufgelöst werden können |
WinCmsVerificationAvailable | Gibt True zurück, wenn getrennte CMS-Verifikation und Zertifikatskettenrichtlinien-APIs verfügbar sind |
VerifyWinDetachedCms | Verifiziert die CMS-signierten Attribute und die Signatur über zwei getrennte Inhaltssegmente und meldet das aktuelle rein cache-basierte Systemvertrauen separat |
VerifyWinDetachedCmsEx | Verifiziert getrennte CMS-Inhalte mit expliziten Optionen für Online-Abruf, Sperrprüfung, Timeout und Kontrollpunkte |
VerifyWinAttachedCmsEx | Verifiziert einen angehängten CMS-Wert und bewertet sein Signer-Zertifikat mit den übergebenen Optionen |
ResolveWinSigner | Löst einen Fingerprint in Signer, Zertifikats-DER und Kette über den Windows-Zertifikatsspeicher und den CNG-Private-Key auf |
TestBuildWinCmsTrust | Nur unter PDFIUMPAS_CRYPTO_TESTS kompilierter Test-Hook: tauscht die CNG-Chain-Policy-Funktionszeiger gegen vom Aufrufer gelieferte Stubs, lässt den Trust-Aufbau mit auf gültig gesetztem Signaturstatus laufen und stellt die Zeiger wieder her, sodass Krypto-Unit-Tests BuildWinCmsTrust ohne echte Zertifikatskette durchspielen können |
| Typ | Member und Zweck |
|---|---|
TWinCmsVerifyStatus | wcvsUnavailable, wcvsValid, wcvsInvalid, wcvsUnsupported oder wcvsIndeterminate |
TWinCmsVerifyStage | wcvstCryptographicSignature, wcvstChainBuild, wcvstOnlineRetrieval oder wcvstRevocationCheck |
TWinCmsVerifyCheckpoint | Object-Method-Callback, der jede TWinCmsVerifyStage empfängt |
TWinCmsVerifyOptions | OnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs, OnCheckpoint und die statische Default-Fabrik |
TWinCmsVerifyResult | Alias von TPdfCmsVerifyResult, mit SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason und RevocationError |
Mit aktiviertem CheckRevocation baut das Backend eine separate Sperrkette und füllt RevocationStatus, RevocationReason und RevocationError. Sperrfehler überschreiben weder das Signaturergebnis noch den unabhängig bewerteten TrustStatus und TrustError
Für eine wohlgeformte native Kette liefert eine bestätigte Sperrung wcvsInvalid mit pcrrCertificateRevoked. Ohne bestätigte Sperrung ergibt eine nicht vertrauenswürdige Kette wcvsIndeterminate mit pcrrChainUntrusted; unvollständige native Strukturen und andere ungelöste Sperrprüfungen bleiben bei wcvsIndeterminate mit pcrrUnknown
Ein gültiges Ergebnis verlangt eine vertrauenswürdige Kette, keine Kettefehler, mindestens ein Zertifikat, das eine Sperrprüfung erfordert, und ein erfolgreiches natives Sperrergebnis für jedes dieser Zertifikate. Ausgenommen von dieser Abdeckungsanforderung ist nur ein Endzertifikat, das explizit als selbstsigniert oder als vertrauenswürdiger CA-Anker markiert ist; eine Kette nur mit Root oder fehlende Einzelnachweise bleiben unbestimmt
RevocationError bewahrt einen rohen DWORD aus CERT_REVOCATION_INFO.dwRevocationResult, oder den unmittelbaren GetLastError-Wert, wenn der Sperrketten-Aufruf fehlschlägt. Null bedeutet, dass keine native Diagnose vorliegt, auch wenn ein Kettestatus eine Sperrung ohne zugehörigen Provider-Code feststellt. Die aggregierten CERT_TRUST_STATUS.dwErrorStatus-Bits dienen der Klassifizierung und werden nicht als erfundener nativer Fehler in dieses Feld kopiert
Interpretieren Sie den rohen Wert im Kontext seines Windows-Providers oder seiner API; er ist nicht garantiert ein HRESULT. Offline-, veraltete oder unbekannte Sperrbefunde identifizieren keinen CRL-Ablauf, keine fehlerhafte CRL und keine kaputte CRL-Signatur, daher schließt dieses Backend diese Detailgründe nicht selbst
Mit OnlineRetrieval = False nutzen sowohl Kettenaufbau als auch Sperrprüfung nur den Cache. Der eingeschaltete Online-Abruf erlaubt der Windows-Chain-Engine, die nötigen Belege innerhalb des konfigurierten Abruf-Timeouts zu beschaffen
PadesCryptoAvailable = False, solange kein anderes Backend registriert istTWinCmsVerifyOptions.Default bewahrt die rein cache-basierte Verifikation; schalten Sie Online-Abruf und Sperrprüfung nur ein, wenn die Anwendung Netzwerkzugriff und dessen Latenz akzeptiertRevocationReason: TPdfCmsRevocationReason und RevocationError: Cardinal. Ist die Sperrprüfung deaktiviert oder wird ihr Durchlauf nicht erreicht, behalten diese Felder pcrrNone und null; dieselben Werte begleiten eine erfolgreiche Prüfung, treffen Sie das Urteil also anhand von RevocationStatusNativeRevocationError und NativeTimeStampRevocationError