PDFium Delphi Component Docs

Unidade FPdfCryptoWin

Unidade: FPdfCryptoWin
Back-end da API de criptografia do Windows para assinatura PAdES, verificação de CMS desanexado e avaliação de confiança de certificados do sistema apenas com 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 é o back-end criptográfico específico do Windows consumido pelo FPdfCrypto. Ele abre os repositórios de certificados do usuário atual e da máquina local por meio da CryptoAPI, localiza o certificado que corresponde à impressão digital solicitada, adquire o handle de chave privada NCRYPT associado e retorna um TPadesResolvedSigner cujo ICmsSigner assina por meio do CNG

WinCryptoAvailable executa a verificação leve de que os bindings de Crypt32 / ncrypt resolvem, de modo que quem chama possa decidir na inicialização se a assinatura PAdES será possível nesta máquina

VerifyWinDetachedCms valida um valor CMS desanexado contra dois segmentos de bytes de propriedade de quem chama, retorna o certificado do signatário e avalia sua cadeia com a política base do Windows apenas com cache, sem realizar busca em rede

As funções de verificação estendidas aceitam TWinCmsVerifyOptions para que quem chama possa habilitar a busca de certificados online, solicitar verificação de revogação, definir um tempo limite de busca e observar pontos de controle da verificação

Validade da assinatura e confiança no certificado são resultados independentes, de modo que uma assinatura autêntica de um certificado não confiável ou autoassinado permanece distinguível de conteúdo adulterado

Functions

FunctionDescription
WinCryptoAvailableRetorna True quando os bindings do Crypt32 e do ncrypt do Windows podem ser resolvidos em tempo de execução
WinCmsVerificationAvailableRetorna True quando a verificação de CMS desanexado e as APIs de política de cadeia de certificados estão disponíveis
VerifyWinDetachedCmsVerifica os atributos assinados do CMS e a assinatura sobre dois segmentos de conteúdo desanexados e informa separadamente a confiança atual do sistema apenas com cache
VerifyWinDetachedCmsExVerifica o conteúdo CMS desanexado com opções explícitas de busca online, revogação, tempo limite e pontos de controle
VerifyWinAttachedCmsExVerifica um valor CMS anexado e avalia seu certificado de signatário usando as opções fornecidas
ResolveWinSignerResolve uma impressão digital em um signatário, um certificado DER e uma cadeia usando o repositório de certificados do Windows e a chave privada CNG
TestBuildWinCmsTrustHook condicional de teste compilado só sob PDFIUMPAS_CRYPTO_TESTS: troca os ponteiros de função de política de cadeia CNG por stubs fornecidos por quem chama, roda a construção de trust com o status de assinatura pré-ajustado como válido e restaura os ponteiros, para que testes unitários de cripto exerçam o BuildWinCmsTrust sem uma cadeia de certificados real

Verification Types

TypeMembers and purpose
TWinCmsVerifyStatuswcvsUnavailable, wcvsValid, wcvsInvalid, wcvsUnsupported ou wcvsIndeterminate
TWinCmsVerifyStagewcvstCryptographicSignature, wcvstChainBuild, wcvstOnlineRetrieval ou wcvstRevocationCheck
TWinCmsVerifyCheckpointCallback de método de objeto que recebe cada TWinCmsVerifyStage
TWinCmsVerifyOptionsOnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs, OnCheckpoint e a fábrica estática Default
TWinCmsVerifyResultAlias de TPdfCmsVerifyResult, contendo SignatureStatus, TrustStatus, RevocationStatus, SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason e RevocationError

Resultados de revogação

Com CheckRevocation habilitado, o backend constrói uma cadeia de revogação separada e preenche RevocationStatus, RevocationReason e RevocationError. Falhas de revogação não sobrescrevem o resultado da assinatura nem o TrustStatus e o TrustError avaliados de forma independente

Para uma cadeia nativa bem formada, revogação confirmada produz wcvsInvalid com pcrrCertificateRevoked. Sem revogação confirmada, uma cadeia não confiável produz wcvsIndeterminate com pcrrChainUntrusted; estruturas nativas incompletas e outras checagens de revogação não resolvidas permanecem wcvsIndeterminate com pcrrUnknown

Um resultado válido exige cadeia confiável, nenhum erro de cadeia, pelo menos um certificado que exija checagem de revogação e um resultado nativo de revogação bem-sucedido para cada um desses certificados. Só um certificado terminal explicitamente marcado como autoassinado ou como âncora de CA confiável fica de fora desse requisito de cobertura; uma cadeia só com root ou evidência por certificado faltando continua indeterminada

RevocationError preserva um DWORD bruto de CERT_REVOCATION_INFO.dwRevocationResult, ou o valor imediato de GetLastError quando a chamada da cadeia de revogação falha. Zero significa que nenhum diagnóstico nativo está disponível, inclusive quando um status de cadeia estabelece revogação sem um código correspondente do provider. Os bits agregados de CERT_TRUST_STATUS.dwErrorStatus são usados para classificação e não são copiados para este campo como um erro nativo inventado

Interprete o valor bruto no contexto do provider ou da API do Windows que o produziu; não há garantia de que seja um HRESULT. Evidência de revogação offline, velha ou desconhecida não identifica expiração de CRL, CRLs malformadas nem assinaturas de CRL inválidas, então este backend não infere esses reasons detalhados

Com OnlineRetrieval = False, tanto a construção da cadeia quanto a checagem de revogação usam apenas cache. Habilitar a busca online permite que o chain engine do Windows obtenha a evidência de suporte dentro do tempo limite de busca configurado

Remarks

See Also

FPdfCrypto, FPdfCms