PDFium Delphi Component Docs

Unit FPdfCryptoMac

Unit: FPdfCryptoMac
macOS-Keychain-Backend für PAdES-Signierung, dazu CMS-Verifikation und Zertifikatsvertrauensbewertung über Security.framework

Syntax

EPdfKeychainError = class(Exception);

TPdfKeychainSignerProvider = class(TInterfacedObject, IPadesSignerProvider)
  constructor Create(const KeychainPath: string = '');
  function BackendName: string;
  function Resolve(const Options: TPadesSignerOptions): TPadesResolvedSigner;
end;

TPdfKeychainCmsVerifier = class(TInterfacedObject, IPdfCmsVerifier)
  function BackendName: string;
  function VerifyDetached(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
  function VerifyAttached(const CmsDer: TBytes; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
end;

function KeychainAvailable: Boolean;
function KeychainMissingSymbols: string;
function KeychainVerificationAvailable: Boolean;
function ConfigureKeychainSignerProvider: IPadesSignerProvider;
function ConfigureKeychainCmsVerifier: IPdfCmsVerifier;
procedure ConfigureKeychainTrustAnchors(const Anchors: TPadesChainCertArray);
procedure ConfigureKeychainOcspResponses(const Responses: TPadesChainCertArray);

Beschreibung

FPdfCryptoMac ist das macOS-Krypto-Backend, das FPdfCrypto und FPdfCms konsumieren, und es deckt beide Hälften der Plattformintegration ab: PAdES-Signierung über eine Keychain-Identität sowie CMS-Verifikation über den System-CMS-Decoder und die Vertrauensbewertung. Security.framework und CoreFoundation werden zur Laufzeit namenbasiert geladen und aufgelöst statt gelinkt, daher kompiliert die Unit für jedes Ziel und meldet zur Laufzeit, ob die Plattformdienste tatsächlich erreichbar sind

Auf der Signierseite implementiert TPdfKeychainSignerProvider IPadesSignerProvider. Seine Methode Resolve zählt die Keychain-Identitäten auf, wählt diejenige, deren Zertifikat zum SHA-1-Fingerprint aus TPadesSignerOptions passt, liest den Zertifikats-DER und die zugehörige Private-Key-Referenz und gibt einen TPadesResolvedSigner zurück, dessen ICmsSigner die CMS-signed Attributes über Security.framework signiert, sodass der Private Key die Keychain nie verlässt. Das über die Optionen angeforderte Padding-Schema wird mit dem abgeglichen, was der Schlüssel tatsächlich kann, und die RSASSA-PSS-Parameter sind dieselben, die die anderen Backends ausgeben, sodass ein auf macOS signiertes Dokument einen identischen AlgorithmIdentifier trägt. ConfigureKeychainSignerProvider baut den Provider, installiert ihn als aktives PAdES-Signatur-Backend und gibt die dabei registrierte Schnittstelle zurück

Zur Prüfung implementiert TPdfKeychainCmsVerifier IPdfCmsVerifier mit CMSDecoder und SecTrust; VerifyDetached verbindet die beiden signierten Bytebereiche um die Signaturlücke zum erwarteten abgetrennten Inhalt und prüft den CMS-Wert; VerifyAttached prüft CMS mit eigenem Inhalt, wie ein Zeitstempeltoken; beide liefern TPdfCmsVerifyResult mit getrennten Signatur-, Vertrauens- und Widerrufsergebnissen, optionalem Signaturzertifikat und evaluierter Kette und beachten Widerruf, Onlineabruf und Checkpoints aus TPdfCmsVerifyOptions; ConfigureKeychainCmsVerifier erstellt und installiert den aktiven Backend

Signaturgültigkeit und Zertifikatsvertrauen bleiben unabhängige Ergebnisse, sodass eine authentische Signatur unter einer nicht vertrauenswürdigen oder selbstsignierten Kette von manipulierten Inhalten unterscheidbar bleibt

Für angehängte RFC-3161-Token übergibt begrenztes DER-Parsing originale gekapselte TSTInfo-Bytes an den nativen Decoder, ohne Inhaltstyp oder signierte Attribute zu ändern; normale CMS-Prüfung entfernt unsignierte Attribute aus ihrer nativen Eingabe, damit automatische Zeitstempelverarbeitung Integrität und Kette der äußeren Signatur nicht ersetzt; sie validiert keine Gegensignaturen oder anderen unsignierten Attribute; ValidatePadesTrust prüft jedes originale Zeitstempeltoken, Hash, TSA-Rolle, Vertrauen und Widerruf separat

Übergeben Sie TPdfKeychainSignerProvider.Create einen Keychain-Dateipfad für eine auf diese Anfrage begrenzte Identitätssuche und registrieren Sie mit ConfigurePadesSignerProvider; leerer Pfad verwendet den aktuellen Benutzersuchbereich; Öffnen/Suchen ändert weder Standard-Keychain, Benutzersuchliste noch Systemvertrauen; ungültige Pfade oder fehlende Bereichssuchsymbole lösen EPdfKeychainError aus

Resolve exportiert die verfügbare Ausstellerkette über offline anfragelokale Zertifikatssuche und native Kettenbildung; Kandidaten sind auf 4096 Zertifikate, je 1 MiB und zusammen 16 MiB begrenzt; die gebildete Kette auf 32 einschließlich Blatt, das getrennt von ChainCertDer geliefert wird; Export begründet kein Vertrauen und installiert keinen Anker; fehlende Aussteller lassen sich nicht synthetisieren

Signaturfunktionen

FunktionBeschreibung
KeychainAvailableGibt True zurück, wenn Security.framework und CoreFoundation geladen sind und jedes für das Signieren erforderliche Symbol aufgelöst wurde
KeychainMissingSymbolsGibt die nicht aufgelösten Namen, durch Leerzeichen getrennt, zurück, oder einen leeren String, wenn alles gebunden ist
ConfigureKeychainSignerProviderBaut einen TPdfKeychainSignerProvider, installiert ihn als PAdES-Signatur-Backend und gibt ihn als IPadesSignerProvider zurück
TPdfKeychainSignerProvider.CreateWählt eine optionale vorhandene Keychaindatei für begrenzte Identitätssuche; eingebettete NUL und Pfade über 4096 Stringeinheiten werden abgelehnt
TPdfKeychainSignerProvider.BackendNameGibt die Backend-Kennung zurück, die für den Signatur-Provider gemeldet wird
TPdfKeychainSignerProvider.ResolveGleicht TPadesSignerOptions gegen die Keychain-Identitäten ab und gibt einen TPadesResolvedSigner mit Signer, Zertifikats-DER und Kette zurück

Verifikationsfunktionen

FunktionBeschreibung
KeychainVerificationAvailableGibt True zurück, wenn die Symbole für CMS-Decoder, Vertrauensrichtlinie und Vertrauensbewertung aufgelöst wurden
ConfigureKeychainCmsVerifierBaut einen TPdfKeychainCmsVerifier, installiert ihn als CMS-Verifikations-Backend und gibt ihn als IPdfCmsVerifier zurück
ConfigureKeychainTrustAnchorsKlont explizite DER-Anker für spätere Prüfungen ergänzend zu Systemankern ohne Keychainänderung; Limits: 64 Zertifikate, je 4 MiB, zusammen 16 MiB; leeres Array entfernt sie
ConfigureKeychainOcspResponsesKlont explizite DER-OCSP-Nachweise für native Security.framework-Prüfung; Limits: 8 Antworten, je 1 MiB, zusammen 4 MiB; leeres Array entfernt sie
TPdfKeychainCmsVerifier.BackendNameGibt die Backend-Kennung zurück, die für das Verifikations-Backend gemeldet wird
TPdfKeychainCmsVerifier.VerifyDetachedVerifiziert einen getrennten CMS-Wert gegen die beiden vom Aufrufer bereitgestellten Inhaltssegmente, die Segment1, Segment1Length, Segment2 und Segment2Length beschreiben, unter Verwendung der übergebenen TPdfCmsVerifyOptions
TPdfKeychainCmsVerifier.VerifyAttachedVerifiziert einen angehängten CMS-Wert, der seinen eigenen signierten Inhalt mitbringt, unter Verwendung der übergebenen TPdfCmsVerifyOptions

Typen

TypMember und Zweck
EPdfKeychainErrorException, die ausgelöst wird, wenn Security.framework nicht verfügbar ist, keine Keychain-Identität zum angeforderten Signer passt oder der plattformeigene Signaturaufruf fehlschlägt
TPdfKeychainSignerProviderPAdES-Signatur-Backend, das IPadesSignerProvider implementiert, mit BackendName und Resolve
TPdfKeychainCmsVerifierCMS-Verifikations-Backend, das IPdfCmsVerifier implementiert, mit BackendName, VerifyDetached und VerifyAttached

Hinweise

Siehe auch

FPdfCryptoWin, FPdfCrypto, FPdfCryptoOcsp, FPdfCms, FPdfTrustedList, FPdfMac