"Сырая" подпись на Java

Добрый день. Пытаюсь подписать производльную строку с помощью приватного ключа на Рутокен ЭЦП 2.0
Успешно проходит подписание в примере CmsSignVerifyDetachedGOSTR3410_2012_256.java из SDK, однако там формируется CMS-подпись, тогда как мне нужна "сырая" (интегрирую Рутокены в существующую систему, где сервер принимает строку определенного формата и её сырую подпись).

Попытался напрямую вызвать Pkcs11Signer.sign вместо CmsOperations.signDetached, однако получаю ошибку "C_Sign failed, error code: 0x21" - предполагаю, что это CKR_DATA_LEN_RANGE
В то же время подпись проходит успешно, если передать в C_Sign массив длиной ровно 32 байта (такой же как у хэша в CmsOperations)

//          byte[] detachedCmsSignature = CmsOperations.signDetached(DATA_TO_SIGN, session.longValue(),
//                  signerPrivateKey.longValue(), SignAlgorithm.GOSTR3410_2012_256, signerCertificateHolder);

            byte[] detachedCmsSignature = new Pkcs11Signer(SignAlgorithm.GOSTR3410_2012_256, session.longValue(), signerPrivateKey.longValue()).sign(DATA_TO_SIGN);

Также нашел тему "Подпись данные Rutoken Plugin без сертификата", где автору тоже требуется сырая подпись, и упоминается метод rawSign плагина.

Подскажите пожалуйста, есть ли способ на Java сформировать "сырую" подпись произвольной строки данных (а не её хэша)?

Re: "Сырая" подпись на Java

martin-wanderer, добрый день!

Перед вызовом C_Sign (или обертки Pkcs11Signer.sign) нужно посчитать хеш.

Как это сделать для RSA на Java есть пример:
sdk/java/samples/pkcs11/src/main/java/ru/rutoken/samples/PkiExtensionsRSA.java


Константы для ГОСТ-алгоритмов есть в примере на Си:
sdk/pkcs11/samples/Standard/SigVerGOST34.10-2012-256/SigVerGOST34.10-2012-256.c