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
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é
| Function | Description |
|---|---|
WinCryptoAvailable | Renvoie True lorsque les liaisons Crypt32 et ncrypt de Windows peuvent être résolues à l’exécution |
WinCmsVerificationAvailable | Renvoie True lorsque la vérification CMS détachée et les API de politique de chaîne de certificats sont disponibles |
VerifyWinDetachedCms | Vé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 |
VerifyWinDetachedCmsEx | Vé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 |
VerifyWinAttachedCmsEx | Vérifie une valeur CMS attachée et évalue son certificat de signataire à l’aide des options fournies |
ResolveWinSigner | Ré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 |
TestBuildWinCmsTrust | Hook 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 |
| Type | Members and purpose |
|---|---|
TWinCmsVerifyStatus | wcvsUnavailable, wcvsValid, wcvsInvalid, wcvsUnsupported ou wcvsIndeterminate |
TWinCmsVerifyStage | wcvstCryptographicSignature, wcvstChainBuild, wcvstOnlineRetrieval ou wcvstRevocationCheck |
TWinCmsVerifyCheckpoint | Rappel de méthode d’objet recevant chaque TWinCmsVerifyStage |
TWinCmsVerifyOptions | OnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs, OnCheckpoint et la fabrique statique Default |
TWinCmsVerifyResult | Alias de TPdfCmsVerifyResult, contenant SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason et RevocationError |
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é
PadesCryptoAvailable = False sauf si un autre backend est enregistréTWinCmsVerifyOptions.Default conserve la vérification en cache seul ; optez pour la récupération en ligne et la vérification de révocation uniquement lorsque l’application accepte l’accès réseau et sa latenceRevocationReason: TPdfCmsRevocationReason et RevocationError: Cardinal. Quand la révocation est désactivée ou que sa passe n’est pas atteinte, ces champs conservent pcrrNone et zéro ; les mêmes valeurs accompagnent une vérification réussie, fiez-vous donc à RevocationStatus pour le verdictNativeRevocationError et NativeTimeStampRevocationError