PDFium Delphi Component Docs

Unità FPdfCryptoMac

Unità: FPdfCryptoMac
Backend Keychain di macOS per la firma PAdES, oltre alla verifica CMS e alla valutazione di attendibilità dei certificati tramite Security.framework

Sintassi

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);

Descrizione

FPdfCryptoMac è il backend crittografico macOS consumato da FPdfCrypto e FPdfCms, e copre entrambe le metà dell'integrazione di piattaforma: la firma PAdES tramite un'identità Keychain, e la verifica CMS tramite il decoder CMS di sistema e la valutazione di attendibilità. Security.framework e CoreFoundation vengono caricati e risolti per nome a runtime anziché essere linkati, così l'unità compila su ogni target e riporta a runtime se i servizi della piattaforma sono effettivamente raggiungibili

Sul fronte della firma, TPdfKeychainSignerProvider implementa IPadesSignerProvider. Il suo metodo Resolve enumera le identità del Keychain, seleziona quella il cui certificato corrisponde al thumbprint SHA-1 portato da TPadesSignerOptions, legge il DER del certificato e il riferimento alla chiave privata corrispondente, e restituisce un TPadesResolvedSigner il cui ICmsSigner firma gli attributi firmati CMS tramite Security.framework, così la chiave privata non lascia mai il Keychain. Lo schema di padding richiesto tramite le opzioni viene riconciliato con ciò che la chiave può effettivamente fare, e i parametri RSASSA-PSS sono gli stessi che gli altri backend emettono, così un documento firmato su macOS porta un AlgorithmIdentifier identico. ConfigureKeychainSignerProvider costruisce il provider e lo installa come backend di firma PAdES attivo, restituendo l'interfaccia che ha registrato

Per la verifica, TPdfKeychainCmsVerifier implementa IPdfCmsVerifier su CMSDecoder e SecTrust. VerifyDetached unisce i due intervalli firmati ai lati del vuoto della firma nel contenuto detached richiesto dal decoder e verifica il valore CMS; VerifyAttached verifica un valore CMS con contenuto incorporato, necessario per i token di timestamp. Entrambi restituiscono TPdfCmsVerifyResult con stati separati di firma, attendibilità e revoca, raccogliendo opzionalmente certificato del firmatario e catena valutata e rispettando revoca, recupero online e checkpoint di TPdfCmsVerifyOptions. ConfigureKeychainCmsVerifier costruisce il verificatore e lo installa come backend CMS attivo

La validità della firma e l'attendibilità del certificato restano risultati indipendenti, così una firma autentica sotto una catena non attendibile o autofirmata resta distinguibile da un contenuto manomesso

Per un token RFC 3161 attached, il parsing DER limitato passa al decoder nativo gli ottetti TSTInfo originali senza cambiarne tipo di contenuto o attributi firmati. La verifica CMS ordinaria esclude gli attributi non firmati dall'input nativo, affinché il trattamento automatico del timestamp non sostituisca integrità o catena della firma esterna. Questa fase non verifica controfirme o altri attributi non firmati; ValidatePadesTrust verifica separatamente ogni token di timestamp originale, imprint, ruolo del certificato TSA, attendibilità e revoca

Passare un percorso Keychain a TPdfKeychainSignerProvider.Create per limitare la ricerca dell'identità a quel file tramite una lista locale alla query, quindi registrare il provider con ConfigurePadesSignerProvider. Un percorso vuoto usa l'ambito di ricerca dell'utente corrente. Apertura o ricerca non cambiano Keychain predefinito, lista utente o attendibilità di sistema; percorsi non validi e simboli di ricerca circoscritta indisponibili sollevano EPdfKeychainError

Resolve esporta anche la catena degli emittenti disponibile del certificato di firma tramite ricerca offline locale alla query e costruzione nativa della catena. I candidati sono limitati a 4096 certificati, 1 MiB ciascuno e 16 MiB totali; la catena costruita a 32 certificati incluso il leaf, restituito separatamente da ChainCertDer. Esportare certificati non stabilisce attendibilità né installa un trust anchor e un emittente mancante non può essere sintetizzato

Funzioni di firma

FunzioneDescrizione
KeychainAvailableRestituisce True quando Security.framework e CoreFoundation sono caricati e ogni simbolo richiesto per la firma è stato risolto
KeychainMissingSymbolsRestituisce i nomi che non sono stati risolti, separati da spazi, o una stringa vuota quando tutto è stato linkato
ConfigureKeychainSignerProviderCostruisce un TPdfKeychainSignerProvider, lo installa come backend di firma PAdES e lo restituisce come IPadesSignerProvider
TPdfKeychainSignerProvider.CreateSeleziona opzionalmente un file Keychain esistente per circoscrivere la ricerca dell'identità; rifiuta NUL incorporati e percorsi oltre 4096 unità di codice di stringa
TPdfKeychainSignerProvider.BackendNameRestituisce l'identificatore di backend riportato per il provider di firma
TPdfKeychainSignerProvider.ResolveConfronta TPadesSignerOptions con le identità del Keychain e restituisce un TPadesResolvedSigner contenente il firmatario, il DER del certificato e la catena

Funzioni di verifica

FunzioneDescrizione
KeychainVerificationAvailableRestituisce True quando i simboli del decoder CMS, della trust policy e della valutazione di attendibilità sono stati risolti
ConfigureKeychainCmsVerifierCostruisce un TPdfKeychainCmsVerifier, lo installa come backend di verifica CMS e lo restituisce come IPdfCmsVerifier
ConfigureKeychainTrustAnchorsClona trust anchor DER espliciti per ogni successiva valutazione, integrando quelli di sistema senza modificare Keychain; i limiti sono 64 certificati, 4 MiB ciascuno e 16 MiB totali e un array vuoto li azzera
ConfigureKeychainOcspResponsesClona prove OCSP DER esplicite per la valutazione nativa Security.framework; i limiti sono 8 risposte, 1 MiB ciascuna e 4 MiB totali e un array vuoto le azzera
TPdfKeychainCmsVerifier.BackendNameRestituisce l'identificatore di backend riportato per il backend di verifica
TPdfKeychainCmsVerifier.VerifyDetachedVerifica un valore CMS detached rispetto ai due segmenti di contenuto posseduti dal chiamante descritti da Segment1, Segment1Length, Segment2 e Segment2Length, usando le TPdfCmsVerifyOptions fornite
TPdfKeychainCmsVerifier.VerifyAttachedVerifica un valore CMS attached che porta il proprio contenuto firmato, usando le TPdfCmsVerifyOptions fornite

Tipi

TipoMembri e scopo
EPdfKeychainErrorEccezione sollevata quando Security.framework non è disponibile, quando nessuna identità del Keychain corrisponde al firmatario richiesto, o quando la chiamata di firma della piattaforma fallisce
TPdfKeychainSignerProviderBackend di firma PAdES che implementa IPadesSignerProvider, con BackendName e Resolve
TPdfKeychainCmsVerifierBackend di verifica CMS che implementa IPdfCmsVerifier, con BackendName, VerifyDetached e VerifyAttached

Note

Vedere anche

FPdfCryptoWin, FPdfCrypto, FPdfCryptoOcsp, FPdfCms, FPdfTrustedList, FPdfMac