PDFium Delphi Component Docs

Unité FPdfCryptoMac

Unité : FPdfCryptoMac
Backend Keychain de macOS pour la signature PAdES, plus la vérification CMS et l’évaluation de confiance des certificats via Security.framework

Syntaxe

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

Description

FPdfCryptoMac est le backend cryptographique macOS consommé par FPdfCrypto et FPdfCms, et il couvre les deux moitiés de l’intégration de plateforme : la signature PAdES via une identité Keychain, et la vérification CMS via le décodeur CMS système et l’évaluation de confiance. Security.framework et CoreFoundation sont chargés et résolus par nom à l’exécution plutôt que liés, l’unité se compile donc sur chaque cible et signale à l’exécution si les services de la plateforme sont réellement joignables

Côté signature, TPdfKeychainSignerProvider implémente IPadesSignerProvider. Sa méthode Resolve énumère les identités Keychain, sélectionne celle dont le certificat correspond à l’empreinte SHA-1 portée par TPadesSignerOptions, lit le DER du certificat et la référence de clé privée correspondante, et renvoie un TPadesResolvedSigner dont l’ICmsSigner signe les attributs signés CMS via Security.framework, de sorte que la clé privée ne quitte jamais le Keychain. Le schéma de remplissage demandé via les options est mis en accord avec ce que la clé sait réellement faire, et les paramètres RSASSA-PSS sont les mêmes que ceux que les autres backends émettent, si bien qu’un document signé sur macOS porte un AlgorithmIdentifier identique. ConfigureKeychainSignerProvider construit le fournisseur et l’installe comme backend de signature PAdES actif, en renvoyant l’interface qu’il a enregistrée

Pour la vérification, TPdfKeychainCmsVerifier implémente IPdfCmsVerifier avec CMSDecoder et SecTrust ; VerifyDetached réunit les deux plages signées entourant le trou de signature en contenu détaché attendu par le décodeur, puis vérifie le CMS ; VerifyAttached vérifie un CMS portant son contenu, comme un jeton d’horodatage ; les deux renvoient un TPdfCmsVerifyResult séparant signature, confiance et révocation, avec collecte facultative du certificat signataire et de la chaîne évaluée, et respectent révocation, récupération en ligne et checkpoints de TPdfCmsVerifyOptions ; ConfigureKeychainCmsVerifier construit et installe le backend actif

La validité de la signature et la confiance dans le certificat restent des résultats indépendants, de sorte qu’une signature authentique sous une chaîne non fiable ou auto-signée demeure distinguable d’un contenu altéré

Pour un jeton RFC 3161 attaché, l’analyse DER bornée fournit au décodeur natif les octets encapsulés originaux de TSTInfo, sans changer leur type de contenu ni attributs signés ; la vérification CMS ordinaire exclut les attributs non signés de son entrée native afin que le traitement automatique de l’horodatage ne remplace pas l’intégrité ou la chaîne de la signature externe ; elle ne valide ni contresignatures ni autres attributs non signés ; ValidatePadesTrust vérifie séparément chaque jeton original, empreinte, rôle du certificat TSA, confiance et révocation

Passez le chemin d’un fichier Keychain à TPdfKeychainSignerProvider.Create pour limiter la recherche d’identité à ce Keychain avec une liste locale à la requête, puis enregistrez le fournisseur avec ConfigurePadesSignerProvider ; un chemin vide utilise la portée de recherche de l’utilisateur courant ; ouvrir ou rechercher ce Keychain ne modifie ni Keychain par défaut, ni liste utilisateur, ni configuration de confiance système ; un chemin invalide ou des symboles de recherche limitée indisponibles lèvent EPdfKeychainError

Resolve exporte aussi la chaîne d’émetteurs disponible du certificat signataire via une recherche hors ligne locale à la requête et une construction native de chaîne ; les candidats sont limités à 4096 certificats, 1 MiB chacun et 16 MiB au total ; la chaîne construite est limitée à 32 certificats, feuille comprise, celle-ci étant renvoyée séparément de ChainCertDer ; exporter des certificats n’établit pas leur confiance et n’installe aucune ancre ; un émetteur absent ne peut pas être synthétisé

Fonctions de signature

FonctionDescription
KeychainAvailableRenvoie True lorsque Security.framework et CoreFoundation sont chargés et que chaque symbole requis pour la signature est résolu
KeychainMissingSymbolsRenvoie les noms qui n’ont pas pu être résolus, séparés par des espaces, ou une chaîne vide lorsque tout est lié
ConfigureKeychainSignerProviderConstruit un TPdfKeychainSignerProvider, l’installe comme backend de signature PAdES et le renvoie comme IPadesSignerProvider
TPdfKeychainSignerProvider.CreateSélectionne un fichier Keychain existant facultatif pour limiter la recherche d’identité ; refuse les NUL incorporés et les chemins de plus de 4096 unités de chaîne
TPdfKeychainSignerProvider.BackendNameRenvoie l’identifiant de backend signalé pour le fournisseur de signature
TPdfKeychainSignerProvider.ResolveMet en correspondance TPadesSignerOptions avec les identités Keychain et renvoie un TPadesResolvedSigner contenant le signataire, le DER du certificat et la chaîne

Fonctions de vérification

FonctionDescription
KeychainVerificationAvailableRenvoie True lorsque les symboles du décodeur CMS, de la politique de confiance et de l’évaluation de confiance sont résolus
ConfigureKeychainCmsVerifierConstruit un TPdfKeychainCmsVerifier, l’installe comme backend de vérification CMS et le renvoie comme IPdfCmsVerifier
ConfigureKeychainTrustAnchorsClone les ancres DER explicites pour les évaluations ultérieures, en complément des ancres système sans modifier le Keychain ; limites : 64 certificats, 4 MiB chacun et 16 MiB au total ; un tableau vide les supprime
ConfigureKeychainOcspResponsesClone les preuves OCSP DER explicites pour l’évaluation native Security.framework ; limites : 8 réponses, 1 MiB chacune et 4 MiB au total ; un tableau vide les supprime
TPdfKeychainCmsVerifier.BackendNameRenvoie l’identifiant de backend signalé pour le backend de vérification
TPdfKeychainCmsVerifier.VerifyDetachedVérifie une valeur CMS détachée par rapport aux deux segments de contenu possédés par l’appelant décrits par Segment1, Segment1Length, Segment2 et Segment2Length, en utilisant les TPdfCmsVerifyOptions fournies
TPdfKeychainCmsVerifier.VerifyAttachedVérifie une valeur CMS attachée qui porte son propre contenu signé, en utilisant les TPdfCmsVerifyOptions fournies

Types

TypeMembres et rôle
EPdfKeychainErrorException levée lorsque Security.framework est indisponible, lorsqu’aucune identité Keychain ne correspond au signataire demandé ou lorsque l’appel de signature de la plateforme échoue
TPdfKeychainSignerProviderBackend de signature PAdES implémentant IPadesSignerProvider, avec BackendName et Resolve
TPdfKeychainCmsVerifierBackend de vérification CMS implémentant IPdfCmsVerifier, avec BackendName, VerifyDetached et VerifyAttached

Remarques

Voir aussi

FPdfCryptoWin, FPdfCrypto, FPdfCryptoOcsp, FPdfCms, FPdfTrustedList, FPdfMac