PDFium Delphi Component Docs

FPdfCrypto-enhet

Unit: FPdfCrypto
Fasad för PAdES-signerarproviders och certifikatvalidering för plattformsbackendar, PKCS#11-integrationer, trust stores, återkallningshämtare och begränsad sökvägsvalidering

Syntax

TPadesPaddingScheme = (psRsaPss, psRsaPkcs1v15, psEcdsa);

TPadesSignerOptions = record
  CertificateThumbprint: string;
  PaddingScheme: TPadesPaddingScheme;
  class function Default: TPadesSignerOptions; static;
end;

TPadesChainCertArray = array of TBytes;

TPadesResolvedSigner = record
  Signer: ICmsSigner;
  SignerCertDer: TBytes;
  ChainCertDer: TPadesChainCertArray;
end;

TPdfRevocationMode = (prmNone, prmOffline, prmOnlineAllowed,
  prmOnlineRequired);
TPdfStringArray = array of string;

TPdfCertificatePathOptions = record
  ValidationTime: TDateTime;
  RevocationMode: TPdfRevocationMode;
  RequiredPolicyOids: TPdfStringArray;
  MaxCertificates: Integer;
  MaxCertificateBytes: Integer;
  MaxFetchBytes: Integer;
  MaxPathDepth: Integer;
  class function Default: TPdfCertificatePathOptions; static;
end;

TPdfCertificatePathReport = record
  Trusted: Boolean;
  PathBuilt: Boolean;
  PolicyValid: Boolean;
  RevocationChecked: Boolean;
  PathCertificateCount: Integer;
  ErrorCode: Integer;
  ErrorMessage: string;
end;

IPdfTrustStore = interface
  function LoadTrustAnchors: TPadesChainCertArray;
end;

IPdfValidationFetcher = interface
  function Fetch(const Uri: string; MaxBytes: Integer;
    out Data: TBytes): Boolean;
end;

IPdfCertificatePathValidator = interface
  function Validate(const LeafCertificate: TBytes;
    const Intermediates, TrustAnchors: TPadesChainCertArray;
    TrustStore: IPdfTrustStore; Fetcher: IPdfValidationFetcher;
    const Options: TPdfCertificatePathOptions;
    out Report: TPdfCertificatePathReport): Boolean;
end;

IPadesSignerProvider = interface
  function BackendName: string;
  function Resolve(const Options: TPadesSignerOptions): TPadesResolvedSigner;
end;

TPdfPkcs11Slot = record
  SlotID: UInt64;
  Description: string;
  TokenLabel: string;
  TokenPresent: Boolean;
end;
TPdfPkcs11Slots = array of TPdfPkcs11Slot;

TPdfPkcs11Certificate = record
  SlotID: UInt64;
  ObjectID: TBytes;
  LabelText: string;
  CertificateDer: TBytes;
  Mechanisms: TPdfStringArray;
end;
TPdfPkcs11Certificates = array of TPdfPkcs11Certificate;

IPdfPkcs11SignerProvider = interface(IPadesSignerProvider)
  function EnumerateSlots: TPdfPkcs11Slots;
  function EnumerateCertificates(SlotID: UInt64): TPdfPkcs11Certificates;
  procedure CloseProtectedSessions;
end;

TPdfCmsVerifyStatus = (pcvsUnavailable, pcvsValid, pcvsInvalid,
  pcvsUnsupported, pcvsIndeterminate);
TPdfCmsRevocationReason = (pcrrNone, pcrrCertificateRevoked, pcrrCrlExpired,
  pcrrCrlNotYetValid, pcrrCrlUnavailable, pcrrCrlSignatureInvalid,
  pcrrCrlInvalid, pcrrChainUntrusted, pcrrUnknown);
TPdfCmsVerifyStage = (pcvstCryptographicSignature, pcvstChainBuild,
  pcvstOnlineRetrieval, pcvstRevocationCheck);
TPdfCmsVerifyCheckpoint = procedure(Stage: TPdfCmsVerifyStage) of object;

TPdfCmsVerifyOptions = record
  OnlineRetrieval: Boolean;
  CheckRevocation: Boolean;
  CollectChainCertificates: Boolean;
  UrlRetrievalTimeoutMs: Cardinal;
  OnCheckpoint: TPdfCmsVerifyCheckpoint;
  class function Default: TPdfCmsVerifyOptions; static;
end;

TPdfCmsVerifyResult = record
  SignatureStatus: TPdfCmsVerifyStatus;
  TrustStatus: TPdfCmsVerifyStatus;
  RevocationStatus: TPdfCmsVerifyStatus;
  SignatureError: Cardinal;
  TrustError: Cardinal;
  SignerCertificate: TBytes;
  ChainCertificates: TPadesChainCertArray;
  RevocationReason: TPdfCmsRevocationReason;
  RevocationError: Cardinal;
end;

IPdfCmsVerifier = interface
  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;

procedure ConfigurePadesCmsVerifier(const Verifier: IPdfCmsVerifier);
function PadesCmsVerificationAvailable: Boolean;
function PadesCmsVerificationBackendName: string;
function PadesCryptoAvailable: Boolean;
function PadesCryptoBackendName: string;
function ResolvePadesSigner(const Options: TPadesSignerOptions): TPadesResolvedSigner;
procedure ConfigurePdfCertificatePathValidator(
  const Validator: IPdfCertificatePathValidator);
function ValidatePdfCertificatePath(const LeafCertificate: TBytes;
  const Intermediates, TrustAnchors: TPadesChainCertArray;
  TrustStore: IPdfTrustStore; Fetcher: IPdfValidationFetcher;
  const Options: TPdfCertificatePathOptions;
  out Report: TPdfCertificatePathReport): Boolean;
procedure ConfigurePadesSignerProvider(const Provider: IPadesSignerProvider);

TPadesSignerResolverProc = function(const Options: TPadesSignerOptions): TPadesResolvedSigner;

PadesSignerResolverOverride: TPadesSignerResolverProc;
PdfCertificatePathValidator: IPdfCertificatePathValidator;
PadesSignerProvider: IPadesSignerProvider;

Description

FPdfCrypto är entrén till PAdES-signeringsstacken. PadesCryptoAvailable rapporterar om en kryptobackend är kopplad på den aktuella plattformen och PadesCryptoBackendName identifierar den; på Windows binds Cryptography Next Generation-backenden i FPdfCryptoWin automatiskt

ResolvePadesSigner tar ett certifikat-tumavtryck och ett padding-schema och returnerar en fullständigt ifylld TPadesResolvedSigner: ICmsSigner-implementeringen som utför privatnyckeloperationen, signerarcertifikatets DER och certifikaten i utfärdarkedjan. Resultatet skickas rakt till FPdfCms.BuildSignedData

Egna integrationer kan registrera en IPadesSignerProvider, inklusive en IPdfPkcs11SignerProvider som räknar upp tokenslots och certifikat, eller använda PadesSignerResolverOverride som en deterministisk upplösningsfog

Certifikatsökvägsvalidering är providerbaserad och budgeterad: anropare konfigurerar IPdfCertificatePathValidator, tillhandahåller valfritt explicita trust anchors, en IPdfTrustStore och en IPdfValidationFetcher och inspekterar därefter TPdfCertificatePathReport

Functions

FunctionDescription
PadesCryptoAvailableReturnerar True när en kryptobackend är tillgänglig för PAdES-signering på den aktuella plattformen
PadesCryptoBackendNameReturnerar visningsnamnet på den aktiva kryptobackenden
ResolvePadesSignerLöser upp ett certifikat-tumavtryck och ett padding-schema till en signerare, ett signerarcertifikat och en kedja
ConfigurePdfCertificatePathValidatorSätter eller rensar den processövergripande IPdfCertificatePathValidator som används av ValidatePdfCertificatePath
ValidatePdfCertificatePathValiderar ett lövcertifikat mot intermediära certifikat och de kombinerade explicita och trust store-baserade ankarna efter att budgeter för certifikatantal, storlek, hämtning och sökvägsdjup har framtvingats
ConfigurePadesSignerProviderSätter eller rensar den processövergripande signerarprovidern som används före plattformsbackenden
ConfigurePadesCmsVerifierInstallerar den CMS-verifieringsbackend som PAdES-valideraren använder; att rensa den återställer Windows CryptoAPI på Windows. Andra plattformar kräver ett explicit anrop till ConfigureSslCmsVerifier eller ConfigureKeychainCmsVerifier
PadesCmsVerificationAvailableReturnerar True när någon backend kan verifiera CMS i den aktuella byggen, oavsett om den är registrerad eller inbyggd
PadesCmsVerificationBackendNameReturnerar visningsnamnet på den aktiva verifieringsbackenden, eller en tom sträng när ingen finns

Provider interfaces

Interface memberDescription
IPdfTrustStore.LoadTrustAnchorsReturnerar ytterligare DER-kodade trust anchors inom de konfigurerade certifikatbudgeterna
IPdfValidationFetcher.FetchHämtar valideringsmaterial från Uri utan att överskrida MaxBytes
IPdfCertificatePathValidator.ValidateBygger och utvärderar certifikatsökvägen och fyller i TPdfCertificatePathReport
IPadesSignerProvider.BackendNameReturnerar providerns visningsnamn som exponeras av PadesCryptoBackendName
IPadesSignerProvider.ResolveReturnerar komplett signerarmaterial för de angivna TPadesSignerOptions
IPdfPkcs11SignerProvider.EnumerateSlotsReturnerar tillgängliga PKCS#11-slots och metadata om token-närvaro
IPdfPkcs11SignerProvider.EnumerateCertificatesReturnerar certifikaten och signeringsmekanismerna som syns i en PKCS#11-slot
IPdfPkcs11SignerProvider.CloseProtectedSessionsStänger skyddade eller autentiserade PKCS#11-sessioner som ägs av providern
IPdfCmsVerifier.BackendNameReturnerar verifieringsbackendens visningsnamn som rapporteras av PadesCmsVerificationBackendName
IPdfCmsVerifier.VerifyDetachedVerifierar en PDF-signatur, vars signerade innehåll är de två byteintervall på vardera sidan om /Contents-hålet
IPdfCmsVerifier.VerifyAttachedVerifierar en tidsstämpeltoken, som bär sitt eget innehåll och inte behöver några separata segment

Types

TypeDescription
EPadesCryptoBasundantag för fel i kryptobackenden
EPadesCryptoUnavailableRaisas när en obligatorisk signerarbackend eller certifikatsökvägsvaliderare inte är konfigurerad
TPadesPaddingSchemepsRsaPss, psRsaPkcs1v15 eller psEcdsa
TPadesSignerOptionsCertificateThumbprint väljer certifikatet och PaddingScheme väljer signaturschemat; Default använder ett tomt tumavtryck och psRsaPss
TPadesChainCertArrayDynamisk array av DER-kodade kedjecertifikat
TPadesResolvedSignerSigner, SignerCertDer och ChainCertDer samlar den upplösta signeraren och certifikatmaterialet
TPdfRevocationModeprmNone, prmOffline, prmOnlineAllowed eller prmOnlineRequired
TPdfStringArrayDynamiskt strängfält som används för policy-OID:er och providerns mekanismnamn
TPdfCertificatePathOptionsValidationTime, RevocationMode, RequiredPolicyOids, MaxCertificates, MaxCertificateBytes, MaxFetchBytes och MaxPathDepth styr validering och resursbudgeter; Default väljer offline-återkallning med gränserna 64 certifikat, 4 MiB per certifikat, 16 MiB hämtad data och sökvägsdjup 16
TPdfCertificatePathReportTrusted, PathBuilt, PolicyValid, RevocationChecked, PathCertificateCount, ErrorCode och ErrorMessage rapporterar valideringsutfallet
TPdfPkcs11SlotSlotID, Description, TokenLabel och TokenPresent beskriver en PKCS#11-slot
TPdfPkcs11SlotsDynamiskt fält av TPdfPkcs11Slot-poster
TPdfPkcs11CertificateSlotID, ObjectID, LabelText, CertificateDer och Mechanisms beskriver ett tokencertifikat
TPdfPkcs11CertificatesDynamiskt fält av TPdfPkcs11Certificate-poster
TPadesSignerResolverProcFunktionspekartyp för injektions-variabeln PadesSignerResolverOverride
TPdfCmsVerifyStatuspcvsUnavailable, pcvsValid, pcvsInvalid, pcvsUnsupported eller pcvsIndeterminate
TPdfCmsRevocationReasonpcrrNone, pcrrCertificateRevoked, pcrrCrlExpired, pcrrCrlNotYetValid, pcrrCrlUnavailable, pcrrCrlSignatureInvalid, pcrrCrlInvalid, pcrrChainUntrusted, pcrrUnknown, pcrrOcspUnavailable, pcrrOcspInvalid eller pcrrOcspStatusUnknown förklarar återkallningsevidens separat från verifieringsstatusen
TPdfCmsVerifyStagepcvstCryptographicSignature, pcvstChainBuild, pcvstOnlineRetrieval eller pcvstRevocationCheck
TPdfCmsVerifyCheckpointCallback för objektmetod som tar emot varje TPdfCmsVerifyStage allteftersom verifieringen fortlöper
TPdfCmsVerifyOptionsOnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs och OnCheckpoint styr verifieringen; CollectSignerDiagnostics efterfrågar ögonblicksbilder per signerare och MaxSignerCount begränsar deras antal. Default stänger av hämtning, återkallning och signerardiagnostik, sätter en hämtningsbudget på 15 sekunder och begränsar signerarögonblicksbilder till 64
TPdfCmsSignerVerifyResultSignerIndex identifierar den kodade SignerInfo-ordningen; signatur-, tillit- och återkallningsstatusar samt nativa fel beskriver den signeraren oberoende. SignerCertificate är dess DER-certifikat, medan RevocationCertificate identifierar det certifikat som är kopplat till ett fångat återkallningsfel när backenden kan leverera det
TPdfCmsSignerVerifyResultsDynamisk array av avgränsade signerarögonblicksbilder
TPdfCmsVerifyResultAggregerade signatur-, tillit- och återkallningsstatusar förblir oberoende. Posten returnerar även SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason, RevocationError, RevocationCertificate, SignerResults, SignerDiagnosticsStatus och SignerCount

Revocation diagnostics

Bygg om konsumenter vid uppgradering eftersom de publika option- och resultatposterna har vuxit. Egna verifierarimplementeringar bör initiera hanterade resultatposter med Default(TPdfCmsVerifyResult) och lämna ögonblicksbildsfält som inte stöds otillgängliga; rensa inte en levande post som innehåller strängar eller dynamiska arrayer med FillChar

Läs RevocationReason och RevocationError ur den TPdfCmsVerifyResult som IPdfCmsVerifier.VerifyDetached eller VerifyAttached returnerar. PAdES-tillitsvalideringen bevarar dem som RevocationReason och NativeRevocationError, med separata fält TimeStampRevocationReason och NativeTimeStampRevocationError för tidsstämpeltokens; evidensrapporterna innehåller båda paren

RevocationError är en backendspecifik nativ verifieringskod, där noll betyder att ingen nativ diagnostik fångades. OpenSSL använder felutrymmet X509_V_ERR_*. Windows bevarar ett rått DWORD från ett certifikats CERT_REVOCATION_INFO.dwRevocationResult, eller från GetLastError om anropet av återkallningskedjan misslyckas; det är inte ett enhetligt HRESULT-felutrymme och inte heller den aggregerade kedjetillitsbitmasken

OpenSSL skiljer bekräftad återkallning från utgången, otillgänglig eller ogiltig CRL-evidens samt från otillgängligt, ogiltigt eller okänt OCSP-evidens. Windows rapporterar bekräftad återkallning, obetrodda kedjor eller ett okänt nativt fel. macOS-verifieraren utvärderar signaturintegritet, Basic X.509-tillit och återkallning separat och returnerar nativa Security.framework-fel utan att översätta varje plattformsfel till en CRL- eller OCSP-klassificering

RevocationCertificate kan identifiera ett återkallat mellancertifikat snarare än CMS-signerarcertifikatet; det är tomt när backenden inte kan fånga det certifikatet. OpenSSL kan samla in det, medan den aktuella macOS-backenden lämnar det tomt

Varken pcrrNone eller ett nollfel bevisar att återkallning kontrollerats eller lyckats; inspektera alltid RevocationStatus

Diagnostik per signerare

Sätt CollectSignerDiagnostics=True för att inspektera avgränsade ögonblicksbilder i SignerResults. SignerCount är det kodade SignerInfo-antalet när det fastställts; värdet noll betyder att antalet inte fastställdes

SignerDiagnosticsStatus=pcvsValid betyder att de begärda ögonblicksbilderna är kompletta, inklusive ögonblicksbilder av ogiltiga signaturer; det betyder inte att alla signaturer godkändes. pcvsUnavailable betyder att insamlingen var avstängd eller inte stöds, och pcvsIndeterminate betyder att backenden inte kunde slutföra den begärda insamlingen inom sina tolknings- eller resursgränser

OpenSSL- och de nativa macOS-implementationerna begränsar insamlingen till 64 signerare. OpenSSL begränsar dessutom diagnostik-CMS-indata till 4 MiB och sammanlagt diagnostik-indata/utdata-arbete till 64 MiB; macOS begränsar returnerat certifikatmaterial till 4 MiB per certifikat och 64 MiB totalt. Ett lägre MaxSignerCount minskar ytterligare anroparens begärda antal

Signerarögonblicksbilder återanvänder konfigurerat evidens och evidens som hämtats under den aggregerade verifieringen. OpenSSL utför ingen andra nätverkshämtning för varje diagnostikögonblicksbild, och en ofullständig aggregerad hämtning kan inte bli en lyckad offline-återkallningsögonblicksbild

Standardbackend för signering

PadesSignerResolverOverride har prioritet, följt av en explicit registrerad IPadesSignerProvider och därefter plattformens standard. Standardvärden utanför Windows kräver ConfigureSslSigningCredentials; tillgång till enbart libcrypto ger ingen privatnyckel eller certifikat

OpenSSL-standarden avvisar ett icke-tomt CertificateThumbprint eftersom dess certifikat valdes genom explicit konfiguration. Keychain-signering förblir tillgänglig via ConfigureKeychainSignerProvider när applikationen väljer den providern

Global provider variables

VariableDescription
PadesSignerResolverOverrideValfri upplösningscallback som utvärderas före registrerade och plattformsbaserade providers
PadesCmsVerifierAktuell CMS-verifieringsbackend, normalt tilldelad via ConfigurePadesCmsVerifier
PdfCertificatePathValidatorAktuell certifikatsökvägsvaliderare, normalt tilldelad via ConfigurePdfCertificatePathValidator
PadesSignerProviderAktuell signerarprovider, normalt tilldelad via ConfigurePadesSignerProvider

See Also

FPdfCms, FPdfCryptoWin, FPdfCryptoSsl, FPdfCryptoMac, FPdfCryptoOcsp, FPdfTsa, TPdf.SignPades