RutokenPkcs11Interop – расширение библиотеки Pkcs11Interop для работы через интерфейс PKCS#11 с устройствами семейства Рутокен ЭЦП.
Поддерживает ГОСТ-2012, работу с CMS-форматом, запросами на сертификаты PKCS#10 и многое другое.
Для демонстрации работы в нашем аккаунте на GitHub в решении Xamarin.Samples.sln размещены размещены примеры приложений на Xamarin для iOS и Android. Их решение находятся в файле Xamarin.Samples.sln.
Фреймворк Xamarin позволяет удобно разрабатывать кроссплатформенные C# приложения за счет разделения внутренней логики и особенностей мобильных платформ.
Особенности сборки для Android
...
Добавьте в ваш проект PKCS#11 библиотеку. Для этого просто подключите к вашему проекту nuget пакет Aktiv.RtPkcs11Ecp.Natives.iOS. А также добавьте в Info.plist файл строчку:
Code Block | ||||
---|---|---|---|---|
| ||||
<key>UISupportedExternalAccessoryProtocols</key> <array> <string>com.aktivco.rutokenecp</string> </array> |
...
Добавьте в Info.plist строчки:
Code Block language bashxml title Info.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>
В файл Entitlements.plist добавьте строчки:
Code Block language bashxml title Entitlements.plist <key>com.apple.developer.nfc.readersession.formats</key> <array> <string>NDEF</string> <string>TAG</string> </array>
- Перед началом взаимодействия с Рутокен ЭЦП 3.0 NFC запустите функцию startNFC из фреймворка RtPcsc. Эта функция в отдельном потоке окно с просьбой приложить NFC карту к телефону или планшету. На вход она принимает callback, который будет вызван в случае ошибок, например если окно закрылось по таймауту или пользователь нажал на клавишу "Отмена".
Напрямую вызвать эти функции не получится т.к. они имеют Obj-C сигнатуру и в качестве callback принимает литеральный блок. Но это ограничение можно обойти воспользовавшись Xamarin оберткой над блоками, например, как это сделано здесь. Подробнее о том, как писать такие обертки написано здесь. - После окончания взаимодействия с NFC токеном запустите функцию stopNFC из фреймворка RtPcsc.
- Поток с окном предложения приложить токен и поток работы с PKCS#11 функциями надо синхронизировать: токен не сразу распознается системой и нужно некоторое время подождать прежде чем начать работать с ним. У нас в коде это сделано с помощью функции C_WaitForSlotEvent и атомарный флаг остановки работы с nfc.
...