Ошибка в Рутокен ЭЦП 3.0 Java SunPKCS11 генерация ключевой пары EC
Пытаюсь работать с ECDSA в Рутокен ЭЦП 3.0 в Java 20 через PKCS#11 Sun provider.
Успешно проинициализировал провайдер:
var prototype = Security.getProvider("SunPKCS11");
var ruTokenProvider = prototype.configure(cfgFile);
for (var item : ruTokenProvider .getServices()) {
System.out.println(item.getAlgorithm() + " : " + item.getType());
}
В списке сервисов вижу: "EC : KeyPairGenerator"
Пытаюсь им воспользоваться для генерации ключевой пары:
var keygen = KeyPairGenerator.getInstance("EC", ruTokenProvider); //На этой строчки возвращается ошибка
Получаю ошибку:
java.security.InvalidParameterException: No EC parameters available for key size 257 bits
at jdk.crypto.cryptoki/sun.security.pkcs11.P11KeyPairGenerator.initialize(P11KeyPairGenerator.java:160)
at jdk.crypto.cryptoki/sun.security.pkcs11.P11KeyPairGenerator.(P11KeyPairGenerator.java:144)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11$P11Service.newInstance0(SunPKCS11.java:1287)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11$P11Service.newInstance(SunPKCS11.java:1254)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:218)
at java.base/java.security.KeyPairGenerator.getInstance(KeyPairGenerator.java:341)
Немного удивляет что Java сразу вызывает initialize, который я собирался вызывать дальше сам кодом:
keygen.initialize(new ECGenParameterSpec("secp256r1"));
Но тем не менее, так происходит, посмотрел исходники JDK
https://github.com/openjdk/jdk/blob/mas … rator.java
Прошелся под отладчиком по коду создания KeyPairGenerator, явно ошибка в Рутокене, он сообщает диапазон ключа от 257 до 257 бит, такое в Java никогда не заработает такого размера ключа нет, есть 256.
Что делать?