Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

RutokenPkcs11Interop –  расширение библиотеки Pkcs11Interop для работы через интерфейс PKCS#11 с устройствами семейства Рутокен ЭЦП.
Поддерживает ГОСТ-2012, работу с CMS-форматом, запросами на сертификаты PKCS#10 и многое другое.
 
Для демонстрации работы в нашем аккаунте на GitHub размещены примеры для настольных платформ, и каркасные приложения  в решении Xamarin.Samples.sln размещены примеры приложений на Xamarin для iOS и Android.

Поддерживаются:

  • MonoAndroid 2.3,
  • Xamarin.iOS 1.0,

Примеры демонстрируют:

...

Особенности сборки для Android

Добавьте в ваш проект pkcs#11 библиотеку. Для этого просто подключите к вашему проекту nuget пакет Aktiv.RtPkcs11Ecp.Natives.Android

Для работы с PKCS#11 вам также необходимо добавить в проект две библиотеки: rtserviceconnection.aar и pkcs11jna.jar. Их можно взять из нашего sdk в директориях sdk\mobile\android\libs и sdk\java\samples\lib. Для того, чтобы добавить их в свой проект опишите опишите их в файле проекта:

Code Block
languagexml
titleдобавление jar и aar бибилотек в проект
<ItemGroup>
  <AndroidAarLibrary Include="Jars\rtserviceconnection-*.aar" />
  <AndroidJavaLibrary Include="Jars\pkcs11jna-*.jar" />
</ItemGroup>


В этом примере мы положили библиотеки в папку Jars.

Помимо jar и aar библиотек вам нужно добавить в свой проект саму pkcs#11 библиотеку. 

Особенности сборки для iOs

Минимальная настройка

Добавьте в ваш проект pkcs#11 библиотеку. Для этого просто подключите к вашему проекту nuget пакет Aktiv.RtPkcs11Ecp.Natives.iOS. А также добавьте в Info.plist файл строчку:

Code Block
languagebash
titleInfo.plist
<key>UISupportedExternalAccessoryProtocols</key>
<array>
  <string>com.aktivco.rutokenecp</string>
</array>


Этого будет достаточно для работы с Bluetooth токенами.

Добавление поддержки NFC карт

Для того, чтобы ваше приложение умело работать также и с NFC токенами:

  1.  Добавьте в Info.plist строчки:

    Code Block
    languagebash
    titleInfo.plist
    <key>NFCReaderUsageDescription</key>
    <string>Allow NFC scanning</string>
    <key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
    <array>
        <string>F00000000010000000000100</string>
        <string>A000000151000000</string>
        <string>A00000039742544659</string>
    </array>


  2. В файл Entitlements.plist добавьте строчки:

    Code Block
    languagebash
    titleEntitlements.plist
    <key>com.apple.developer.nfc.readersession.formats</key>
    <array>
        <string>NDEF</string>
        <string>TAG</string>
    </array>


  3. Перед началом взаимодействия с NFC токеном запустите функцию startNFC из фреймворка RtPcsc. Эта функция в отдельном потоке окно с просьбой приложить NFC карту к телефону. На вход она принимает колбек, который будет вызван в случае ошибок, например если окно закрылось по таймауту или пользователь нажал на клавишу "Отмена".

    Напрямую вызвать эти функции не получится т.к. они имеют obj-c сигнатуру и в качестве колбека принимает литеральный блок. Но это ограничение можно обойти воспользовавшись Xamarin оберткой над блоками, например, как это сделано здесь. Подробнее о том, как писать такие обертки написано здесь.
  4. После окончания взаимодействия с NFC токеном запустите функцию stopNFC из фреймворка RtPcsc. 
  5. Поток с окном предложения приложить токен и поток работы с pkcs#11 функциями надо синхронизировать: токен не сразу распознается системой и нужно некоторое время подождать прежде чем начать работать с ним. У нас в коде это сделано с помощью функции C_WaitForSlotEvent и атомарный флаг остановки работы с nfc

...

  1. .