Пример формирования подписи формата PKCS#7 для токена Laser (pkcs7SignData).
id<JCToken> token = ...;
// 1. Получение сертификата по заданному идентификатору
// Идентификатор (CKA_ID)
NSData* certificateID = ...;
// 1.1. Получение списка сертификатов
JCCertificateListResult *certificatesResult = [token readCertificates];
if (certificatesResult.error) {
// 1.2. Обработка ошибки получения списка сертификатов
return;
}
// 1.3. Поиск сертификата по заданному идентификатору
NSUInteger index = [certificatesResult.value indexOfObjectPassingTest:^BOOL(id<JCCertificateObject> _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
return [obj.identifier isEqualToData:certificateID];
}];
if (index == NSNotFound) {
// 1.2. Обработка отсутствия сертификата
return;
}
id<JCCertificateObject> certificate = certificatesResult.value[index];
// 2. Логин с PIN-кодом пользователя
// PIN-код пользователя
NSString* userPIN = ...;
JCResult *loginResult = [token loginByUserPIN:userPIN];
if(loginResult.error) {
// 2.1. Обработка ошибки
return;
}
// 3. Формирование подписи PKCS#7
NSData* data = ...;
BOOL attachedSignature = ...;
JCDataResult *signResult = [[token asJCTokenLaser] pkcs7SignData:data
certificate:certificate
attachedSignature:attachedSignature];
// 4. Логаут
JCResult *logoutResult = [token logout];
if (signResult.error) {
// 5. Обработка ошибки формирования подписи
return;
}
// 6. Обработка подписи
NSData* signature = signResult.value;