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;
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
| Function | Description |
|---|---|
PadesCryptoAvailable | Returnerar True när en kryptobackend är tillgänglig för PAdES-signering på den aktuella plattformen |
PadesCryptoBackendName | Returnerar visningsnamnet på den aktiva kryptobackenden |
ResolvePadesSigner | Löser upp ett certifikat-tumavtryck och ett padding-schema till en signerare, ett signerarcertifikat och en kedja |
ConfigurePdfCertificatePathValidator | Sätter eller rensar den processövergripande IPdfCertificatePathValidator som används av ValidatePdfCertificatePath |
ValidatePdfCertificatePath | Validerar 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 |
ConfigurePadesSignerProvider | Sätter eller rensar den processövergripande signerarprovidern som används före plattformsbackenden |
ConfigurePadesCmsVerifier | Installerar 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 |
PadesCmsVerificationAvailable | Returnerar True när någon backend kan verifiera CMS i den aktuella byggen, oavsett om den är registrerad eller inbyggd |
PadesCmsVerificationBackendName | Returnerar visningsnamnet på den aktiva verifieringsbackenden, eller en tom sträng när ingen finns |
| Interface member | Description |
|---|---|
IPdfTrustStore.LoadTrustAnchors | Returnerar ytterligare DER-kodade trust anchors inom de konfigurerade certifikatbudgeterna |
IPdfValidationFetcher.Fetch | Hämtar valideringsmaterial från Uri utan att överskrida MaxBytes |
IPdfCertificatePathValidator.Validate | Bygger och utvärderar certifikatsökvägen och fyller i TPdfCertificatePathReport |
IPadesSignerProvider.BackendName | Returnerar providerns visningsnamn som exponeras av PadesCryptoBackendName |
IPadesSignerProvider.Resolve | Returnerar komplett signerarmaterial för de angivna TPadesSignerOptions |
IPdfPkcs11SignerProvider.EnumerateSlots | Returnerar tillgängliga PKCS#11-slots och metadata om token-närvaro |
IPdfPkcs11SignerProvider.EnumerateCertificates | Returnerar certifikaten och signeringsmekanismerna som syns i en PKCS#11-slot |
IPdfPkcs11SignerProvider.CloseProtectedSessions | Stänger skyddade eller autentiserade PKCS#11-sessioner som ägs av providern |
IPdfCmsVerifier.BackendName | Returnerar verifieringsbackendens visningsnamn som rapporteras av PadesCmsVerificationBackendName |
IPdfCmsVerifier.VerifyDetached | Verifierar en PDF-signatur, vars signerade innehåll är de två byteintervall på vardera sidan om /Contents-hålet |
IPdfCmsVerifier.VerifyAttached | Verifierar en tidsstämpeltoken, som bär sitt eget innehåll och inte behöver några separata segment |
| Type | Description |
|---|---|
EPadesCrypto | Basundantag för fel i kryptobackenden |
EPadesCryptoUnavailable | Raisas när en obligatorisk signerarbackend eller certifikatsökvägsvaliderare inte är konfigurerad |
TPadesPaddingScheme | psRsaPss, psRsaPkcs1v15 eller psEcdsa |
TPadesSignerOptions | CertificateThumbprint väljer certifikatet och PaddingScheme väljer signaturschemat; Default använder ett tomt tumavtryck och psRsaPss |
TPadesChainCertArray | Dynamisk array av DER-kodade kedjecertifikat |
TPadesResolvedSigner | Signer, SignerCertDer och ChainCertDer samlar den upplösta signeraren och certifikatmaterialet |
TPdfRevocationMode | prmNone, prmOffline, prmOnlineAllowed eller prmOnlineRequired |
TPdfStringArray | Dynamiskt strängfält som används för policy-OID:er och providerns mekanismnamn |
TPdfCertificatePathOptions | ValidationTime, 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 |
TPdfCertificatePathReport | Trusted, PathBuilt, PolicyValid, RevocationChecked, PathCertificateCount, ErrorCode och ErrorMessage rapporterar valideringsutfallet |
TPdfPkcs11Slot | SlotID, Description, TokenLabel och TokenPresent beskriver en PKCS#11-slot |
TPdfPkcs11Slots | Dynamiskt fält av TPdfPkcs11Slot-poster |
TPdfPkcs11Certificate | SlotID, ObjectID, LabelText, CertificateDer och Mechanisms beskriver ett tokencertifikat |
TPdfPkcs11Certificates | Dynamiskt fält av TPdfPkcs11Certificate-poster |
TPadesSignerResolverProc | Funktionspekartyp för injektions-variabeln PadesSignerResolverOverride |
TPdfCmsVerifyStatus | pcvsUnavailable, pcvsValid, pcvsInvalid, pcvsUnsupported eller pcvsIndeterminate |
TPdfCmsRevocationReason | pcrrNone, pcrrCertificateRevoked, pcrrCrlExpired, pcrrCrlNotYetValid, pcrrCrlUnavailable, pcrrCrlSignatureInvalid, pcrrCrlInvalid, pcrrChainUntrusted, pcrrUnknown, pcrrOcspUnavailable, pcrrOcspInvalid eller pcrrOcspStatusUnknown förklarar återkallningsevidens separat från verifieringsstatusen |
TPdfCmsVerifyStage | pcvstCryptographicSignature, pcvstChainBuild, pcvstOnlineRetrieval eller pcvstRevocationCheck |
TPdfCmsVerifyCheckpoint | Callback för objektmetod som tar emot varje TPdfCmsVerifyStage allteftersom verifieringen fortlöper |
TPdfCmsVerifyOptions | OnlineRetrieval, 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 |
TPdfCmsSignerVerifyResult | SignerIndex 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 |
TPdfCmsSignerVerifyResults | Dynamisk array av avgränsade signerarögonblicksbilder |
TPdfCmsVerifyResult | Aggregerade signatur-, tillit- och återkallningsstatusar förblir oberoende. Posten returnerar även SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason, RevocationError, RevocationCertificate, SignerResults, SignerDiagnosticsStatus och SignerCount |
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
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
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
| Variable | Description |
|---|---|
PadesSignerResolverOverride | Valfri upplösningscallback som utvärderas före registrerade och plattformsbaserade providers |
PadesCmsVerifier | Aktuell CMS-verifieringsbackend, normalt tilldelad via ConfigurePadesCmsVerifier |
PdfCertificatePathValidator | Aktuell certifikatsökvägsvaliderare, normalt tilldelad via ConfigurePdfCertificatePathValidator |
PadesSignerProvider | Aktuell signerarprovider, normalt tilldelad via ConfigurePadesSignerProvider |