Consistência do Algoritmo de Digest CMS
O HotPDF diagnostica identificadores de algoritmo CMS inconsistentes antes de ler intervalos assinados do documento, calcular hashes, construir caminhos de certificados ou invocar um provedor de assinaturas
Verificações de consistência
O SignerInfo.digestAlgorithm atual tem de estar presente no conjunto SignedData.digestAlgorithms circundante, enquanto algoritmos extra não relacionados continuam permitidos para contentores interoperáveis com múltiplos assinantes
Os OIDs de assinatura RSA PKCS#1 v1.5 e ECDSA específicos do digest, e o hash explícito nos parâmetros RSA-PSS, têm de selecionar o mesmo digest que SignerInfo.digestAlgorithm
Quando o atributo assinado CMSAlgorithmProtection do RFC 6211 está presente, tem de ocorrer uma única vez com um valor, e os seus valores protegidos de AlgorithmIdentifier de digest e assinatura têm de corresponder aos campos reais de SignerInfo
Parâmetros ausentes e DER NULL comparam como equivalentes para identificadores de algoritmo sem parâmetros; os restantes parâmetros comparam exatamente, para que mecanismos de assinatura parametrizados não possam ser normalizados em silêncio
Resultado legível por máquina
HPDFParseCMSSignature preserva os metadados analisados com sucesso, mas define THPDFSignatureInfo.Status como svDigestAlgorithmMismatch quando uma verificação de consistência falha
A verificação devolve 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 regista o OID do digest do assinante e THPDFSignatureInfo.DigestConsistencyIssue seleciona uma das causas seguintes
dciSignerDigestNotDeclared— o digest conhecido do assinante 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 assinantedciAlgorithmProtectionSignatureMismatch— o identificador de assinatura protegido difere do identificador de assinatura do assinante
Os objetos JSON de assinante expõem a mesma informação como digestAlgorithmOID e digestConsistencyIssue com os valores signerDigestNotDeclared, signatureDigestMismatch, algorithmProtectionDigestMismatch ou algorithmProtectionSignatureMismatch
Timestamps e precedência
Os timestamps de documento RFC 3161 e os tokens de timestamp de assinatura não assinados usam as mesmas verificações, e o respetivo valor THPDFTimestampInfo.DigestConsistencyIssue identifica um contentor CMS aninhado inconsistente
Erros estruturais continuam a falhar como CMS malformado, digests de assinante desconhecidos continuam não suportados, e a primeira questão de consistência determinística é retida pela ordem contentor, proteção de algoritmo e depois mecanismo de assinatura
Consulte provedores de assinatura modernos e THotPDF.VerifyLoadedSignatureWithOptions para os contratos de verificação com provedor e de documentos carregados