PDFium Delphi Component Docs

Unidad FPdfCryptoWin

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

Sintaxis

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

Descripción

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 a través de CryptoAPI, localiza el certificado que coincide con la huella solicitada, adquiere el manejador 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 desacoplado contra dos segmentos de bytes propiedad del llamador, devuelve el certificado del firmante y evalúa su cadena con la política base de Windows solo con caché, sin realizar recuperación por red

Las funciones de verificación extendidas aceptan TWinCmsVerifyOptions para que quienes llaman puedan habilitar la recuperación en línea de certificados, solicitar la comprobación de revocación, fijar un tiempo de espera de recuperación y observar los puntos de control de la 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 manipulado

Funciones

FunciónDescripción
WinCryptoAvailableDevuelve True cuando los enlaces Crypt32 y ncrypt de Windows pueden resolverse en tiempo de ejecución
WinCmsVerificationAvailableDevuelve True cuando la verificación CMS desacoplada 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 desacoplados e informa por separado de la confianza actual del sistema solo con caché
VerifyWinDetachedCmsExVerifica el contenido CMS desacoplado con opciones explícitas de recuperació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 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 compilación de pruebas, solo bajo PDFIUMPAS_CRYPTO_TESTS: sustituye los punteros a función de política de cadena CNG por stubs suministrados por quien llama, ejecuta la construcción de confianza con el estado de firma prefijado a válido y restaura los punteros, de modo que las pruebas unitarias de criptografía pueden ejercitar BuildWinCmsTrust sin una cadena de certificados real

Tipos de verificación

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, que contiene SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason y RevocationError

Resultados de revocación

Con CheckRevocation activado, el backend construye una cadena de revocación aparte y rellena RevocationStatus, RevocationReason y RevocationError. Los fallos de revocación no sobrescriben el resultado de la firma ni el TrustStatus y el TrustError evaluados de forma independiente

Para una cadena nativa bien formada, la revocación confirmada produce wcvsInvalid con pcrrCertificateRevoked. Sin revocación confirmada, una cadena no confiable 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 con éxito para cada uno de esos certificados. Solo un certificado terminal marcado explícitamente como autofirmado o como ancla CA de confianza queda excluido de ese requisito de cobertura; una cadena de solo raíz o la falta de evidencia por certificado sigue quedando indeterminada

RevocationError conserva un DWORD sin procesar de CERT_REVOCATION_INFO.dwRevocationResult, o el valor inmediato de GetLastError cuando la llamada a la cadena de revocación falla. Cero significa que no hay diagnóstico nativo disponible, incluido el caso en que 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 en este campo como un error nativo inventado

Interprete el valor sin procesar en su contexto de proveedor o API de Windows; no hay garantía de que sea un HRESULT. La evidencia de revocación offline, caducada o desconocida no identifica caducidad de CRL, CRL malformadas ni firmas CRL erróneas, así que este backend no infiere esos reasons detallados

Con OnlineRetrieval = False, tanto la construcción de la cadena como la comprobación de revocación usan solo la caché. Activar 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

Observaciones

Véase también

FPdfCrypto, FPdfCms