Flutter-плагин для подписи данных с помощью ГОСТ сертификатов электронной подписи

Описание

Плагин принимает сертификаты в формате PKCS12 .pfx

Приватный ключ должен быть помечен как экспортируемый

Поддерживаемые алгоритмы для Android: GOST R 34.10-2001, GOST R 34.10-2012, GOST R 34.10-2012 Strong

Поддерживаемые архитектуры для Android: arm64-v8a, armeabi-v7a

Поддерживаемые алгоритмы для iOS: GOST R 34.10-2012

Подключение плагина к Android проекту

  1. Скопировать .aar библиотеки из android/libs плагина к себе в проект в android\app\libs

  2. Добавить в AndroidManifest.xml

<application android:extractNativeLibs="true"></application>
  1. Добавить в gradle.properties
android.bundle.enableUncompressedNativeLibs = false
android.enableR8=false
  1. Добавить в build.gradle
minSdkVersion 24

 buildTypes {
        release {
            shrinkResources false
            minifyEnabled false
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

packagingOptions {
    exclude 'META-INF/Digest.CP'
    exclude 'META-INF/Sign.CP'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/LICENSE.txt'
    doNotStrip "*/arm64-v8a/*.so"
    doNotStrip "*/armeabi/*.so"
}

dependencies {
    implementation 'com.google.android.material:material:1.2.0-alpha03'
    implementation fileTree(dir: 'libs', include: '*.aar')
}
  1. Создать файл proguard-rules.pro в android/app
-keep public class ru.CryptoPro.*

Подключение плагина к iOS проекту

Добавить папки en.lproj, locale, ru.lproj и файлы kis_1, root.sto, config.ini, license.enc из ios/Resources плагина к себе в проект через Xcode

Методы

  • Подписать данные

      CryptSignature.sign
    

    Возможны два сценария работы метода:

    • Если данные известны сразу
      Требуется передать данные в формате Base64 в параметр data для подписи
    • Если для формирования данных нужен сертификат пользователя
      Требуется передать сallback onCertificateSelected, который отдает вам сертификат, выбранный пользователем, и ожидает данные в формате Base64 для подписи

    Метод возвращает объект класса SignResult, содержащий сертификат, сигнатуру в Base64 и данные, поданные на подпись

  • Получить список сертификатов, добавленных пользователем
      CryptSignature.getCertificates
    
  • Очистить список сертификатов
      CryptSignature.clear
    

Пример

  • Требуется подписать 0J/Rg9GC0LjQvSDQstC+0YA=

      SignResult signResult = await CryptSignature.sign(context, data: "0J/Rg9GC0LjQvSDQstC+0YA=");
    
  • Требуется сначала получить сертификат, которым будет выполняться подпись, чтобы сформировать хэш

      SignResult result = await CryptSignature.sign(context, onCertificateSelected: onCertificateSelected);
    
      Future<String> onCertificateSelected(Certificate certificate) async => "0J/Rg9GC0LjQvSDQstC+0YA=";
    

Libraries

algorithm
certificate
certificate
certificate
certificates
crypt_signature
dialogs
extension
fade_in_page_transition
home
lock
native
objectidentifier
request
sign_result
storage
ui
util
x509_base