PDFium Delphi Component Docs

FPdfCryptoMac-enhet

Unit: FPdfCryptoMac
macOS Keychain-backend för PAdES-signering, plus CMS-verifiering och certifikattrotsutvärdering via Security.framework

Syntax

EPdfKeychainError = class(Exception);

TPdfKeychainSignerProvider = class(TInterfacedObject, IPadesSignerProvider)
  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;

Description

FPdfCryptoMac är macOS-kryptobackenden som FPdfCrypto och FPdfCms konsumerar, och det täcker båda halvorna av plattformsintegrationen: PAdES-signering via en Keychain-identitet och CMS-verifiering via systemets CMS-avkodare och trotsutvärdering. Security.framework och CoreFoundation läses in och slås upp vid namn vid körning i stället för att länkas, så att enheten kompilerar på alla mål och rapporterar vid körning om plattformstjänsterna faktiskt kan nås

På signeringssidan implementerar TPdfKeychainSignerProvider IPadesSignerProvider. Dess Resolve-metod räknar upp Keychain-identiteterna, väljer den vars certifikat matchar SHA-1-tumavtrycket som TPadesSignerOptions bär, läser certifikatets DER och den matchande privatnyckelreferensen och returnerar en TPadesResolvedSigner vars ICmsSigner signerar de CMS-signerade attributen via Security.framework, så att privatnyckeln aldrig lämnar Keychain. Padding-schemat som begärs via alternativen avstämms mot vad nyckeln faktiskt klarar, och RSASSA-PSS-parametrarna är desamma som de andra backenderna skickar, så att ett dokument signerat på macOS får en identisk AlgorithmIdentifier. ConfigureKeychainSignerProvider bygger providern och installerar den som aktiv PAdES-signeringsbackend och returnerar det gränssnitt den registrerade

På verifieringssidan implementerar TPdfKeychainCmsVerifier IPdfCmsVerifier ovanpå CMSDecoder och SecTrust. VerifyDetached fogar samman de två signerade byteintervallen på varsin sida om signaturhålet till det fristående innehåll som avkodaren förväntar sig och verifierar därefter CMS-värdet mot det; VerifyAttached verifierar ett CMS-värde som bär sitt eget innehåll, vilket är det en tidsstämpeltoken behöver. Båda returnerar en TPdfCmsVerifyResult som rapporterar signaturstatus, trotsstatus och återkallningsstatus var för sig, samlar valfritt in signerarcertifikatet och den utvärderade kedjan, och båda följer återkallnings-, onlinehämtnings- och kontrollpunktsinställningarna i TPdfCmsVerifyOptions. ConfigureKeychainCmsVerifier bygger verifieraren och installerar den som aktiv CMS-verifieringsbackend

Signaturgiltighet och certifikattrot förblir separata resultat, så en äkta signatur under en otrott eller självsignerad kedja förblir åtskild från manipulerat innehåll

För en bifogad RFC 3161-token levererar avgränsad DER-tolkning de ursprungliga inkapslade TSTInfo-oktetterna till den nativa avkodaren utan att ändra deras innehållstyp eller signerade attribut. Det vanliga CMS-verifieringspasset utesluter osignerade attribut från sin nativa indata så att automatisk tidsstämpelbearbetning inte kan ersätta den yttre signaturens egen integritet eller kedjeresultat. Detta pass validerar inte motsignaturer eller andra osignerade attribut; ValidatePadesTrust verifierar varje ursprunglig tidsstämpeltoken, meddelandeavtryck, TSA-certifikatroll, tillit och återkallningsresultat separat

Skicka en Keychain-filsökväg till TPdfKeychainSignerProvider.Create för att begränsa identitetsuppslagningen till den Keychain-filen via en frågelokal söklista och registrera sedan providern med ConfigurePadesSignerProvider. En tom sökväg använder den aktuella användarens sökomfattning. Att öppna eller söka i den valda Keychain-filen ändrar inte standard-Keychain, användarens söklista eller systemets trotskonfiguration; ogiltiga sökvägar och otillgängliga scoped-search-symboler utlöser EPdfKeychainError

Resolve exporterar även signeringscertifikatets tillgängliga utfärdarkedja via en offline, frågelokal certifikatuppslagning och nativ kedjekonstruktion. Kandidatcertifikat är begränsade till 4096 poster, 1 MiB vardera och 16 MiB totalt; den konstruerade kedjan är begränsad till 32 certifikat inklusive lövet, vilket returneras separat från ChainCertDer. Att exportera certifikatmaterial fastställer ingen tillit och installerar inget trust anchor, och en otillgänglig utfärdare kan inte syntetiseras

Signing Functions

FunctionDescription
KeychainAvailableReturnerar True när Security.framework och CoreFoundation lästs in och alla symboler som krävs för signering slagits upp
KeychainMissingSymbolsReturnerar namnen som inte kunde slås upp, åtskilda av mellanslag, eller en tom sträng när allt band
ConfigureKeychainSignerProviderBygger en TPdfKeychainSignerProvider, installerar den som PAdES-signeringsbackend och returnerar den som en IPadesSignerProvider
TPdfKeychainSignerProvider.CreateVäljer en valfri befintlig Keychain-fil för begränsad identitetsuppslagning och avvisar inbäddade NUL-tecken och sökvägar längre än 4096 strängkodsenheter
TPdfKeychainSignerProvider.BackendNameReturnerar backend-identifieraren som rapporteras för signeringsprovidern
TPdfKeychainSignerProvider.ResolveMatchar TPadesSignerOptions mot Keychain-identiteterna och returnerar en TPadesResolvedSigner som håller signeraren, certifikatets DER och kedjan

Verification Functions

FunctionDescription
KeychainVerificationAvailableReturnerar True när symbolerna för CMS-avkodaren, trotspolicyn och trotsutvärderingen slagits upp
ConfigureKeychainCmsVerifierBygger en TPdfKeychainCmsVerifier, installerar den som CMS-verifieringsbackend och returnerar den som en IPdfCmsVerifier
ConfigureKeychainTrustAnchorsKlonar explicita DER-ankare för varje senare trotsutvärdering och kompletterar systemets ankare utan att ändra Keychain-filen; gränserna är 64 certifikat, 4 MiB vardera och 16 MiB totalt, och en tom array rensar dem
ConfigureKeychainOcspResponsesKlonar explicit DER-OCSP-evidens för nativ Security.framework-utvärdering; gränserna är 8 svar, 1 MiB vardera och 4 MiB totalt, och en tom array rensar dem
TPdfKeychainCmsVerifier.BackendNameReturnerar backend-identifieraren som rapporteras för verifieringsbackenden
TPdfKeychainCmsVerifier.VerifyDetachedVerifierar ett fristående CMS-värde mot de två anroparägda innehållssegmenten som beskrivs av Segment1, Segment1Length, Segment2 och Segment2Length, med de angivna TPdfCmsVerifyOptions
TPdfKeychainCmsVerifier.VerifyAttachedVerifierar ett bifogat CMS-värde som bär sitt eget signerade innehåll, med de angivna TPdfCmsVerifyOptions

Types

TypeMembers and purpose
EPdfKeychainErrorUndantag som kastas när Security.framework inte är tillgängligt, när ingen Keychain-identitet matchar den begärda signeraren eller när plattformens signeringsanrop misslyckas
TPdfKeychainSignerProviderPAdES-signeringsbackend som implementerar IPadesSignerProvider, med BackendName och Resolve
TPdfKeychainCmsVerifierCMS-verifieringsbackend som implementerar IPdfCmsVerifier, med BackendName, VerifyDetached och VerifyAttached

Remarks

See Also

FPdfCryptoWin, FPdfCrypto, FPdfCryptoOcsp, FPdfCms, FPdfTrustedList, FPdfMac