Библиотека "Java интерфейс" (Java Native Interface) - это динамическая библиотека (dll) Windows, предназначення для выполнения из программ на языке Java криптографических операций, реализованных в криптопровайдерах Windows (Cryptography Service Provider, CSP). Поддерживаются все криптопровайдеры, установленные в Windows XP/ 2003/ 7/ 2008. Библиотека скомпилирована как 32-bit и 64-bit динамическая библиотека.

Условие лицензирования: для использования физическими лицами - свободное; для использования юридическими лицами - коммерческое.

Библиотека включена в пакет ambapi.jar и загружается в папку пользователя при вызове конструктора:

        JCSRJNI dll = new JCSRJNI();  

Краткое описание

1. Общие сведения

Криптопровайдер CSP — это независимый модуль, позволяющий осуществлять криптографические операции в операционных системах Microsoft, управление которым происходит с помощью функций CryptoAPI.

Любой криптопровайдер должен экспортировать набор обязательных функций, которые формируют системный программный интерфейс CryptoAPI, при этом каждая из этих функций соответствует некоторой функции CryptoAPI. Также криптопровайдер должен обеспечивать:

Приложения не работают напрямую с криптопровайдером, вместо этого они вызывают функции CryptoAPI из библиотек Advapi32.dll и Crypt32.dll, которые непосредственно работают с криптопровайдером.

Java Native Interface (JNI) — стандартный механизм для запуска кода, под управлением виртуальной машины Java (JVM), который написан на языках С/С++ или Ассемблера, и скомпонован в виде динамических библиотек, позволяет не использовать статическое связывание. Это даёт возможность вызова функции С/С++ из программы на Java.

2. Список функций

Все функции возвращают коды ошибки в public переменных lastError (ошибки провайдера), lastWindowsError (ошибки Windows). Если ошибок нет, то lastError = 0 и lastWindowsError = 0.

№ п/п
Функция Назначение Параметры
1
byte[] getCertByThumbprint(String storeName, String thumbprint) Получить сертификат по его отпечатку storeName - имя хранилища Windows ("MY", "CA", "ROOT");
thumbprint - отпечаток (хеш SHA-1) сертификата в Hex формате.
Возвращает сертификат как байт массив.
2
byte[] getCertByKeyIdentifier(String storeName, byte[] keyIdentifier) Получить сертификат по SubjectKeyIdentifier storeName - имя хранилища Windows ("MY", "CA", "ROOT");
keyIdentifier - значение SubjectKeyIdentifier.
Возвращает сертификат как байт массив.
3
byte[] getCertByKeyIdentifier2(String storeName, int location, byte[] keyIdentifier) Получить сертификат по SubjectKeyIdentifier storeName - имя хранилища Windows ("MY", "CA", "ROOT");
location - размещение хранилища (CERT_SYSTEM_STORE_CURRENT_USER = 0x10000; CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x20000; CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x40000; CERT_SYSTEM_STORE_SERVICE = 0x50000; CERT_SYSTEM_STORE_USERS = 0x60000; CERT_SYSTEM_CURRENT_USER_GROUP_POLICY = 0x70000; CERT_SYSTEM_LOCAL_MACHINE_GROUP_POLICY = 0x80000; CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x90000;);
keyIdentifier - значение SubjectKeyIdentifier.
Возвращает сертификат как байт массив.
4
byte[] getListCert(String storeName, String caption, String text, int notUseColumn) Получить окно списка сертификатов и выбрать в нем сертификат storeName - имя хранилища Windows ("MY", "CA", "ROOT");
caption - текст заголовка окна;
text - текст заголовка таблицы сертификатов в окне;
notUseColumn - флаг использования столбцов таблицы сертификатов (CRYPTUI_SELECT_ISSUEDTO_COLUMN = 0x000000001; CRYPTUI_SELECT_ISSUEDBY_COLUMN = 0x000000002; CRYPTUI_SELECT_INTENDEDUSE_COLUMN = 0x000000004; CRYPTUI_SELECT_FRIENDLYNAME_COLUMN = 0x000000008; CRYPTUI_SELECT_LOCATION_COLUMN = 0x000000010; CRYPTUI_SELECT_EXPIRATION_COLUMN = 0x000000020;).
Возвращает сертификат как байт массив.
5
byte[] hash(byte[] certificate, byte[] data) Вычислить хэш-функцию данных; алгоритм хэш берется из алгоритма подписи сертификата certificate - сертификат (выбор хэш алгоритма: если алгоритм подписи sha1RSA, то алгоритм хэш SHA1; если ДСТУ 4145, то алгоритм хэш ГОСТ 34311-95; и т.д.);
data - данные.
Возвращает хэш значение как байт массив.
6
byte[] sign(byte[] certificate, byte[] data, String password) Вычислить подпись данных; алгоритм хэш берется из алгоритма подписи сертификата certificate - сертификат, на закрытом ключе которого требуется подписать данные (выбор хэш алгоритма: если алгоритм подписи sha1RSA, то алгоритм хэш SHA1; если ДСТУ 4145, то алгоритм хэш ГОСТ 34311-95; и т.д.);
data - данные;
password - пароль доступа к закрытому ключу или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает значение подписи как байт массив (в виде, который определен соответсвующим стандартом).
7
byte[] sign2(byte[] certificate, byte[] data, int hashType, String password) Вычислить подпись данных с заданным алгоритмом хэш certificate - сертификат, на закрытом ключе которого требуется подписать данные;
data - данные;
hashType - хэш алгоритм (HASH_TYPE_G34311 = 32850; HASH_TYPE_SHA1 = 32772; HASH_TYPE_SHA_256 = 32780; HASH_TYPE_SHA_384 = 32781; HASH_TYPE_SHA_512 = 32782;);
password - пароль доступа к закрытому ключу или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает значение подписи как байт массив (в виде, который определен соответсвующим стандартом).
8
boolean verify(byte[] certificate, byte[] data, byte[] signature) Проверить подпись данных; алгоритм хэш берется из алгоритма подписи сертификата certificate - сертификат, на открытом ключе которого требуется проверить подпись данных (выбор хэш алгоритма: если алгоритм подписи sha1RSA, то алгоритм хэш SHA1; если ДСТУ 4145, то алгоритм хэш ГОСТ 34311-95; и т.д.);
data - данные;
signature - значение подписи.
Возвращает булевский результат проверки подписи.
9
boolean verify2(byte[] certificate, byte[] data, byte[] signature, int hashType) Проверить подпись данных с заданным алгоритмом хэш certificate - сертификат, на открытом ключе которого требуется проверить подпись данных;
data - данные;
signature - значение подписи;
hashType - хэш алгоритм (HASH_TYPE_G34311 = 32850; HASH_TYPE_SHA1 = 32772; HASH_TYPE_SHA_256 = 32780; HASH_TYPE_SHA_384 = 32781; HASH_TYPE_SHA_512 = 32782;).
Возвращает булевский результат проверки подписи.
10
byte[] signPKCS7(byte[] certificate, byte[] data, int hashType, String password) Подпись данных в формате PKCS#7 отсоединенная подпись (SignedData detached signature) с заданным алгоритмом хэш certificate - сертификат, на закрытом ключе которого требуется подписать данные;
data - данные;
hashType - хэш алгоритм (HASH_TYPE_G34311 = 32850; HASH_TYPE_SHA1 = 32772; HASH_TYPE_SHA_256 = 32780; HASH_TYPE_SHA_384 = 32781; HASH_TYPE_SHA_512 = 32782;);
password - пароль доступа к закрытому ключу или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает значение подписи как байт массив формате PKCS#7 отсоединенная подпись (SignedData detached signature).
11
byte[] signPKCS7(byte[] certificate, byte[] data, String password) Подпись данных в формате PKCS#7 отсоединенная подпись (SignedData detached signature) с алгоритмом хэш из сертификата certificate - сертификат, на закрытом ключе которого требуется подписать данные (выбор хэш алгоритма: если алгоритм подписи sha1RSA, то алгоритм хэш SHA1; если ДСТУ 4145, то алгоритм хэш ГОСТ 34311-95; и т.д.);
data - данные;
password - пароль доступа к закрытому ключу или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает значение подписи как байт массив формате PKCS#7 отсоединенная подпись (SignedData detached signature).
12
byte[] signPKCS7(byte[] certificate, byte[] data, int hashType, String password) Подпись данных в формате PKCS#7 отсоединенная подпись (SignedData detached signature) с заданным алгоритмом хэш certificate - сертификат, на закрытом ключе которого требуется подписать данные;
data - данные;
hashType - хэш алгоритм (HASH_TYPE_G34311 = 32850; HASH_TYPE_SHA1 = 32772; HASH_TYPE_SHA_256 = 32780; HASH_TYPE_SHA_384 = 32781; HASH_TYPE_SHA_512 = 32782;);
password - пароль доступа к закрытому ключу или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает значение подписи как байт массив формате PKCS#7 отсоединенная подпись (SignedData detached signature).
13
byte[] signPKCS7(byte[] certificate, byte[] data, String password, boolean isDetached) Подпись данных в формате PKCS#7 отсоединенная или присединенная подпись (SignedData detached/attached signature) с алгоритмом хэш из сертификата certificate - сертификат, на закрытом ключе которого требуется подписать данные (выбор хэш алгоритма: если алгоритм подписи sha1RSA, то алгоритм хэш SHA1; если ДСТУ 4145, то алгоритм хэш ГОСТ 34311-95; и т.д.);
data - данные;
password - пароль доступа к закрытому ключу или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе);
isDetached - флаг отсоединенной подписи (true) или присоединенной (false).
Возвращает значение подписи как байт массив формате PKCS#7 (SignedData).
14
byte[] signPKCS7(byte[] certificate, byte[] data, String password, boolean isDetached, int hashType) Подпись данных в формате PKCS#7 отсоединенная или присединенная подпись (SignedData detached/attached signature) с заданным алгоритмом хэш certificate - сертификат, на закрытом ключе которого требуется подписать данные;
data - данные;
isDetached - флаг отсоединенной подписи (true) или присоединенной (false);
hashType - хэш алгоритм (HASH_TYPE_G34311 = 32850; HASH_TYPE_SHA1 = 32772; HASH_TYPE_SHA_256 = 32780; HASH_TYPE_SHA_384 = 32781; HASH_TYPE_SHA_512 = 32782;);
password - пароль доступа к закрытому ключу или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает значение подписи как байт массив формате PKCS#7 (SignedData).
15
boolean verifyPKCS7(byte[] data, byte[] signature) Проверить подпись данных в формате PKCS#7 отсоединенная подпись (SignedData detached signature) data - данные, которые были подписаны;
signature - значение подписи в формате PKCS#7 отсоединенная подпись.
Возвращает булевское значение проверки подписи.
16
boolean verifyPKCS7(byte[] data, byte[] signature) Проверить подпись данных в формате PKCS#7 отсоединенная или присоединенная подпись (SignedData detached/ attached signature) data - null для присоединенной подписи, или данные, которые были подписаны, для отсоединенной подписи;
signature - значение подписи в формате PKCS#7 (SignedData).
Возвращает булевское значение проверки подписи.
17
boolean importPFX(String storeName, byte[] pfx, String password, int flags) Импортировать ключи и сертификаты из PKCS#12 (PFX) файла в заданное хранилище storeName - имя хранилища ("MY", "CA", "ROOT"), куда требуется выполнить импорт;
pfx - байт массив pfx файла;
password - пароль доступа к pfx файлу;
flags - комбинация флагов (определены в Wincrypt.h), которые будут применяться к закрытому ключу. Могут быть использованы следующие флаги через OR-операцию: CRYPT_EXPORTABLE, CRYPT_USER_PROTECTED, CRYPT_MACHINE_KEYSET, CRYPT_USER_KEYSET.
Возвращает булевское значение результата импорта.
18
boolean ImportPFX(String storeName, int location, String fileName, String password) Импортировать ключи и сертификаты из PKCS#12 (PFX) файла в заданное хранилище storeName - имя хранилища ("MY", "CA", "ROOT"), куда требуется выполнить импорт;
location - размещение хранилища (CERT_SYSTEM_STORE_CURRENT_USER = 0x10000; CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x20000; CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x40000; CERT_SYSTEM_STORE_SERVICE = 0x50000; CERT_SYSTEM_STORE_USERS = 0x60000; CERT_SYSTEM_CURRENT_USER_GROUP_POLICY = 0x70000; CERT_SYSTEM_LOCAL_MACHINE_GROUP_POLICY = 0x80000; CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x90000;);
fileName - имя pfx файла;
password - пароль доступа к pfx файлу.
Возвращает булевское значение результата импорта.
19
int ExportPFX(String storeName, int location, String fileName, String password) Экспортировать ключ и сертификат из заданного хранилища в файл PKCS#12 (PFX) storeName - имя хранилища ("MY", "CA", "ROOT"), куда требуется выполнить импорт;
location - размещение хранилища (CERT_SYSTEM_STORE_CURRENT_USER = 0x10000; CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x20000; CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x40000; CERT_SYSTEM_STORE_SERVICE = 0x50000; CERT_SYSTEM_STORE_USERS = 0x60000; CERT_SYSTEM_CURRENT_USER_GROUP_POLICY = 0x70000; CERT_SYSTEM_LOCAL_MACHINE_GROUP_POLICY = 0x80000; CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x90000;);
fileName - путь и имя создаваемого pfx файла;
password - пароль доступа к pfx файлу.
Возвращает 0 значение, если успешно.
20
byte[] encryptPkcs7(byte[] certificate, byte[] plainData) Зашифровать данные в формате PKCS#7 защищенные данные (EnvelopedData), RSA certificate - сертификат получателя, на открытом ключе которого защищаются данные (только для RSA алгоритма ключа);
plainData - байт массив данных, которые требуется зашифровать.
Возвращает байт массив зашифрованных данных в формате PKCS#7 защищенные данные (EnvelopedData).
21
byte[] decryptPkcs7(byte[] certificate, byte[] encData, String password) Расшифровать данные в формате PKCS#7 защищенные данные (EnvelopedData), RSA алгоритм ключа certificate - сертификат получателя, на закрытом ключе которого необходимо расшифровать данные (только для RSA алгоритма ключа);
encData - байт массив зашифрованных данных в формате PKCS#7 защищенные данные (EnvelopedData);
password - пароль доступа к закрытому ключу или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает байт массив расшифрованных данных.
22
byte[] encryptDH(byte[] senderCert, byte[] recieverCert, byte[] data, String password) Зашифровать данные в формате PKCS#7 защищенные данные (EnvelopedData), Диффи-Хеллман (Diffie-Hellman), алгоритм ключа: ДСТУ 4145-2002, ГОСТ 34.310-95, ГОСТ 34.310-2004, ECDSA, DSA senderCert - сертификат отправителя, закрытый ключ которого используется протоколом согласования ключей Диффи-Хеллмана; recieverCert - сертификат получателя, открытый ключ которого используется протоколом согласования ключей Диффи-Хеллмана;
data - байт массив данных, которые требуется зашифровать;
password - пароль доступа к закрытому ключу отправителя или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает байт массив зашифрованных данных в формате PKCS#7 защищенные данные (EnvelopedData).
23
byte[] decryptDH(byte[] senderCert, byte[] recieverCert, byte[] data, String password) Расшифровать данные в формате PKCS#7 защищенные данные (EnvelopedData), Диффи-Хеллман (Diffie-Hellman), алгоритм ключа: ДСТУ 4145-2002, ГОСТ 34.310-95, ГОСТ 34.310-2004, ECDSA, DSA senderCert - сертификат отправителя, открытый ключ которого используется протоколом согласования ключей Диффи-Хеллмана; recieverCert - сертификат получателя, закрытый ключ которого используется протоколом согласования ключей Диффи-Хеллмана;
data - байт массив данных, которые требуется зашифровать;
password - пароль доступа к закрытому ключу получателя или null; если пароль не задан, то провайдер CSP запросит пароль при необходимости (провайдеры Microdoft не запрашивают пароль, т.к. используют механизм аутентификации пользователя в системе).
Возвращает байт массив расшифрованных данных.
24
String ngetMSProviders() Получить список криптопровадеров CSP, усановленных в системе Windows Возвращает строку списка имен провадеров, разделенных символом "|".
25
String getSCCspProviders() Получить список смарт-карт (е-токенов) криптопровадеров CSP, усановленных в системе Windows Возвращает строку списка имен провадеров, разделенных символом "|".
26
String createRequest(String cspName, int keySize, String dName, String friendlyName, String certTemplate, boolean isExportable, boolean forEncrypt) Сгенерировать ключевую пару и запрос PKCS#10 на получение сертификата cspName - имя криптопровайдера CSP;
keySize - длина ключа в битах;
dName - имя Subject DN;
friendlyName - дружественное имя сертификата;
certTemplate - шаблон сертификата (для ЦСК, который порддерживает шаблоны) или null;
isExportable - флаг экспортируемости закрытого ключа (если false - ключ не может быть экспортирован из хранилища);
forEncrypt - флаг назнечения ключа для шифрования; если false - ключ может применяться для подписи, но не может применяться для шифрования; если true - ключ может применяться для шифрования;
Возвращает BER-кодированный запрос PKCS#10.
27
String createRequest2(String cspName, int cspType, int keySpec, int keySize, String DNname, String friendlyName, String certTemplate, boolean isPublish, boolean isCodeEDRPUO, boolean isKeySecurity, boolean isExportable) Сгенерировать ключевую пару и запрос PKCS#10 на получение сертификата cspName - имя криптопровайдера CSP;
cspType - тип криптопровайдера CSP, опциональный, может быть 0;
keySpec - спецификация ключа AT_KEYEXCHANGE (для шифрования) или AT_SIGNATURE (для подписи);
keySize - длина ключа в битах;
DNname - имя Subject DN;
friendlyName - дружественное имя сертификата;
certTemplate - шаблон сертификата (для ЦСК, который порддерживает шаблоны) или null;
isPublish - флаг разрешения на публикацию сертификата;
isCodeEDRPUO - флаг добавлять код ЕДРПУО;
isKeySecurity - флаг усиленной защиты ключа (требуется дополнительный пароль на доступ ключу, а не только к хранилищу ключей);
isExportable - флаг экспортируемости закрытого ключа (если false - ключ не может быть экспортирован из хранилища);
Возвращает BER-кодированный запрос PKCS#10.
28
boolean installCertificate(String cert) Установить сертификат в системе Windows cert - BER-кодированный сертификат; устанавливается в хранилище, определяемое криптопровайдера CSP.
Возвращает булевскую переменную результата установки.
29
boolean installCertificate2(byte[] cert, int location, String storeName) Установить сертификат в системе Windows в заданное хранилище cert - DER-кодированный сертификат;
location - размещение хранилища (CERT_SYSTEM_STORE_CURRENT_USER = 0x10000; CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x20000; CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x40000; CERT_SYSTEM_STORE_SERVICE = 0x50000; CERT_SYSTEM_STORE_USERS = 0x60000; CERT_SYSTEM_CURRENT_USER_GROUP_POLICY = 0x70000; CERT_SYSTEM_LOCAL_MACHINE_GROUP_POLICY = 0x80000; CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x90000;);
storeName - имя хранилища Windows ("MY", "CA", "ROOT");
Возвращает булевскую переменную результата установки.
30
boolean deleteCertificate(String storeName, String cert) Удалить сертификат и его закрытый ключ (если есть) из заданного храшилища Windows storeName - имя хранилища Windows ("MY", "CA", "ROOT");
cert - BER-кодированный сертификат.
Возвращает булевскую переменную результата удаления.

 

Разработчик: ООО "Базис"; 03049, Украина, г.Киев, ул. Платоновская 18; Тел.: +38 044 244-06-38; tech@itsway.kiev.ua