Проверка подписи в Java
Здравствуйте.
Имеется токен и RSA-ключи на нем. Нужно подписать данные при помощи токена и потом проверить подпись на удаленной машине, где токена нет. Мой порядок действий:
1) Извлекается ключ при помощи session.findObjects()
2) Данные для подписи хешируются и подписываются через object.sign(data, Mechanism.SIGN_RSA)
3) Через findObjects() извлекается публичный ключ, из него при помощи getAttributeValue() извлекаются значения аттрибутов CKA_PUBLIC_EXPONENT и CKA_MODULUS
4) Из модуля и публичной экспоненты собирается публичный ключ через KeyFactory.generatePublic()
Дальше возникает проблема. Как я понял, в функцию sign передаются уже хешированные данные, т.к. никаких намеков на выбор алгоритма хеширования там нету. Однако, как проверить подпись, я не знаю. Попытка сделать это через класс Signature проваливается с возвратом false на методе verify(), попытка "заглянуть внутрь" при помощи класса Cipher, расшифровав подпись при помощи публичного ключа, проваливается с исключением "Message is larger than modulus".
Код, делающий описанные выше вещи: https://pastebin.com/sdCnhADC