diff --git a/.github/workflows/example-docker.yml b/.github/workflows/example-docker.yml index 5f5624b..712863d 100644 --- a/.github/workflows/example-docker.yml +++ b/.github/workflows/example-docker.yml @@ -10,15 +10,15 @@ jobs: web: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: docker/setup-qemu-action@v1 - - uses: docker/setup-buildx-action@v1 - - uses: docker/login-action@v1 + - uses: actions/checkout@v4 + - uses: docker/setup-qemu-action@v3 + - uses: docker/setup-buildx-action@v3 + - uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.CR_PAT }} - - uses: docker/build-push-action@v2 + - uses: docker/build-push-action@v6 with: context: . file: ./example/Dockerfile diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8185064..bbdb906 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: scottbrenner/generate-changelog-action@master diff --git a/.github/workflows/tests_android.yml b/.github/workflows/tests_android.yml index 916b3ee..2fbdcb5 100644 --- a/.github/workflows/tests_android.yml +++ b/.github/workflows/tests_android.yml @@ -11,12 +11,12 @@ jobs: e2e: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' - - uses: android-actions/setup-android@v2 + - uses: android-actions/setup-android@v3 - uses: subosito/flutter-action@main with: flutter-version: '3.x' diff --git a/.github/workflows/tests_browser.yml b/.github/workflows/tests_browser.yml index 55c65dd..ca2d6a2 100644 --- a/.github/workflows/tests_browser.yml +++ b/.github/workflows/tests_browser.yml @@ -12,7 +12,7 @@ jobs: e2e: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: subosito/flutter-action@main with: flutter-version: '3.x' diff --git a/.github/workflows/tests_ios.yml b/.github/workflows/tests_ios.yml index 61ec319..9bc1045 100644 --- a/.github/workflows/tests_ios.yml +++ b/.github/workflows/tests_ios.yml @@ -14,7 +14,7 @@ jobs: - uses: futureware-tech/simulator-action@v1 with: os: iOS - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: subosito/flutter-action@main with: flutter-version: '3.x' diff --git a/.github/workflows/tests_linux.yml b/.github/workflows/tests_linux.yml index 3663104..5c047cf 100644 --- a/.github/workflows/tests_linux.yml +++ b/.github/workflows/tests_linux.yml @@ -11,7 +11,7 @@ jobs: e2e: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: subosito/flutter-action@main with: flutter-version: '3.x' diff --git a/.github/workflows/tests_macos.yml b/.github/workflows/tests_macos.yml index fbbc3a0..34a9a76 100644 --- a/.github/workflows/tests_macos.yml +++ b/.github/workflows/tests_macos.yml @@ -11,7 +11,7 @@ jobs: e2e: runs-on: macos-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: subosito/flutter-action@main with: flutter-version: '3.x' diff --git a/.github/workflows/tests_windows.yml b/.github/workflows/tests_windows.yml index 263fa2f..2473546 100644 --- a/.github/workflows/tests_windows.yml +++ b/.github/workflows/tests_windows.yml @@ -11,7 +11,7 @@ jobs: e2e: runs-on: windows-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: subosito/flutter-action@main with: flutter-version: '3.x' diff --git a/CHANGELOG.md b/CHANGELOG.md index acbbcd9..b00081c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 3.7.0 +- Updates binaries + Add XCFramework for ios + ## 3.6.6 - Revert "Fix build on web #77" diff --git a/Makefile b/Makefile index 8e4f091..bdb2ec1 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,10 @@ default: test test: cd example && flutter test integration_test/app_test.dart +fmt: + dart format . && dart fix --apply + cd example && dart format . && dart fix --apply + upgrade: upgrade-libs upgrade-flatbuffers upgrade-libs: diff --git a/analysis_options.yaml b/analysis_options.yaml index 5879e0c..f40a850 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,3 +1,5 @@ +include: package:flutter_lints/flutter.yaml + analyzer: exclude: - example/** diff --git a/android/build.gradle b/android/build.gradle index 432129f..4ab28d7 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,53 +1,73 @@ -group 'dev.jerson.fat_rsa' -version '1.0' +group = "dev.jerson.fast_rsa" +version = "1.0-SNAPSHOT" buildscript { + ext.kotlin_version = "1.8.22" repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.0' + classpath("com.android.tools.build:gradle:8.1.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +apply plugin: "com.android.library" +apply plugin: "kotlin-android" android { - // Conditional for compatibility with AGP <4.2. if (project.android.hasProperty("namespace")) { - namespace 'dev.jerson.fast_rsa' + namespace = "dev.jerson.fast_rsa" } - compileSdkVersion 31 - defaultConfig { - minSdkVersion 19 - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + compileSdk = 34 + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } - lintOptions { - disable 'InvalidPackage' + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8 + } + + sourceSets { + main { + java.srcDirs += "src/main/kotlin" + jniLibs.srcDirs = ['src/main/jniLibs'] + } + test { + java.srcDirs += "src/test/kotlin" + } } -} -task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') { - destinationDirectory.set(file("$buildDir/native-libs")) - archiveBaseName = 'native-libs' - from fileTree(dir: 'libs', include: '**/*.so') - into 'lib/' -} + defaultConfig { + minSdk = 21 + } -tasks.withType(JavaCompile) { - compileTask -> compileTask.dependsOn(nativeLibsToJar) -} + dependencies { + testImplementation("org.jetbrains.kotlin:kotlin-test") + testImplementation("org.mockito:mockito-core:5.0.0") + } + + testOptions { + unitTests.all { + useJUnitPlatform() -dependencies { - api fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar') + testLogging { + events "passed", "skipped", "failed", "standardOut", "standardError" + outputs.upToDateWhen {false} + showStandardStreams = true + } + } + } } diff --git a/android/gradle.properties b/android/gradle.properties deleted file mode 100644 index 94adc3a..0000000 --- a/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 5699c42..0000000 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip diff --git a/android/src/main/java/dev/jerson/fast_rsa/FastRsaPlugin.java b/android/src/main/java/dev/jerson/fast_rsa/FastRsaPlugin.java deleted file mode 100644 index 27d2c5b..0000000 --- a/android/src/main/java/dev/jerson/fast_rsa/FastRsaPlugin.java +++ /dev/null @@ -1,36 +0,0 @@ -package dev.jerson.fast_rsa; - -import androidx.annotation.NonNull; - -import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.plugin.common.MethodCall; -import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugin.common.MethodChannel.MethodCallHandler; -import io.flutter.plugin.common.MethodChannel.Result; - -/** - * FastRsaPlugin - */ -public class FastRsaPlugin implements FlutterPlugin, MethodCallHandler { - /// The MethodChannel that will the communication between Flutter and native Android - /// - /// This local reference serves to register the plugin with the Flutter Engine and unregister it - /// when the Flutter Engine is detached from the Activity - private MethodChannel channel; - - @Override - public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { - channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "fast_rsa"); - channel.setMethodCallHandler(this); - } - - @Override - public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { - result.notImplemented(); - } - - @Override - public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { - channel.setMethodCallHandler(null); - } -} \ No newline at end of file diff --git a/android/src/main/jniLibs/arm64-v8a/librsa_bridge.so b/android/src/main/jniLibs/arm64-v8a/librsa_bridge.so index 7b5a6a9..d945813 100644 Binary files a/android/src/main/jniLibs/arm64-v8a/librsa_bridge.so and b/android/src/main/jniLibs/arm64-v8a/librsa_bridge.so differ diff --git a/android/src/main/jniLibs/armeabi-v7a/librsa_bridge.so b/android/src/main/jniLibs/armeabi-v7a/librsa_bridge.so index 466231d..30e8fe6 100644 Binary files a/android/src/main/jniLibs/armeabi-v7a/librsa_bridge.so and b/android/src/main/jniLibs/armeabi-v7a/librsa_bridge.so differ diff --git a/android/src/main/jniLibs/x86/librsa_bridge.so b/android/src/main/jniLibs/x86/librsa_bridge.so index 907b58f..693f11e 100644 Binary files a/android/src/main/jniLibs/x86/librsa_bridge.so and b/android/src/main/jniLibs/x86/librsa_bridge.so differ diff --git a/android/src/main/jniLibs/x86_64/librsa_bridge.so b/android/src/main/jniLibs/x86_64/librsa_bridge.so index 70909b3..13cecf8 100644 Binary files a/android/src/main/jniLibs/x86_64/librsa_bridge.so and b/android/src/main/jniLibs/x86_64/librsa_bridge.so differ diff --git a/android/src/main/kotlin/dev/jerson/fast_rsa/FastRsaPlugin.kt b/android/src/main/kotlin/dev/jerson/fast_rsa/FastRsaPlugin.kt new file mode 100644 index 0000000..080317e --- /dev/null +++ b/android/src/main/kotlin/dev/jerson/fast_rsa/FastRsaPlugin.kt @@ -0,0 +1,35 @@ +package dev.jerson.fast_rsa + +import androidx.annotation.NonNull + +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.MethodChannel.MethodCallHandler +import io.flutter.plugin.common.MethodChannel.Result + +/** FastRsaPlugin */ +class FastRsaPlugin: FlutterPlugin, MethodCallHandler { + /// The MethodChannel that will the communication between Flutter and native Android + /// + /// This local reference serves to register the plugin with the Flutter Engine and unregister it + /// when the Flutter Engine is detached from the Activity + private lateinit var channel : MethodChannel + + override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + channel = MethodChannel(flutterPluginBinding.binaryMessenger, "fast_rsa") + channel.setMethodCallHandler(this) + } + + override fun onMethodCall(call: MethodCall, result: Result) { + if (call.method == "getPlatformVersion") { + result.success("Android ${android.os.Build.VERSION.RELEASE}") + } else { + result.notImplemented() + } + } + + override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { + channel.setMethodCallHandler(null) + } +} diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/example/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/example/android/.gitignore b/example/android/.gitignore index 6f56801..55afd91 100644 --- a/example/android/.gitignore +++ b/example/android/.gitignore @@ -7,7 +7,7 @@ gradle-wrapper.jar GeneratedPluginRegistrant.java # Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +# See https://flutter.dev/to/reference-keystore key.properties **/*.keystore **/*.jks diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 118ee1d..74603f2 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,67 +1,44 @@ plugins { id "com.android.application" id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id "dev.flutter.flutter-gradle-plugin" } -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - android { - namespace "com.example.example" - compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion + namespace = "dev.jerson.fast_rsa_example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' + jvmTarget = JavaVersion.VERSION_1_8 } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.example" + applicationId = "dev.jerson.fast_rsa_example" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug + signingConfig = signingConfigs.debug } } } flutter { - source '../..' + source = "../.." } - -dependencies {} diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 19b862e..e6f7c54 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,12 +1,13 @@ + + + + + + + diff --git a/example/android/app/src/main/kotlin/dev/jerson/fast_rsa_example/MainActivity.kt b/example/android/app/src/main/kotlin/dev/jerson/fast_rsa_example/MainActivity.kt new file mode 100644 index 0000000..b9904a6 --- /dev/null +++ b/example/android/app/src/main/kotlin/dev/jerson/fast_rsa_example/MainActivity.kt @@ -0,0 +1,5 @@ +package dev.jerson.fast_rsa_example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/example/android/build.gradle b/example/android/build.gradle index f7eb7f6..d2ffbff 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,16 +1,3 @@ -buildscript { - ext.kotlin_version = '1.7.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - allprojects { repositories { google() @@ -18,12 +5,12 @@ allprojects { } } -rootProject.buildDir = '../build' +rootProject.buildDir = "../build" subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { - project.evaluationDependsOn(':app') + project.evaluationDependsOn(":app") } tasks.register("clean", Delete) { diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 94adc3a..2597170 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 3c472b9..7bb2df6 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 55c4ca8..b9e43bd 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -5,16 +5,21 @@ pluginManagement { def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" return flutterSdkPath - } - settings.ext.flutterSdkPath = flutterSdkPath() + }() - includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - plugins { - id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false + repositories { + google() + mavenCentral() + gradlePluginPortal() } } -include ":app" +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false +} -apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle" +include ":app" diff --git a/example/fonts/Roboto/LICENSE.txt b/example/fonts/Roboto/LICENSE.txt deleted file mode 100755 index d645695..0000000 --- a/example/fonts/Roboto/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/example/fonts/Roboto/Roboto-Black.ttf b/example/fonts/Roboto/Roboto-Black.ttf deleted file mode 100755 index 689fe5c..0000000 Binary files a/example/fonts/Roboto/Roboto-Black.ttf and /dev/null differ diff --git a/example/fonts/Roboto/Roboto-Bold.ttf b/example/fonts/Roboto/Roboto-Bold.ttf deleted file mode 100755 index d3f01ad..0000000 Binary files a/example/fonts/Roboto/Roboto-Bold.ttf and /dev/null differ diff --git a/example/fonts/Roboto/Roboto-Light.ttf b/example/fonts/Roboto/Roboto-Light.ttf deleted file mode 100755 index 219063a..0000000 Binary files a/example/fonts/Roboto/Roboto-Light.ttf and /dev/null differ diff --git a/example/fonts/Roboto/Roboto-Medium.ttf b/example/fonts/Roboto/Roboto-Medium.ttf deleted file mode 100755 index 1a7f3b0..0000000 Binary files a/example/fonts/Roboto/Roboto-Medium.ttf and /dev/null differ diff --git a/example/fonts/Roboto/Roboto-Regular.ttf b/example/fonts/Roboto/Roboto-Regular.ttf deleted file mode 100755 index 2c97eea..0000000 Binary files a/example/fonts/Roboto/Roboto-Regular.ttf and /dev/null differ diff --git a/example/fonts/Roboto/Roboto-Thin.ttf b/example/fonts/Roboto/Roboto-Thin.ttf deleted file mode 100755 index b74a4fd..0000000 Binary files a/example/fonts/Roboto/Roboto-Thin.ttf and /dev/null differ diff --git a/example/integration_test/app_test.dart b/example/integration_test/app_test.dart index a893865..51d4f13 100644 --- a/example/integration_test/app_test.dart +++ b/example/integration_test/app_test.dart @@ -1,8 +1,7 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; -import 'package:rsa_example/main.dart' as app; +import 'package:fast_rsa_example/main.dart' as app; void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); @@ -15,31 +14,31 @@ void main() { final list = find.byType(Scrollable).first; group('Encrypt and Decrypt OAEP', () { - final parent = find.byKey(ValueKey("encrypt-oaep")); + final parent = find.byKey(const ValueKey("encrypt-oaep")); testWidgets('Encrypt / Decrypt', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); var container = find.descendant( of: parent, - matching: find.byKey(ValueKey("encrypt")), + matching: find.byKey(const ValueKey("encrypt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); await expectLater(resultSelector, findsWidgets); var result = resultSelector.evaluate().single.widget as Text; @@ -47,700 +46,700 @@ void main() { container = find.descendant( of: parent, - matching: find.byKey(ValueKey("decrypt")), + matching: find.byKey(const ValueKey("decrypt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); await expectLater(resultSelector, findsWidgets); result = resultSelector.evaluate().single.widget as Text; expect(result.data, equals(input)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Encrypt and Decrypt OAEP Bytes', () { - final parent = find.byKey(ValueKey("encrypt-oaep-bytes")); + final parent = find.byKey(const ValueKey("encrypt-oaep-bytes")); testWidgets('Encrypt / Decrypt', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); var container = find.descendant( of: parent, - matching: find.byKey(ValueKey("encrypt")), + matching: find.byKey(const ValueKey("encrypt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); container = find.descendant( of: parent, - matching: find.byKey(ValueKey("decrypt")), + matching: find.byKey(const ValueKey("decrypt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Encrypt and Decrypt PKCS1v15', () { - final parent = find.byKey(ValueKey("encrypt-pkcs")); + final parent = find.byKey(const ValueKey("encrypt-pkcs")); testWidgets('Encrypt / Decrypt', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); var container = find.descendant( of: parent, - matching: find.byKey(ValueKey("encrypt")), + matching: find.byKey(const ValueKey("encrypt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); container = find.descendant( of: parent, - matching: find.byKey(ValueKey("decrypt")), + matching: find.byKey(const ValueKey("decrypt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); result = resultSelector.evaluate().single.widget as Text; expect(result.data, equals(input)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Encrypt and Decrypt PKCS1v15 Bytes', () { - final parent = find.byKey(ValueKey("encrypt-pkcs-bytes")); + final parent = find.byKey(const ValueKey("encrypt-pkcs-bytes")); testWidgets('Encrypt / Decrypt', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); var container = find.descendant( of: parent, - matching: find.byKey(ValueKey("encrypt")), + matching: find.byKey(const ValueKey("encrypt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); container = find.descendant( of: parent, - matching: find.byKey(ValueKey("decrypt")), + matching: find.byKey(const ValueKey("decrypt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); result = resultSelector.evaluate().single.widget as Text; expect(result.data, equals(input)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Sign And Verify PSS', () { - final parent = find.byKey(ValueKey("sign-pss")); + final parent = find.byKey(const ValueKey("sign-pss")); testWidgets('Sign / Verify', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); var container = find.descendant( of: parent, - matching: find.byKey(ValueKey("sign")), + matching: find.byKey(const ValueKey("sign")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); container = find.descendant( of: parent, - matching: find.byKey(ValueKey("verify")), + matching: find.byKey(const ValueKey("verify")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); result = resultSelector.evaluate().single.widget as Text; expect(result.data, "VALID"); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Sign And Verify PSS Bytes', () { - final parent = find.byKey(ValueKey("sign-pss-bytes")); + final parent = find.byKey(const ValueKey("sign-pss-bytes")); testWidgets('Sign / Verify', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); var container = find.descendant( of: parent, - matching: find.byKey(ValueKey("sign")), + matching: find.byKey(const ValueKey("sign")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); container = find.descendant( of: parent, - matching: find.byKey(ValueKey("verify")), + matching: find.byKey(const ValueKey("verify")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); result = resultSelector.evaluate().single.widget as Text; expect(result.data, "VALID"); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Sign And Verify PKCS', () { - final parent = find.byKey(ValueKey("sign-pkcs")); + final parent = find.byKey(const ValueKey("sign-pkcs")); testWidgets('Sign / Verify', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); var container = find.descendant( of: parent, - matching: find.byKey(ValueKey("sign")), + matching: find.byKey(const ValueKey("sign")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); container = find.descendant( of: parent, - matching: find.byKey(ValueKey("verify")), + matching: find.byKey(const ValueKey("verify")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); result = resultSelector.evaluate().single.widget as Text; expect(result.data, "VALID"); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Sign And Verify PKCS Bytes', () { - final parent = find.byKey(ValueKey("sign-pkcs-bytes")); + final parent = find.byKey(const ValueKey("sign-pkcs-bytes")); testWidgets('Sign / Verify', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); var container = find.descendant( of: parent, - matching: find.byKey(ValueKey("sign")), + matching: find.byKey(const ValueKey("sign")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); container = find.descendant( of: parent, - matching: find.byKey(ValueKey("verify")), + matching: find.byKey(const ValueKey("verify")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); result = resultSelector.evaluate().single.widget as Text; expect(result.data, "VALID"); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Base64', () { - final parent = find.byKey(ValueKey("base64")); + final parent = find.byKey(const ValueKey("base64")); testWidgets('Default', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("encode")), + matching: find.byKey(const ValueKey("encode")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Hash', () { - final parent = find.byKey(ValueKey("hash")); + final parent = find.byKey(const ValueKey("hash")); testWidgets('Default', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("encode")), + matching: find.byKey(const ValueKey("encode")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.enterText( find.descendant( - of: container, matching: find.byKey(ValueKey("message"))), + of: container, matching: find.byKey(const ValueKey("message"))), input); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Generate', () { - final parent = find.byKey(ValueKey("generate")); + final parent = find.byKey(const ValueKey("generate")); testWidgets('Default', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("action")), + matching: find.byKey(const ValueKey("action")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); - await tester.pumpAndSettle(Duration(seconds: 5)); + await tester.pumpAndSettle(const Duration(seconds: 5)); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(minutes: 5))); + }, timeout: const Timeout(Duration(minutes: 5))); }); group('Convert PrivateKey', () { - final parent = find.byKey(ValueKey("convert-private")); + final parent = find.byKey(const ValueKey("convert-private")); testWidgets('JWT', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("jwt")), + matching: find.byKey(const ValueKey("jwt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); testWidgets('PKCS1', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("pkcs1")), + matching: find.byKey(const ValueKey("pkcs1")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); testWidgets('PKCS8', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("pkcs8")), + matching: find.byKey(const ValueKey("pkcs8")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Convert PublicKey', () { - final parent = find.byKey(ValueKey("convert-public")); + final parent = find.byKey(const ValueKey("convert-public")); testWidgets('JWT', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("jwt")), + matching: find.byKey(const ValueKey("jwt")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); testWidgets('PKCS1', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("pkcs1")), + matching: find.byKey(const ValueKey("pkcs1")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); testWidgets('PKIX', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("pkix")), + matching: find.byKey(const ValueKey("pkix")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Convert JWT', () { - final parent = find.byKey(ValueKey("convert-jwt")); + final parent = find.byKey(const ValueKey("convert-jwt")); testWidgets('PrivateKey', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("private")), + matching: find.byKey(const ValueKey("private")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); testWidgets('PublicKey', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("public")), + matching: find.byKey(const ValueKey("public")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); group('Convert KeyPair', () { - final parent = find.byKey(ValueKey("convert-keypair")); + final parent = find.byKey(const ValueKey("convert-keypair")); testWidgets('PKCS12', (WidgetTester tester) async { - final instance = app.MyApp(); + const instance = app.MyApp(); await tester.pumpWidget(instance); await tester.pumpAndSettle(); final container = find.descendant( of: parent, - matching: find.byKey(ValueKey("pkcs12")), + matching: find.byKey(const ValueKey("pkcs12")), ); await tester.scrollUntilVisible(container, dyScroll, scrollable: list); await tester.pumpAndSettle(); await tester.tap( find.descendant( - of: container, matching: find.byKey(ValueKey("button"))), + of: container, matching: find.byKey(const ValueKey("button"))), ); await tester.pumpAndSettle(); var resultSelector = find.descendant( - of: container, matching: find.byKey(ValueKey("result"))); + of: container, matching: find.byKey(const ValueKey("result"))); expect(resultSelector, findsOneWidget); var result = resultSelector.evaluate().single.widget as Text; expect(result.data != "", equals(true)); - }, timeout: Timeout(Duration(seconds: 60))); + }, timeout: const Timeout(Duration(seconds: 60))); }); }); } diff --git a/example/ios/.gitignore b/example/ios/.gitignore index e96ef60..7a7f987 100644 --- a/example/ios/.gitignore +++ b/example/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 8c6e561..7c56964 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier diff --git a/example/ios/Podfile b/example/ios/Podfile index 279576f..d97f17e 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -32,6 +32,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 9eb6297..34e53a6 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -19,10 +19,10 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/integration_test/ios" SPEC CHECKSUMS: - fast_rsa: 514f0e9ecb93c6222fe4cb61e20a3d7125e734d1 + fast_rsa: 47058fe497c032937a8e259e99ddf6255fa67238 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - integration_test: ce0a3ffa1de96d1a89ca0ac26fca7ea18a749ef4 + integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 -PODFILE CHECKSUM: c4c93c5f6502fe2754f48404d3594bf779584011 +PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 -COCOAPODS: 1.14.3 +COCOAPODS: 1.16.2 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 705e1de..1866e34 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,26 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EFA0C5C60C1EAD3297DE9C9B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FEC24BF386335CE719F2AFC /* Pods_Runner.framework */; }; + 9B043E7DDF437304F96C6A8B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ED66C9D62DA06C85837CED4 /* Pods_Runner.framework */; }; + D68336888FFD551157FAE1C0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D13CCAB3F95D87010E76A43 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -32,12 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2D13CCAB3F95D87010E76A43 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4FEC24BF386335CE719F2AFC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 64BCEF0B9F2D9C5A52639B5E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6B9713BB5A00723BEE3AA0C8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6ED66C9D62DA06C85837CED4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 973C2152C8399C8F86E6D92D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -45,32 +61,63 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AF0D23BE7866546C7548D570 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E53BA7C359623C1E9DABBA3B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C07A03E53C6DDD30A04AEB7A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CBD561265C29966699887685 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D52427158F5BBEFC3C3ADB2B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + E0C04A60AADE8D45465A6C48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 471BF0EA97915513F058CEDE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D68336888FFD551157FAE1C0 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EFA0C5C60C1EAD3297DE9C9B /* Pods_Runner.framework in Frameworks */, + 9B043E7DDF437304F96C6A8B /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 88C6E7EC984B05C45C1623EF /* Pods */ = { + 1DBAC857D18E7AFB7C3473E1 /* Pods */ = { isa = PBXGroup; children = ( - E53BA7C359623C1E9DABBA3B /* Pods-Runner.debug.xcconfig */, - AF0D23BE7866546C7548D570 /* Pods-Runner.release.xcconfig */, - 973C2152C8399C8F86E6D92D /* Pods-Runner.profile.xcconfig */, - ); + 6B9713BB5A00723BEE3AA0C8 /* Pods-Runner.debug.xcconfig */, + D52427158F5BBEFC3C3ADB2B /* Pods-Runner.release.xcconfig */, + CBD561265C29966699887685 /* Pods-Runner.profile.xcconfig */, + E0C04A60AADE8D45465A6C48 /* Pods-RunnerTests.debug.xcconfig */, + 64BCEF0B9F2D9C5A52639B5E /* Pods-RunnerTests.release.xcconfig */, + C07A03E53C6DDD30A04AEB7A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; path = Pods; sourceTree = ""; }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 5C03493D62CF6B32825B3C1A /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6ED66C9D62DA06C85837CED4 /* Pods_Runner.framework */, + 2D13CCAB3F95D87010E76A43 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -88,8 +135,9 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 88C6E7EC984B05C45C1623EF /* Pods */, - ED95D893EDDFDFBC9F418474 /* Frameworks */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 1DBAC857D18E7AFB7C3473E1 /* Pods */, + 5C03493D62CF6B32825B3C1A /* Frameworks */, ); sourceTree = ""; }; @@ -97,6 +145,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -116,29 +165,40 @@ path = Runner; sourceTree = ""; }; - ED95D893EDDFDFBC9F418474 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 4FEC24BF386335CE719F2AFC /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + E1F13C766F241567F2F61E3D /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + 471BF0EA97915513F058CEDE /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A61448FDBD34FDE065678A88 /* [CP] Check Pods Manifest.lock */, + 5D89A6E85152148456659B87 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - B0E773C4D0DAB5464A1E17DA /* [CP] Embed Pods Frameworks */, + B9E70A7312FBC05D59AECC29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -155,9 +215,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -178,11 +243,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -213,6 +286,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 5D89A6E85152148456659B87 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -228,48 +323,56 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A61448FDBD34FDE065678A88 /* [CP] Check Pods Manifest.lock */ = { + B9E70A7312FBC05D59AECC29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B0E773C4D0DAB5464A1E17DA /* [CP] Embed Pods Frameworks */ = { + E1F13C766F241567F2F61E3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -281,6 +384,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -305,6 +416,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -334,6 +446,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -342,7 +455,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -360,19 +473,11 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = EKR687JWFU; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -381,10 +486,61 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E0C04A60AADE8D45465A6C48 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 64BCEF0B9F2D9C5A52639B5E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C07A03E53C6DDD30A04AEB7A /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -414,6 +570,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -428,7 +585,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -440,6 +597,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -469,6 +627,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -477,11 +636,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -496,19 +656,11 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = EKR687JWFU; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -527,19 +679,11 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = EKR687JWFU; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -551,6 +695,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index e67b280..8e3ca5d 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -27,8 +27,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + + + + + + - - CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Fast Rsa CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -39,8 +41,6 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - CADisableMinimumFrameDurationOnPhone UIApplicationSupportsIndirectInputEvents diff --git a/example/ios/RunnerTests/RunnerTests.swift b/example/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..3facf41 --- /dev/null +++ b/example/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,27 @@ +import Flutter +import UIKit +import XCTest + + +@testable import fast_rsa + +// This demonstrates a simple unit test of the Swift portion of this plugin's implementation. +// +// See https://developer.apple.com/documentation/xctest for more information about using XCTest. + +class RunnerTests: XCTestCase { + + func testGetPlatformVersion() { + let plugin = FastRsaPlugin() + + let call = FlutterMethodCall(methodName: "getPlatformVersion", arguments: []) + + let resultExpectation = expectation(description: "result block must be called.") + plugin.handle(call) { result in + XCTAssertEqual(result as! String, "iOS " + UIDevice.current.systemVersion) + resultExpectation.fulfill() + } + waitForExpectations(timeout: 1) + } + +} diff --git a/example/lib/base64.dart b/example/lib/base64.dart index cd73cec..c9a8de3 100644 --- a/example/lib/base64.dart +++ b/example/lib/base64.dart @@ -1,22 +1,15 @@ -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class Base64 extends StatefulWidget { const Base64({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -38,7 +31,7 @@ class _Base64State extends State { TitleWidget(widget.title), InputWidget( title: "Encode", - key: Key("encode"), + key: const Key("encode"), result: _encrypted, onPressed: (controller) async { var encrypted = await RSA.base64( diff --git a/example/lib/convert_jwt.dart b/example/lib/convert_jwt.dart index fe82afc..ad87b02 100644 --- a/example/lib/convert_jwt.dart +++ b/example/lib/convert_jwt.dart @@ -1,23 +1,15 @@ -import 'dart:convert'; -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class ConvertJWT extends StatefulWidget { const ConvertJWT({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -45,7 +37,7 @@ class _ConvertJWTState extends State { TitleWidget(widget.title), ButtonWidget( title: "To PrivateKey", - key: Key("private"), + key: const Key("private"), result: _private, onPressed: () async { var converted = await RSA.convertPrivateKeyToJWK( @@ -59,7 +51,7 @@ class _ConvertJWTState extends State { ), ButtonWidget( title: "To PublicKey", - key: Key("public"), + key: const Key("public"), result: _public, onPressed: () async { var converted = await RSA.convertPublicKeyToJWK( diff --git a/example/lib/convert_keypair.dart b/example/lib/convert_keypair.dart index ee5fef1..72b7cbc 100644 --- a/example/lib/convert_keypair.dart +++ b/example/lib/convert_keypair.dart @@ -1,23 +1,16 @@ -import 'dart:convert'; -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/main.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class ConvertKeyPair extends StatefulWidget { const ConvertKeyPair({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -44,7 +37,7 @@ class _ConvertKeyPairState extends State { TitleWidget(widget.title), ButtonWidget( title: "To PKCS12", - key: Key("pkcs12"), + key: const Key("pkcs12"), result: _pkcs12, onPressed: () async { var result = await RSA.convertKeyPairToPKCS12( diff --git a/example/lib/convert_private.dart b/example/lib/convert_private.dart index a675862..9c0ab2b 100644 --- a/example/lib/convert_private.dart +++ b/example/lib/convert_private.dart @@ -1,23 +1,17 @@ import 'dart:convert'; -import 'dart:typed_data'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class ConvertPrivate extends StatefulWidget { const ConvertPrivate({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -42,7 +36,7 @@ class _ConvertPrivateState extends State { TitleWidget(widget.title), ButtonWidget( title: "To JWT", - key: Key("jwt"), + key: const Key("jwt"), result: _jwt, onPressed: () async { var result = await RSA.convertPrivateKeyToJWK( @@ -55,7 +49,7 @@ class _ConvertPrivateState extends State { ), ButtonWidget( title: "To PKCS1", - key: Key("pkcs1"), + key: const Key("pkcs1"), result: _pkcs1, onPressed: () async { var result = await RSA.convertPrivateKeyToPKCS1( @@ -68,7 +62,7 @@ class _ConvertPrivateState extends State { ), ButtonWidget( title: "To PKCS8", - key: Key("pkcs8"), + key: const Key("pkcs8"), result: _pkcs8, onPressed: () async { var result = await RSA.convertPrivateKeyToPKCS8( @@ -81,7 +75,7 @@ class _ConvertPrivateState extends State { ), ButtonWidget( title: "To PublicKey", - key: Key("public-key"), + key: const Key("public-key"), result: _publicKey, onPressed: () async { var result = await RSA.convertPrivateKeyToPublicKey( diff --git a/example/lib/convert_public.dart b/example/lib/convert_public.dart index a4f9787..d46292a 100644 --- a/example/lib/convert_public.dart +++ b/example/lib/convert_public.dart @@ -1,23 +1,17 @@ import 'dart:convert'; -import 'dart:typed_data'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class ConvertPublic extends StatefulWidget { const ConvertPublic({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -41,7 +35,7 @@ class _ConvertPublicState extends State { TitleWidget(widget.title), ButtonWidget( title: "To JWT", - key: Key("jwt"), + key: const Key("jwt"), result: _jwt, onPressed: () async { var result = await RSA.convertPublicKeyToJWK( @@ -54,7 +48,7 @@ class _ConvertPublicState extends State { ), ButtonWidget( title: "To PKCS1", - key: Key("pkcs1"), + key: const Key("pkcs1"), result: _pkcs1, onPressed: () async { var result = await RSA.convertPublicKeyToPKCS1( @@ -67,7 +61,7 @@ class _ConvertPublicState extends State { ), ButtonWidget( title: "To PKIX", - key: Key("pkix"), + key: const Key("pkix"), result: _pkix, onPressed: () async { var result = await RSA.convertPublicKeyToPKIX( diff --git a/example/lib/encrypt_decrypt_oaep.dart b/example/lib/encrypt_decrypt_oaep.dart index c882564..deae0e5 100644 --- a/example/lib/encrypt_decrypt_oaep.dart +++ b/example/lib/encrypt_decrypt_oaep.dart @@ -1,22 +1,16 @@ -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class EncryptAndDecryptOAEP extends StatefulWidget { const EncryptAndDecryptOAEP({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -39,7 +33,7 @@ class _EncryptAndDecryptOAEPState extends State { TitleWidget(widget.title), InputWidget( title: "Encrypt", - key: Key("encrypt"), + key: const Key("encrypt"), result: _encrypted, onPressed: (controller) async { var encrypted = await RSA.encryptOAEP( @@ -55,7 +49,7 @@ class _EncryptAndDecryptOAEPState extends State { ), ButtonWidget( title: "Decrypt", - key: Key("decrypt"), + key: const Key("decrypt"), result: _decrypted, onPressed: () async { var decrypted = await RSA.decryptOAEP( diff --git a/example/lib/encrypt_decrypt_oaep_bytes.dart b/example/lib/encrypt_decrypt_oaep_bytes.dart index 982f4df..4e559a5 100644 --- a/example/lib/encrypt_decrypt_oaep_bytes.dart +++ b/example/lib/encrypt_decrypt_oaep_bytes.dart @@ -1,23 +1,19 @@ import 'dart:convert'; -import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class EncryptAndDecryptOAEPBytes extends StatefulWidget { const EncryptAndDecryptOAEPBytes({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -42,7 +38,7 @@ class _EncryptAndDecryptOAEPBytesState TitleWidget(widget.title), InputWidget( title: "Encrypt", - key: Key("encrypt"), + key: const Key("encrypt"), result: _encrypted, onPressed: (controller) async { var encrypted = await RSA.encryptOAEPBytes( @@ -58,7 +54,7 @@ class _EncryptAndDecryptOAEPBytesState ), ButtonWidget( title: "Decrypt", - key: Key("decrypt"), + key: const Key("decrypt"), result: _decrypted, onPressed: () async { var decrypted = await RSA.decryptOAEPBytes( diff --git a/example/lib/encrypt_decrypt_pkcs.dart b/example/lib/encrypt_decrypt_pkcs.dart index 8715c65..89e9904 100644 --- a/example/lib/encrypt_decrypt_pkcs.dart +++ b/example/lib/encrypt_decrypt_pkcs.dart @@ -1,22 +1,16 @@ -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class EncryptAndDecryptPKCS extends StatefulWidget { const EncryptAndDecryptPKCS({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -39,7 +33,7 @@ class _EncryptAndDecryptPKCSState extends State { TitleWidget(widget.title), InputWidget( title: "Encrypt", - key: Key("encrypt"), + key: const Key("encrypt"), result: _encrypted, onPressed: (controller) async { var encrypted = await RSA.encryptPKCS1v15( @@ -53,7 +47,7 @@ class _EncryptAndDecryptPKCSState extends State { ), ButtonWidget( title: "Decrypt", - key: Key("decrypt"), + key: const Key("decrypt"), result: _decrypted, onPressed: () async { var decrypted = await RSA.decryptPKCS1v15( diff --git a/example/lib/encrypt_decrypt_pkcs_bytes.dart b/example/lib/encrypt_decrypt_pkcs_bytes.dart index 61930b9..0fb40d4 100644 --- a/example/lib/encrypt_decrypt_pkcs_bytes.dart +++ b/example/lib/encrypt_decrypt_pkcs_bytes.dart @@ -1,23 +1,19 @@ import 'dart:convert'; -import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class EncryptAndDecryptPKCSBytes extends StatefulWidget { const EncryptAndDecryptPKCSBytes({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -42,7 +38,7 @@ class _EncryptAndDecryptPKCSBytesState TitleWidget(widget.title), InputWidget( title: "Encrypt", - key: Key("encrypt"), + key: const Key("encrypt"), result: _encrypted, onPressed: (controller) async { var encrypted = await RSA.encryptPKCS1v15Bytes( @@ -56,7 +52,7 @@ class _EncryptAndDecryptPKCSBytesState ), ButtonWidget( title: "Decrypt", - key: Key("decrypt"), + key: const Key("decrypt"), result: _decrypted, onPressed: () async { var decrypted = await RSA.decryptPKCS1v15Bytes( diff --git a/example/lib/encrypt_sign_pkcs.dart b/example/lib/encrypt_sign_pkcs.dart index 9ea4fa2..a2ff265 100644 --- a/example/lib/encrypt_sign_pkcs.dart +++ b/example/lib/encrypt_sign_pkcs.dart @@ -1,22 +1,16 @@ -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class SignAndVerifyPKCS extends StatefulWidget { const SignAndVerifyPKCS({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -40,7 +34,7 @@ class _SignAndVerifyPKCSState extends State { TitleWidget(widget.title), InputWidget( title: "Sign", - key: Key("sign"), + key: const Key("sign"), result: _signed, onPressed: (controller) async { var result = await RSA.signPKCS1v15( @@ -56,7 +50,7 @@ class _SignAndVerifyPKCSState extends State { ), ButtonWidget( title: "Verify", - key: Key("verify"), + key: const Key("verify"), result: _valid, onPressed: () async { var result = await RSA.verifyPKCS1v15( diff --git a/example/lib/encrypt_sign_pkcs_bytes.dart b/example/lib/encrypt_sign_pkcs_bytes.dart index 860eb26..c74e373 100644 --- a/example/lib/encrypt_sign_pkcs_bytes.dart +++ b/example/lib/encrypt_sign_pkcs_bytes.dart @@ -1,23 +1,19 @@ import 'dart:convert'; -import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class SignAndVerifyPKCSBytes extends StatefulWidget { const SignAndVerifyPKCSBytes({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -41,7 +37,7 @@ class _SignAndVerifyPKCSBytesState extends State { TitleWidget(widget.title), InputWidget( title: "Sign", - key: Key("sign"), + key: const Key("sign"), result: _signed, onPressed: (controller) async { var result = await RSA.signPKCS1v15Bytes( @@ -57,7 +53,7 @@ class _SignAndVerifyPKCSBytesState extends State { ), ButtonWidget( title: "Verify", - key: Key("verify"), + key: const Key("verify"), result: _valid, onPressed: () async { var result = await RSA.verifyPKCS1v15Bytes( diff --git a/example/lib/encrypt_sign_pss.dart b/example/lib/encrypt_sign_pss.dart index 2789eb9..1aa26e0 100644 --- a/example/lib/encrypt_sign_pss.dart +++ b/example/lib/encrypt_sign_pss.dart @@ -1,22 +1,16 @@ -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class SignAndVerifyPSS extends StatefulWidget { const SignAndVerifyPSS({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -40,7 +34,7 @@ class _SignAndVerifyPSSState extends State { TitleWidget(widget.title), InputWidget( title: "Sign", - key: Key("sign"), + key: const Key("sign"), result: _signed, onPressed: (controller) async { var result = await RSA.signPSS( @@ -57,7 +51,7 @@ class _SignAndVerifyPSSState extends State { ), ButtonWidget( title: "Verify", - key: Key("verify"), + key: const Key("verify"), result: _valid, onPressed: () async { var result = await RSA.verifyPSS( diff --git a/example/lib/encrypt_sign_pss_bytes.dart b/example/lib/encrypt_sign_pss_bytes.dart index f44d1a6..ad7b606 100644 --- a/example/lib/encrypt_sign_pss_bytes.dart +++ b/example/lib/encrypt_sign_pss_bytes.dart @@ -1,23 +1,19 @@ import 'dart:convert'; -import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class SignAndVerifyPSSBytes extends StatefulWidget { const SignAndVerifyPSSBytes({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -41,7 +37,7 @@ class _SignAndVerifyPSSBytesState extends State { TitleWidget(widget.title), InputWidget( title: "Sign", - key: Key("sign"), + key: const Key("sign"), result: _signed, onPressed: (controller) async { var result = await RSA.signPSSBytes( @@ -58,7 +54,7 @@ class _SignAndVerifyPSSBytesState extends State { ), ButtonWidget( title: "Verify", - key: Key("verify"), + key: const Key("verify"), result: _valid, onPressed: () async { var result = await RSA.verifyPSSBytes( diff --git a/example/lib/generate.dart b/example/lib/generate.dart index 540e1f6..78622e6 100644 --- a/example/lib/generate.dart +++ b/example/lib/generate.dart @@ -1,21 +1,15 @@ -import 'dart:convert'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/button_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class Generate extends StatefulWidget { const Generate({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -37,7 +31,7 @@ class _GenerateState extends State { TitleWidget(widget.title), ButtonWidget( title: "Generate", - key: Key("action"), + key: const Key("action"), result: _keyPair.privateKey + _keyPair.publicKey, onPressed: () async { var keyPair = await RSA.generate(2048); diff --git a/example/lib/hash.dart b/example/lib/hash.dart index 37858a4..db9d9b4 100644 --- a/example/lib/hash.dart +++ b/example/lib/hash.dart @@ -1,21 +1,14 @@ -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/main.dart'; -import 'package:rsa_example/shared/button_widget.dart'; -import 'package:rsa_example/shared/input_widget.dart'; -import 'package:rsa_example/shared/title_widget.dart'; +import 'package:fast_rsa_example/shared/input_widget.dart'; +import 'package:fast_rsa_example/shared/title_widget.dart'; class HashExample extends StatefulWidget { const HashExample({ - Key? key, + super.key, required this.title, required PKCS12KeyPair keyPair, - }) : keyPair = keyPair, - super(key: key); + }) : keyPair = keyPair; final PKCS12KeyPair keyPair; final String title; @@ -37,7 +30,7 @@ class _HashExampleState extends State { TitleWidget(widget.title), InputWidget( title: "Encode", - key: Key("encode"), + key: const Key("encode"), result: _encrypted, onPressed: (controller) async { var encrypted = await RSA.hash(controller.text, Hash.SHA512); diff --git a/example/lib/main.dart b/example/lib/main.dart index 53fb825..959bfed 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,25 +1,23 @@ -import 'dart:convert'; import 'dart:io'; -import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:fast_rsa/fast_rsa.dart'; -import 'package:rsa_example/base64.dart'; -import 'package:rsa_example/convert_jwt.dart'; -import 'package:rsa_example/convert_keypair.dart'; -import 'package:rsa_example/convert_private.dart'; -import 'package:rsa_example/convert_public.dart'; -import 'package:rsa_example/encrypt_decrypt_oaep.dart'; -import 'package:rsa_example/encrypt_decrypt_oaep_bytes.dart'; -import 'package:rsa_example/encrypt_decrypt_pkcs.dart'; -import 'package:rsa_example/encrypt_decrypt_pkcs_bytes.dart'; -import 'package:rsa_example/encrypt_sign_pkcs.dart'; -import 'package:rsa_example/encrypt_sign_pkcs_bytes.dart'; -import 'package:rsa_example/encrypt_sign_pss.dart'; -import 'package:rsa_example/encrypt_sign_pss_bytes.dart'; -import 'package:rsa_example/generate.dart'; -import 'package:rsa_example/hash.dart'; +import 'package:fast_rsa_example/base64.dart'; +import 'package:fast_rsa_example/convert_jwt.dart'; +import 'package:fast_rsa_example/convert_keypair.dart'; +import 'package:fast_rsa_example/convert_private.dart'; +import 'package:fast_rsa_example/convert_public.dart'; +import 'package:fast_rsa_example/encrypt_decrypt_oaep.dart'; +import 'package:fast_rsa_example/encrypt_decrypt_oaep_bytes.dart'; +import 'package:fast_rsa_example/encrypt_decrypt_pkcs.dart'; +import 'package:fast_rsa_example/encrypt_decrypt_pkcs_bytes.dart'; +import 'package:fast_rsa_example/encrypt_sign_pkcs.dart'; +import 'package:fast_rsa_example/encrypt_sign_pkcs_bytes.dart'; +import 'package:fast_rsa_example/encrypt_sign_pss.dart'; +import 'package:fast_rsa_example/encrypt_sign_pss_bytes.dart'; +import 'package:fast_rsa_example/generate.dart'; +import 'package:fast_rsa_example/hash.dart'; const password = '123456789'; const pkcs12 = @@ -116,10 +114,12 @@ void main() { debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia; } - runApp(new MyApp()); + runApp(const MyApp()); } class MyApp extends StatefulWidget { + const MyApp({super.key}); + @override _MyAppState createState() => _MyAppState(); } @@ -157,82 +157,82 @@ class _MyAppState extends State { title: const Text('RSA example app'), ), body: ListView( - key: Key("list"), + key: const Key("list"), children: [ EncryptAndDecryptOAEP( title: "Encrypt and Decrypt OAEP", keyPair: _pkcs12KeyPair, - key: Key("encrypt-oaep"), + key: const Key("encrypt-oaep"), ), EncryptAndDecryptOAEPBytes( title: "Encrypt and Decrypt OAEP Bytes", keyPair: _pkcs12KeyPair, - key: Key("encrypt-oaep-bytes"), + key: const Key("encrypt-oaep-bytes"), ), EncryptAndDecryptPKCS( title: "Encrypt and Decrypt PKCS1v15", keyPair: _pkcs12KeyPair, - key: Key("encrypt-pkcs"), + key: const Key("encrypt-pkcs"), ), EncryptAndDecryptPKCSBytes( title: "Encrypt and Decrypt PKCS1v15 Bytes", keyPair: _pkcs12KeyPair, - key: Key("encrypt-pkcs-bytes"), + key: const Key("encrypt-pkcs-bytes"), ), SignAndVerifyPSS( title: "Sign and Verify PSS", keyPair: _pkcs12KeyPair, - key: Key("sign-pss"), + key: const Key("sign-pss"), ), SignAndVerifyPSSBytes( title: "Sign and Verify PSS Bytes", keyPair: _pkcs12KeyPair, - key: Key("sign-pss-bytes"), + key: const Key("sign-pss-bytes"), ), SignAndVerifyPKCS( title: "Sign and Verify PKCS", keyPair: _pkcs12KeyPair, - key: Key("sign-pkcs"), + key: const Key("sign-pkcs"), ), SignAndVerifyPKCSBytes( title: "Sign and Verify PKCS Bytes", keyPair: _pkcs12KeyPair, - key: Key("sign-pkcs-bytes"), + key: const Key("sign-pkcs-bytes"), ), Base64( title: "Base64", keyPair: _pkcs12KeyPair, - key: Key("base64"), + key: const Key("base64"), ), HashExample( title: "Hash", keyPair: _pkcs12KeyPair, - key: Key("hash"), + key: const Key("hash"), ), Generate( title: "Generate", keyPair: _pkcs12KeyPair, - key: Key("generate"), + key: const Key("generate"), ), ConvertPrivate( title: "Convert PrivateKey", keyPair: _pkcs12KeyPair, - key: Key("convert-private"), + key: const Key("convert-private"), ), ConvertPublic( title: "Convert PublicKey", keyPair: _pkcs12KeyPair, - key: Key("convert-public"), + key: const Key("convert-public"), ), ConvertJWT( title: "Convert JWT", keyPair: _pkcs12KeyPair, - key: Key("convert-jwt"), + key: const Key("convert-jwt"), ), ConvertKeyPair( title: "Convert KeyPair", keyPair: _pkcs12KeyPair, - key: Key("convert-keypair"), + key: const Key("convert-keypair"), ), ], ), diff --git a/example/lib/shared/button_widget.dart b/example/lib/shared/button_widget.dart index 5104479..b903afe 100644 --- a/example/lib/shared/button_widget.dart +++ b/example/lib/shared/button_widget.dart @@ -1,15 +1,13 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class ButtonWidget extends StatefulWidget { const ButtonWidget({ - Key? key, + super.key, required this.result, required String title, required Function onPressed, }) : onPressed = onPressed, - title = title, - super(key: key); + title = title; final Function onPressed; final String title; @@ -29,23 +27,23 @@ class _ButtonWidgetState extends State { child: Column( children: [ ElevatedButton( - child: Text(widget.title), onPressed: () async { await widget.onPressed(); setState(() { _loading = false; }); }, - key: Key("button"), + key: const Key("button"), + child: Text(widget.title), ), (_loading) ? Text( widget.result, - key: Key("loading"), + key: const Key("loading"), ) : Text( widget.result, - key: Key("result"), + key: const Key("result"), ) ], ), diff --git a/example/lib/shared/input_widget.dart b/example/lib/shared/input_widget.dart index e7aa4b5..85d1ecb 100644 --- a/example/lib/shared/input_widget.dart +++ b/example/lib/shared/input_widget.dart @@ -1,15 +1,13 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class InputWidget extends StatefulWidget { const InputWidget({ - Key? key, + super.key, required this.result, required String title, required Function(TextEditingController) onPressed, }) : onPressed = onPressed, - title = title, - super(key: key); + title = title; final Function(TextEditingController) onPressed; final String title; @@ -47,12 +45,11 @@ class _InputWidgetState extends State { TextField( autofocus: false, focusNode: _focusNode, - decoration: InputDecoration(labelText: "Message"), + decoration: const InputDecoration(labelText: "Message"), controller: _controller, - key: Key("message"), + key: const Key("message"), ), ElevatedButton( - child: Text(widget.title), onPressed: () async { _focusNode!.unfocus(); await widget.onPressed(_controller); @@ -60,16 +57,17 @@ class _InputWidgetState extends State { _loading = false; }); }, - key: Key("button"), + key: const Key("button"), + child: Text(widget.title), ), (_loading) ? Text( widget.result, - key: Key("loading"), + key: const Key("loading"), ) : Text( widget.result, - key: Key("result"), + key: const Key("result"), ) ], ), diff --git a/example/lib/shared/title_widget.dart b/example/lib/shared/title_widget.dart index b9bd8da..cb38f95 100644 --- a/example/lib/shared/title_widget.dart +++ b/example/lib/shared/title_widget.dart @@ -3,8 +3,8 @@ import 'package:flutter/cupertino.dart'; class TitleWidget extends StatelessWidget { const TitleWidget( this.title, { - Key? key, - }) : super(key: key); + super.key, + }); final String title; @@ -14,7 +14,7 @@ class TitleWidget extends StatelessWidget { padding: const EdgeInsets.only(top: 10), child: Text( title, - style: TextStyle( + style: const TextStyle( fontSize: 20, ), ), diff --git a/example/linux/.gitignore b/example/linux/.gitignore index b11f5d1..d3896c9 100644 --- a/example/linux/.gitignore +++ b/example/linux/.gitignore @@ -1,2 +1 @@ flutter/ephemeral -cmake-build-debug \ No newline at end of file diff --git a/example/linux/CMakeLists.txt b/example/linux/CMakeLists.txt index 8e8e89f..7145e0e 100644 --- a/example/linux/CMakeLists.txt +++ b/example/linux/CMakeLists.txt @@ -1,14 +1,32 @@ +# Project-level configuration. cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. set(BINARY_NAME "fast_rsa_example") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID set(APPLICATION_ID "dev.jerson.fast_rsa") +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. cmake_policy(SET CMP0063 NEW) +# Load bundled libraries from the lib/ directory relative to the binary. set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") -# Configure build options. +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Flutter build mode" FORCE) @@ -17,6 +35,10 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) endif() # Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. function(APPLY_STANDARD_SETTINGS TARGET) target_compile_features(${TARGET} PUBLIC cxx_std_14) target_compile_options(${TARGET} PRIVATE -Wall -Werror) @@ -24,9 +46,8 @@ function(APPLY_STANDARD_SETTINGS TARGET) target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") endfunction() -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - # Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) # System-level dependencies. @@ -35,16 +56,27 @@ pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") -# Application build +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. add_executable(${BINARY_NAME} "main.cc" "my_application.cc" "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" ) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter) target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) + # Only the install-generated bundle's copy of the executable will launch # correctly, since the resources must in the right relative locations. To avoid # people trying to run the unbundled copy, put it in a subdirectory instead of @@ -54,6 +86,9 @@ set_target_properties(${BINARY_NAME} RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" ) +# Enable the test target. +set(include_fast_rsa_tests TRUE) + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) @@ -84,11 +119,17 @@ install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR} install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) -if(PLUGIN_BUNDLED_LIBRARIES) - install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) -endif() +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) # Fully re-copy the assets directory on each build to avoid having stale files # from a previous install. diff --git a/example/linux/flutter/CMakeLists.txt b/example/linux/flutter/CMakeLists.txt index 5b465c7..d5bd016 100644 --- a/example/linux/flutter/CMakeLists.txt +++ b/example/linux/flutter/CMakeLists.txt @@ -1,3 +1,4 @@ +# This file controls Flutter-level build steps. It should not be edited. cmake_minimum_required(VERSION 3.10) set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") @@ -24,7 +25,6 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) -pkg_check_modules(BLKID REQUIRED IMPORTED_TARGET blkid) set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") @@ -66,7 +66,6 @@ target_link_libraries(flutter INTERFACE PkgConfig::GTK PkgConfig::GLIB PkgConfig::GIO - PkgConfig::BLKID ) add_dependencies(flutter flutter_assemble) diff --git a/example/linux/my_application.cc b/example/linux/my_application.cc index cc79836..68fb8f3 100644 --- a/example/linux/my_application.cc +++ b/example/linux/my_application.cc @@ -29,22 +29,21 @@ static void my_application_activate(GApplication* application) { // if future cases occur). gboolean use_header_bar = TRUE; #ifdef GDK_WINDOWING_X11 - GdkScreen *screen = gtk_window_get_screen(window); + GdkScreen* screen = gtk_window_get_screen(window); if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } } #endif if (use_header_bar) { - GtkHeaderBar *header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); gtk_widget_show(GTK_WIDGET(header_bar)); gtk_header_bar_set_title(header_bar, "fast_rsa_example"); gtk_header_bar_set_show_close_button(header_bar, TRUE); gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } - else { + } else { gtk_window_set_title(window, "fast_rsa_example"); } @@ -64,7 +63,7 @@ static void my_application_activate(GApplication* application) { } // Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar ***arguments, int *exit_status) { +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { MyApplication* self = MY_APPLICATION(application); // Strip out the first argument as it is the binary name. self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); @@ -82,8 +81,26 @@ static gboolean my_application_local_command_line(GApplication* application, gch return TRUE; } +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + // Implements GObject::dispose. -static void my_application_dispose(GObject *object) { +static void my_application_dispose(GObject* object) { MyApplication* self = MY_APPLICATION(object); g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); G_OBJECT_CLASS(my_application_parent_class)->dispose(object); @@ -92,6 +109,8 @@ static void my_application_dispose(GObject *object) { static void my_application_class_init(MyApplicationClass* klass) { G_APPLICATION_CLASS(klass)->activate = my_application_activate; G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; G_OBJECT_CLASS(klass)->dispose = my_application_dispose; } @@ -100,5 +119,6 @@ static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, nullptr)); } diff --git a/example/macos/.gitignore b/example/macos/.gitignore index d2fd377..746adbb 100644 --- a/example/macos/.gitignore +++ b/example/macos/.gitignore @@ -3,4 +3,5 @@ **/Pods/ # Xcode-related +**/dgph **/xcuserdata/ diff --git a/example/macos/Podfile b/example/macos/Podfile index 049abe2..c795730 100644 --- a/example/macos/Podfile +++ b/example/macos/Podfile @@ -31,6 +31,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock index 35bbd49..2694a04 100644 --- a/example/macos/Podfile.lock +++ b/example/macos/Podfile.lock @@ -17,6 +17,6 @@ SPEC CHECKSUMS: fast_rsa: 47a50bec1042c8c01726007dc0590a078418f997 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 -PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 +PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 -COCOAPODS: 1.14.3 +COCOAPODS: 1.16.2 diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index 5b7942a..3067ac0 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,15 +21,24 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7FA8933A8AAEA16E7010F33A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B619D1E879AF252528F1DA2 /* Pods_Runner.framework */; }; + D513248D83D00FFE403F646E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67FBED5FFE3FD061D4D9BF86 /* Pods_Runner.framework */; }; + FFEB22598ED272D60D3970F9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FF4C46A4E6081901EF13720 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -53,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 072C18C0B887A2C3A954E860 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 10C036BFF84D6B5ACCF9D54C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 24364AF19FFC02C96EB6012B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* fast_rsa_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fast_rsa_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -68,25 +80,58 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 5BBD76FFE6AEFFDAB9248D01 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5FF4C46A4E6081901EF13720 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 67FBED5FFE3FD061D4D9BF86 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 77FC758A38A9025736EC7F84 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7B619D1E879AF252528F1DA2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7DB619C4C40E163C5AAE4DD0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9D4D1945EE598D0E6BD299D3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B1C0F750E5CDE8B061B9D3DD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9B4154FCAF6CD00196226B19 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FFEB22598ED272D60D3970F9 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7FA8933A8AAEA16E7010F33A /* Pods_Runner.framework in Frameworks */, + D513248D83D00FFE403F646E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1EE460474DE18DE7AD635132 /* Pods */ = { + isa = PBXGroup; + children = ( + 7DB619C4C40E163C5AAE4DD0 /* Pods-Runner.debug.xcconfig */, + 9B4154FCAF6CD00196226B19 /* Pods-Runner.release.xcconfig */, + 10C036BFF84D6B5ACCF9D54C /* Pods-Runner.profile.xcconfig */, + 24364AF19FFC02C96EB6012B /* Pods-RunnerTests.debug.xcconfig */, + 77FC758A38A9025736EC7F84 /* Pods-RunnerTests.release.xcconfig */, + 5BBD76FFE6AEFFDAB9248D01 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -103,9 +148,10 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - F589DC0DFE3DFFA333F5A0B1 /* Pods */, + 1EE460474DE18DE7AD635132 /* Pods */, ); sourceTree = ""; }; @@ -113,6 +159,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* fast_rsa_example.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -155,36 +202,45 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 7B619D1E879AF252528F1DA2 /* Pods_Runner.framework */, + 67FBED5FFE3FD061D4D9BF86 /* Pods_Runner.framework */, + 5FF4C46A4E6081901EF13720 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - F589DC0DFE3DFFA333F5A0B1 /* Pods */ = { - isa = PBXGroup; - children = ( - 9D4D1945EE598D0E6BD299D3 /* Pods-Runner.debug.xcconfig */, - 072C18C0B887A2C3A954E860 /* Pods-Runner.release.xcconfig */, - B1C0F750E5CDE8B061B9D3DD /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + DAAE16A0FD6D03459740560F /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F6AEAB12476EFE8C5EF74917 /* [CP] Check Pods Manifest.lock */, + 60D42B94DAADE688FCC1EF1D /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F165908E81CDC34AEA5B7F7E /* [CP] Embed Pods Frameworks */, + 8B0C545998C03924B6109418 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -202,10 +258,15 @@ 33CC10E52044A3C60003C045 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0920; LastUpgradeCheck = 1510; - ORGANIZATIONNAME = "The Flutter Authors"; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -223,7 +284,7 @@ }; }; buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 8.0"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -236,12 +297,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -292,27 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - F165908E81CDC34AEA5B7F7E /* [CP] Embed Pods Frameworks */ = { + 60D42B94DAADE688FCC1EF1D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", - "${PODS_ROOT}/../Flutter/ephemeral/.symlinks/plugins/fast_rsa/macos/librsa_bridge.dylib", - "${BUILT_PRODUCTS_DIR}/fast_rsa/fast_rsa.framework", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/librsa_bridge.dylib", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fast_rsa.framework", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 8B0C545998C03924B6109418 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F6AEAB12476EFE8C5EF74917 /* [CP] Check Pods Manifest.lock */ = { + DAAE16A0FD6D03459740560F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -327,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -337,6 +425,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -350,6 +446,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -370,11 +471,57 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 24364AF19FFC02C96EB6012B /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fast_rsa_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fast_rsa_example"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 77FC758A38A9025736EC7F84 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fast_rsa_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fast_rsa_example"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5BBD76FFE6AEFFDAB9248D01 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fast_rsa_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fast_rsa_example"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -398,9 +545,11 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -425,10 +574,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -452,6 +597,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -475,9 +621,11 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -505,6 +653,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -528,9 +677,11 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -555,10 +706,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -579,10 +726,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -612,6 +755,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 99d7eac..d05e0a0 100644 --- a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -27,18 +27,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - - - - - + + + + + + - - Bool { return true diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 3c4935a..82b6f9d 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index ed4cc16..13b35eb 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 483be61..0a3f5fa 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bcbf36d..bdb5722 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index 9c0a652..f083318 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index e71a726..326c0e7 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 8a31fe2..2f1632c 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/example/macos/Runner/Base.lproj/MainMenu.xib b/example/macos/Runner/Base.lproj/MainMenu.xib index 537341a..80e867a 100644 --- a/example/macos/Runner/Base.lproj/MainMenu.xib +++ b/example/macos/Runner/Base.lproj/MainMenu.xib @@ -323,6 +323,10 @@ + + + + diff --git a/example/macos/Runner/Configs/AppInfo.xcconfig b/example/macos/Runner/Configs/AppInfo.xcconfig index 4cc09cd..df2180e 100644 --- a/example/macos/Runner/Configs/AppInfo.xcconfig +++ b/example/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = fast_rsa_example PRODUCT_BUNDLE_IDENTIFIER = dev.jerson.fastRsaExample // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2020 dev.jerson. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2024 dev.jerson. All rights reserved. diff --git a/example/macos/Runner/MainFlutterWindow.swift b/example/macos/Runner/MainFlutterWindow.swift index 2722837..3cc05eb 100644 --- a/example/macos/Runner/MainFlutterWindow.swift +++ b/example/macos/Runner/MainFlutterWindow.swift @@ -3,7 +3,7 @@ import FlutterMacOS class MainFlutterWindow: NSWindow { override func awakeFromNib() { - let flutterViewController = FlutterViewController.init() + let flutterViewController = FlutterViewController() let windowFrame = self.frame self.contentViewController = flutterViewController self.setFrame(windowFrame, display: true) diff --git a/example/macos/RunnerTests/RunnerTests.swift b/example/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..ae072df --- /dev/null +++ b/example/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,28 @@ +import Cocoa +import FlutterMacOS +import XCTest + + +@testable import fast_rsa + +// This demonstrates a simple unit test of the Swift portion of this plugin's implementation. +// +// See https://developer.apple.com/documentation/xctest for more information about using XCTest. + +class RunnerTests: XCTestCase { + + func testGetPlatformVersion() { + let plugin = FastRsaPlugin() + + let call = FlutterMethodCall(methodName: "getPlatformVersion", arguments: []) + + let resultExpectation = expectation(description: "result block must be called.") + plugin.handle(call) { result in + XCTAssertEqual(result as! String, + "macOS " + ProcessInfo.processInfo.operatingSystemVersionString) + resultExpectation.fulfill() + } + waitForExpectations(timeout: 1) + } + +} diff --git a/example/pubspec.lock b/example/pubspec.lock index 87a61b8..40172e7 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,26 +5,31 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 url: "https://pub.dev" source: hosted - version: "67.0.0" + version: "72.0.0" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.2" analyzer: dependency: transitive description: name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 url: "https://pub.dev" source: hosted - version: "6.4.1" + version: "6.7.0" args: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.6.0" async: dependency: transitive description: @@ -69,34 +74,34 @@ packages: dependency: transitive description: name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" coverage: dependency: transitive description: name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + sha256: "4b03e11f6d5b8f6e5bb5e9f7889a56fe6c5cbe942da5378ea4d4d7f73ef9dfe5" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.11.0" crypto: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.6" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: "486b7bc707424572cdf7bd7e812a0c146de3fd47ecadf070254cc60383f21dd8" + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.8" fake_async: dependency: transitive description: @@ -116,10 +121,10 @@ packages: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.3" file: dependency: transitive description: @@ -132,10 +137,10 @@ packages: dependency: transitive description: name: flat_buffers - sha256: "23e2ced0d8e8ecdffbd9f267f49a668c74438393b9acaeac1c724123e3764263" + sha256: "380bdcba5664a718bfd4ea20a45d39e13684f5318fcd8883066a55e21f37f4c3" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "23.5.26" flutter: dependency: "direct main" description: flutter @@ -146,6 +151,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" + url: "https://pub.dev" + source: hosted + version: "5.0.0" flutter_test: dependency: "direct dev" description: flutter @@ -160,10 +173,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" fuchsia_remote_debug_protocol: dependency: transitive description: flutter @@ -210,10 +223,10 @@ packages: dependency: transitive description: name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf url: "https://pub.dev" source: hosted - version: "0.6.7" + version: "0.7.1" leak_tracker: dependency: transitive description: @@ -238,14 +251,30 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: "3315600f3fb3b135be672bf4a178c55f274bebe368325ae18462c89ac1e3b413" + url: "https://pub.dev" + source: hosted + version: "5.0.0" logging: dependency: transitive description: name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.3.0" + macros: + dependency: transitive + description: + name: macros + sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" + url: "https://pub.dev" + source: hosted + version: "0.1.2-main.4" matcher: dependency: transitive description: @@ -274,18 +303,18 @@ packages: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" node_preamble: dependency: transitive description: name: node_preamble - sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d" + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" package_config: dependency: transitive description: @@ -310,6 +339,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.5" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" pool: dependency: transitive description: @@ -338,34 +375,34 @@ packages: dependency: transitive description: name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" shelf_static: dependency: transitive description: name: shelf_static - sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.3" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "2.0.1" sky_engine: dependency: transitive description: flutter @@ -375,10 +412,10 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" source_maps: dependency: transitive description: @@ -463,10 +500,10 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" vector_math: dependency: transitive description: @@ -499,14 +536,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "3.0.1" webdriver: dependency: transitive description: @@ -519,18 +564,18 @@ packages: dependency: transitive description: name: webkit_inspection_protocol - sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.5.4 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index d1f12c5..622fc80 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -1,33 +1,55 @@ -name: rsa_example -description: Demonstrates how to use the rsa plugin. -publish_to: "none" +name: fast_rsa_example +description: "Demonstrates how to use the fast_rsa plugin." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev environment: - sdk: '>=2.17.0 <3.0.0' + sdk: ^3.5.4 +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.2 fast_rsa: + # When depending on this package from a real application you should use: + # fast_rsa: ^x.y.z + # See https://dart.dev/tools/pub/dependencies#version-constraints + # The example app is bundled with the plugin so we use a path dependency on + # the parent directory to use the current plugin's version. path: ../ + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.8 + dev_dependencies: integration_test: sdk: flutter flutter_test: sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^5.0.0 + test: any - # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec -# The following section is specific to Flutter. +# The following section is specific to Flutter packages. flutter: + # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. @@ -39,26 +61,12 @@ flutter: - packages/fast_rsa/web/assets/wasm_exec.js - packages/fast_rsa/web/assets/rsa.wasm - # See https://github.com/flutter/flutter/wiki/Desktop-shells#fonts - fonts: - - family: Roboto - fonts: - - asset: fonts/Roboto/Roboto-Thin.ttf - weight: 100 - - asset: fonts/Roboto/Roboto-Light.ttf - weight: 300 - - asset: fonts/Roboto/Roboto-Regular.ttf - weight: 400 - - asset: fonts/Roboto/Roboto-Medium.ttf - weight: 500 - - asset: fonts/Roboto/Roboto-Bold.ttf - weight: 700 - - asset: fonts/Roboto/Roboto-Black.ttf - weight: 900 # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. + # https://flutter.dev/to/resolution-aware-images + # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages + # https://flutter.dev/to/asset-from-package + # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a # "family" key with the font family name, and a "fonts" key with a @@ -77,4 +85,4 @@ flutter: # weight: 700 # # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages + # see https://flutter.dev/to/font-from-package diff --git a/example/web/icons/Icon-maskable-192.png b/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..eb9b4d7 Binary files /dev/null and b/example/web/icons/Icon-maskable-192.png differ diff --git a/example/web/icons/Icon-maskable-512.png b/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..d69c566 Binary files /dev/null and b/example/web/icons/Icon-maskable-512.png differ diff --git a/example/web/index.html b/example/web/index.html index 74dcd35..c922620 100644 --- a/example/web/index.html +++ b/example/web/index.html @@ -8,10 +8,13 @@ The path provided below has to start and end with a slash "/" in order for it to work correctly. - Fore more details: + For more details: * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base + + This is a placeholder for base href that will be replaced by the value of + the `--base-href` argument provided to `flutter build`. --> - + diff --git a/example/web/manifest.json b/example/web/manifest.json index 24c69b4..2472f6b 100644 --- a/example/web/manifest.json +++ b/example/web/manifest.json @@ -18,6 +18,18 @@ "src": "icons/Icon-512.png", "sizes": "512x512", "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" } ] } diff --git a/example/windows/CMakeLists.txt b/example/windows/CMakeLists.txt index a1d04e4..0f9370c 100644 --- a/example/windows/CMakeLists.txt +++ b/example/windows/CMakeLists.txt @@ -1,13 +1,16 @@ -cmake_minimum_required(VERSION 3.15) +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) project(fast_rsa_example LANGUAGES CXX) +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. set(BINARY_NAME "fast_rsa_example") -cmake_policy(SET CMP0063 NEW) +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) -set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") - -# Configure build options. +# Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(IS_MULTICONFIG) set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" @@ -20,7 +23,7 @@ else() "Debug" "Profile" "Release") endif() endif() - +# Define settings for the Profile build mode. set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") @@ -30,6 +33,10 @@ set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") add_definitions(-DUNICODE -D_UNICODE) # Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. function(APPLY_STANDARD_SETTINGS TARGET) target_compile_features(${TARGET} PUBLIC cxx_std_17) target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") @@ -38,14 +45,16 @@ function(APPLY_STANDARD_SETTINGS TARGET) target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") endfunction() -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - # Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) -# Application build +# Application build; see runner/CMakeLists.txt. add_subdirectory("runner") +# Enable the test target. +set(include_fast_rsa_tests TRUE) + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) @@ -80,6 +89,12 @@ if(PLUGIN_BUNDLED_LIBRARIES) COMPONENT Runtime) endif() +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + # Fully re-copy the assets directory on each build to avoid having stale files # from a previous install. set(FLUTTER_ASSET_DIR_NAME "flutter_assets") diff --git a/example/windows/flutter/CMakeLists.txt b/example/windows/flutter/CMakeLists.txt index 744f08a..903f489 100644 --- a/example/windows/flutter/CMakeLists.txt +++ b/example/windows/flutter/CMakeLists.txt @@ -1,4 +1,5 @@ -cmake_minimum_required(VERSION 3.15) +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") @@ -9,6 +10,11 @@ include(${EPHEMERAL_DIR}/generated_config.cmake) # https://github.com/flutter/flutter/issues/57146. set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + # === Flutter Library === set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") @@ -23,6 +29,7 @@ list(APPEND FLUTTER_LIBRARY_HEADERS "flutter_windows.h" "flutter_messenger.h" "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" ) list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") add_library(flutter INTERFACE) @@ -90,7 +97,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E env ${FLUTTER_TOOL_ENVIRONMENT} "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" - windows-x64 $ + ${FLUTTER_TARGET_PLATFORM} $ VERBATIM ) add_custom_target(flutter_assemble DEPENDS diff --git a/example/windows/runner/CMakeLists.txt b/example/windows/runner/CMakeLists.txt index 977e38b..394917c 100644 --- a/example/windows/runner/CMakeLists.txt +++ b/example/windows/runner/CMakeLists.txt @@ -1,18 +1,40 @@ -cmake_minimum_required(VERSION 3.15) +cmake_minimum_required(VERSION 3.14) project(runner LANGUAGES CXX) +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. add_executable(${BINARY_NAME} WIN32 "flutter_window.cpp" "main.cpp" - "run_loop.cpp" "utils.cpp" "win32_window.cpp" "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" "Runner.rc" "runner.exe.manifest" ) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/example/windows/runner/Runner.rc b/example/windows/runner/Runner.rc index d0080d8..a0ff2b9 100644 --- a/example/windows/runner/Runner.rc +++ b/example/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif @@ -90,10 +90,10 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "dev.jerson" "\0" - VALUE "FileDescription", "Demonstrates how to use the fast_rsa plugin." "\0" + VALUE "FileDescription", "fast_rsa_example" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "fast_rsa_example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2020 dev.jerson. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 dev.jerson. All rights reserved." "\0" VALUE "OriginalFilename", "fast_rsa_example.exe" "\0" VALUE "ProductName", "fast_rsa_example" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/example/windows/runner/flutter_window.cpp b/example/windows/runner/flutter_window.cpp index c422723..955ee30 100644 --- a/example/windows/runner/flutter_window.cpp +++ b/example/windows/runner/flutter_window.cpp @@ -4,9 +4,8 @@ #include "flutter/generated_plugin_registrant.h" -FlutterWindow::FlutterWindow(RunLoop* run_loop, - const flutter::DartProject& project) - : run_loop_(run_loop), project_(project) {} +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} FlutterWindow::~FlutterWindow() {} @@ -26,14 +25,22 @@ bool FlutterWindow::OnCreate() { return false; } RegisterPlugins(flutter_controller_->engine()); - run_loop_->RegisterFlutterInstance(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } void FlutterWindow::OnDestroy() { if (flutter_controller_) { - run_loop_->UnregisterFlutterInstance(flutter_controller_->engine()); flutter_controller_ = nullptr; } @@ -44,7 +51,7 @@ LRESULT FlutterWindow::MessageHandler(HWND hwnd, UINT const message, WPARAM const wparam, LPARAM const lparam) noexcept { - // Give Flutter, including plugins, an opporutunity to handle window messages. + // Give Flutter, including plugins, an opportunity to handle window messages. if (flutter_controller_) { std::optional result = flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, diff --git a/example/windows/runner/flutter_window.h b/example/windows/runner/flutter_window.h index b663ddd..6da0652 100644 --- a/example/windows/runner/flutter_window.h +++ b/example/windows/runner/flutter_window.h @@ -6,16 +6,13 @@ #include -#include "run_loop.h" #include "win32_window.h" // A window that does nothing but host a Flutter view. class FlutterWindow : public Win32Window { public: - // Creates a new FlutterWindow driven by the |run_loop|, hosting a - // Flutter view running |project|. - explicit FlutterWindow(RunLoop* run_loop, - const flutter::DartProject& project); + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); virtual ~FlutterWindow(); protected: @@ -26,9 +23,6 @@ class FlutterWindow : public Win32Window { LPARAM const lparam) noexcept override; private: - // The run loop driving events for this window. - RunLoop* run_loop_; - // The project to run. flutter::DartProject project_; diff --git a/example/windows/runner/main.cpp b/example/windows/runner/main.cpp index a7c777d..753c0e7 100644 --- a/example/windows/runner/main.cpp +++ b/example/windows/runner/main.cpp @@ -3,7 +3,6 @@ #include #include "flutter_window.h" -#include "run_loop.h" #include "utils.h" int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, @@ -18,8 +17,6 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, // plugins. ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); - RunLoop run_loop; - flutter::DartProject project(L"data"); std::vector command_line_arguments = @@ -27,15 +24,19 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); - FlutterWindow window(&run_loop, project); + FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"fast_rsa_example", origin, size)) { + if (!window.Create(L"fast_rsa_example", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); - run_loop.Run(); + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } ::CoUninitialize(); return EXIT_SUCCESS; diff --git a/example/windows/runner/run_loop.cpp b/example/windows/runner/run_loop.cpp deleted file mode 100644 index 2d6636a..0000000 --- a/example/windows/runner/run_loop.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "run_loop.h" - -#include - -#include - -RunLoop::RunLoop() {} - -RunLoop::~RunLoop() {} - -void RunLoop::Run() { - bool keep_running = true; - TimePoint next_flutter_event_time = TimePoint::clock::now(); - while (keep_running) { - std::chrono::nanoseconds wait_duration = - std::max(std::chrono::nanoseconds(0), - next_flutter_event_time - TimePoint::clock::now()); - ::MsgWaitForMultipleObjects( - 0, nullptr, FALSE, static_cast(wait_duration.count() / 1000), - QS_ALLINPUT); - bool processed_events = false; - MSG message; - // All pending Windows messages must be processed; MsgWaitForMultipleObjects - // won't return again for items left in the queue after PeekMessage. - while (::PeekMessage(&message, nullptr, 0, 0, PM_REMOVE)) { - processed_events = true; - if (message.message == WM_QUIT) { - keep_running = false; - break; - } - ::TranslateMessage(&message); - ::DispatchMessage(&message); - // Allow Flutter to process messages each time a Windows message is - // processed, to prevent starvation. - next_flutter_event_time = - std::min(next_flutter_event_time, ProcessFlutterMessages()); - } - // If the PeekMessage loop didn't run, process Flutter messages. - if (!processed_events) { - next_flutter_event_time = - std::min(next_flutter_event_time, ProcessFlutterMessages()); - } - } -} - -void RunLoop::RegisterFlutterInstance( - flutter::FlutterEngine* flutter_instance) { - flutter_instances_.insert(flutter_instance); -} - -void RunLoop::UnregisterFlutterInstance( - flutter::FlutterEngine* flutter_instance) { - flutter_instances_.erase(flutter_instance); -} - -RunLoop::TimePoint RunLoop::ProcessFlutterMessages() { - TimePoint next_event_time = TimePoint::max(); - for (auto instance : flutter_instances_) { - std::chrono::nanoseconds wait_duration = instance->ProcessMessages(); - if (wait_duration != std::chrono::nanoseconds::max()) { - next_event_time = - std::min(next_event_time, TimePoint::clock::now() + wait_duration); - } - } - return next_event_time; -} diff --git a/example/windows/runner/run_loop.h b/example/windows/runner/run_loop.h deleted file mode 100644 index 000d362..0000000 --- a/example/windows/runner/run_loop.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef RUNNER_RUN_LOOP_H_ -#define RUNNER_RUN_LOOP_H_ - -#include - -#include -#include - -// A runloop that will service events for Flutter instances as well -// as native messages. -class RunLoop { - public: - RunLoop(); - ~RunLoop(); - - // Prevent copying - RunLoop(RunLoop const&) = delete; - RunLoop& operator=(RunLoop const&) = delete; - - // Runs the run loop until the application quits. - void Run(); - - // Registers the given Flutter instance for event servicing. - void RegisterFlutterInstance( - flutter::FlutterEngine* flutter_instance); - - // Unregisters the given Flutter instance from event servicing. - void UnregisterFlutterInstance( - flutter::FlutterEngine* flutter_instance); - - private: - using TimePoint = std::chrono::steady_clock::time_point; - - // Processes all currently pending messages for registered Flutter instances. - TimePoint ProcessFlutterMessages(); - - std::set flutter_instances_; -}; - -#endif // RUNNER_RUN_LOOP_H_ diff --git a/example/windows/runner/runner.exe.manifest b/example/windows/runner/runner.exe.manifest index c977c4a..153653e 100644 --- a/example/windows/runner/runner.exe.manifest +++ b/example/windows/runner/runner.exe.manifest @@ -7,14 +7,8 @@ - + - - - - - - diff --git a/example/windows/runner/utils.cpp b/example/windows/runner/utils.cpp index d19bdbb..3a0b465 100644 --- a/example/windows/runner/utils.cpp +++ b/example/windows/runner/utils.cpp @@ -45,18 +45,19 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { if (utf16_string == nullptr) { return std::string(); } - int target_length = ::WideCharToMultiByte( + unsigned int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); - if (target_length == 0) { - return std::string(); - } + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/example/windows/runner/win32_window.cpp b/example/windows/runner/win32_window.cpp index c10f08d..60608d0 100644 --- a/example/windows/runner/win32_window.cpp +++ b/example/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -42,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/example/windows/runner/win32_window.h b/example/windows/runner/win32_window.h index 17ba431..e901dde 100644 --- a/example/windows/runner/win32_window.h +++ b/example/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -76,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/fast_rsa.iml b/fast_rsa.iml index 73e7ebd..27686dd 100644 --- a/fast_rsa.iml +++ b/fast_rsa.iml @@ -6,14 +6,12 @@ - - - + - \ No newline at end of file + diff --git a/ios/.gitignore b/ios/.gitignore index aa479fd..034771f 100644 --- a/ios/.gitignore +++ b/ios/.gitignore @@ -34,4 +34,5 @@ Icon? .tags* /Flutter/Generated.xcconfig -/Flutter/flutter_export_environment.sh \ No newline at end of file +/Flutter/ephemeral/ +/Flutter/flutter_export_environment.sh diff --git a/ios/Classes/FastRsaPlugin.h b/ios/Classes/FastRsaPlugin.h deleted file mode 100644 index 30dd7a6..0000000 --- a/ios/Classes/FastRsaPlugin.h +++ /dev/null @@ -1,4 +0,0 @@ -#import - -@interface FastRsaPlugin : NSObject -@end diff --git a/ios/Classes/FastRsaPlugin.m b/ios/Classes/FastRsaPlugin.m deleted file mode 100644 index 9815f58..0000000 --- a/ios/Classes/FastRsaPlugin.m +++ /dev/null @@ -1,15 +0,0 @@ -#import "FastRsaPlugin.h" -#if __has_include() -#import -#else -// Support project import fallback if the generated compatibility header -// is not copied when this plugin is created as a library. -// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816 -#import "fast_rsa-Swift.h" -#endif - -@implementation FastRsaPlugin -+ (void)registerWithRegistrar:(NSObject*)registrar { - [SwiftFastRsaPlugin registerWithRegistrar:registrar]; -} -@end diff --git a/ios/Classes/SwiftFastRsaPlugin.swift b/ios/Classes/FastRsaPlugin.swift similarity index 57% rename from ios/Classes/SwiftFastRsaPlugin.swift rename to ios/Classes/FastRsaPlugin.swift index 19a5a87..3db4f21 100644 --- a/ios/Classes/SwiftFastRsaPlugin.swift +++ b/ios/Classes/FastRsaPlugin.swift @@ -1,14 +1,19 @@ import Flutter import UIKit -public class SwiftFastRsaPlugin: NSObject, FlutterPlugin { +public class FastRsaPlugin: NSObject, FlutterPlugin { public static func register(with registrar: FlutterPluginRegistrar) { let channel = FlutterMethodChannel(name: "fast_rsa", binaryMessenger: registrar.messenger()) - let instance = SwiftFastRsaPlugin() + let instance = FastRsaPlugin() registrar.addMethodCallDelegate(instance, channel: channel) } public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { - result("iOS " + UIDevice.current.systemVersion) + switch call.method { + case "getPlatformVersion": + result("iOS " + UIDevice.current.systemVersion) + default: + result(FlutterMethodNotImplemented) + } } } diff --git a/ios/Rsa.xcframework/Info.plist b/ios/Rsa.xcframework/Info.plist new file mode 100644 index 0000000..cf4518a --- /dev/null +++ b/ios/Rsa.xcframework/Info.plist @@ -0,0 +1,67 @@ + + + + + AvailableLibraries + + + BinaryPath + librsa_bridge.a + HeadersPath + Headers + LibraryIdentifier + ios-arm64_x86_64-simulator + LibraryPath + librsa_bridge.a + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + BinaryPath + librsa_bridge.a + HeadersPath + Headers + LibraryIdentifier + ios-arm64_x86_64-maccatalyst + LibraryPath + librsa_bridge.a + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + maccatalyst + + + BinaryPath + librsa_bridge.a + HeadersPath + Headers + LibraryIdentifier + ios-arm64 + LibraryPath + librsa_bridge.a + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/ios/librsa_bridge.h b/ios/Rsa.xcframework/ios-arm64/Headers/librsa_bridge.h similarity index 100% rename from ios/librsa_bridge.h rename to ios/Rsa.xcframework/ios-arm64/Headers/librsa_bridge.h diff --git a/ios/Rsa.xcframework/ios-arm64/librsa_bridge.a b/ios/Rsa.xcframework/ios-arm64/librsa_bridge.a new file mode 100644 index 0000000..3f0ee20 Binary files /dev/null and b/ios/Rsa.xcframework/ios-arm64/librsa_bridge.a differ diff --git a/ios/Rsa.xcframework/ios-arm64_x86_64-maccatalyst/Headers/librsa_bridge.h b/ios/Rsa.xcframework/ios-arm64_x86_64-maccatalyst/Headers/librsa_bridge.h new file mode 100644 index 0000000..ff18cc0 --- /dev/null +++ b/ios/Rsa.xcframework/ios-arm64_x86_64-maccatalyst/Headers/librsa_bridge.h @@ -0,0 +1,87 @@ +/* Code generated by cmd/cgo; DO NOT EDIT. */ + +/* package command-line-arguments */ + + +#line 1 "cgo-builtin-export-prolog" + +#include + +#ifndef GO_CGO_EXPORT_PROLOGUE_H +#define GO_CGO_EXPORT_PROLOGUE_H + +#ifndef GO_CGO_GOSTRING_TYPEDEF +typedef struct { const char *p; ptrdiff_t n; } _GoString_; +#endif + +#endif + +/* Start of preamble from import "C" comments. */ + + +#line 3 "main.go" +#include +#include +typedef struct { void* message; int size; char* error; } BytesReturn; + +#line 1 "cgo-generated-wrapper" + + +/* End of preamble from import "C" comments. */ + + +/* Start of boilerplate cgo prologue. */ +#line 1 "cgo-gcc-export-header-prolog" + +#ifndef GO_CGO_PROLOGUE_H +#define GO_CGO_PROLOGUE_H + +typedef signed char GoInt8; +typedef unsigned char GoUint8; +typedef short GoInt16; +typedef unsigned short GoUint16; +typedef int GoInt32; +typedef unsigned int GoUint32; +typedef long long GoInt64; +typedef unsigned long long GoUint64; +typedef GoInt64 GoInt; +typedef GoUint64 GoUint; +typedef size_t GoUintptr; +typedef float GoFloat32; +typedef double GoFloat64; +#ifdef _MSC_VER +#include +typedef _Fcomplex GoComplex64; +typedef _Dcomplex GoComplex128; +#else +typedef float _Complex GoComplex64; +typedef double _Complex GoComplex128; +#endif + +/* + static assertion to make sure the file is being used on architecture + at least with matching size of GoInt. +*/ +typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1]; + +#ifndef GO_CGO_GOSTRING_TYPEDEF +typedef _GoString_ GoString; +#endif +typedef void *GoMap; +typedef void *GoChan; +typedef struct { void *t; void *v; } GoInterface; +typedef struct { void *data; GoInt len; GoInt cap; } GoSlice; + +#endif + +/* End of boilerplate cgo prologue. */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern BytesReturn* RSABridgeCall(char* name, void* payload, int payloadSize); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Rsa.xcframework/ios-arm64_x86_64-maccatalyst/librsa_bridge.a b/ios/Rsa.xcframework/ios-arm64_x86_64-maccatalyst/librsa_bridge.a new file mode 100644 index 0000000..3fbc893 Binary files /dev/null and b/ios/Rsa.xcframework/ios-arm64_x86_64-maccatalyst/librsa_bridge.a differ diff --git a/ios/Rsa.xcframework/ios-arm64_x86_64-simulator/Headers/librsa_bridge.h b/ios/Rsa.xcframework/ios-arm64_x86_64-simulator/Headers/librsa_bridge.h new file mode 100644 index 0000000..ff18cc0 --- /dev/null +++ b/ios/Rsa.xcframework/ios-arm64_x86_64-simulator/Headers/librsa_bridge.h @@ -0,0 +1,87 @@ +/* Code generated by cmd/cgo; DO NOT EDIT. */ + +/* package command-line-arguments */ + + +#line 1 "cgo-builtin-export-prolog" + +#include + +#ifndef GO_CGO_EXPORT_PROLOGUE_H +#define GO_CGO_EXPORT_PROLOGUE_H + +#ifndef GO_CGO_GOSTRING_TYPEDEF +typedef struct { const char *p; ptrdiff_t n; } _GoString_; +#endif + +#endif + +/* Start of preamble from import "C" comments. */ + + +#line 3 "main.go" +#include +#include +typedef struct { void* message; int size; char* error; } BytesReturn; + +#line 1 "cgo-generated-wrapper" + + +/* End of preamble from import "C" comments. */ + + +/* Start of boilerplate cgo prologue. */ +#line 1 "cgo-gcc-export-header-prolog" + +#ifndef GO_CGO_PROLOGUE_H +#define GO_CGO_PROLOGUE_H + +typedef signed char GoInt8; +typedef unsigned char GoUint8; +typedef short GoInt16; +typedef unsigned short GoUint16; +typedef int GoInt32; +typedef unsigned int GoUint32; +typedef long long GoInt64; +typedef unsigned long long GoUint64; +typedef GoInt64 GoInt; +typedef GoUint64 GoUint; +typedef size_t GoUintptr; +typedef float GoFloat32; +typedef double GoFloat64; +#ifdef _MSC_VER +#include +typedef _Fcomplex GoComplex64; +typedef _Dcomplex GoComplex128; +#else +typedef float _Complex GoComplex64; +typedef double _Complex GoComplex128; +#endif + +/* + static assertion to make sure the file is being used on architecture + at least with matching size of GoInt. +*/ +typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1]; + +#ifndef GO_CGO_GOSTRING_TYPEDEF +typedef _GoString_ GoString; +#endif +typedef void *GoMap; +typedef void *GoChan; +typedef struct { void *t; void *v; } GoInterface; +typedef struct { void *data; GoInt len; GoInt cap; } GoSlice; + +#endif + +/* End of boilerplate cgo prologue. */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern BytesReturn* RSABridgeCall(char* name, void* payload, int payloadSize); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Rsa.xcframework/ios-arm64_x86_64-simulator/librsa_bridge.a b/ios/Rsa.xcframework/ios-arm64_x86_64-simulator/librsa_bridge.a new file mode 100644 index 0000000..2a84a10 Binary files /dev/null and b/ios/Rsa.xcframework/ios-arm64_x86_64-simulator/librsa_bridge.a differ diff --git a/ios/fast_rsa.podspec b/ios/fast_rsa.podspec index 9448b17..3505fbe 100644 --- a/ios/fast_rsa.podspec +++ b/ios/fast_rsa.podspec @@ -2,7 +2,7 @@ # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. # Run `pod lib lint fast_rsa.podspec' to validate before publishing. # -shared_lib = File.join(__dir__, "librsa_bridge.a").gsub(/ /, '\ ') +framework_path = File.join(__dir__, "Rsa.xcframework").gsub(/ /, '\ ') Pod::Spec.new do |s| s.name = 'fast_rsa' @@ -16,14 +16,18 @@ library for use RSA. s.author = { 'Gerson Alexander Pardo Gamez' => 'jeral17@gmail.com' } s.source = { :path => '.' } s.source_files = 'Classes/**/*' - s.public_header_files = 'Classes/**/*.h' - s.vendored_libraries = '*.a' + s.dependency 'Flutter' - s.platform = :ios, '8.0' - s.xcconfig = { 'OTHER_LDFLAGS' => "-force_load '#{shared_lib}'"} + s.platform = :ios, '12.0' + s.vendored_frameworks = 'Rsa.xcframework' # Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported. - s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } - s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } + s.pod_target_xcconfig = { + 'DEFINES_MODULE' => 'YES', + 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386', + 'OTHER_LDFLAGS[sdk=iphoneos*]' => "-force_load #{framework_path}/ios-arm64/librsa_bridge.a", + 'OTHER_LDFLAGS[sdk=iphonesimulator*]' => "-force_load #{framework_path}/ios-arm64_x86_64-simulator/librsa_bridge.a", + 'OTHER_LDFLAGS[sdk=maccatalyst*]' => "-force_load #{framework_path}/ios-arm64_x86_64-maccatalyst/librsa_bridge.a" + } s.swift_version = '5.0' end diff --git a/ios/librsa_bridge.a b/ios/librsa_bridge.a deleted file mode 100644 index a77bf34..0000000 Binary files a/ios/librsa_bridge.a and /dev/null differ diff --git a/lib/fast_rsa.dart b/lib/fast_rsa.dart index 0f41b66..66adb71 100644 --- a/lib/fast_rsa.dart +++ b/lib/fast_rsa.dart @@ -40,7 +40,7 @@ class PKCS12KeyPair { } class RSA { - static const MethodChannel _channel = const MethodChannel('fast_rsa'); + static const MethodChannel _channel = MethodChannel('fast_rsa'); static bool bindingEnabled = Binding().isSupported(); static Future _call(String name, Uint8List payload) async { @@ -55,7 +55,7 @@ class RSA { var data = await _call(name, payload); var response = model.BytesResponse(data); if (response.error != null && response.error != "") { - throw new RSAException(response.error!); + throw RSAException(response.error!); } return Uint8List.fromList(response.output!); } @@ -64,7 +64,7 @@ class RSA { var data = await _call(name, payload); var response = model.StringResponse(data); if (response.error != null && response.error != "") { - throw new RSAException(response.error!); + throw RSAException(response.error!); } return response.output!; } @@ -73,7 +73,7 @@ class RSA { var data = await _call(name, payload); var response = model.BoolResponse(data); if (response.error != null && response.error != "") { - throw new RSAException(response.error!); + throw RSAException(response.error!); } return response.output; } @@ -83,7 +83,7 @@ class RSA { var data = await _call(name, payload); var response = model.KeyPairResponse(data); if (response.error != null && response.error != "") { - throw new RSAException(response.error!); + throw RSAException(response.error!); } var output = response.output!; return KeyPair(output.publicKey!, output.privateKey!); @@ -92,9 +92,9 @@ class RSA { static Future _pkcs12KeyPairResponse( String name, Uint8List payload) async { var data = await _call(name, payload); - var response = model.PKCS12KeyPairResponse(data); + var response = model.Pkcs12KeyPairResponse(data); if (response.error != null && response.error != "") { - throw new RSAException(response.error!); + throw RSAException(response.error!); } var output = response.output!; return PKCS12KeyPair( @@ -103,7 +103,7 @@ class RSA { static Future convertJWKToPrivateKey( dynamic data, String keyId) async { - var requestBuilder = model.ConvertJWTRequestObjectBuilder( + var requestBuilder = model.ConvertJwtrequestObjectBuilder( data: jsonEncode(data), keyId: keyId, ); @@ -114,7 +114,7 @@ class RSA { static Future convertJWKToPublicKey( dynamic data, String keyId) async { - var requestBuilder = model.ConvertJWTRequestObjectBuilder( + var requestBuilder = model.ConvertJwtrequestObjectBuilder( data: jsonEncode(data), keyId: keyId, ); @@ -137,7 +137,7 @@ class RSA { static Future convertPKCS12ToKeyPair( String pkcs12, String password) async { - var requestBuilder = model.ConvertPKCS12RequestObjectBuilder( + var requestBuilder = model.ConvertPkcs12RequestObjectBuilder( password: password, pkcs12: pkcs12, ); @@ -224,7 +224,7 @@ class RSA { var requestBuilder = model.EncryptPrivateKeyRequestObjectBuilder( privateKey: privateKey, password: password, - cipher: model.PEMCipher.values[cipher.index], + cipher: model.Pemcipher.values[cipher.index], ); return await _stringResponse("encryptPrivateKey", requestBuilder.toBytes()); @@ -232,7 +232,7 @@ class RSA { static Future decryptOAEP( String ciphertext, String label, Hash hash, String privateKey) async { - var requestBuilder = model.DecryptOAEPRequestObjectBuilder( + var requestBuilder = model.DecryptOaeprequestObjectBuilder( privateKey: privateKey, ciphertext: ciphertext, label: label, @@ -244,7 +244,7 @@ class RSA { static Future decryptOAEPBytes( Uint8List ciphertext, String label, Hash hash, String privateKey) async { - var requestBuilder = model.DecryptOAEPBytesRequestObjectBuilder( + var requestBuilder = model.DecryptOaepbytesRequestObjectBuilder( privateKey: privateKey, ciphertext: ciphertext, label: label, @@ -256,7 +256,7 @@ class RSA { static Future decryptPKCS1v15( String ciphertext, String privateKey) async { - var requestBuilder = model.DecryptPKCS1v15RequestObjectBuilder( + var requestBuilder = model.DecryptPkcs1v15RequestObjectBuilder( privateKey: privateKey, ciphertext: ciphertext, ); @@ -266,7 +266,7 @@ class RSA { static Future decryptPKCS1v15Bytes( Uint8List ciphertext, String privateKey) async { - var requestBuilder = model.DecryptPKCS1v15BytesRequestObjectBuilder( + var requestBuilder = model.DecryptPkcs1v15BytesRequestObjectBuilder( privateKey: privateKey, ciphertext: ciphertext, ); @@ -277,7 +277,7 @@ class RSA { static Future encryptOAEP( String message, String label, Hash hash, String publicKey) async { - var requestBuilder = model.EncryptOAEPRequestObjectBuilder( + var requestBuilder = model.EncryptOaeprequestObjectBuilder( message: message, label: label, publicKey: publicKey, @@ -289,7 +289,7 @@ class RSA { static Future encryptOAEPBytes( Uint8List message, String label, Hash hash, String publicKey) async { - var requestBuilder = model.EncryptOAEPBytesRequestObjectBuilder( + var requestBuilder = model.EncryptOaepbytesRequestObjectBuilder( message: message, label: label, publicKey: publicKey, @@ -301,7 +301,7 @@ class RSA { static Future encryptPKCS1v15( String message, String publicKey) async { - var requestBuilder = model.EncryptPKCS1v15RequestObjectBuilder( + var requestBuilder = model.EncryptPkcs1v15RequestObjectBuilder( message: message, publicKey: publicKey, ); @@ -311,7 +311,7 @@ class RSA { static Future encryptPKCS1v15Bytes( Uint8List message, String publicKey) async { - var requestBuilder = model.EncryptPKCS1v15BytesRequestObjectBuilder( + var requestBuilder = model.EncryptPkcs1v15BytesRequestObjectBuilder( message: message, publicKey: publicKey, ); @@ -322,7 +322,7 @@ class RSA { static Future signPSS(String message, Hash hash, SaltLength saltLength, String privateKey) async { - var requestBuilder = model.SignPSSRequestObjectBuilder( + var requestBuilder = model.SignPssrequestObjectBuilder( message: message, privateKey: privateKey, saltLength: model.SaltLength.values[saltLength.index], @@ -334,7 +334,7 @@ class RSA { static Future signPSSBytes(Uint8List message, Hash hash, SaltLength saltLength, String privateKey) async { - var requestBuilder = model.SignPSSBytesRequestObjectBuilder( + var requestBuilder = model.SignPssbytesRequestObjectBuilder( message: message, privateKey: privateKey, saltLength: model.SaltLength.values[saltLength.index], @@ -346,7 +346,7 @@ class RSA { static Future signPKCS1v15( String message, Hash hash, String privateKey) async { - var requestBuilder = model.SignPKCS1v15RequestObjectBuilder( + var requestBuilder = model.SignPkcs1v15RequestObjectBuilder( message: message, privateKey: privateKey, hash: model.Hash.values[hash.index], @@ -357,7 +357,7 @@ class RSA { static Future signPKCS1v15Bytes( Uint8List message, Hash hash, String privateKey) async { - var requestBuilder = model.SignPKCS1v15BytesRequestObjectBuilder( + var requestBuilder = model.SignPkcs1v15BytesRequestObjectBuilder( message: message, privateKey: privateKey, hash: model.Hash.values[hash.index], @@ -368,7 +368,7 @@ class RSA { static Future verifyPSS(String signature, String message, Hash hash, SaltLength saltLength, String publicKey) async { - var requestBuilder = model.VerifyPSSRequestObjectBuilder( + var requestBuilder = model.VerifyPssrequestObjectBuilder( message: message, signature: signature, publicKey: publicKey, @@ -381,7 +381,7 @@ class RSA { static Future verifyPSSBytes(Uint8List signature, Uint8List message, Hash hash, SaltLength saltLength, String publicKey) async { - var requestBuilder = model.VerifyPSSBytesRequestObjectBuilder( + var requestBuilder = model.VerifyPssbytesRequestObjectBuilder( message: message, signature: signature, publicKey: publicKey, @@ -394,7 +394,7 @@ class RSA { static Future verifyPKCS1v15( String signature, String message, Hash hash, String publicKey) async { - var requestBuilder = model.VerifyPKCS1v15RequestObjectBuilder( + var requestBuilder = model.VerifyPkcs1v15RequestObjectBuilder( message: message, signature: signature, publicKey: publicKey, @@ -406,7 +406,7 @@ class RSA { static Future verifyPKCS1v15Bytes(Uint8List signature, Uint8List message, Hash hash, String publicKey) async { - var requestBuilder = model.VerifyPKCS1v15BytesRequestObjectBuilder( + var requestBuilder = model.VerifyPkcs1v15BytesRequestObjectBuilder( message: message, signature: signature, publicKey: publicKey, diff --git a/lib/model/bridge_model_generated.dart b/lib/model/bridge_model_generated.dart index c3a6c23..9f8f4f0 100644 --- a/lib/model/bridge_model_generated.dart +++ b/lib/model/bridge_model_generated.dart @@ -41,38 +41,38 @@ class _SaltLengthReader extends fb.Reader { const _SaltLengthReader(); @override - int get size => 1; + int get size => 4; @override SaltLength read(fb.BufferContext bc, int offset) => SaltLength.fromValue(const fb.Int32Reader().read(bc, offset)); } -class PEMCipher { +class Pemcipher { final int value; - const PEMCipher._(this.value); + const Pemcipher._(this.value); - factory PEMCipher.fromValue(int value) { + factory Pemcipher.fromValue(int value) { final result = values[value]; if (result == null) { - throw StateError('Invalid value $value for bit flag enum PEMCipher'); + throw StateError('Invalid value $value for bit flag enum Pemcipher'); } return result; } - static PEMCipher? _createOrNull(int? value) => - value == null ? null : PEMCipher.fromValue(value); + static Pemcipher? _createOrNull(int? value) => + value == null ? null : Pemcipher.fromValue(value); static const int minValue = 0; static const int maxValue = 4; static bool containsValue(int value) => values.containsKey(value); - static const PEMCipher DES = PEMCipher._(0); - static const PEMCipher D3DES = PEMCipher._(1); - static const PEMCipher AES128 = PEMCipher._(2); - static const PEMCipher AES192 = PEMCipher._(3); - static const PEMCipher AES256 = PEMCipher._(4); - static const Map values = { + static const Pemcipher DES = Pemcipher._(0); + static const Pemcipher D3DES = Pemcipher._(1); + static const Pemcipher AES128 = Pemcipher._(2); + static const Pemcipher AES192 = Pemcipher._(3); + static const Pemcipher AES256 = Pemcipher._(4); + static const Map values = { 0: DES, 1: D3DES, 2: AES128, @@ -80,23 +80,23 @@ class PEMCipher { 4: AES256 }; - static const fb.Reader reader = _PEMCipherReader(); + static const fb.Reader reader = _PemcipherReader(); @override String toString() { - return 'PEMCipher{value: $value}'; + return 'Pemcipher{value: $value}'; } } -class _PEMCipherReader extends fb.Reader { - const _PEMCipherReader(); +class _PemcipherReader extends fb.Reader { + const _PemcipherReader(); @override - int get size => 1; + int get size => 4; @override - PEMCipher read(fb.BufferContext bc, int offset) => - PEMCipher.fromValue(const fb.Int32Reader().read(bc, offset)); + Pemcipher read(fb.BufferContext bc, int offset) => + Pemcipher.fromValue(const fb.Int32Reader().read(bc, offset)); } class Hash { @@ -145,21 +145,21 @@ class _HashReader extends fb.Reader { const _HashReader(); @override - int get size => 1; + int get size => 4; @override Hash read(fb.BufferContext bc, int offset) => Hash.fromValue(const fb.Int32Reader().read(bc, offset)); } -class ConvertJWTRequest { - ConvertJWTRequest._(this._bc, this._bcOffset); - factory ConvertJWTRequest(List bytes) { +class ConvertJwtrequest { + ConvertJwtrequest._(this._bc, this._bcOffset); + factory ConvertJwtrequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = _ConvertJWTRequestReader(); + static const fb.Reader reader = _ConvertJwtrequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -171,20 +171,20 @@ class ConvertJWTRequest { @override String toString() { - return 'ConvertJWTRequest{data: $data, keyId: $keyId}'; + return 'ConvertJwtrequest{data: ${data}, keyId: ${keyId}}'; } } -class _ConvertJWTRequestReader extends fb.TableReader { - const _ConvertJWTRequestReader(); +class _ConvertJwtrequestReader extends fb.TableReader { + const _ConvertJwtrequestReader(); @override - ConvertJWTRequest createObject(fb.BufferContext bc, int offset) => - ConvertJWTRequest._(bc, offset); + ConvertJwtrequest createObject(fb.BufferContext bc, int offset) => + ConvertJwtrequest._(bc, offset); } -class ConvertJWTRequestBuilder { - ConvertJWTRequestBuilder(this.fbBuilder); +class ConvertJwtrequestBuilder { + ConvertJwtrequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -207,11 +207,11 @@ class ConvertJWTRequestBuilder { } } -class ConvertJWTRequestObjectBuilder extends fb.ObjectBuilder { +class ConvertJwtrequestObjectBuilder extends fb.ObjectBuilder { final String? _data; final String? _keyId; - ConvertJWTRequestObjectBuilder({ + ConvertJwtrequestObjectBuilder({ String? data, String? keyId, }) : _data = data, @@ -261,7 +261,7 @@ class ConvertKeyPairRequest { @override String toString() { - return 'ConvertKeyPairRequest{privateKey: $privateKey, certificate: $certificate, password: $password}'; + return 'ConvertKeyPairRequest{privateKey: ${privateKey}, certificate: ${certificate}, password: ${password}}'; } } @@ -341,15 +341,15 @@ class ConvertKeyPairRequestObjectBuilder extends fb.ObjectBuilder { } } -class ConvertPKCS12Request { - ConvertPKCS12Request._(this._bc, this._bcOffset); - factory ConvertPKCS12Request(List bytes) { +class ConvertPkcs12Request { + ConvertPkcs12Request._(this._bc, this._bcOffset); + factory ConvertPkcs12Request(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _ConvertPKCS12RequestReader(); + static const fb.Reader reader = + _ConvertPkcs12RequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -361,20 +361,20 @@ class ConvertPKCS12Request { @override String toString() { - return 'ConvertPKCS12Request{pkcs12: $pkcs12, password: $password}'; + return 'ConvertPkcs12Request{pkcs12: ${pkcs12}, password: ${password}}'; } } -class _ConvertPKCS12RequestReader extends fb.TableReader { - const _ConvertPKCS12RequestReader(); +class _ConvertPkcs12RequestReader extends fb.TableReader { + const _ConvertPkcs12RequestReader(); @override - ConvertPKCS12Request createObject(fb.BufferContext bc, int offset) => - ConvertPKCS12Request._(bc, offset); + ConvertPkcs12Request createObject(fb.BufferContext bc, int offset) => + ConvertPkcs12Request._(bc, offset); } -class ConvertPKCS12RequestBuilder { - ConvertPKCS12RequestBuilder(this.fbBuilder); +class ConvertPkcs12RequestBuilder { + ConvertPkcs12RequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -397,11 +397,11 @@ class ConvertPKCS12RequestBuilder { } } -class ConvertPKCS12RequestObjectBuilder extends fb.ObjectBuilder { +class ConvertPkcs12RequestObjectBuilder extends fb.ObjectBuilder { final String? _pkcs12; final String? _password; - ConvertPKCS12RequestObjectBuilder({ + ConvertPkcs12RequestObjectBuilder({ String? pkcs12, String? password, }) : _pkcs12 = pkcs12, @@ -447,7 +447,7 @@ class ConvertPrivateKeyRequest { @override String toString() { - return 'ConvertPrivateKeyRequest{privateKey: $privateKey}'; + return 'ConvertPrivateKeyRequest{privateKey: ${privateKey}}'; } } @@ -523,7 +523,7 @@ class ConvertPublicKeyRequest { @override String toString() { - return 'ConvertPublicKeyRequest{publicKey: $publicKey}'; + return 'ConvertPublicKeyRequest{publicKey: ${publicKey}}'; } } @@ -581,15 +581,15 @@ class ConvertPublicKeyRequestObjectBuilder extends fb.ObjectBuilder { } } -class DecryptOAEPRequest { - DecryptOAEPRequest._(this._bc, this._bcOffset); - factory DecryptOAEPRequest(List bytes) { +class DecryptOaeprequest { + DecryptOaeprequest._(this._bc, this._bcOffset); + factory DecryptOaeprequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _DecryptOAEPRequestReader(); + static const fb.Reader reader = + _DecryptOaeprequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -605,20 +605,20 @@ class DecryptOAEPRequest { @override String toString() { - return 'DecryptOAEPRequest{ciphertext: $ciphertext, label: $label, hash: $hash, privateKey: $privateKey}'; + return 'DecryptOaeprequest{ciphertext: ${ciphertext}, label: ${label}, hash: ${hash}, privateKey: ${privateKey}}'; } } -class _DecryptOAEPRequestReader extends fb.TableReader { - const _DecryptOAEPRequestReader(); +class _DecryptOaeprequestReader extends fb.TableReader { + const _DecryptOaeprequestReader(); @override - DecryptOAEPRequest createObject(fb.BufferContext bc, int offset) => - DecryptOAEPRequest._(bc, offset); + DecryptOaeprequest createObject(fb.BufferContext bc, int offset) => + DecryptOaeprequest._(bc, offset); } -class DecryptOAEPRequestBuilder { - DecryptOAEPRequestBuilder(this.fbBuilder); +class DecryptOaeprequestBuilder { + DecryptOaeprequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -651,13 +651,13 @@ class DecryptOAEPRequestBuilder { } } -class DecryptOAEPRequestObjectBuilder extends fb.ObjectBuilder { +class DecryptOaeprequestObjectBuilder extends fb.ObjectBuilder { final String? _ciphertext; final String? _label; final Hash? _hash; final String? _privateKey; - DecryptOAEPRequestObjectBuilder({ + DecryptOaeprequestObjectBuilder({ String? ciphertext, String? label, Hash? hash, @@ -693,15 +693,15 @@ class DecryptOAEPRequestObjectBuilder extends fb.ObjectBuilder { } } -class DecryptOAEPBytesRequest { - DecryptOAEPBytesRequest._(this._bc, this._bcOffset); - factory DecryptOAEPBytesRequest(List bytes) { +class DecryptOaepbytesRequest { + DecryptOaepbytesRequest._(this._bc, this._bcOffset); + factory DecryptOaepbytesRequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _DecryptOAEPBytesRequestReader(); + static const fb.Reader reader = + _DecryptOaepbytesRequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -717,21 +717,21 @@ class DecryptOAEPBytesRequest { @override String toString() { - return 'DecryptOAEPBytesRequest{ciphertext: $ciphertext, label: $label, hash: $hash, privateKey: $privateKey}'; + return 'DecryptOaepbytesRequest{ciphertext: ${ciphertext}, label: ${label}, hash: ${hash}, privateKey: ${privateKey}}'; } } -class _DecryptOAEPBytesRequestReader - extends fb.TableReader { - const _DecryptOAEPBytesRequestReader(); +class _DecryptOaepbytesRequestReader + extends fb.TableReader { + const _DecryptOaepbytesRequestReader(); @override - DecryptOAEPBytesRequest createObject(fb.BufferContext bc, int offset) => - DecryptOAEPBytesRequest._(bc, offset); + DecryptOaepbytesRequest createObject(fb.BufferContext bc, int offset) => + DecryptOaepbytesRequest._(bc, offset); } -class DecryptOAEPBytesRequestBuilder { - DecryptOAEPBytesRequestBuilder(this.fbBuilder); +class DecryptOaepbytesRequestBuilder { + DecryptOaepbytesRequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -764,13 +764,13 @@ class DecryptOAEPBytesRequestBuilder { } } -class DecryptOAEPBytesRequestObjectBuilder extends fb.ObjectBuilder { +class DecryptOaepbytesRequestObjectBuilder extends fb.ObjectBuilder { final List? _ciphertext; final String? _label; final Hash? _hash; final String? _privateKey; - DecryptOAEPBytesRequestObjectBuilder({ + DecryptOaepbytesRequestObjectBuilder({ List? ciphertext, String? label, Hash? hash, @@ -806,15 +806,15 @@ class DecryptOAEPBytesRequestObjectBuilder extends fb.ObjectBuilder { } } -class DecryptPKCS1v15Request { - DecryptPKCS1v15Request._(this._bc, this._bcOffset); - factory DecryptPKCS1v15Request(List bytes) { +class DecryptPkcs1v15Request { + DecryptPkcs1v15Request._(this._bc, this._bcOffset); + factory DecryptPkcs1v15Request(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _DecryptPKCS1v15RequestReader(); + static const fb.Reader reader = + _DecryptPkcs1v15RequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -826,21 +826,21 @@ class DecryptPKCS1v15Request { @override String toString() { - return 'DecryptPKCS1v15Request{ciphertext: $ciphertext, privateKey: $privateKey}'; + return 'DecryptPkcs1v15Request{ciphertext: ${ciphertext}, privateKey: ${privateKey}}'; } } -class _DecryptPKCS1v15RequestReader - extends fb.TableReader { - const _DecryptPKCS1v15RequestReader(); +class _DecryptPkcs1v15RequestReader + extends fb.TableReader { + const _DecryptPkcs1v15RequestReader(); @override - DecryptPKCS1v15Request createObject(fb.BufferContext bc, int offset) => - DecryptPKCS1v15Request._(bc, offset); + DecryptPkcs1v15Request createObject(fb.BufferContext bc, int offset) => + DecryptPkcs1v15Request._(bc, offset); } -class DecryptPKCS1v15RequestBuilder { - DecryptPKCS1v15RequestBuilder(this.fbBuilder); +class DecryptPkcs1v15RequestBuilder { + DecryptPkcs1v15RequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -863,11 +863,11 @@ class DecryptPKCS1v15RequestBuilder { } } -class DecryptPKCS1v15RequestObjectBuilder extends fb.ObjectBuilder { +class DecryptPkcs1v15RequestObjectBuilder extends fb.ObjectBuilder { final String? _ciphertext; final String? _privateKey; - DecryptPKCS1v15RequestObjectBuilder({ + DecryptPkcs1v15RequestObjectBuilder({ String? ciphertext, String? privateKey, }) : _ciphertext = ciphertext, @@ -895,15 +895,15 @@ class DecryptPKCS1v15RequestObjectBuilder extends fb.ObjectBuilder { } } -class DecryptPKCS1v15BytesRequest { - DecryptPKCS1v15BytesRequest._(this._bc, this._bcOffset); - factory DecryptPKCS1v15BytesRequest(List bytes) { +class DecryptPkcs1v15BytesRequest { + DecryptPkcs1v15BytesRequest._(this._bc, this._bcOffset); + factory DecryptPkcs1v15BytesRequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _DecryptPKCS1v15BytesRequestReader(); + static const fb.Reader reader = + _DecryptPkcs1v15BytesRequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -915,21 +915,21 @@ class DecryptPKCS1v15BytesRequest { @override String toString() { - return 'DecryptPKCS1v15BytesRequest{ciphertext: $ciphertext, privateKey: $privateKey}'; + return 'DecryptPkcs1v15BytesRequest{ciphertext: ${ciphertext}, privateKey: ${privateKey}}'; } } -class _DecryptPKCS1v15BytesRequestReader - extends fb.TableReader { - const _DecryptPKCS1v15BytesRequestReader(); +class _DecryptPkcs1v15BytesRequestReader + extends fb.TableReader { + const _DecryptPkcs1v15BytesRequestReader(); @override - DecryptPKCS1v15BytesRequest createObject(fb.BufferContext bc, int offset) => - DecryptPKCS1v15BytesRequest._(bc, offset); + DecryptPkcs1v15BytesRequest createObject(fb.BufferContext bc, int offset) => + DecryptPkcs1v15BytesRequest._(bc, offset); } -class DecryptPKCS1v15BytesRequestBuilder { - DecryptPKCS1v15BytesRequestBuilder(this.fbBuilder); +class DecryptPkcs1v15BytesRequestBuilder { + DecryptPkcs1v15BytesRequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -952,11 +952,11 @@ class DecryptPKCS1v15BytesRequestBuilder { } } -class DecryptPKCS1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { +class DecryptPkcs1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { final List? _ciphertext; final String? _privateKey; - DecryptPKCS1v15BytesRequestObjectBuilder({ + DecryptPkcs1v15BytesRequestObjectBuilder({ List? ciphertext, String? privateKey, }) : _ciphertext = ciphertext, @@ -1004,7 +1004,7 @@ class DecryptPrivateKeyRequest { @override String toString() { - return 'DecryptPrivateKeyRequest{privateKeyEncrypted: $privateKeyEncrypted, password: $password}'; + return 'DecryptPrivateKeyRequest{privateKeyEncrypted: ${privateKeyEncrypted}, password: ${password}}'; } } @@ -1074,15 +1074,15 @@ class DecryptPrivateKeyRequestObjectBuilder extends fb.ObjectBuilder { } } -class EncryptOAEPRequest { - EncryptOAEPRequest._(this._bc, this._bcOffset); - factory EncryptOAEPRequest(List bytes) { +class EncryptOaeprequest { + EncryptOaeprequest._(this._bc, this._bcOffset); + factory EncryptOaeprequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _EncryptOAEPRequestReader(); + static const fb.Reader reader = + _EncryptOaeprequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -1098,20 +1098,20 @@ class EncryptOAEPRequest { @override String toString() { - return 'EncryptOAEPRequest{message: $message, label: $label, hash: $hash, publicKey: $publicKey}'; + return 'EncryptOaeprequest{message: ${message}, label: ${label}, hash: ${hash}, publicKey: ${publicKey}}'; } } -class _EncryptOAEPRequestReader extends fb.TableReader { - const _EncryptOAEPRequestReader(); +class _EncryptOaeprequestReader extends fb.TableReader { + const _EncryptOaeprequestReader(); @override - EncryptOAEPRequest createObject(fb.BufferContext bc, int offset) => - EncryptOAEPRequest._(bc, offset); + EncryptOaeprequest createObject(fb.BufferContext bc, int offset) => + EncryptOaeprequest._(bc, offset); } -class EncryptOAEPRequestBuilder { - EncryptOAEPRequestBuilder(this.fbBuilder); +class EncryptOaeprequestBuilder { + EncryptOaeprequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -1144,13 +1144,13 @@ class EncryptOAEPRequestBuilder { } } -class EncryptOAEPRequestObjectBuilder extends fb.ObjectBuilder { +class EncryptOaeprequestObjectBuilder extends fb.ObjectBuilder { final String? _message; final String? _label; final Hash? _hash; final String? _publicKey; - EncryptOAEPRequestObjectBuilder({ + EncryptOaeprequestObjectBuilder({ String? message, String? label, Hash? hash, @@ -1186,15 +1186,15 @@ class EncryptOAEPRequestObjectBuilder extends fb.ObjectBuilder { } } -class EncryptOAEPBytesRequest { - EncryptOAEPBytesRequest._(this._bc, this._bcOffset); - factory EncryptOAEPBytesRequest(List bytes) { +class EncryptOaepbytesRequest { + EncryptOaepbytesRequest._(this._bc, this._bcOffset); + factory EncryptOaepbytesRequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _EncryptOAEPBytesRequestReader(); + static const fb.Reader reader = + _EncryptOaepbytesRequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -1210,21 +1210,21 @@ class EncryptOAEPBytesRequest { @override String toString() { - return 'EncryptOAEPBytesRequest{message: $message, label: $label, hash: $hash, publicKey: $publicKey}'; + return 'EncryptOaepbytesRequest{message: ${message}, label: ${label}, hash: ${hash}, publicKey: ${publicKey}}'; } } -class _EncryptOAEPBytesRequestReader - extends fb.TableReader { - const _EncryptOAEPBytesRequestReader(); +class _EncryptOaepbytesRequestReader + extends fb.TableReader { + const _EncryptOaepbytesRequestReader(); @override - EncryptOAEPBytesRequest createObject(fb.BufferContext bc, int offset) => - EncryptOAEPBytesRequest._(bc, offset); + EncryptOaepbytesRequest createObject(fb.BufferContext bc, int offset) => + EncryptOaepbytesRequest._(bc, offset); } -class EncryptOAEPBytesRequestBuilder { - EncryptOAEPBytesRequestBuilder(this.fbBuilder); +class EncryptOaepbytesRequestBuilder { + EncryptOaepbytesRequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -1257,13 +1257,13 @@ class EncryptOAEPBytesRequestBuilder { } } -class EncryptOAEPBytesRequestObjectBuilder extends fb.ObjectBuilder { +class EncryptOaepbytesRequestObjectBuilder extends fb.ObjectBuilder { final List? _message; final String? _label; final Hash? _hash; final String? _publicKey; - EncryptOAEPBytesRequestObjectBuilder({ + EncryptOaepbytesRequestObjectBuilder({ List? message, String? label, Hash? hash, @@ -1299,15 +1299,15 @@ class EncryptOAEPBytesRequestObjectBuilder extends fb.ObjectBuilder { } } -class EncryptPKCS1v15Request { - EncryptPKCS1v15Request._(this._bc, this._bcOffset); - factory EncryptPKCS1v15Request(List bytes) { +class EncryptPkcs1v15Request { + EncryptPkcs1v15Request._(this._bc, this._bcOffset); + factory EncryptPkcs1v15Request(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _EncryptPKCS1v15RequestReader(); + static const fb.Reader reader = + _EncryptPkcs1v15RequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -1319,21 +1319,21 @@ class EncryptPKCS1v15Request { @override String toString() { - return 'EncryptPKCS1v15Request{message: $message, publicKey: $publicKey}'; + return 'EncryptPkcs1v15Request{message: ${message}, publicKey: ${publicKey}}'; } } -class _EncryptPKCS1v15RequestReader - extends fb.TableReader { - const _EncryptPKCS1v15RequestReader(); +class _EncryptPkcs1v15RequestReader + extends fb.TableReader { + const _EncryptPkcs1v15RequestReader(); @override - EncryptPKCS1v15Request createObject(fb.BufferContext bc, int offset) => - EncryptPKCS1v15Request._(bc, offset); + EncryptPkcs1v15Request createObject(fb.BufferContext bc, int offset) => + EncryptPkcs1v15Request._(bc, offset); } -class EncryptPKCS1v15RequestBuilder { - EncryptPKCS1v15RequestBuilder(this.fbBuilder); +class EncryptPkcs1v15RequestBuilder { + EncryptPkcs1v15RequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -1356,11 +1356,11 @@ class EncryptPKCS1v15RequestBuilder { } } -class EncryptPKCS1v15RequestObjectBuilder extends fb.ObjectBuilder { +class EncryptPkcs1v15RequestObjectBuilder extends fb.ObjectBuilder { final String? _message; final String? _publicKey; - EncryptPKCS1v15RequestObjectBuilder({ + EncryptPkcs1v15RequestObjectBuilder({ String? message, String? publicKey, }) : _message = message, @@ -1388,15 +1388,15 @@ class EncryptPKCS1v15RequestObjectBuilder extends fb.ObjectBuilder { } } -class EncryptPKCS1v15BytesRequest { - EncryptPKCS1v15BytesRequest._(this._bc, this._bcOffset); - factory EncryptPKCS1v15BytesRequest(List bytes) { +class EncryptPkcs1v15BytesRequest { + EncryptPkcs1v15BytesRequest._(this._bc, this._bcOffset); + factory EncryptPkcs1v15BytesRequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _EncryptPKCS1v15BytesRequestReader(); + static const fb.Reader reader = + _EncryptPkcs1v15BytesRequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -1408,21 +1408,21 @@ class EncryptPKCS1v15BytesRequest { @override String toString() { - return 'EncryptPKCS1v15BytesRequest{message: $message, publicKey: $publicKey}'; + return 'EncryptPkcs1v15BytesRequest{message: ${message}, publicKey: ${publicKey}}'; } } -class _EncryptPKCS1v15BytesRequestReader - extends fb.TableReader { - const _EncryptPKCS1v15BytesRequestReader(); +class _EncryptPkcs1v15BytesRequestReader + extends fb.TableReader { + const _EncryptPkcs1v15BytesRequestReader(); @override - EncryptPKCS1v15BytesRequest createObject(fb.BufferContext bc, int offset) => - EncryptPKCS1v15BytesRequest._(bc, offset); + EncryptPkcs1v15BytesRequest createObject(fb.BufferContext bc, int offset) => + EncryptPkcs1v15BytesRequest._(bc, offset); } -class EncryptPKCS1v15BytesRequestBuilder { - EncryptPKCS1v15BytesRequestBuilder(this.fbBuilder); +class EncryptPkcs1v15BytesRequestBuilder { + EncryptPkcs1v15BytesRequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -1445,11 +1445,11 @@ class EncryptPKCS1v15BytesRequestBuilder { } } -class EncryptPKCS1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { +class EncryptPkcs1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { final List? _message; final String? _publicKey; - EncryptPKCS1v15BytesRequestObjectBuilder({ + EncryptPkcs1v15BytesRequestObjectBuilder({ List? message, String? publicKey, }) : _message = message, @@ -1494,12 +1494,12 @@ class EncryptPrivateKeyRequest { const fb.StringReader().vTableGetNullable(_bc, _bcOffset, 4); String? get password => const fb.StringReader().vTableGetNullable(_bc, _bcOffset, 6); - PEMCipher get cipher => PEMCipher.fromValue( + Pemcipher get cipher => Pemcipher.fromValue( const fb.Int32Reader().vTableGet(_bc, _bcOffset, 8, 0)); @override String toString() { - return 'EncryptPrivateKeyRequest{privateKey: $privateKey, password: $password, cipher: $cipher}'; + return 'EncryptPrivateKeyRequest{privateKey: ${privateKey}, password: ${password}, cipher: ${cipher}}'; } } @@ -1531,7 +1531,7 @@ class EncryptPrivateKeyRequestBuilder { return fbBuilder.offset; } - int addCipher(PEMCipher? cipher) { + int addCipher(Pemcipher? cipher) { fbBuilder.addInt32(2, cipher?.value); return fbBuilder.offset; } @@ -1544,12 +1544,12 @@ class EncryptPrivateKeyRequestBuilder { class EncryptPrivateKeyRequestObjectBuilder extends fb.ObjectBuilder { final String? _privateKey; final String? _password; - final PEMCipher? _cipher; + final Pemcipher? _cipher; EncryptPrivateKeyRequestObjectBuilder({ String? privateKey, String? password, - PEMCipher? cipher, + Pemcipher? cipher, }) : _privateKey = privateKey, _password = password, _cipher = cipher; @@ -1593,7 +1593,7 @@ class GenerateRequest { @override String toString() { - return 'GenerateRequest{nBits: $nBits}'; + return 'GenerateRequest{nBits: ${nBits}}'; } } @@ -1667,7 +1667,7 @@ class HashRequest { @override String toString() { - return 'HashRequest{message: $message, hash: $hash}'; + return 'HashRequest{message: ${message}, hash: ${hash}}'; } } @@ -1750,7 +1750,7 @@ class Base64Request { @override String toString() { - return 'Base64Request{message: $message}'; + return 'Base64Request{message: ${message}}'; } } @@ -1825,7 +1825,7 @@ class MetadataPrivateKeyRequest { @override String toString() { - return 'MetadataPrivateKeyRequest{privateKey: $privateKey}'; + return 'MetadataPrivateKeyRequest{privateKey: ${privateKey}}'; } } @@ -1901,7 +1901,7 @@ class MetadataPublicKeyRequest { @override String toString() { - return 'MetadataPublicKeyRequest{publicKey: $publicKey}'; + return 'MetadataPublicKeyRequest{publicKey: ${publicKey}}'; } } @@ -1959,15 +1959,15 @@ class MetadataPublicKeyRequestObjectBuilder extends fb.ObjectBuilder { } } -class SignPKCS1v15Request { - SignPKCS1v15Request._(this._bc, this._bcOffset); - factory SignPKCS1v15Request(List bytes) { +class SignPkcs1v15Request { + SignPkcs1v15Request._(this._bc, this._bcOffset); + factory SignPkcs1v15Request(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _SignPKCS1v15RequestReader(); + static const fb.Reader reader = + _SignPkcs1v15RequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -1981,20 +1981,20 @@ class SignPKCS1v15Request { @override String toString() { - return 'SignPKCS1v15Request{message: $message, hash: $hash, privateKey: $privateKey}'; + return 'SignPkcs1v15Request{message: ${message}, hash: ${hash}, privateKey: ${privateKey}}'; } } -class _SignPKCS1v15RequestReader extends fb.TableReader { - const _SignPKCS1v15RequestReader(); +class _SignPkcs1v15RequestReader extends fb.TableReader { + const _SignPkcs1v15RequestReader(); @override - SignPKCS1v15Request createObject(fb.BufferContext bc, int offset) => - SignPKCS1v15Request._(bc, offset); + SignPkcs1v15Request createObject(fb.BufferContext bc, int offset) => + SignPkcs1v15Request._(bc, offset); } -class SignPKCS1v15RequestBuilder { - SignPKCS1v15RequestBuilder(this.fbBuilder); +class SignPkcs1v15RequestBuilder { + SignPkcs1v15RequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -2022,12 +2022,12 @@ class SignPKCS1v15RequestBuilder { } } -class SignPKCS1v15RequestObjectBuilder extends fb.ObjectBuilder { +class SignPkcs1v15RequestObjectBuilder extends fb.ObjectBuilder { final String? _message; final Hash? _hash; final String? _privateKey; - SignPKCS1v15RequestObjectBuilder({ + SignPkcs1v15RequestObjectBuilder({ String? message, Hash? hash, String? privateKey, @@ -2058,15 +2058,15 @@ class SignPKCS1v15RequestObjectBuilder extends fb.ObjectBuilder { } } -class SignPKCS1v15BytesRequest { - SignPKCS1v15BytesRequest._(this._bc, this._bcOffset); - factory SignPKCS1v15BytesRequest(List bytes) { +class SignPkcs1v15BytesRequest { + SignPkcs1v15BytesRequest._(this._bc, this._bcOffset); + factory SignPkcs1v15BytesRequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _SignPKCS1v15BytesRequestReader(); + static const fb.Reader reader = + _SignPkcs1v15BytesRequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -2080,21 +2080,21 @@ class SignPKCS1v15BytesRequest { @override String toString() { - return 'SignPKCS1v15BytesRequest{message: $message, hash: $hash, privateKey: $privateKey}'; + return 'SignPkcs1v15BytesRequest{message: ${message}, hash: ${hash}, privateKey: ${privateKey}}'; } } -class _SignPKCS1v15BytesRequestReader - extends fb.TableReader { - const _SignPKCS1v15BytesRequestReader(); +class _SignPkcs1v15BytesRequestReader + extends fb.TableReader { + const _SignPkcs1v15BytesRequestReader(); @override - SignPKCS1v15BytesRequest createObject(fb.BufferContext bc, int offset) => - SignPKCS1v15BytesRequest._(bc, offset); + SignPkcs1v15BytesRequest createObject(fb.BufferContext bc, int offset) => + SignPkcs1v15BytesRequest._(bc, offset); } -class SignPKCS1v15BytesRequestBuilder { - SignPKCS1v15BytesRequestBuilder(this.fbBuilder); +class SignPkcs1v15BytesRequestBuilder { + SignPkcs1v15BytesRequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -2122,12 +2122,12 @@ class SignPKCS1v15BytesRequestBuilder { } } -class SignPKCS1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { +class SignPkcs1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { final List? _message; final Hash? _hash; final String? _privateKey; - SignPKCS1v15BytesRequestObjectBuilder({ + SignPkcs1v15BytesRequestObjectBuilder({ List? message, Hash? hash, String? privateKey, @@ -2158,14 +2158,14 @@ class SignPKCS1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { } } -class SignPSSRequest { - SignPSSRequest._(this._bc, this._bcOffset); - factory SignPSSRequest(List bytes) { +class SignPssrequest { + SignPssrequest._(this._bc, this._bcOffset); + factory SignPssrequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = _SignPSSRequestReader(); + static const fb.Reader reader = _SignPssrequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -2181,20 +2181,20 @@ class SignPSSRequest { @override String toString() { - return 'SignPSSRequest{message: $message, hash: $hash, saltLength: $saltLength, privateKey: $privateKey}'; + return 'SignPssrequest{message: ${message}, hash: ${hash}, saltLength: ${saltLength}, privateKey: ${privateKey}}'; } } -class _SignPSSRequestReader extends fb.TableReader { - const _SignPSSRequestReader(); +class _SignPssrequestReader extends fb.TableReader { + const _SignPssrequestReader(); @override - SignPSSRequest createObject(fb.BufferContext bc, int offset) => - SignPSSRequest._(bc, offset); + SignPssrequest createObject(fb.BufferContext bc, int offset) => + SignPssrequest._(bc, offset); } -class SignPSSRequestBuilder { - SignPSSRequestBuilder(this.fbBuilder); +class SignPssrequestBuilder { + SignPssrequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -2227,13 +2227,13 @@ class SignPSSRequestBuilder { } } -class SignPSSRequestObjectBuilder extends fb.ObjectBuilder { +class SignPssrequestObjectBuilder extends fb.ObjectBuilder { final String? _message; final Hash? _hash; final SaltLength? _saltLength; final String? _privateKey; - SignPSSRequestObjectBuilder({ + SignPssrequestObjectBuilder({ String? message, Hash? hash, SaltLength? saltLength, @@ -2267,15 +2267,15 @@ class SignPSSRequestObjectBuilder extends fb.ObjectBuilder { } } -class SignPSSBytesRequest { - SignPSSBytesRequest._(this._bc, this._bcOffset); - factory SignPSSBytesRequest(List bytes) { +class SignPssbytesRequest { + SignPssbytesRequest._(this._bc, this._bcOffset); + factory SignPssbytesRequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _SignPSSBytesRequestReader(); + static const fb.Reader reader = + _SignPssbytesRequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -2291,20 +2291,20 @@ class SignPSSBytesRequest { @override String toString() { - return 'SignPSSBytesRequest{message: $message, hash: $hash, saltLength: $saltLength, privateKey: $privateKey}'; + return 'SignPssbytesRequest{message: ${message}, hash: ${hash}, saltLength: ${saltLength}, privateKey: ${privateKey}}'; } } -class _SignPSSBytesRequestReader extends fb.TableReader { - const _SignPSSBytesRequestReader(); +class _SignPssbytesRequestReader extends fb.TableReader { + const _SignPssbytesRequestReader(); @override - SignPSSBytesRequest createObject(fb.BufferContext bc, int offset) => - SignPSSBytesRequest._(bc, offset); + SignPssbytesRequest createObject(fb.BufferContext bc, int offset) => + SignPssbytesRequest._(bc, offset); } -class SignPSSBytesRequestBuilder { - SignPSSBytesRequestBuilder(this.fbBuilder); +class SignPssbytesRequestBuilder { + SignPssbytesRequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -2337,13 +2337,13 @@ class SignPSSBytesRequestBuilder { } } -class SignPSSBytesRequestObjectBuilder extends fb.ObjectBuilder { +class SignPssbytesRequestObjectBuilder extends fb.ObjectBuilder { final List? _message; final Hash? _hash; final SaltLength? _saltLength; final String? _privateKey; - SignPSSBytesRequestObjectBuilder({ + SignPssbytesRequestObjectBuilder({ List? message, Hash? hash, SaltLength? saltLength, @@ -2377,15 +2377,15 @@ class SignPSSBytesRequestObjectBuilder extends fb.ObjectBuilder { } } -class VerifyPKCS1v15Request { - VerifyPKCS1v15Request._(this._bc, this._bcOffset); - factory VerifyPKCS1v15Request(List bytes) { +class VerifyPkcs1v15Request { + VerifyPkcs1v15Request._(this._bc, this._bcOffset); + factory VerifyPkcs1v15Request(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _VerifyPKCS1v15RequestReader(); + static const fb.Reader reader = + _VerifyPkcs1v15RequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -2401,21 +2401,21 @@ class VerifyPKCS1v15Request { @override String toString() { - return 'VerifyPKCS1v15Request{signature: $signature, message: $message, hash: $hash, publicKey: $publicKey}'; + return 'VerifyPkcs1v15Request{signature: ${signature}, message: ${message}, hash: ${hash}, publicKey: ${publicKey}}'; } } -class _VerifyPKCS1v15RequestReader - extends fb.TableReader { - const _VerifyPKCS1v15RequestReader(); +class _VerifyPkcs1v15RequestReader + extends fb.TableReader { + const _VerifyPkcs1v15RequestReader(); @override - VerifyPKCS1v15Request createObject(fb.BufferContext bc, int offset) => - VerifyPKCS1v15Request._(bc, offset); + VerifyPkcs1v15Request createObject(fb.BufferContext bc, int offset) => + VerifyPkcs1v15Request._(bc, offset); } -class VerifyPKCS1v15RequestBuilder { - VerifyPKCS1v15RequestBuilder(this.fbBuilder); +class VerifyPkcs1v15RequestBuilder { + VerifyPkcs1v15RequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -2448,13 +2448,13 @@ class VerifyPKCS1v15RequestBuilder { } } -class VerifyPKCS1v15RequestObjectBuilder extends fb.ObjectBuilder { +class VerifyPkcs1v15RequestObjectBuilder extends fb.ObjectBuilder { final String? _signature; final String? _message; final Hash? _hash; final String? _publicKey; - VerifyPKCS1v15RequestObjectBuilder({ + VerifyPkcs1v15RequestObjectBuilder({ String? signature, String? message, Hash? hash, @@ -2490,15 +2490,15 @@ class VerifyPKCS1v15RequestObjectBuilder extends fb.ObjectBuilder { } } -class VerifyPKCS1v15BytesRequest { - VerifyPKCS1v15BytesRequest._(this._bc, this._bcOffset); - factory VerifyPKCS1v15BytesRequest(List bytes) { +class VerifyPkcs1v15BytesRequest { + VerifyPkcs1v15BytesRequest._(this._bc, this._bcOffset); + factory VerifyPkcs1v15BytesRequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _VerifyPKCS1v15BytesRequestReader(); + static const fb.Reader reader = + _VerifyPkcs1v15BytesRequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -2514,21 +2514,21 @@ class VerifyPKCS1v15BytesRequest { @override String toString() { - return 'VerifyPKCS1v15BytesRequest{signature: $signature, message: $message, hash: $hash, publicKey: $publicKey}'; + return 'VerifyPkcs1v15BytesRequest{signature: ${signature}, message: ${message}, hash: ${hash}, publicKey: ${publicKey}}'; } } -class _VerifyPKCS1v15BytesRequestReader - extends fb.TableReader { - const _VerifyPKCS1v15BytesRequestReader(); +class _VerifyPkcs1v15BytesRequestReader + extends fb.TableReader { + const _VerifyPkcs1v15BytesRequestReader(); @override - VerifyPKCS1v15BytesRequest createObject(fb.BufferContext bc, int offset) => - VerifyPKCS1v15BytesRequest._(bc, offset); + VerifyPkcs1v15BytesRequest createObject(fb.BufferContext bc, int offset) => + VerifyPkcs1v15BytesRequest._(bc, offset); } -class VerifyPKCS1v15BytesRequestBuilder { - VerifyPKCS1v15BytesRequestBuilder(this.fbBuilder); +class VerifyPkcs1v15BytesRequestBuilder { + VerifyPkcs1v15BytesRequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -2561,13 +2561,13 @@ class VerifyPKCS1v15BytesRequestBuilder { } } -class VerifyPKCS1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { +class VerifyPkcs1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { final List? _signature; final List? _message; final Hash? _hash; final String? _publicKey; - VerifyPKCS1v15BytesRequestObjectBuilder({ + VerifyPkcs1v15BytesRequestObjectBuilder({ List? signature, List? message, Hash? hash, @@ -2603,14 +2603,14 @@ class VerifyPKCS1v15BytesRequestObjectBuilder extends fb.ObjectBuilder { } } -class VerifyPSSRequest { - VerifyPSSRequest._(this._bc, this._bcOffset); - factory VerifyPSSRequest(List bytes) { +class VerifyPssrequest { + VerifyPssrequest._(this._bc, this._bcOffset); + factory VerifyPssrequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = _VerifyPSSRequestReader(); + static const fb.Reader reader = _VerifyPssrequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -2628,20 +2628,20 @@ class VerifyPSSRequest { @override String toString() { - return 'VerifyPSSRequest{signature: $signature, message: $message, hash: $hash, saltLength: $saltLength, publicKey: $publicKey}'; + return 'VerifyPssrequest{signature: ${signature}, message: ${message}, hash: ${hash}, saltLength: ${saltLength}, publicKey: ${publicKey}}'; } } -class _VerifyPSSRequestReader extends fb.TableReader { - const _VerifyPSSRequestReader(); +class _VerifyPssrequestReader extends fb.TableReader { + const _VerifyPssrequestReader(); @override - VerifyPSSRequest createObject(fb.BufferContext bc, int offset) => - VerifyPSSRequest._(bc, offset); + VerifyPssrequest createObject(fb.BufferContext bc, int offset) => + VerifyPssrequest._(bc, offset); } -class VerifyPSSRequestBuilder { - VerifyPSSRequestBuilder(this.fbBuilder); +class VerifyPssrequestBuilder { + VerifyPssrequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -2679,14 +2679,14 @@ class VerifyPSSRequestBuilder { } } -class VerifyPSSRequestObjectBuilder extends fb.ObjectBuilder { +class VerifyPssrequestObjectBuilder extends fb.ObjectBuilder { final String? _signature; final String? _message; final Hash? _hash; final SaltLength? _saltLength; final String? _publicKey; - VerifyPSSRequestObjectBuilder({ + VerifyPssrequestObjectBuilder({ String? signature, String? message, Hash? hash, @@ -2725,15 +2725,15 @@ class VerifyPSSRequestObjectBuilder extends fb.ObjectBuilder { } } -class VerifyPSSBytesRequest { - VerifyPSSBytesRequest._(this._bc, this._bcOffset); - factory VerifyPSSBytesRequest(List bytes) { +class VerifyPssbytesRequest { + VerifyPssbytesRequest._(this._bc, this._bcOffset); + factory VerifyPssbytesRequest(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _VerifyPSSBytesRequestReader(); + static const fb.Reader reader = + _VerifyPssbytesRequestReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -2751,21 +2751,21 @@ class VerifyPSSBytesRequest { @override String toString() { - return 'VerifyPSSBytesRequest{signature: $signature, message: $message, hash: $hash, saltLength: $saltLength, publicKey: $publicKey}'; + return 'VerifyPssbytesRequest{signature: ${signature}, message: ${message}, hash: ${hash}, saltLength: ${saltLength}, publicKey: ${publicKey}}'; } } -class _VerifyPSSBytesRequestReader - extends fb.TableReader { - const _VerifyPSSBytesRequestReader(); +class _VerifyPssbytesRequestReader + extends fb.TableReader { + const _VerifyPssbytesRequestReader(); @override - VerifyPSSBytesRequest createObject(fb.BufferContext bc, int offset) => - VerifyPSSBytesRequest._(bc, offset); + VerifyPssbytesRequest createObject(fb.BufferContext bc, int offset) => + VerifyPssbytesRequest._(bc, offset); } -class VerifyPSSBytesRequestBuilder { - VerifyPSSBytesRequestBuilder(this.fbBuilder); +class VerifyPssbytesRequestBuilder { + VerifyPssbytesRequestBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -2803,14 +2803,14 @@ class VerifyPSSBytesRequestBuilder { } } -class VerifyPSSBytesRequestObjectBuilder extends fb.ObjectBuilder { +class VerifyPssbytesRequestObjectBuilder extends fb.ObjectBuilder { final List? _signature; final List? _message; final Hash? _hash; final SaltLength? _saltLength; final String? _publicKey; - VerifyPSSBytesRequestObjectBuilder({ + VerifyPssbytesRequestObjectBuilder({ List? signature, List? message, Hash? hash, @@ -2868,7 +2868,7 @@ class StringResponse { @override String toString() { - return 'StringResponse{output: $output, error: $error}'; + return 'StringResponse{output: ${output}, error: ${error}}'; } } @@ -2955,7 +2955,7 @@ class BytesResponse { @override String toString() { - return 'BytesResponse{output: $output, error: $error}'; + return 'BytesResponse{output: ${output}, error: ${error}}'; } } @@ -3041,7 +3041,7 @@ class BoolResponse { @override String toString() { - return 'BoolResponse{output: $output, error: $error}'; + return 'BoolResponse{output: ${output}, error: ${error}}'; } } @@ -3107,41 +3107,41 @@ class BoolResponseObjectBuilder extends fb.ObjectBuilder { } } -class PKCS12KeyPairResponse { - PKCS12KeyPairResponse._(this._bc, this._bcOffset); - factory PKCS12KeyPairResponse(List bytes) { +class Pkcs12KeyPairResponse { + Pkcs12KeyPairResponse._(this._bc, this._bcOffset); + factory Pkcs12KeyPairResponse(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = - _PKCS12KeyPairResponseReader(); + static const fb.Reader reader = + _Pkcs12KeyPairResponseReader(); final fb.BufferContext _bc; final int _bcOffset; - PKCS12KeyPair? get output => - PKCS12KeyPair.reader.vTableGetNullable(_bc, _bcOffset, 4); + Pkcs12KeyPair? get output => + Pkcs12KeyPair.reader.vTableGetNullable(_bc, _bcOffset, 4); String? get error => const fb.StringReader().vTableGetNullable(_bc, _bcOffset, 6); @override String toString() { - return 'PKCS12KeyPairResponse{output: $output, error: $error}'; + return 'Pkcs12KeyPairResponse{output: ${output}, error: ${error}}'; } } -class _PKCS12KeyPairResponseReader - extends fb.TableReader { - const _PKCS12KeyPairResponseReader(); +class _Pkcs12KeyPairResponseReader + extends fb.TableReader { + const _Pkcs12KeyPairResponseReader(); @override - PKCS12KeyPairResponse createObject(fb.BufferContext bc, int offset) => - PKCS12KeyPairResponse._(bc, offset); + Pkcs12KeyPairResponse createObject(fb.BufferContext bc, int offset) => + Pkcs12KeyPairResponse._(bc, offset); } -class PKCS12KeyPairResponseBuilder { - PKCS12KeyPairResponseBuilder(this.fbBuilder); +class Pkcs12KeyPairResponseBuilder { + Pkcs12KeyPairResponseBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -3164,12 +3164,12 @@ class PKCS12KeyPairResponseBuilder { } } -class PKCS12KeyPairResponseObjectBuilder extends fb.ObjectBuilder { - final PKCS12KeyPairObjectBuilder? _output; +class Pkcs12KeyPairResponseObjectBuilder extends fb.ObjectBuilder { + final Pkcs12KeyPairObjectBuilder? _output; final String? _error; - PKCS12KeyPairResponseObjectBuilder({ - PKCS12KeyPairObjectBuilder? output, + Pkcs12KeyPairResponseObjectBuilder({ + Pkcs12KeyPairObjectBuilder? output, String? error, }) : _output = output, _error = error; @@ -3195,14 +3195,14 @@ class PKCS12KeyPairResponseObjectBuilder extends fb.ObjectBuilder { } } -class PKCS12KeyPair { - PKCS12KeyPair._(this._bc, this._bcOffset); - factory PKCS12KeyPair(List bytes) { +class Pkcs12KeyPair { + Pkcs12KeyPair._(this._bc, this._bcOffset); + factory Pkcs12KeyPair(List bytes) { final rootRef = fb.BufferContext.fromBytes(bytes); return reader.read(rootRef, 0); } - static const fb.Reader reader = _PKCS12KeyPairReader(); + static const fb.Reader reader = _Pkcs12KeyPairReader(); final fb.BufferContext _bc; final int _bcOffset; @@ -3216,20 +3216,20 @@ class PKCS12KeyPair { @override String toString() { - return 'PKCS12KeyPair{privateKey: $privateKey, publicKey: $publicKey, certificate: $certificate}'; + return 'Pkcs12KeyPair{privateKey: ${privateKey}, publicKey: ${publicKey}, certificate: ${certificate}}'; } } -class _PKCS12KeyPairReader extends fb.TableReader { - const _PKCS12KeyPairReader(); +class _Pkcs12KeyPairReader extends fb.TableReader { + const _Pkcs12KeyPairReader(); @override - PKCS12KeyPair createObject(fb.BufferContext bc, int offset) => - PKCS12KeyPair._(bc, offset); + Pkcs12KeyPair createObject(fb.BufferContext bc, int offset) => + Pkcs12KeyPair._(bc, offset); } -class PKCS12KeyPairBuilder { - PKCS12KeyPairBuilder(this.fbBuilder); +class Pkcs12KeyPairBuilder { + Pkcs12KeyPairBuilder(this.fbBuilder); final fb.Builder fbBuilder; @@ -3257,12 +3257,12 @@ class PKCS12KeyPairBuilder { } } -class PKCS12KeyPairObjectBuilder extends fb.ObjectBuilder { +class Pkcs12KeyPairObjectBuilder extends fb.ObjectBuilder { final String? _privateKey; final String? _publicKey; final String? _certificate; - PKCS12KeyPairObjectBuilder({ + Pkcs12KeyPairObjectBuilder({ String? privateKey, String? publicKey, String? certificate, @@ -3313,7 +3313,7 @@ class KeyPairResponse { @override String toString() { - return 'KeyPairResponse{output: $output, error: $error}'; + return 'KeyPairResponse{output: ${output}, error: ${error}}'; } } @@ -3399,7 +3399,7 @@ class KeyPair { @override String toString() { - return 'KeyPair{privateKey: $privateKey, publicKey: $publicKey}'; + return 'KeyPair{privateKey: ${privateKey}, publicKey: ${publicKey}}'; } } @@ -3487,7 +3487,7 @@ class PrivateKeyInfoResponse { @override String toString() { - return 'PrivateKeyInfoResponse{output: $output, error: $error}'; + return 'PrivateKeyInfoResponse{output: ${output}, error: ${error}}'; } } @@ -3574,7 +3574,7 @@ class PrivateKeyInfo { @override String toString() { - return 'PrivateKeyInfo{bitLen: $bitLen, size: $size, error: $error}'; + return 'PrivateKeyInfo{bitLen: ${bitLen}, size: ${size}, error: ${error}}'; } } @@ -3669,7 +3669,7 @@ class PublicKeyInfoResponse { @override String toString() { - return 'PublicKeyInfoResponse{output: $output, error: $error}'; + return 'PublicKeyInfoResponse{output: ${output}, error: ${error}}'; } } @@ -3755,7 +3755,7 @@ class PublicKeyInfo { @override String toString() { - return 'PublicKeyInfo{bitLen: $bitLen, size: $size, e: $e}'; + return 'PublicKeyInfo{bitLen: ${bitLen}, size: ${size}, e: ${e}}'; } } diff --git a/lib/web/assets/rsa.wasm b/lib/web/assets/rsa.wasm index 39e28e0..a068a61 100755 Binary files a/lib/web/assets/rsa.wasm and b/lib/web/assets/rsa.wasm differ diff --git a/lib/web/assets/wasm_exec.js b/lib/web/assets/wasm_exec.js old mode 100644 new mode 100755 diff --git a/lib/web/rsa_web.dart b/lib/web/rsa_web.dart index 55d88a9..c84bdb7 100644 --- a/lib/web/rsa_web.dart +++ b/lib/web/rsa_web.dart @@ -29,7 +29,7 @@ class FastRsaPlugin { } void listen() async { - void _onMessage(Event event) { + void onMessage(Event event) { final msgEvent = event as MessageEvent; final data = msgEvent.data as RsaResponse; var completer = completers[data.id]; @@ -44,14 +44,14 @@ class FastRsaPlugin { completers.remove(data.id); } - worker.onmessage = _onMessage.toJS; + worker.onmessage = onMessage.toJS; // worker.addEventListener('message', _onMessage.toJS); } Future bridgeCall(String name, Uint8List? /*!*/ request) async { _counter++; var id = _counter.toString(); - var completer = new Completer(); + var completer = Completer(); completers[id] = completer; worker.postMessage(RsaRequest( id: id, diff --git a/linux/shared/aarch64/librsa_bridge.so b/linux/shared/aarch64/librsa_bridge.so index 096ecb7..76936bc 100644 Binary files a/linux/shared/aarch64/librsa_bridge.so and b/linux/shared/aarch64/librsa_bridge.so differ diff --git a/linux/shared/x86_64/librsa_bridge.so b/linux/shared/x86_64/librsa_bridge.so index 817c6fd..8bfb892 100644 Binary files a/linux/shared/x86_64/librsa_bridge.so and b/linux/shared/x86_64/librsa_bridge.so differ diff --git a/macos/librsa_bridge.dylib b/macos/librsa_bridge.dylib index ae34f05..0f12990 100644 Binary files a/macos/librsa_bridge.dylib and b/macos/librsa_bridge.dylib differ diff --git a/pubspec.yaml b/pubspec.yaml index 617943e..59c788d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,11 +1,11 @@ name: fast_rsa description: library for use RSA with support for android and ios, macOS, linux, windows and web -version: 3.6.6 +version: 3.7.0 homepage: https://github.com/jerson/flutter-rsa environment: - sdk: '>=3.3.0 <4.0.0' - flutter: ">=1.10.0" + sdk: ^3.5.4 + flutter: ">=1.17.0" false_secrets: - /example/lib/*.dart @@ -15,10 +15,12 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter - ffi: ^2.0.1 - flat_buffers: ^2.0.5 - path: ^1.8.2 + ffi: ^2.1.3 + flat_buffers: ^23.5.26 + path: ^1.9.0 web: ">=0.5.0 <2.0.0" + plugin_platform_interface: ^2.0.2 + flutter_lints: ^5.0.0 dev_dependencies: flutter_test: diff --git a/scripts/upgrade_bridge_libs.sh b/scripts/upgrade_bridge_libs.sh index 870ed05..4652a20 100755 --- a/scripts/upgrade_bridge_libs.sh +++ b/scripts/upgrade_bridge_libs.sh @@ -9,7 +9,7 @@ REPO="jerson/rsa-mobile" NAME="librsa_bridge" -PLATFORMS=("android" "darwin" "ios" "wasm" "linux" "linux" "windows") +PLATFORMS=("android" "darwin" "ios_xcframework" "wasm" "linux" "linux" "windows") OUTPUT_DIRS=("android/src/main" "macos" "ios" "lib/web/assets" "linux/shared/x86_64" "linux/shared/aarch64" "windows/shared") OUTPUT_SUB_DIRS=("" "" "" "" "./amd64" "./arm64" "./amd64") OUTPUT_STRIP_DIRS=(1 1 1 1 2 2 2) diff --git a/windows/shared/librsa_bridge.dll b/windows/shared/librsa_bridge.dll index 9be6097..c4d060d 100644 Binary files a/windows/shared/librsa_bridge.dll and b/windows/shared/librsa_bridge.dll differ