Спасибо за ответ,
1) данный пример видел, но он не очень понятен. Вызывает трудности сопоставление значения из X509CertificateHolder и keyValue для RSA сертификатов.
CK_ATTRIBUTE[] pubKeyTemplate = (CK_ATTRIBUTE[]) (new CK_ATTRIBUTE()).toArray(3);
final NativeLongByReference keyClass =
new NativeLongByReference(new NativeLong(Pkcs11Constants.CKO_PUBLIC_KEY));
pubKeyTemplate[0].type = new NativeLong(Pkcs11Constants.CKA_CLASS);
pubKeyTemplate[0].pValue = keyClass.getPointer();
pubKeyTemplate[0].ulValueLen = new NativeLong(NativeLong.SIZE);
ByteBuffer valueBuffer = ByteBuffer.allocateDirect(keyValue.length);
valueBuffer.put(keyValue);
pubKeyTemplate[1].type = new NativeLong(Pkcs11Constants.CKA_VALUE);
pubKeyTemplate[1].pValue = Native.getDirectBufferPointer(valueBuffer);
pubKeyTemplate[1].ulValueLen = new NativeLong(keyValue.length);
final NativeLongByReference keyClass1 =
new NativeLongByReference(new NativeLong(Pkcs11Constants.CKK_RSA));
pubKeyTemplate[2].type = new NativeLong(Pkcs11Constants.CKA_KEY_TYPE);
pubKeyTemplate[2].pValue = keyClass1.getPointer();
pubKeyTemplate[2].ulValueLen = new NativeLong(NativeLong.SIZE);
2) Увидел обновление в документации
CKM_SHA_256 для хеширования алгоритмом SHA-256 (только программно),
CKM_SHA_512 для хеширования алгоритмом SHA-512 (только программно),
Переменные CKM_SHA_256 и CKM_SHA_512 не находит, верно ли название?
Есть только Pkcs11Constants.CKM_SHA256.
Для sha256:
- в функцию (https://github.com/AktivCo/rutoken-demo … e.java#L32) передаю makeMechanism(CKM_RSA_PKCS)
- в функции (https://github.com/AktivCo/rutoken-demo … r.java#L32) добавляю новый AlgorithmIdentifier return new AlgorithmIdentifier(new ASN1ObjectIdentifier("1.2.840.113549.1.1.11")); // sha256WithRSAEncryption
- в функцию (https://github.com/AktivCo/rutoken-demo … r.java#L25) также добавляю новый AlgorithmIdentifier return new AlgorithmIdentifier(new ASN1ObjectIdentifier("2.16.840.1.101.3.4.2.1")); // sha-256
- создал класс наследуемый от Pkcs11Digest, которая вызывает Pkcs11Digest с параметром Pkcs11Constants.CKM_SHA256. Длина хеша равна 32.
- Для RSA CK_MECHANISM формируется как return new CK_MECHANISM(new NativeLong(type), null, new NativeLong(0))
Подпись проверял через онлайн сервисы проверки подписи (криптопро, контур)