Как правильно подписывать PDF-файлы с новым ЭЦП ГОСТ Р 34.10-2015?

Что делать, если ни одна библиотека (может я просто не нашёл) не поддерживает алгоритм нового ЭЦП? Я пытался подписывать ЭЦП разными версиями iText, но везде проблема, что библиотеки не знают про новые алгоритмы. И никак их туда не добавишь.
Самый близкий результат получился с старой версией iText - 2.1.7. Вот мой код на Scala:
val stamper = PdfStamper.createSignature(reader, os, ‘\u0000’)
val appearance = stamper.getSignatureAppearance
val signDate = Calendar.getInstance
val pdfSignature = new PdfSignature(PdfName.ADOBE_PPKLITE,PdfName.ADBE_PKCS7_DETACHED)
pdfSignature.setDate(new PdfDate(signDate))
pdfSignature.setCert(CryptUtils.cert.getEncoded)
appearance.setCryptoDictionary(pdfSignature)
appearance.setCrypto(CryptUtils.privateKey, CryptUtils.chain, null, PdfSignatureAppearance.WINCER_SIGNED) appearance.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED)
val estimatedSize = 8192
val exc = new HashMapPdfName, Int
exc.put(PdfName.CONTENTS, estimatedSize * 2 + 2)
appearance.preClose(exc)
val data = appearance.getRangeStream()
val digest = MessageDigest.getInstance(“GOST-3411-2015-512”,“KALKAN”)
digest.update(IOUtils.toByteArray(data))
val appeareanceHash = digest.digest()
val sgn = new PdfPKCS7(null, CryptUtils.chain, null, “SHA-256”, null, false)
val hashToSign = sgn.getAuthenticatedAttributeBytes(appeareanceHash, appearance.getSignDate(), null)
val signature = Signature.getInstance(“GOST3411-2015withECGOST3410-2015-512”,“KALKAN”)
signature.initSign(CryptUtils.privateKey)
signature.update(hashToSign)
val signedHash = signature.sign()
sgn.setExternalDigest(signedHash,null,“RSA”)
val encodedPKCS7 = sgn.getEncodedPKCS7(signedHash, appearance.getSignDate())
val paddedSig = new ArrayByte
System.arraycopy(encodedPKCS7, 0, paddedSig, 0, encodedPKCS7.length)
val dic = new PdfDictionary()
dic.put(PdfName.CONTENTS, new PdfString(paddedSig).setHexWriting(true))
appearance.close(dic)
Результат такой:
Screenshot%202024-07-08%20184447
Тут проблема связана, скорей всего, с тем, что я использую “SHA-256” и “RSA” вместо “GOST-3411-2015-512” и “ECGOST3410-2015-512” соответственно. Но так как их в iText нет(в более новых версиях тоже), то результат неудовлетворительный.
Может быть кто-то знает другие решения, или кто-то знает про другие библиотеки, в которых всё работает нормально, или у кого-то есть пропатченные жарки iText с новыми алгоритмами? Заранее благодарю.