PDFium Component Docs

FPdfCryptoMac unit

Unit: FPdfCryptoMac
macOS Keychain-backend voor PAdES-ondertekening, plus CMS-verificatie en certificaatvertrouwensevaluatie 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 is de macOS-cryptobackend die door FPdfCrypto en FPdfCms wordt gebruikt en die beide helften van de platformintegratie dekt: PAdES-ondertekening via een Keychain-identiteit, en CMS-verificatie via de systeem-CMS-decoder en vertrouwensevaluatie. Security.framework en CoreFoundation worden tijdens runtime op naam geladen en opgezocht in plaats van gekoppeld, zodat de unit op elk doel compileert en tijdens runtime rapporteert of de platformservices daadwerkelijk bereikbaar zijn

Aan de ondertekenkant implementeert TPdfKeychainSignerProvider IPadesSignerProvider. Zijn Resolve-methode somt de Keychain-identiteiten op, selecteert degene waarvan het certificaat overeenkomt met de SHA-1-thumbprint in TPadesSignerOptions, leest het certificaat-DER en de bijbehorende private-sleutelreferentie, en geeft een TPadesResolvedSigner terug waarvan de ICmsSigner de CMS signed attributes via Security.framework ondertekent, zodat de private sleutel de Keychain nooit verlaat. Het via de opties gevraagde paddingschema wordt afgestemd op wat de sleutel werkelijk kan, en de RSASSA-PSS-parameters zijn dezelfde die de andere backends emitteren, zodat een op macOS ondertekend document een identieke AlgorithmIdentifier meedraagt. ConfigureKeychainSignerProvider bouwt de provider en installeert deze als de actieve PAdES-ondertekeningsbackend, en geeft de geregistreerde interface terug

Aan de verificatiekant implementeert TPdfKeychainCmsVerifier IPdfCmsVerifier bovenop CMSDecoder en SecTrust. VerifyDetached voegt de twee ondertekende bytebereiken aan weerszijden van het handtekeninggat samen tot de losse inhoud die de decoder verwacht, en verifieert de CMS-waarde er vervolgens tegen; VerifyAttached verifieert een CMS-waarde die zijn eigen inhoud meedraagt, wat een timestamp-token nodig heeft. Beide geven een TPdfCmsVerifyResult terug die de status van de handtekening, het vertrouwen en de revocation apart rapporteert, optioneel het signercertificaat en de geëvalueerde keten verzamelt, en beide respecteren de instellingen voor revocation, online ophalen en checkpoints in TPdfCmsVerifyOptions. ConfigureKeychainCmsVerifier bouwt de verifier en installeert deze als de actieve CMS-verificatiebackend

Handtekeninggeldigheid en certificaatvertrouwen blijven onafhankelijke resultaten, zodat een authentieke handtekening onder een niet-vertrouwde of zelfondertekende keten onderscheidbaar blijft van gemanipuleerde inhoud

Voor een ingesloten RFC 3161-token levert begrensde DER-parsing de oorspronkelijk ingekapselde TSTInfo-octetten aan de native decoder, zonder hun contenttype of signed attributes te wijzigen. De gewone CMS-verificatieronde sluit unsigned attributes uit van zijn native invoer, zodat automatische timestampverwerking het eigen integriteits- of ketenresultaat van de buitenste handtekening niet kan vervangen. Deze ronde valideert geen medeondertekeningen of andere unsigned attributes; ValidatePadesTrust verifieert elk oorspronkelijk timestamp-token, message imprint, de TSA-certificaatrol, trust en revocatieresultaat apart

Geef een Keychain-bestandspad mee aan TPdfKeychainSignerProvider.Create om het opzoeken van identiteiten tot die Keychain te beperken via een query-lokale zoeklijst, en registreer de provider daarna met ConfigurePadesSignerProvider. Een leeg pad gebruikt het zoekbereik van de huidige gebruiker. Het openen of doorzoeken van de geselecteerde Keychain wijzigt de standaard-Keychain, de gebruikerszoeklijst of de systeemtrustconfiguratie niet; ongeldige paden en niet-beschikbare scoped-search-symbolen werpen EPdfKeychainError

Resolve exporteert ook de beschikbare issuersketen van het ondertekeningscertificaat via een offline, query-lokale certificaatopzoeking en native ketenconstructie. Kandidaatcertificaten zijn beperkt tot 4096 items, 1 MiB per stuk en 16 MiB in totaal; de opgebouwde keten is beperkt tot 32 certificaten inclusief het leaf, dat afzonderlijk van ChainCertDer wordt teruggegeven. Het exporteren van certificaatmateriaal vestigt geen vertrouwen en installeert geen trust anchor, en een niet-beschikbare issuer kan niet worden gesynthetiseerd

Signing Functions

FunctionDescription
KeychainAvailableGeeft True terug wanneer Security.framework en CoreFoundation zijn geladen en elk symbool dat voor ondertekening nodig is, is opgezocht
KeychainMissingSymbolsGeeft de namen terug die niet konden worden opgezocht, gescheiden door spaties, of een lege string wanneer alles is gebonden
ConfigureKeychainSignerProviderBouwt een TPdfKeychainSignerProvider, installeert hem als de PAdES-ondertekeningsbackend en geeft hem terug als IPadesSignerProvider
TPdfKeychainSignerProvider.CreateSelecteert een optionele bestaande Keychain voor scoped identiteitsopzoeking en wijst ingebedde NUL-tekens en paden langer dan 4096 string-code-eenheden af
TPdfKeychainSignerProvider.BackendNameGeeft de backend-identificatie terug die voor de ondertekeningsprovider wordt gerapporteerd
TPdfKeychainSignerProvider.ResolveVergelijkt TPadesSignerOptions met de Keychain-identiteiten en geeft een TPadesResolvedSigner terug met de signer, het certificaat-DER en de keten

Verification Functions

FunctionDescription
KeychainVerificationAvailableGeeft True terug wanneer de symbolen voor de CMS-decoder, het trustbeleid en de vertrouwensevaluatie zijn opgezocht
ConfigureKeychainCmsVerifierBouwt een TPdfKeychainCmsVerifier, installeert hem als de CMS-verificatiebackend en geeft hem terug als IPdfCmsVerifier
ConfigureKeychainTrustAnchorsKloont expliciete DER-anchors voor elke latere vertrouwensevaluatie, als aanvulling op systeemanchors zonder de Keychain te wijzigen; de limieten zijn 64 certificaten, 4 MiB per stuk en 16 MiB in totaal, en een lege array wist ze
ConfigureKeychainOcspResponsesKloont expliciet DER OCSP-bewijs voor native Security.framework-evaluatie; de limieten zijn 8 responses, 1 MiB per stuk en 4 MiB in totaal, en een lege array wist ze
TPdfKeychainCmsVerifier.BackendNameGeeft de backend-identificatie terug die voor de verificatiebackend wordt gerapporteerd
TPdfKeychainCmsVerifier.VerifyDetachedVerifieert een losse CMS-waarde tegen de twee inhoudssegmenten in eigendom van de aanroeper, beschreven door Segment1, Segment1Length, Segment2 en Segment2Length, met de opgegeven TPdfCmsVerifyOptions
TPdfKeychainCmsVerifier.VerifyAttachedVerifieert een ingesloten CMS-waarde die zijn eigen ondertekende inhoud meedraagt, met de opgegeven TPdfCmsVerifyOptions

Types

TypeMembers and purpose
EPdfKeychainErrorExceptie die wordt verhoogd wanneer Security.framework niet beschikbaar is, wanneer geen enkele Keychain-identiteit overeenkomt met de gevraagde signer, of wanneer de platform-ondertekenaanroep faalt
TPdfKeychainSignerProviderPAdES-ondertekeningsbackend die IPadesSignerProvider implementeert, met BackendName en Resolve
TPdfKeychainCmsVerifierCMS-verificatiebackend die IPdfCmsVerifier implementeert, met BackendName, VerifyDetached en VerifyAttached

Remarks

See Also

FPdfCryptoWin, FPdfCrypto, FPdfCms, FPdfTrustedList, FPdfMac