crypt_signature 3.0.1 copy "crypt_signature: ^3.0.1" to clipboard
crypt_signature: ^3.0.1 copied to clipboard

outdated

crypt

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=";