Дайджест создается на одном сервере и передается на другой сервер для подписи с помощью токенов/ключей. API-интерфейсы шифрования отлично работают с PKCS11 prvoider.
Cipher c = Cipher.getInstance("RSA");
c.init(Cipher.ENCRYPT_MODE, pk);
DigestInfo di = new DigestInfo(new DefaultDigestAlgorithmIdentifierFinder().find("SHA-256"), hash);
byte[] digestInfo = di.getEncoded();
byte[] data = c.doFinal(digestInfo);
Но при использовании API-интерфейсов шифрования с поставщиком SunMSCAPI закрытый ключ рассматривается как открытый ключ, пароль токена не запрашивается, а сгенерированная проверка подписи не выполняется. Также использование Cipher с закрытым ключом не является правильным подходом (также обсуждается здесь - https://bugs.openjdk.java.net/browse/JDK-7050158).
Как я могу использовать Signature API, избегая повторного создания дайджеста? Вывод, полученный "NONEWithRSA", будет неправильным, так как мой дайджест - "Sha-256", и проверка подписи завершится ошибкой.