PDFium Delphi Component Docs

FPdfCryptoWin Unit

Unit: FPdfCryptoWin
Windows-Kryptografie-API-Backend für PAdES-Signaturen, getrennte CMS-Verifikation und reine Cache-basierte Bewertung des Systemzertifikatsvertrauens

Syntax

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

Beschreibung

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

Funktionen

FunktionBeschreibung
WinCryptoAvailableGibt True zurück, wenn die Windows-Bindungen Crypt32 und ncrypt zur Laufzeit aufgelöst werden können
WinCmsVerificationAvailableGibt True zurück, wenn getrennte CMS-Verifikation und Zertifikatskettenrichtlinien-APIs verfügbar sind
VerifyWinDetachedCmsVerifiziert die CMS-signierten Attribute und die Signatur über zwei getrennte Inhaltssegmente und meldet das aktuelle rein cache-basierte Systemvertrauen separat
VerifyWinDetachedCmsExVerifiziert getrennte CMS-Inhalte mit expliziten Optionen für Online-Abruf, Sperrprüfung, Timeout und Kontrollpunkte
VerifyWinAttachedCmsExVerifiziert einen angehängten CMS-Wert und bewertet sein Signer-Zertifikat mit den übergebenen Optionen
ResolveWinSignerLöst einen Fingerprint in Signer, Zertifikats-DER und Kette über den Windows-Zertifikatsspeicher und den CNG-Private-Key auf
TestBuildWinCmsTrustNur 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

Verifikationstypen

TypMember und Zweck
TWinCmsVerifyStatuswcvsUnavailable, wcvsValid, wcvsInvalid, wcvsUnsupported oder wcvsIndeterminate
TWinCmsVerifyStagewcvstCryptographicSignature, wcvstChainBuild, wcvstOnlineRetrieval oder wcvstRevocationCheck
TWinCmsVerifyCheckpointObject-Method-Callback, der jede TWinCmsVerifyStage empfängt
TWinCmsVerifyOptionsOnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs, OnCheckpoint und die statische Default-Fabrik
TWinCmsVerifyResultAlias von TPdfCmsVerifyResult, mit SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason und RevocationError

Sperrergebnisse

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

Hinweise

Siehe auch

FPdfCrypto, FPdfCms