Consistência do algoritmo de digest CMS
O HotPDF diagnostica identificadores de algoritmo CMS inconsistentes antes de ler intervalos assinados do documento, calcular o hash do conteúdo, construir caminhos de certificado ou invocar um provedor de assinatura
Verificações de consistência
O SignerInfo.digestAlgorithm atual deve estar presente no conjunto SignedData.digestAlgorithms que o envolve, enquanto algoritmos extras não relacionados permanecem permitidos para contêineres interoperáveis de múltiplos signatários
OIDs de assinatura RSA PKCS#1 v1.5 e ECDSA específicos de digest, e o hash explícito nos parâmetros RSA-PSS, devem selecionar o mesmo digest que SignerInfo.digestAlgorithm
Quando o atributo assinado CMSAlgorithmProtection da RFC 6211 está presente, ele deve ocorrer uma vez com um único valor, e seus valores protegidos de digest e assinatura AlgorithmIdentifier devem corresponder aos campos reais de SignerInfo
Parâmetros ausentes e NULL DER comparam como equivalentes para identificadores de algoritmo sem parâmetros; outros parâmetros comparam exatamente para que mecanismos de assinatura parametrizados não possam ser normalizados silenciosamente
Resultado legível por máquina
HPDFParseCMSSignature preserva metadados analisados com sucesso, mas define THPDFSignatureInfo.Status como svDigestAlgorithmMismatch quando uma verificação de consistência falha
A verificação retorna svDigestAlgorithmMismatch, os relatórios de validação usam vfcDigestAlgorithmMismatch e o JSON emite digestAlgorithmMismatch sem colapsar a condição em CMS malformado, algoritmo não suportado ou incompatibilidade de digest de conteúdo
THPDFSignatureInfo.DigestAlgorithmOID registra o OID do digest do signatário e THPDFSignatureInfo.DigestConsistencyIssue seleciona uma das seguintes causas
dciSignerDigestNotDeclared— o digest conhecido do signatário está ausente do conjunto externo de digestsdciSignatureDigestMismatch— um mecanismo de assinatura fixo ou parametrizado seleciona outro digestdciAlgorithmProtectionDigestMismatch— o identificador de digest protegido difere do identificador de digest do signatáriodciAlgorithmProtectionSignatureMismatch— o identificador de assinatura protegido difere do identificador de assinatura do signatário
Objetos de signatário JSON expõem as mesmas informações como digestAlgorithmOID e digestConsistencyIssue com os valores signerDigestNotDeclared, signatureDigestMismatch, algorithmProtectionDigestMismatch ou algorithmProtectionSignatureMismatch
Carimbos de tempo e precedência
Carimbos de tempo de documento RFC 3161 e tokens de carimbo de tempo de assinatura não assinados usam as mesmas verificações, e seu valor THPDFTimestampInfo.DigestConsistencyIssue identifica um contêiner CMS aninhado inconsistente
Erros estruturais ainda falham como CMS malformado, digests de signatário desconhecidos permanecem não suportados, e o primeiro problema de consistência determinístico é retido na ordem de contêiner, proteção de algoritmo e, então, mecanismo de assinatura
Veja provedores de assinatura modernos e THotPDF.VerifyLoadedSignatureWithOptions para os contratos de verificação de provedor e de documento carregado