Для формирования электронной подписи используется метод JCSDevice.createSignatureFromHash
.
При помощи этого метода можно создавать два вида подписи:
За выбор вида подписи отвечает аргумент attachedSignature.
Пример подключения к смарт-карте в разделе Подключение к NFC смарт-карте.
Пример создания присоединенной подписи
// PIN-код пользователя
String userPIN = "1234567890";
// Данные для подписи
byte[] data = new byte[]{ 1, 2, 3 };
// Сертификат для подписи
JCSCertificate certificate = JCSStorage.shared().certificates().get(0);
// Вычислить хэш данных
byte[] hash;
try {
hash = JCSUtils.digest(certificate.getHashAlgorithm(), data);
}
catch(Exception e) {
// Ошибка вычисления хэша
return;
}
// Подключиться к смарт-карте
openDevice(device -> {
try {
// Сформировать электронную подпись
byte[] signature = device.createSignatureFromHash(userPIN, null, hash, certificate, true, data);
}
catch(Exception e) {
// Ошибка создания подписи
}
finally {
// Закрыть подключение к смарт-карте
device.close();
}
});
Пример создания отсоединенной подписи
// PIN-код пользователя
String userPIN = "1234567890";
// Данные для подписи
byte[] data = new byte[]{ 1, 2, 3 };
// Сертификат для подписи
JCSCertificate certificate = JCSStorage.shared().certificates().get(0);
// Вычислить хэш данных
byte[] hash;
try {
hash = JCSUtils.digest(certificate.getHashAlgorithm(), data);
}
catch(Exception e) {
// Ошибка вычисления хэша
return;
}
// Подключиться к смарт-карте
openDevice(device -> {
try {
// Сформировать электронную подпись
byte[] signature = device.createSignatureFromHash(userPIN, null, hash, certificate, false, null);
}
catch(Exception e) {
// Ошибка создания подписи
}
finally {
// Закрыть подключение к смарт-карте
device.close();
}
});
Для проверки электронной подписи используется метод JCSUtils.verifySignature
.
При помощи этого метода можно осуществлять проверку:
Пример проверки присоединенной подписи
// Подпись
byte[] signature = new byte[]{ /* Массив байт с подписью в формате PKCS#7 */ };
try {
// Проверить электронную подпись
boolean valid = JCSUtils.verifySignature(signature, null);
}
catch(Exception e) {
// Ошибка проверки подписи
}
Пример проверки отсоединенной подписи
// Данные для проверки
byte[] data = new byte[]{ /* Массив байт с данными */ };
// Подпись
byte[] signature = new byte[]{ /* Массив байт с подписью в формате PKCS#7 */ };
try {
// Проверить электронную подпись
boolean valid = JCSUtils.verifySignature(signature, data);
}
catch(Exception e) {
// Ошибка проверки подписи
}