Laser

Пример формирования подписи формата 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;