В https://github.com/luisgoncalves/xades4j/wiki/DefiningKeyingData говорится, что ключи и сертификаты, хранящиеся на смарт-карте, могут использоваться для подписи документов XML. Native библиотека упоминается в примере коды:Что должно быть в родной библиотеке PKCS11, совместимой с Xades4J?
KeyingDataProvider kp = new PKCS11KeyStoreKeyingDataProvider(
"path/to/native/lib",
"name",
new FirstCertificateSelector(),
null, null, false);
Но что должно быть в этой родной библиотеке, это дллы или Java банк, какие функции библиотека должна экспортировать? Я пытался использовать библиотеки pkcs11wrapper-1.2.18.jar и pkcs11wrapper.dll из распределений цифровой подписи пакетов моей страны, но исключения были выброшены:
Exception in thread "main" java.security.ProviderException: java.lang.reflect.InvocationTargetException
at xades4j.providers.impl.PKCS11KeyStoreKeyingDataProvider.createPkcs11Provider(PKCS11KeyStoreKeyingDataProvider.java:211)
at xades4j.providers.impl.PKCS11KeyStoreKeyingDataProvider.access$100(PKCS11KeyStoreKeyingDataProvider.java:52)
at xades4j.providers.impl.PKCS11KeyStoreKeyingDataProvider$1.getBuilder(PKCS11KeyStoreKeyingDataProvider.java:118)
at xades4j.providers.impl.KeyStoreKeyingDataProvider.ensureInitialized(KeyStoreKeyingDataProvider.java:175)
at xades4j.providers.impl.KeyStoreKeyingDataProvider.getSigningCertificateChain(KeyStoreKeyingDataProvider.java:189)
at xades4j.production.SignerBES.sign(SignerBES.java:151)
at xades4j.production.SignerBES.sign(SignerBES.java:122)
...
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at xades4j.providers.impl.PKCS11KeyStoreKeyingDataProvider.createPkcs11Provider(PKCS11KeyStoreKeyingDataProvider.java:198)
... 8 more
Caused by: java.security.ProviderException: Error parsing configuration
at sun.security.pkcs11.Config.getConfig(Config.java:88)
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:129)
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:107)
... 13 more
Caused by: sun.security.pkcs11.ConfigurationException: Unexpected value Token['('], line 2
at sun.security.pkcs11.Config.excToken(Config.java:375)
at sun.security.pkcs11.Config.parseLine(Config.java:595)
at sun.security.pkcs11.Config.parseLibrary(Config.java:666)
at sun.security.pkcs11.Config.parse(Config.java:398)
at sun.security.pkcs11.Config.<init>(Config.java:220)
at sun.security.pkcs11.Config.getConfig(Config.java:84)
... 15 more
Аналогичный след генерируется исключение также в тех случаях, когда укажите пустой путь или путь к несуществующему файлу библиотеки.
Что должно быть в родной библиотеке, чтобы использовать его от Xades4J? Если эта родная библиотека поддерживает некоторый общепринятый интерфейс. Возможно, Xades4J подходит только для смарт-карт, выпущенных правительством Испании?