PDFium Delphi Component Docs

FPdfCryptoWin Unità

Unità: FPdfCryptoWin
Backend della Windows Cryptography API per la firma PAdES, la verifica CMS detached e la valutazione dell'attendibilità dei certificati di sistema basata solo su cache

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 è il backend crittografico specifico di Windows consumato da FPdfCrypto. Apre gli archivi certificati dell'utente corrente e della macchina locale tramite CryptoAPI, individua il certificato corrispondente all'identificazione personale (thumbprint) richiesta, acquisisce l'handle associato della chiave privata NCRYPT e restituisce un TPadesResolvedSigner il cui ICmsSigner firma attraverso CNG

WinCryptoAvailable esegue il controllo leggero che i binding Crypt32 / ncrypt si risolvano, così i chiamanti possono decidere all'avvio se la firma PAdES sarà possibile su questa macchina

VerifyWinDetachedCms valida un valore CMS detached rispetto a due segmenti di byte di proprietà del chiamante, restituisce il certificato del firmatario e ne valuta la catena con la policy base di Windows basata solo su cache, senza eseguire recupero di rete

Le funzioni di verifica estese accettano TWinCmsVerifyOptions, così i chiamanti possono abilitare il recupero online dei certificati, richiedere il controllo di revoca, impostare un timeout di recupero e osservare i checkpoint di verifica

Validità della firma e attendibilità del certificato sono risultati indipendenti, così una firma autentica proveniente da un certificato non attendibile o autofirmato resta distinguibile da contenuto manomesso

Functions

FunctionDescription
WinCryptoAvailableRestituisce True quando i binding Windows Crypt32 e ncrypt possono essere risolti a runtime
WinCmsVerificationAvailableRestituisce True quando la verifica CMS detached e le API di policy della catena di certificati sono disponibili
VerifyWinDetachedCmsVerifica gli attributi firmati CMS e la firma su due segmenti di contenuto detached e riporta separatamente l'attendibilità di sistema corrente basata solo su cache
VerifyWinDetachedCmsExVerifica il contenuto CMS detached con opzioni esplicite di recupero online, revoca, timeout e checkpoint
VerifyWinAttachedCmsExVerifica un valore CMS attached e valuta il certificato del firmatario usando le opzioni fornite
ResolveWinSignerRisolve un'identificazione personale (thumbprint) in un firmatario, un DER del certificato e una catena usando l'archivio certificati di Windows e la chiave privata CNG
TestBuildWinCmsTrustHook condizionato ai test compilato solo sotto PDFIUMPAS_CRYPTO_TESTS: sostituisce i puntatori a funzione della policy di catena CNG con stub forniti dal chiamante, esegue la costruzione della fiducia con lo stato della firma preimpostato a valido e ripristina i puntatori, così gli unit test crittografici possono esercitare BuildWinCmsTrust senza una catena di certificati reale

Verification Types

TypeMembers and purpose
TWinCmsVerifyStatuswcvsUnavailable, wcvsValid, wcvsInvalid, wcvsUnsupported o wcvsIndeterminate
TWinCmsVerifyStagewcvstCryptographicSignature, wcvstChainBuild, wcvstOnlineRetrieval o wcvstRevocationCheck
TWinCmsVerifyCheckpointCallback object-method che riceve ogni TWinCmsVerifyStage
TWinCmsVerifyOptionsOnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs, OnCheckpoint e la factory statica Default
TWinCmsVerifyResultAlias di TPdfCmsVerifyResult, contenente SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason e RevocationError

Risultati di revoca

Con CheckRevocation abilitato, il backend costruisce una catena di revoca separata e compila RevocationStatus, RevocationReason e RevocationError. I guasti di revoca non sovrascrivono il risultato della firma né TrustStatus e TrustError valutati indipendentemente

Per una catena nativa ben formata, la revoca confermata produce wcvsInvalid con pcrrCertificateRevoked. Senza revoca confermata, una catena non affidabile produce wcvsIndeterminate con pcrrChainUntrusted; strutture native incomplete e altri controlli di revoca non risolti restano wcvsIndeterminate con pcrrUnknown

Un risultato valido richiede una catena affidabile, nessun errore di catena, almeno un certificato che richieda il controllo di revoca e un esito nativo di revoca positivo per ognuno di questi certificati. Solo un certificato terminale esplicitamente marcatato come autofirmato o un anchor CA fidato è escluso da questo requisito di copertura; una catena di sole root o prove mancanti per singolo certificato restano indeterminate

RevocationError preserva un DWORD grezzo da CERT_REVOCATION_INFO.dwRevocationResult, oppure il valore GetLastError immediato quando la chiamata alla catena di revoca fallisce. Zero significa che non è disponibile nessuna diagnostica nativa, incluso quando uno stato di catena stabilisce la revoca senza un codice provider corrispondente. I bit aggregati di CERT_TRUST_STATUS.dwErrorStatus servono per la classificazione e non vengono copiati in questo campo come errore nativo inventato

Il valore grezzo va interpretato nel contesto del provider Windows o dell'API di provenienza; non è garantito che sia un HRESULT. Prove di revoca offline, datate o sconosciute non identificano scadenza CRL, CRL malformate o firme CRL errate, quindi questo backend non deduce questi motivi dettagliati

Con OnlineRetrieval = False, sia la costruzione della catena sia il controllo di revoca usano solo il recupero da cache. Abilitare il recupero online consente al motore di catena di Windows di ottenere le prove di supporto entro il timeout di recupero configurato

Remarks

See Also

FPdfCrypto, FPdfCms