Узгодженість алгоритму дайджеста CMS
HotPDF діагностує неузгоджені ідентифікатори алгоритмів CMS до того, як читає діапазони підписаного документа, обчислює геш вмісту, будує ланцюжки сертифікатів чи викликає постачальника підпису
Перевірки узгодженості
Поточний SignerInfo.digestAlgorithm має бути присутнім у множині охоплюючого SignedData.digestAlgorithms, тоді як непов'язані додаткові алгоритми залишаються дозволеними для інтероперабельних контейнерів із кількома підписувачами
Специфічні для дайджеста OID RSA PKCS#1 v1.5 та ECDSA-підписів, а також явний геш у параметрах RSA-PSS, мають вибирати той самий дайджест, що й SignerInfo.digestAlgorithm
Коли присутній підписаний атрибут CMSAlgorithmProtection за RFC 6211, він має зустрічатися один раз з одним значенням, а його захищені значення AlgorithmIdentifier дайджеста й підпису мають збігатися з фактичними полями SignerInfo
Відсутні параметри та DER NULL порівнюються як еквівалентні для ідентифікаторів алгоритмів без параметрів; інші параметри порівнюються точно, тому параметризовані механізми підпису не можуть бути мовчки нормалізовані
Машинозчитуваний результат
HPDFParseCMSSignature зберігає успішно розібрані метадані, але встановлює THPDFSignatureInfo.Status у svDigestAlgorithmMismatch, коли перевірка узгодженості не проходить
Перевірка повертає svDigestAlgorithmMismatch, звіти перевірки використовують vfcDigestAlgorithmMismatch, а JSON видає digestAlgorithmMismatch, не звівши цю умову до пошкодженого CMS, непідтримуваного алгоритму чи неузгодженості геша вмісту
THPDFSignatureInfo.DigestAlgorithmOID фіксує OID дайджеста підписувача, а THPDFSignatureInfo.DigestConsistencyIssue вибирає одну з наведених нижче причин
dciSignerDigestNotDeclared— відомий дайджест підписувача відсутній у зовнішній множині дайджестівdciSignatureDigestMismatch— фіксований або параметризований механізм підпису вибирає інший дайджестdciAlgorithmProtectionDigestMismatch— захищений ідентифікатор дайджеста відрізняється від ідентифікатора дайджеста підписувачаdciAlgorithmProtectionSignatureMismatch— захищений ідентифікатор підпису відрізняється від ідентифікатора підпису підписувача
JSON-об'єкти підписувачів розкривають ту саму інформацію як digestAlgorithmOID і digestConsistencyIssue зі значеннями signerDigestNotDeclared, signatureDigestMismatch, algorithmProtectionDigestMismatch або algorithmProtectionSignatureMismatch
Позначки часу та пріоритет
Позначки часу документа RFC 3161 і непідписані токени підпису з позначкою часу використовують ті самі перевірки, а їхнє значення THPDFTimestampInfo.DigestConsistencyIssue виявляє неузгоджений вкладений CMS-контейнер
Структурні помилки все ще завершуються як пошкоджений CMS, невідомі дайджести підписувачів лишаються непідтримуваними, а перша детермінована проблема узгодженості зберігається в порядку: контейнер, захист алгоритму, потім механізм підпису
Див. сучасні постачальники підписів та THotPDF.VerifyLoadedSignatureWithOptions для контрактів перевірки постачальника та завантаженого документа