Всем добрый день. Подниму тему.
Если пользоваться примером для проверки подписи, то можно столкнуться с такой ситуацией:
Подписываем документ
дважды: с уровнем сертификации PDF файла =
CERTIFIED_NO_CHANGES_ALLOWED.
Ну вот типа ошиблись и подписали 2 раза с таким уровнем. Ведь позволяет, - позволяет.
При использовании алгоритма ГОСТ 2012, мы не можем использовать последующую проверку валидности подписей:
PdfPKCS7 pk = acroFields.VerifySignature(signatureName);
так как это вызовет ошибку распознания digest "1.2.643.7.1.1.2.2"
Именно поэтому используем, приведенный вами везде в примере код:
// Создаем SignedCms для декодирования и проверки.
SignedCms signedCms = new SignedCms(contentInfo, true);
// Декодируем подпись
signedCms.Decode(signatureBytes);
bool checkResult;
try
{
signedCms.CheckSignature(true);
checkResult = true;
}
catch (Exception)
{
checkResult = false;
}
Но, обратите внимание на иллюстрацию. Этот метод покажет, что подпись
действительна (выделено зеленым).
checkResult = true - будет всегда.
И в тоже время, что документ был изменен с момента последнего подписания, то есть недействителен.

Oshibka.jpg
(60kb) загружен 25 раз(а).Если бы использовали: PdfPKCS7 pk = acroFields.VerifySignature(signatureName); - он бы корректно отображал, что документ был изменен.
Но по причине ГОСТ 2012 мы использовать его не можем.
Как получать программно, что имеющиеся подписи в документе, хоть и действительны, но документ является недействительным?
Образец документа, если нужно могу прислать в личку сотрудникам.