PDFium Delphi Component Docs

Unidad FPdfCryptoWin

Unidad: FPdfCryptoWin
Backend de la API de criptografía de Windows para firma PAdES, verificación de CMS separado y evaluación de confianza de certificados del sistema solo con caché

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 es el backend criptográfico específico de Windows consumido por FPdfCrypto. Abre los almacenes de certificados del usuario actual y de la máquina local mediante CryptoAPI, localiza el certificado que coincide con la huella digital solicitada, adquiere el identificador asociado de clave privada NCRYPT y devuelve un TPadesResolvedSigner cuyo ICmsSigner firma a través de CNG

WinCryptoAvailable realiza la comprobación ligera de que los enlaces Crypt32 / ncrypt se resuelven, de modo que quienes llaman puedan decidir al arrancar si la firma PAdES será posible en esta máquina

VerifyWinDetachedCms valida un valor CMS separado contra dos segmentos de bytes propiedad de quien llama, devuelve el certificado del firmante y evalúa su cadena con la política base de Windows solo con caché, sin realizar obtención por red

Las funciones de verificación extendidas aceptan TWinCmsVerifyOptions de modo que quienes llaman puedan habilitar la obtención de certificados en línea, solicitar comprobación de revocación, establecer un tiempo de espera de obtención y observar puntos de control de verificación

La validez de la firma y la confianza en el certificado son resultados independientes, de modo que una firma auténtica de un certificado que no es de confianza o autofirmado sigue siendo distinguible del contenido alterado

Functions

FunciónDescripción
WinCryptoAvailableDevuelve True cuando los enlaces Crypt32 y ncrypt de Windows se pueden resolver en tiempo de ejecución
WinCmsVerificationAvailableDevuelve True cuando la verificación de CMS separado y las API de política de cadena de certificados están disponibles
VerifyWinDetachedCmsVerifica los atributos firmados y la firma del CMS sobre dos segmentos de contenido separados e informa por separado la confianza actual del sistema solo con caché
VerifyWinDetachedCmsExVerifica el contenido CMS separado con opciones explícitas de obtención en línea, revocación, tiempo de espera y puntos de control
VerifyWinAttachedCmsExVerifica un valor CMS adjunto y evalúa su certificado de firmante usando las opciones suministradas
ResolveWinSignerResuelve una huella digital en un firmante, el DER del certificado y la cadena usando el almacén de certificados de Windows y la clave privada CNG
TestBuildWinCmsTrustHook condicionado a tests que solo se compila bajo PDFIUMPAS_CRYPTO_TESTS: intercambia los punteros a función de la política de cadena CNG por stubs suministrados por quien llama, ejecuta la construcción de confianza con el estado de firma predefinido como válido y restaura los punteros, de modo que los unit tests de criptografía puedan ejercitar BuildWinCmsTrust sin una cadena de certificados real

Verification Types

TipoMiembros y propósito
TWinCmsVerifyStatuswcvsUnavailable, wcvsValid, wcvsInvalid, wcvsUnsupported o wcvsIndeterminate
TWinCmsVerifyStagewcvstCryptographicSignature, wcvstChainBuild, wcvstOnlineRetrieval o wcvstRevocationCheck
TWinCmsVerifyCheckpointDevolución de llamada de método de objeto que recibe cada TWinCmsVerifyStage
TWinCmsVerifyOptionsOnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs, OnCheckpoint y la fábrica estática Default
TWinCmsVerifyResultAlias de TPdfCmsVerifyResult, contiene SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason y RevocationError

Revocation results

Con CheckRevocation habilitado, el backend construye una cadena de revocación separada y llena RevocationStatus, RevocationReason y RevocationError. Las fallas de revocación no sobrescriben el resultado de la firma ni el TrustStatus y TrustError evaluados de forma independiente

Para una cadena nativa bien formada, una revocación confirmada produce wcvsInvalid con pcrrCertificateRevoked. Sin revocación confirmada, una cadena que no es de confianza produce wcvsIndeterminate con pcrrChainUntrusted; las estructuras nativas incompletas y otras comprobaciones de revocación sin resolver permanecen en wcvsIndeterminate con pcrrUnknown

Un resultado válido exige una cadena de confianza, sin errores de cadena, al menos un certificado que requiera comprobación de revocación y un resultado nativo de revocación exitoso para cada uno de esos certificados. Solo un certificado terminal marcado explícitamente como autofirmado o un ancla de CA de confianza queda excluido de ese requisito de cobertura; una cadena de solo raíz o una evidencia faltante por certificado permanece indeterminada

RevocationError preserva un DWORD sin procesar de CERT_REVOCATION_INFO.dwRevocationResult, o el valor inmediato de GetLastError cuando la llamada de cadena de revocación falla. Cero significa que no hay diagnóstico nativo disponible, incluso cuando un estado de cadena establece la revocación sin un código de proveedor correspondiente. Los bits agregados de CERT_TRUST_STATUS.dwErrorStatus se usan para la clasificación y no se copian a este campo como un error nativo inventado

Interprete el valor sin procesar en su contexto de proveedor o API de Windows; no se garantiza que sea un HRESULT. La evidencia de revocación fuera de línea, vencida o desconocida no identifica vencimiento de CRL, CRL malformadas ni firmas CRL erróneas, así que este backend no infiere esas razones detalladas

Con OnlineRetrieval = False, tanto la construcción de cadena como la comprobación de revocación usan solo recuperación en caché. Habilitar la recuperación en línea permite al motor de cadenas de Windows obtener la evidencia de soporte dentro del tiempo de espera de recuperación configurado

Remarks

See Also

FPdfCrypto, FPdfCms