iaik pkcs#11 ラッパー (バージョン 1.3、最新の atm) から簡単なサンプル コードを実行しようとしていますが、すぐに応答NoSuchMethodError
しpkcs11Module.initialize
ます。
Module pkcs11Module = Module.getInstance("siecap11");
pkcs11Module.initialize(null);
Slot[] slots = pkcs11Module.getSlotList(Module.SlotRequirement.TOKEN_PRESENT);
for (Slot s: slots) {
System.out.println(s.getSlotID());
}
pkcs11Module.finalize(null);
例外スタック トレースは次のとおりです。
java.lang.NoSuchMethodError: iaik.pkcs.pkcs11.wrapper.PKCS11.C_Initialize(Ljava/lang/Object;Z)V
at iaik.pkcs.pkcs11.Module.initialize(Module.java:308)
at test.pkcs11.Pkcs11Service.listSlotsWithTokens(Pkcs11Service.java:98)
at test.pkcs11.TestPkcs11Service.testListSlots(TestPkcs11Service.java:35)
同様のコードは Linux でも問題なく動作するため、pkcs11wrapper.dll に何か問題があると推測しています。
pkcs11wrapper.dll
およびディレクトリにsiecap11.dll
ありc\windows\system32
、両方とも32ビットモジュールです。
別の pkcs#11 プロバイダー、デバッグおよびリリース バージョンの pkcs11wrapper を試しましたが、結果は同じでした。
pkcs11wrapper.dll のデバッグ バージョンは、次の出力を生成します。
11/26/13 21:30:50 CALL: entering (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_initializeLibrary)
11/26/13 21:30:50 CALL: exiting (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_initializeLibrary)
11/26/13 21:30:50 CALL: entering (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_connect)
11/26/13 21:30:50 INFO: connect to PKCS#11 module: siecap11 ... (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_connect)
11/26/13 21:30:50 CALL: exiting (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_connect)
スマート カードに付属のユーティリティ アプリケーションは正常に動作し、opensc pkcs11-tool も正常に動作します。
編集:
バージョン 1.2.17 の pkcs11 ラッパー ライブラリとそれに付随する dll を使用すると、上記のコードは問題なく動作します。しかし、元の質問は未解決のままです。
EDIT2:
SubOptimal によって提案された次のコードは、次の出力を生成します。
@Test
public void testFindLibrary() {
String lineSeparator = System.getProperty("path.separator");
String libraryPath = System.getProperty("java.library.path");
for (String dir : libraryPath.split(lineSeparator)) {
File f = new File(dir + "/" + "pkcs11wrapper.dll");
if (f.exists()) {
System.out.println("found in: " + f.getAbsolutePath());
}
}
}
出力:
found in: C:\Windows\system32\pkcs11wrapper.dll
found in: C:\Windows\system32\pkcs11wrapper.dll
found in: C:\Windows\system32\pkcs11wrapper.dll