Date: Thu, 28 Mar 2024 12:26:43 +0300 (MSK) Message-ID: <830115006.11763.1711618003395@dev.rutoken.ru> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_11762_1003185663.1711618003395" ------=_Part_11762_1003185663.1711618003395 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
=D0=94=D0=BB=D1=8F =D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B =D1=81 =D1=
=82=D0=BE=D0=BA=D0=B5=D0=BD=D0=B0=D0=BC=D0=B8 =D0=B2 Java =D1=80=D0=B0=D0=
=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BD=D0=B0 =D1=81=D0=BF=D0=B5=D1=
=86=D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F =D0=B1=D0=B8=D0=B1=D0=BB=D0=
=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B0-=D0=BE=D0=B1=D0=B5=D1=80=D1=82=D0=BA=D0=
=B0 pkcs11jna. =D0=AD=D1=82=D0=B0 =D0=BE=D0=B1=D0=B5=D1=80=
=D1=82=D0=BA=D0=B0 =D0=BF=D1=80=D0=B5=D0=B4=D0=BE=D1=81=D1=82=D0=B0=D0=B2=
=D0=BB=D1=8F=D0=B5=D1=82 =D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=
=D1=81 =D0=BD=D0=B0=D0=B4 =D0=B4=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8=D1=87=D0=B5=
=D1=81=D0=BA=D0=B8=D0=BC=D0=B8 PKCS#11 =D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=
=D1=82=D0=B5=D0=BA=D0=B0=D0=BC=D0=B8.
=D0=98=D1=81=D1=85=D0=BE=D0=B4=D0=BD=D1=8B=D0=B9 =D0=BA=D0=BE=D0=B4 =D1=80=
=D0=B0=D1=81=D0=BF=D0=BE=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD =D0=BD=D0=B0: https://github.com/AktivCo/pkcs11jna
=D0=A0= =D0=B0=D0=B1=D0=BE=D1=82=D0=B0 =D1=81 =D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE= =D1=82=D0=B5=D0=BA=D0=BE=D0=B9 pkcs11jna =D0=B4=D0=BE= =D1=81=D1=82=D0=B0=D1=82=D0=BE=D1=87=D0=BD=D0=BE =D0=BF=D1=80=D0=BE=D1=81= =D1=82=D0=B0. =D0=A1 =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E net= .java.dev.jna =D0=BD=D1=83=D0=B6=D0=BD=D0=BE =D0=B7=D0=B0=D0=B3=D1= =80=D1=83=D0=B7=D0=B8=D1=82=D1=8C PKCS#11 =D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0= =BE=D1=82=D0=B5=D0=BA=D1=83 =D0=B8 =D0=B4=D0=B0=D0=BB=D0=B5=D0=B5 =D1=80=D0= =B0=D0=B1=D0=BE=D1=82=D0=B0=D1=82=D1=8C =D1=81 =D0=B2=D0=BE=D0=B7=D0=B2=D1= =80=D0=B0=D1=89=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC =D0=BE=D0=B1=D1=8A=D0=B5=D0= =BA=D1=82=D0=BE=D0=BC =D0=BF=D0=BE =D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0= =B5=D0=B9=D1=81=D1=83 =D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0 RtPkcs11:
import = com.sun.jna.Native; import ru.rutoken.pkcs11jna.RtPkcs11; RtPkcs11 rtpkcs11 =3D Native.load(Native.extractFromResourcePath("rtpkcs11e= cp").getAbsolutePath(), RtPkcs11.class);
=D0=9A=D0=BB=D0=B0=D1=81=D1=81 RtPkcs11 =D0=BF=D1=80=D0= =B5=D0=B4=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D1=82 =D0=B8=D0= =BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81 =D0=BD=D0=B0=D0=B4 PKCS#11 = =D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=D0=BC =D0=BE=D0=B1=D0=B5=D1=80= =D0=BD=D1=83=D1=82=D0=BE=D0=B9 =D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82= =D0=B5=D0=BA=D0=BE=D0=B9. =D0=94=D0=BB=D1=8F =D0=BF=D1=80=D0=B8=D0=BC=D0=B5= =D1=80=D0=B0 =D0=BF=D0=BE=D0=BA=D0=B0=D0=B6=D0=B5=D0=BC, =D0=BA=D0=B0=D0=BA= =D0=BC=D0=BE=D0=B6=D0=BD=D0=BE =D0=BF=D1=80=D0=BE=D0=B8=D0=BD=D0=B8=D1=86= =D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C = =D1=82=D0=BE=D0=BA=D0=B5=D0=BD:
import = com.sun.jna.NativeLong; import com.sun.jna.Native; import com.sun.jna.ptr.NativeLongByReference; import ru.rutoken.pkcs11jna.CK_C_INITIALIZE_ARGS; import ru.rutoken.pkcs11jna.Pkcs11Constants; import ru.rutoken.pkcs11jna.RtPkcs11; public class Init { private final static byte[] TOKEN_LABEL =3D {'M', 'y', ' ', 'R', 'u', '= t', 'o', 'k', 'e', 'n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}; public final static CK_C_INITIALIZE_ARGS INITIALIZE_ARGUMENTS =3D new CK_C_INITIALIZE_ARGS(null, null, null, null, new NativeLong= (Pkcs11Constants.CKF_OS_LOCKING_OK), null); public static final byte[] DEFAULT_USER_PIN =3D {'1', '2', '3', '4', '5= ', '6', '7', '8'}; public static final byte[] DEFAULT_SO_PIN =3D {'8', '7', '6', '5', '4',= '3', '2', '1'}; =20 public static void main(String[] args) { NativeLong hSession =3D new NativeLong(Pkcs11Constants.CK_INVALID_H= ANDLE); RtPkcs11 rtpkcs11 =3D null; =20 =20 try { System.out.println("Example of token initialization using rtpkc= s11ecp via JNA"); rtpkcs11 =3D Native.load(Native.extractFromResourcePath("rtpkcs= 11ecp").getAbsolutePath(), RtPkcs11.class); System.out.println("Library initialization and acquiring of fun= ction list"); NativeLong rv =3D rtpkcs11.C_Initialize(INITIALIZE_ARGUMENTS); if (!Pkcs11Constants.equalsPkcsRV(Pkcs11Constants.CKR_OK, rv)) = { throw new Exception("C_Initialize failed"); } System.out.println("Acquiring list of slots with connected toke= ns"); NativeLongByReference slotsCount =3D new NativeLongByReference(= ); rv =3D rtpkcs11.C_GetSlotList(Pkcs11Constants.CK_TRUE, null, sl= otsCount); if (!Pkcs11Constants.equalsPkcsRV(Pkcs11Constants.CKR_OK, rv)) = throw new Exception("C_GetSlotList failed"); =20 =20 if (slotsCount.getValue().intValue() =3D=3D 0) { throw new Exception("No Rutoken is available!"); } NativeLong[] pSlotList =3D new NativeLong[slotsCount.getValue()= .intValue()]; rv =3D rtpkcs11.C_GetSlotList(Pkcs11Constants.CK_TRUE, pSlotLis= t, slotsCount); if (!Pkcs11Constants.equalsPkcsRV(Pkcs11Constants.CKR_OK, rv)) = throw new Exception("C_GetSlotList failed"); System.out.println("Token initialization"); rv =3D rtpkcs11.C_InitToken(pSlotList[0], DEFAULT_SO_PIN, new N= ativeLong(DEFAULT_SO_PIN.length), TOKEN_LABEL); if (!Pkcs11Constants.equalsPkcsRV(Pkcs11Constants.CKR_OK, rv)) = throw new Exception("C_GetSlotList failed"); System.out.println("Opening session"); NativeLongByReference phSession =3D new NativeLongByReference()= ; rv =3D rtpkcs11.C_OpenSession(pSlotList[0], new NativeLong(Pkcs11Constants.CKF_SERIAL_SESSION | Pkc= s11Constants.CKF_RW_SESSION), null, null, phSession); if (!Pkcs11Constants.equalsPkcsRV(Pkcs11Constants.CKR_OK, rv)) = throw new Exception("C_GetSlotList failed"); =20 hSession =3D phSession.getValue(); System.out.println("Logging in as administrator"); rv =3D rtpkcs11.C_Login(hSession, new NativeLong(Pkcs11Constant= s.CKU_SO), DEFAULT_SO_PIN, new NativeLong(DEFAULT_SO_PIN.length)); if (!Pkcs11Constants.equalsPkcsRV(Pkcs11Constants.CKR_OK, rv)) = throw new Exception("C_GetSlotList failed"); System.out.println("User PIN initialization"); rv =3D rtpkcs11.C_InitPIN(hSession, DEFAULT_USER_PIN, new Nativ= eLong(DEFAULT_USER_PIN.length)); if (!Pkcs11Constants.equalsPkcsRV(Pkcs11Constants.CKR_OK, rv)) = throw new Exception("C_GetSlotList failed"); } catch (Exception e) { System.out.println(e.getMessage()); } finally { if (rtpkcs11 !=3D null) { System.out.println("Logging out"); NativeLong rv =3D rtpkcs11.C_Logout(hSession); System.out.println("Closing session"); rv =3D rtpkcs11.C_CloseSession(hSession); System.out.println("Finalizing PKCS11 library"); rv =3D rtpkcs11.C_Finalize(null); System.out.println("Test has been completed."); } } } }
=D0=91=D0=BE=D0=BB=D1=8C=D1=88=D0=B5 =D0=BF=D1=80=D0=B8= =D0=BC=D0=B5=D1=80=D0=BE=D0=B2 =D0=BF=D0=BE =D1=80=D0=B0=D0=B1=D0=BE=D1=82= =D0=B5 =D1=81 =D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=BE= =D0=B9 pkcs11jna =D0=BC=D0=BE=D0=B6=D0=BD=D0=BE =D0=BD=D0= =B0=D0=B9=D1=82=D0=B8 =D0=B2 =D0=A0=D1=83=D1=82=D0=BE=D0= =BA=D0=B5=D0=BD SDK =D0=B2 =D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0= =BE=D1=80=D0=B8=D0=B8 sdk/java/samples.