(2017-07-01 05:46:04 отредактировано ruskuzya)

Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

iOS приложение(SecureMessaging) выводит наименование контейнеров на Рутокен ЭЦП Bluetooth в режиме отладки. При архивации и публикации в в крашлитикс на тестирование приложения - приложение контейнеров не обнаруживает. В чем может быть причина, почему не выводит контейнеры?

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Добрый день, ruskuzya.
Правильно я понимаю, что Вы используете контейнеры КриптоПро для хранения ключевой информации?
Подскажите пожалуйста:

  • Версию нашего SDK, которую Вы используете при сборке

  • Версию SDK от КриптоПро

  • Версию XCode

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Верно
SDK 20170210
Крипто Про 4.0.9842
XCode Version 8.3.3 (8E3004b)

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Добрый день,
попробуйте пожалуйста собрать приложение без -all_load

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Кирилл Мещеряков пишет:

Добрый день,
попробуйте пожалуйста собрать приложение без -all_load

Собирали без -all_load

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Добрый день.

У криптопро в CPROCSP.framework/readers.txt даны некорректные указания по сборке с нашим модулем поддержки, при указании флага -all_load линковка поломается, надо указывать флаг

-force_load ${path_to_your_frameworks_directory}/RDRRtSupCp.framework/RDRRtSupCp

Описание, поясняющее суть:
-all_load forces the linker to load all object files from every archive it sees, even those without Objective-C code. -force_load is available in Xcode 3.2 and later. It allows finer grain control of archive loading. Each -force_load option must be followed by a path to an archive, and every object file in that archive will be loaded.

В криптопро об этом мы сообщим.

(2017-07-24 14:42:56 отредактировано ruskuzya)

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Подключенный путь такой же как у вас и для отладки и для публикации одинаковый. Не помогает.

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Если ваш проект собирается и и нормально публикуется (видно контейнеры) то можете поделиться кодом вашего проекта?

(2017-08-18 10:37:19 отредактировано kamenov)

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Архив с проектом можно скачать по ссылке: https://owncloud.aktiv-company.ru/owncl … m6jxhAtmUb. Для проверки работоспособности разархивируйте его в sdk/mobile/ios/CryptoPro/samples/ и соберите.

(2021-10-28 13:28:30 отредактировано dmtrii93)

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Добрый день. Столкнулись с такой же проблемой, не видит рутокен в ios. Можно получить актуальную инструкцию по подключению модуля работы с рутокеном в проекте?
В папке с либами для рутокена  в mobile/ios есть три фреймвокра это RtPcsc.framework, RDRRtSupCp.framework и tpkcs11ecp.framework. При подключении выполнили следующие действия:
1)Положили 3 фреймворка в корень проекта
2)Прописали к ним пути в Framework search paths
3)Слинковали все 3 в Link binary with libraries и пометели как Embed&Sign в Frameworks, Libraries, and Embeded content
4) В Other Linker Flags добавили путь -force_load $(SRCROOT)/RDRRtSupCp.framework/RDRRtSupCp (так же пробовали добавить ко всем 3 фреймворкам)

В результате рутокен так и не стал виден

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Здравствуйте, dmtrii93.
Уточните, пожалуйста, какой модели Рутокен вы используете и какие ключи записаны на нем(КриптоПро CSP или другие программные криптопровайдеры или аппаратные PKCS#11)?

Ознакомьте с инструкциями:

Рутокен для мобильных приложений на iOS
Подключение Bluetooth-токена к мобильному устройству

(2021-10-28 17:51:20 отредактировано dmtrii93)

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Николай Киблицкий, Рутокен ЭЦП bluetooth, вот такой: https://www.rutoken.ru/products/all/rut … bluetooth/
На нём есть ключ КриптоПро CSP. Рутокен по блютуз и в rutoken demo успешно подключен.

(2021-10-28 18:24:31 отредактировано dmtrii93)

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Стоит отметить, что раньше рутокен работал(в приложении использовался криптопро csp 4 версии, встраивался примерно 3 года назад вместе с фреимворками для работы с рутокеном), недавно взяли актуальные версии криптопро csp 5 версии, переписали логику работы с криптопро, всё запустилось, далее взяли актуальную версию либ для рутокена, подключили как описал выше, приложение собирается без ошибок, но при попытке считать сертификаты с рутокена возвращается ошибка(если её так можно назвать) no_more_items: вот тут
for (BYTE searchStrategy = CRYPT_MEDIA | CRYPT_FIRST; ; searchStrategy = CRYPT_MEDIA) {
    DWORD cbData = 0;
    bResult = CryptGetProvParam(hProv, PP_ENUMCONTAINERS, NULL, &cbData, searchStrategy);
    DWORD errorCode = CSP_GetLastError();
    if(!bResult && errorCode == ERROR_NO_MORE_ITEMS) {
      break; --попадаем собственно сюда
    }
......
}

P.S.: Раньше приходилось дополнительно линковать libstdc-6.0.9.tbd иначе падала ошибка во время сборки, теперь её не линкуем, при сборке ошибка не падает, предположили, что теперь она не актуальна

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

По инструкции Работа на iOS проверьте

NSArray* getReaderList()
{   
    NSMutableArray* readerList = nil;
     
    DWORD error = ERROR_SUCCESS;
    HCRYPTPROV  hCryptProv = 0;
    CSP_BOOL    bResult = 0;
    DWORD       dwLen = 0;
     
    bResult = CryptAcquireContext(&hCryptProv, NULL, NULL, kGostProvType, CRYPT_VERIFYCONTEXT);
    if (!bResult) {
        error = CSP_GetLastError();
        NSLog(@"CryptAcquireContext(CRYPT_VERIFYCONTEXT): %x\n", error);
    }
     
    if(0 == hCryptProv) {
        NSLog(@"Invalid HCRYPTPROV");
        return nil;
    }
     
    BYTE cryptFirst = CRYPT_FIRST;
     
    for (;1;) {
         
        CSP_SetLastError(ERROR_SUCCESS);
        bResult = CryptGetProvParam(hCryptProv, PP_ENUMREADERS, NULL, &dwLen, CRYPT_MEDIA | cryptFirst);
        error = CSP_GetLastError();
        if (error == ERROR_NO_MORE_ITEMS)
            break;
        if (!bResult)
        {
            printf("CryptGetProvParam(PP_ENUMREADERS, LEN): %x\n", error);
            break;
        }
         
         
         
        NSMutableData* data = [[[NSMutableData alloc] initWithCapacity:dwLen] autorelease];
         
        CSP_SetLastError(ERROR_SUCCESS);
        bResult = CryptGetProvParam(hCryptProv, PP_ENUMREADERS, (BYTE*)[data bytes], &dwLen, CRYPT_MEDIA | cryptFirst);
        cryptFirst = 0;
        error = CSP_GetLastError();
        if (error == ERROR_NO_MORE_ITEMS)
            break;
        if (!bResult)
        {
            printf("CryptGetProvParam(PP_ENUMREADERS, NAME): %x\n", error);
            break;
        }
         
        BYTE* dataPtr = (BYTE*)[data bytes];
        CProReader* reader = [[[CProReader alloc] initWithData:dataPtr] autorelease];
         
        if (nil == readerList) {
            readerList =[[NSMutableArray new] autorelease];
        }
         
        [readerList addObject: reader];
    }
    return readerList;
}

Необходимо убедиться, что в массиве считывателей у объекта CProReader, с именем name=@"Aktiv Rutoken ECP BT XXXXXXXX" поле media имеет значение @"rutoken_ecp_YYYYYYY" .

Re: Не видит Рутокен ЭЦП Bluetooth в crashlitycs.

Николай Киблицкий, приложение в принципе не пытается обратиться к рутокену и выкидывает no_more_items, поэтому проблема скорее в линковке.
При попытке считать readers так же сразу попали в no_more_items