PDFium Delphi Component Docs

FPdfCryptoWin Unité

Module: FPdfCryptoWin
Backend de l’API Cryptography de Windows pour la signature PAdES, la vérification CMS détachée et l’évaluation de confiance des certificats système en cache seul

Syntax

function WinCryptoAvailable: Boolean;
function WinCmsVerificationAvailable: Boolean;
function VerifyWinDetachedCms(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal): TWinCmsVerifyResult;
function VerifyWinDetachedCmsEx(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal; const Options: TWinCmsVerifyOptions): TWinCmsVerifyResult;
function VerifyWinAttachedCmsEx(const CmsDer: TBytes; const Options: TWinCmsVerifyOptions): TWinCmsVerifyResult;
function ResolveWinSigner(const Options: TPadesSignerOptions): TPadesResolvedSigner;
function TestBuildWinCmsTrust(SignerCert: Pointer;
  const Options: TWinCmsVerifyOptions; GetChain, VerifyPolicy,
  FreeChain: Pointer): TWinCmsVerifyResult; // PDFIUMPAS_CRYPTO_TESTS only

Description

FPdfCryptoWin est le backend cryptographique spécifique à Windows consommé par FPdfCrypto. Il ouvre les magasins de certificats de l’utilisateur courant et de la machine locale via CryptoAPI, localise le certificat correspondant à l’empreinte demandée, acquiert le handle de clé privée NCRYPT associé et renvoie un TPadesResolvedSigner dont ICmsSigner signe via CNG

WinCryptoAvailable effectue la vérification légère que les liaisons Crypt32 / ncrypt se résolvent, afin que les appelants puissent décider au démarrage si la signature PAdES sera possible sur cette machine

VerifyWinDetachedCms valide une valeur CMS détachée par rapport à deux segments d’octets détenus par l’appelant, renvoie le certificat du signataire et évalue sa chaîne avec la politique de base Windows en cache seul sans effectuer de récupération réseau

Les fonctions de vérification étendues acceptent TWinCmsVerifyOptions afin que les appelants puissent activer la récupération de certificats en ligne, demander la vérification de révocation, définir un délai d’attente de récupération et observer les points de contrôle de vérification

La validité de la signature et la confiance dans le certificat sont des résultats indépendants, de sorte qu’une signature authentique d’un certificat non fiable ou auto-signé reste distinguable d’un contenu falsifié

Functions

FunctionDescription
WinCryptoAvailableRenvoie True lorsque les liaisons Crypt32 et ncrypt de Windows peuvent être résolues à l’exécution
WinCmsVerificationAvailableRenvoie True lorsque la vérification CMS détachée et les API de politique de chaîne de certificats sont disponibles
VerifyWinDetachedCmsVérifie les attributs signés CMS et la signature sur deux segments de contenu détachés et rapporte séparément la confiance système courante en cache seul
VerifyWinDetachedCmsExVérifie le contenu CMS détaché avec des options explicites de récupération en ligne, de révocation, de délai d’attente et de points de contrôle
VerifyWinAttachedCmsExVérifie une valeur CMS attachée et évalue son certificat de signataire à l’aide des options fournies
ResolveWinSignerRésout une empreinte en un signataire, un certificat DER et une chaîne en utilisant le magasin de certificats Windows et la clé privée CNG
TestBuildWinCmsTrustHook conditionné aux tests, compilé uniquement sous PDFIUMPAS_CRYPTO_TESTS : échange les pointeurs de fonction de politique de chaîne CNG contre des stubs fournis par l’appelant, exécute la construction de confiance avec le statut de signature préréglé à valide, puis restaure les pointeurs, de sorte que les tests unitaires crypto puissent exercer BuildWinCmsTrust sans une vraie chaîne de certificats

Verification Types

TypeMembers and purpose
TWinCmsVerifyStatuswcvsUnavailable, wcvsValid, wcvsInvalid, wcvsUnsupported ou wcvsIndeterminate
TWinCmsVerifyStagewcvstCryptographicSignature, wcvstChainBuild, wcvstOnlineRetrieval ou wcvstRevocationCheck
TWinCmsVerifyCheckpointRappel de méthode d’objet recevant chaque TWinCmsVerifyStage
TWinCmsVerifyOptionsOnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs, OnCheckpoint et la fabrique statique Default
TWinCmsVerifyResultAlias de TPdfCmsVerifyResult, contenant SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason et RevocationError

Revocation results

Avec CheckRevocation activé, le backend construit une chaîne de révocation séparée et remplit RevocationStatus, RevocationReason et RevocationError. Les échecs de révocation n’écrasent ni le résultat de signature ni le TrustStatus et le TrustError évalués indépendamment

Pour une chaîne native bien formée, une révocation confirmée produit wcvsInvalid avec pcrrCertificateRevoked. Sans révocation confirmée, une chaîne non fiable produit wcvsIndeterminate avec pcrrChainUntrusted ; les structures natives incomplètes et les autres vérifications de révocation non résolues restent à wcvsIndeterminate avec pcrrUnknown

Un résultat valide exige une chaîne de confiance, aucune erreur de chaîne, au moins un certificat exigeant une vérification de révocation et un résultat de révocation natif réussi pour chacun de ces certificats. Seul un certificat terminal explicitement marqué auto-signé ou une ancre de CA de confiance est exclu de cette exigence de couverture ; une chaîne réduite à la racine ou des preuves par certificat manquantes restent indéterminées

RevocationError préserve un DWORD brut de CERT_REVOCATION_INFO.dwRevocationResult, ou la valeur GetLastError immédiate quand l’appel de chaîne de révocation échoue. Zéro signifie qu’aucun diagnostic natif n’est disponible, y compris quand un statut de chaîne établit une révocation sans code fournisseur correspondant. Les bits agrégés CERT_TRUST_STATUS.dwErrorStatus servent à la classification et ne sont pas copiés dans ce champ comme une erreur native inventée

Interprétez la valeur brute dans son contexte fournisseur ou API Windows ; rien ne garantit que ce soit un HRESULT. Des preuves de révocation hors ligne, périmées ou inconnues n’identifient ni une CRL expirée, ni des CRL malformées, ni de mauvaises signatures de CRL, donc ce backend n’infère pas ces raisons détaillées

Avec OnlineRetrieval = False, la construction de chaîne comme la vérification de révocation n’utilisent que la récupération en cache. Activer la récupération en ligne autorise le moteur de chaînes Windows à obtenir les preuves de support dans le délai de récupération configuré

Remarks

See Also

FPdfCrypto, FPdfCms