Согласованность digest-алгоритмов CMS

HotPDF диагностирует несогласованные идентификаторы алгоритмов CMS до чтения подписанных диапазонов документа, хеширования содержимого, построения цепочек сертификатов или вызова signature provider

Проверки согласованности

Текущий SignerInfo.digestAlgorithm должен присутствовать в наборе SignedData.digestAlgorithms объемлющего контейнера, при этом посторонние дополнительные алгоритмы остаются допустимыми для интероперабельных контейнеров с несколькими подписантами

Digest-специфичные OID подписей RSA PKCS#1 v1.5 и ECDSA, а также явный hash в параметрах RSA-PSS должны выбирать тот же digest, что и SignerInfo.digestAlgorithm

Если присутствует подписанный атрибут CMSAlgorithmProtection из RFC 6211, он должен встречаться один раз с одним значением, а его защищённые digest и signature AlgorithmIdentifier должны совпадать с фактическими полями SignerInfo

Отсутствующие параметры и DER NULL сравниваются как эквивалентные для идентификаторов алгоритмов без параметров; прочие параметры сравниваются точно, чтобы параметризованные механизмы подписи нельзя было молча нормализовать

Машиночитаемый результат

HPDFParseCMSSignature сохраняет успешно разобранные метаданные, но выставляет THPDFSignatureInfo.Status в svDigestAlgorithmMismatch, когда проверка согласованности проваливается

Верификация возвращает svDigestAlgorithmMismatch, отчёты валидации используют vfcDigestAlgorithmMismatch, а JSON выдаёт digestAlgorithmMismatch — условие не сворачивается в malformed CMS, unsupported algorithm или несовпадение content digest

THPDFSignatureInfo.DigestAlgorithmOID записывает OID digest подписанта, а THPDFSignatureInfo.DigestConsistencyIssue выбирает одну из следующих причин

JSON-объекты подписантов открывают ту же информацию как digestAlgorithmOID и digestConsistencyIssue со значениями signerDigestNotDeclared, signatureDigestMismatch, algorithmProtectionDigestMismatch или algorithmProtectionSignatureMismatch

Timestamp и приоритеты

Document timestamp RFC 3161 и неподписанные signature timestamp token'ы проходят те же проверки, а их значение THPDFTimestampInfo.DigestConsistencyIssue указывает на несогласованный вложенный CMS-контейнер

Структурные ошибки по-прежнему проваливаются как malformed CMS, неизвестные digest подписанта остаются неподдерживаемыми, а первая детерминированная проблема согласованности сохраняется в порядке: контейнер, algorithm protection, затем механизм подписи

См. современные signature provider и THotPDF.VerifyLoadedSignatureWithOptions — там описаны контракты верификации провайдеров и загруженных документов