Здравствуйте.
Скорее всего, у вас 2 проблемы с проверкой подписи.
1. message-digest attribute value does not match calculated value - ошибка, связанная с тем, что хэш от тех данных, что вы передали в CAdESSignature, не совпадает с хэшом данных в поле message-digest в подписанных атрибутах.
А) Вы используете
Цитата:
CAdESSignature cadesSignature = new CAdESSignature(Base64.decode(cadesCmsFromPluginOutput), hashAsStringToBytes, null);
Для проверки отделенной подписи обычно первым параметром передают подпись (перекодированную из BASE64 в binary), а вторым - данные (не хэш).
При проверке именно по хэшу hashAsStringToBytes надо использовать другой конструктор - один из:
Цитата:
public CAdESSignature(byte[] signature, byte[] data, Integer signatureType, boolean useRawDigest)
public CAdESSignature(InputStream signatureStream, final InputStream dataStream, Integer signatureType, boolean useRawDigest)
передав последним параметром true.
Б) если подпись формировалась в плагине и вы сами считаете хэш, то, скорее всего, надо использовать для данных кодировку UTF-16LE:
https://support.cryptopr...etsja-v-kriptoarmcryptcp2. "сертификат подписанта может быть включен в подпись, а может не быть. Поясните пожалуйста, от чего это зависит и в чем разница с точки зрения кода проверки?" - сертификат подписи или цепочка могут быть добавлены в подпись и при проверке будут использоваться. Плагин по умолчанию добавляет сертификат, CAdES.jar - нет. Добавить сертификат можно с помощью метода setCertificateStore, он принимает X509CertificateHolder. Или можно найти метод addSigner с последним параметром addCertificateChain, он добавит всю цепочку в подпись при формировании.
Наличие сертификата облегчает проверку на стороне проверяющего.
"если выполнять проверку локально, то проверка проходит только при условии что сертификат подписанта добавлен в цепочку." видимо, с помощью CAdESSignature.
"Однако, если в chain добавить сертификат того кто подписал файл, т.е. тот сертификат, который был выбран для подписи файла, то проверка проходит (ошибок в verify нет)." - да, см. выше про добавление сертификата в CAdESSignature.