From ca2d6dda58cb79a2939a7521f1c82a741862c340 Mon Sep 17 00:00:00 2001 From: terrier989 Date: Thu, 20 Nov 2025 20:33:29 +0000 Subject: [PATCH] Fix issues in cryptography_flutter --- .github/workflows/dart.yml | 2 + cryptography/pubspec.yaml | 2 +- cryptography_flutter/.gitignore | 7 +- cryptography_flutter/.metadata | 30 ++- cryptography_flutter/CHANGELOG.md | 47 ++-- cryptography_flutter/README.md | 4 +- cryptography_flutter/android/build.gradle | 51 ++-- .../android/gradle.properties | 4 - cryptography_flutter/android/gradlew | 160 ------------ cryptography_flutter/android/gradlew.bat | 90 ------- .../android/src/main/AndroidManifest.xml | 3 +- .../CryptographyFlutterPlugin.kt | 1 - cryptography_flutter/example/.gitignore | 5 +- cryptography_flutter/example/.metadata | 29 +-- .../example/analysis_options.yaml | 7 +- .../example/android/.gitignore | 3 +- .../example/android/app/build.gradle | 71 ------ .../example/android/app/build.gradle.kts | 44 ++++ .../android/app/src/debug/AndroidManifest.xml | 3 +- .../android/app/src/main/AndroidManifest.xml | 19 +- .../com/example/example/MainActivity.kt | 6 - .../MainActivity.kt | 5 + .../app/src/profile/AndroidManifest.xml | 3 +- .../example/android/build.gradle | 31 --- .../example/android/build.gradle.kts | 24 ++ .../example/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/settings.gradle | 11 - .../example/android/settings.gradle.kts | 26 ++ .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - cryptography_flutter/example/ios/Podfile | 41 ---- cryptography_flutter/example/ios/Podfile.lock | 22 -- .../ios/Runner.xcodeproj/project.pbxproj | 231 ++++++++++++------ .../xcshareddata/xcschemes/Runner.xcscheme | 34 ++- .../contents.xcworkspacedata | 3 - .../example/ios/Runner/AppDelegate.swift | 4 +- .../LaunchImage.imageset/README.md | 7 +- .../example/ios/Runner/Info.plist | 6 +- .../example/ios/RunnerTests/RunnerTests.swift | 29 +++ cryptography_flutter/example/lib/main.dart | 2 +- .../example/linux/CMakeLists.txt | 32 +-- .../example/linux/runner/CMakeLists.txt | 26 ++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 64 ++++- .../example/linux/runner}/my_application.h | 5 +- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - cryptography_flutter/example/macos/Podfile | 40 --- .../example/macos/Podfile.lock | 22 -- .../macos/Runner.xcodeproj/project.pbxproj | 216 +++++++++++----- .../xcshareddata/xcschemes/Runner.xcscheme | 40 ++- .../contents.xcworkspacedata | 3 - .../example/macos/Runner/AppDelegate.swift | 6 +- .../macos/Runner/Configs/AppInfo.xcconfig | 6 +- .../macos/Runner/MainFlutterWindow.swift | 2 +- .../macos/RunnerTests/RunnerTests.swift | 30 +++ cryptography_flutter/example/pubspec.yaml | 2 +- cryptography_flutter/example/web/favicon.png | Bin 917 -> 0 bytes .../example/web/icons/Icon-192.png | Bin 5292 -> 0 bytes .../example/web/icons/Icon-512.png | Bin 8252 -> 0 bytes .../example/web/icons/Icon-maskable-192.png | Bin 5594 -> 0 bytes .../example/web/icons/Icon-maskable-512.png | Bin 20998 -> 0 bytes cryptography_flutter/example/web/index.html | 59 ----- .../example/web/manifest.json | 35 --- .../example/windows/CMakeLists.txt | 9 +- .../example/windows/flutter/CMakeLists.txt | 7 +- .../example/windows/runner/Runner.rc | 4 +- .../example/windows/runner/flutter_window.cpp | 5 + .../windows/runner/runner.exe.manifest | 6 - .../example/windows/runner/utils.cpp | 9 +- .../example/windows/runner/win32_window.cpp | 2 +- .../example/windows/runner/win32_window.h | 2 +- cryptography_flutter/ios/.gitignore | 60 ++--- .../ios/cryptography_flutter.podspec | 26 +- .../ios/cryptography_flutter/Package.swift | 32 +++ .../CryptographyFlutterPlugin.swift | 0 .../PrivacyInfo.xcprivacy | 14 ++ cryptography_flutter/macos/.gitignore | 7 - .../macos/cryptography_flutter.podspec | 24 +- .../macos/cryptography_flutter/Package.swift | 32 +++ .../CryptographyFlutterPlugin.swift | 0 .../PrivacyInfo.xcprivacy | 12 + cryptography_flutter/pubspec.yaml | 2 +- .../.metadata | 29 +-- .../android/.gitignore | 3 +- .../android/app/build.gradle | 71 ------ .../android/app/build.gradle.kts | 44 ++++ .../android/app/src/debug/AndroidManifest.xml | 3 +- .../android/app/src/main/AndroidManifest.xml | 17 +- .../MainActivity.kt | 3 +- .../app/src/profile/AndroidManifest.xml | 3 +- .../android/build.gradle | 31 --- .../android/build.gradle.kts | 24 ++ .../android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 11 - .../android/settings.gradle.kts | 26 ++ .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Flutter/Debug.xcconfig | 1 - .../ios/Flutter/Release.xcconfig | 1 - .../ios/Podfile | 41 ---- .../ios/Podfile.lock | 28 --- .../ios/Runner.xcodeproj/project.pbxproj | 225 ++++++++++++----- .../xcshareddata/xcschemes/Runner.xcscheme | 34 ++- .../contents.xcworkspacedata | 3 - .../ios/Runner/AppDelegate.swift | 4 +- .../ios/Runner/Info.plist | 2 - .../ios/RunnerTests/RunnerTests.swift | 12 + .../linux/CMakeLists.txt | 30 +-- .../linux/runner/CMakeLists.txt | 26 ++ .../linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 64 ++++- .../linux/runner}/my_application.h | 5 +- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../macos/Podfile | 40 --- .../macos/Podfile.lock | 22 -- .../macos/Runner.xcodeproj/project.pbxproj | 204 ++++++++++++---- .../xcshareddata/xcschemes/Runner.xcscheme | 29 +++ .../contents.xcworkspacedata | 3 - .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../macos/Runner/MainFlutterWindow.swift | 2 +- .../macos/RunnerTests/RunnerTests.swift | 12 + .../pubspec.yaml | 2 +- .../tool/test.sh | 22 ++ .../web/favicon.png | Bin 917 -> 0 bytes .../web/icons/Icon-192.png | Bin 5292 -> 0 bytes .../web/icons/Icon-512.png | Bin 8252 -> 0 bytes .../web/icons/Icon-maskable-192.png | Bin 5594 -> 0 bytes .../web/icons/Icon-maskable-512.png | Bin 20998 -> 0 bytes .../web/index.html | 59 ----- .../web/manifest.json | 35 --- .../windows/CMakeLists.txt | 9 +- .../windows/flutter/CMakeLists.txt | 7 +- .../windows/runner/Runner.rc | 2 +- .../windows/runner/flutter_window.cpp | 5 + .../windows/runner/runner.exe.manifest | 6 - .../windows/runner/utils.cpp | 9 +- .../windows/runner/win32_window.cpp | 2 +- .../windows/runner/win32_window.h | 2 +- cryptography_test/lib/algorithms/ed25519.dart | 32 ++- cryptography_test/lib/algorithms/hkdf.dart | 1 - cryptography_test/pubspec.yaml | 2 +- 145 files changed, 1663 insertions(+), 1515 deletions(-) delete mode 100644 cryptography_flutter/android/gradle.properties delete mode 100755 cryptography_flutter/android/gradlew delete mode 100644 cryptography_flutter/android/gradlew.bat delete mode 100644 cryptography_flutter/example/android/app/build.gradle create mode 100644 cryptography_flutter/example/android/app/build.gradle.kts delete mode 100644 cryptography_flutter/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt create mode 100644 cryptography_flutter/example/android/app/src/main/kotlin/dev/dint/cryptography_flutter_example/MainActivity.kt delete mode 100644 cryptography_flutter/example/android/build.gradle create mode 100644 cryptography_flutter/example/android/build.gradle.kts delete mode 100644 cryptography_flutter/example/android/settings.gradle create mode 100644 cryptography_flutter/example/android/settings.gradle.kts delete mode 100644 cryptography_flutter/example/ios/Podfile delete mode 100644 cryptography_flutter/example/ios/Podfile.lock create mode 100644 cryptography_flutter/example/ios/RunnerTests/RunnerTests.swift create mode 100644 cryptography_flutter/example/linux/runner/CMakeLists.txt rename cryptography_flutter/example/linux/{ => runner}/main.cc (100%) rename cryptography_flutter/example/linux/{ => runner}/my_application.cc (58%) rename {cryptography_flutter_integration_test/linux => cryptography_flutter/example/linux/runner}/my_application.h (70%) delete mode 100644 cryptography_flutter/example/macos/Podfile delete mode 100644 cryptography_flutter/example/macos/Podfile.lock create mode 100644 cryptography_flutter/example/macos/RunnerTests/RunnerTests.swift delete mode 100644 cryptography_flutter/example/web/favicon.png delete mode 100644 cryptography_flutter/example/web/icons/Icon-192.png delete mode 100644 cryptography_flutter/example/web/icons/Icon-512.png delete mode 100644 cryptography_flutter/example/web/icons/Icon-maskable-192.png delete mode 100644 cryptography_flutter/example/web/icons/Icon-maskable-512.png delete mode 100644 cryptography_flutter/example/web/index.html delete mode 100644 cryptography_flutter/example/web/manifest.json create mode 100644 cryptography_flutter/ios/cryptography_flutter/Package.swift rename cryptography_flutter/ios/{Classes => cryptography_flutter/Sources/cryptography_flutter}/CryptographyFlutterPlugin.swift (100%) create mode 100644 cryptography_flutter/ios/cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy delete mode 100644 cryptography_flutter/macos/.gitignore create mode 100644 cryptography_flutter/macos/cryptography_flutter/Package.swift rename cryptography_flutter/macos/{Classes => cryptography_flutter/Sources/cryptography_flutter}/CryptographyFlutterPlugin.swift (100%) create mode 100644 cryptography_flutter/macos/cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy delete mode 100644 cryptography_flutter_integration_test/android/app/build.gradle create mode 100644 cryptography_flutter_integration_test/android/app/build.gradle.kts delete mode 100644 cryptography_flutter_integration_test/android/build.gradle create mode 100644 cryptography_flutter_integration_test/android/build.gradle.kts delete mode 100644 cryptography_flutter_integration_test/android/settings.gradle create mode 100644 cryptography_flutter_integration_test/android/settings.gradle.kts delete mode 100644 cryptography_flutter_integration_test/ios/Podfile delete mode 100644 cryptography_flutter_integration_test/ios/Podfile.lock create mode 100644 cryptography_flutter_integration_test/ios/RunnerTests/RunnerTests.swift create mode 100644 cryptography_flutter_integration_test/linux/runner/CMakeLists.txt rename cryptography_flutter_integration_test/linux/{ => runner}/main.cc (100%) rename cryptography_flutter_integration_test/linux/{ => runner}/my_application.cc (59%) rename {cryptography_flutter/example/linux => cryptography_flutter_integration_test/linux/runner}/my_application.h (70%) delete mode 100644 cryptography_flutter_integration_test/macos/Podfile delete mode 100644 cryptography_flutter_integration_test/macos/Podfile.lock create mode 100644 cryptography_flutter_integration_test/macos/RunnerTests/RunnerTests.swift create mode 100755 cryptography_flutter_integration_test/tool/test.sh delete mode 100644 cryptography_flutter_integration_test/web/favicon.png delete mode 100644 cryptography_flutter_integration_test/web/icons/Icon-192.png delete mode 100644 cryptography_flutter_integration_test/web/icons/Icon-512.png delete mode 100644 cryptography_flutter_integration_test/web/icons/Icon-maskable-192.png delete mode 100644 cryptography_flutter_integration_test/web/icons/Icon-maskable-512.png delete mode 100644 cryptography_flutter_integration_test/web/index.html delete mode 100644 cryptography_flutter_integration_test/web/manifest.json diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 4cb13239..f8506818 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -24,6 +24,7 @@ jobs: matrix: package: - cryptography + - cryptography_test - jwk sdk: # The oldest supported Dart SDK at the moment. @@ -128,6 +129,7 @@ jobs: matrix: package: - cryptography_flutter + - cryptography_flutter/example - cryptography_flutter_integration_test sdk: # The oldest supported Dart SDK at the moment. diff --git a/cryptography/pubspec.yaml b/cryptography/pubspec.yaml index 7022f8a3..e95302b7 100644 --- a/cryptography/pubspec.yaml +++ b/cryptography/pubspec.yaml @@ -24,5 +24,5 @@ dev_dependencies: # # Packages by Google: # - lints: '>=3.0.0 <7.0.0' + lints: '>=3.0.0 <7.0.0' # A large range is needed because we support old Flutter SDKs test: ^1.24.0 diff --git a/cryptography_flutter/.gitignore b/cryptography_flutter/.gitignore index d920ae68..517c1602 100644 --- a/cryptography_flutter/.gitignore +++ b/cryptography_flutter/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related @@ -26,5 +28,6 @@ migrate_working_dir/ /pubspec.lock **/doc/api/ .dart_tool/ -.packages -build/ +.flutter-plugins-dependencies +/build/ +/coverage/ diff --git a/cryptography_flutter/.metadata b/cryptography_flutter/.metadata index 095f7d68..0b258307 100644 --- a/cryptography_flutter/.metadata +++ b/cryptography_flutter/.metadata @@ -4,7 +4,33 @@ # This file should be version controlled and should not be manually edited. version: - revision: 652bc59414cf04fd841e15b250c1de4fda00d38a - channel: master + revision: "f5a8537f90d143abd5bb2f658fa69c388da9677b" + channel: "stable" project_type: plugin + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + base_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + - platform: android + create_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + base_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + - platform: ios + create_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + base_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + - platform: macos + create_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + base_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/cryptography_flutter/CHANGELOG.md b/cryptography_flutter/CHANGELOG.md index 7145af66..661b4e09 100644 --- a/cryptography_flutter/CHANGELOG.md +++ b/cryptography_flutter/CHANGELOG.md @@ -1,5 +1,6 @@ ## 2.3.3 * Improves dependency constraints. +* Fixes problems when building the plugin. ## 2.3.2 * Improves documentation. @@ -9,30 +10,30 @@ * Fixes type inference warnings by Swift compiler. ## 2.3.0 -* Adds support for algorithms. In this version, the following operating system API adapters pass +* Adds support for algorithms. In this version, the following operating system API adapters pass tests: - * Android: - * FlutterAesGcm - * FlutterChacha20.poly1305Aead() - * FlutterHmac.sha1() - * FlutterHmac.sha224() - * FlutterHmac.sha256() - * FlutterHmac.sha384() - * FlutterHmac.sha512() - * FlutterPbkdf2() - * Apple operating systems: - * FlutterAesGcm - * FlutterChacha20.poly1305Aead() - * FlutterEd25519() - * FlutterEcdh.p256() - * FlutterEcdh.p384() - * FlutterEcdh.p521() - * FlutterEcdsa.p256() - * FlutterEcdsa.p384() - * FlutterEcdsa.p521() - * FlutterHmac.sha256() - * FlutterHmac.sha512() - * FlutterX25519() + * Android: + * FlutterAesGcm + * FlutterChacha20.poly1305Aead() + * FlutterHmac.sha1() + * FlutterHmac.sha224() + * FlutterHmac.sha256() + * FlutterHmac.sha384() + * FlutterHmac.sha512() + * FlutterPbkdf2() + * Apple operating systems: + * FlutterAesGcm + * FlutterChacha20.poly1305Aead() + * FlutterEd25519() + * FlutterEcdh.p256() + * FlutterEcdh.p384() + * FlutterEcdh.p521() + * FlutterEcdsa.p256() + * FlutterEcdsa.p384() + * FlutterEcdsa.p521() + * FlutterHmac.sha256() + * FlutterHmac.sha512() + * FlutterX25519() * Requires "package:cryptography" 2.5.0, which has enough DER encoding/decoding support for us to use Apple's CryptoKit ECDH/ECDSA functions. * Adds support for reading names of crypto providers in Android. diff --git a/cryptography_flutter/README.md b/cryptography_flutter/README.md index 2d804913..a207b5b9 100644 --- a/cryptography_flutter/README.md +++ b/cryptography_flutter/README.md @@ -51,8 +51,8 @@ In _pubspec.yaml_: ```yaml dependencies: - cryptography: ^2.7.0 - cryptography_flutter: ^2.3.2 + cryptography: ^2.8.0 + cryptography_flutter: ^2.3.3 ``` That's it! diff --git a/cryptography_flutter/android/build.gradle b/cryptography_flutter/android/build.gradle index 65549e82..a13b068b 100644 --- a/cryptography_flutter/android/build.gradle +++ b/cryptography_flutter/android/build.gradle @@ -1,16 +1,16 @@ -group 'dev.dint.cryptography_flutter' -version '1.0-SNAPSHOT' +group = "dev.dint.cryptography_flutter" +version = "1.0-SNAPSHOT" buildscript { - ext.kotlin_version = '1.7.10' + ext.kotlin_version = "2.2.20" repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath("com.android.tools.build:gradle:8.11.1") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") } } @@ -21,35 +21,50 @@ allprojects { } } -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +apply plugin: "com.android.library" +apply plugin: "kotlin-android" android { - if (project.android.hasProperty("namespace")) { - namespace "dev.dint.cryptography_flutter" - } + namespace = "dev.dint.cryptography_flutter" - compileSdkVersion 31 + compileSdk = 36 compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = JavaVersion.VERSION_17 } sourceSets { - main.java.srcDirs += 'src/main/kotlin' + main.java.srcDirs += "src/main/kotlin" + test.java.srcDirs += "src/test/kotlin" } defaultConfig { - minSdkVersion 21 + minSdk = 24 + } + + dependencies { + testImplementation("org.jetbrains.kotlin:kotlin-test") + testImplementation("org.mockito:mockito-core:5.0.0") + } + + testOptions { + unitTests.all { + useJUnitPlatform() + + testLogging { + events "passed", "skipped", "failed", "standardOut", "standardError" + outputs.upToDateWhen {false} + showStandardStreams = true + } + } } } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "androidx.security:security-crypto:1.1.0-alpha05" + implementation "androidx.security:security-crypto:1.1.0" } \ No newline at end of file diff --git a/cryptography_flutter/android/gradle.properties b/cryptography_flutter/android/gradle.properties deleted file mode 100644 index 38c8d454..00000000 --- a/cryptography_flutter/android/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true -android.useAndroidX=true -android.enableJetifier=true diff --git a/cryptography_flutter/android/gradlew b/cryptography_flutter/android/gradlew deleted file mode 100755 index 9d82f789..00000000 --- a/cryptography_flutter/android/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/cryptography_flutter/android/gradlew.bat b/cryptography_flutter/android/gradlew.bat deleted file mode 100644 index aec99730..00000000 --- a/cryptography_flutter/android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/cryptography_flutter/android/src/main/AndroidManifest.xml b/cryptography_flutter/android/src/main/AndroidManifest.xml index ffa40974..4166bd2a 100644 --- a/cryptography_flutter/android/src/main/AndroidManifest.xml +++ b/cryptography_flutter/android/src/main/AndroidManifest.xml @@ -1,2 +1,3 @@ - + diff --git a/cryptography_flutter/android/src/main/kotlin/dev/dint/cryptography_flutter/CryptographyFlutterPlugin.kt b/cryptography_flutter/android/src/main/kotlin/dev/dint/cryptography_flutter/CryptographyFlutterPlugin.kt index f37d14e4..c920921e 100644 --- a/cryptography_flutter/android/src/main/kotlin/dev/dint/cryptography_flutter/CryptographyFlutterPlugin.kt +++ b/cryptography_flutter/android/src/main/kotlin/dev/dint/cryptography_flutter/CryptographyFlutterPlugin.kt @@ -21,7 +21,6 @@ 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 -import io.flutter.plugin.common.PluginRegistry.Registrar import java.math.BigInteger import java.security.* import java.security.interfaces.* diff --git a/cryptography_flutter/example/.gitignore b/cryptography_flutter/example/.gitignore index 24476c5d..3820a95c 100644 --- a/cryptography_flutter/example/.gitignore +++ b/cryptography_flutter/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related @@ -25,12 +27,11 @@ migrate_working_dir/ **/doc/api/ **/ios/Flutter/.last_build_id .dart_tool/ -.flutter-plugins .flutter-plugins-dependencies -.packages .pub-cache/ .pub/ /build/ +/coverage/ # Symbolication related app.*.symbols diff --git a/cryptography_flutter/example/.metadata b/cryptography_flutter/example/.metadata index caa269cf..43bf87f5 100644 --- a/cryptography_flutter/example/.metadata +++ b/cryptography_flutter/example/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: c07f7888888435fd9df505aa2efc38d3cf65681b - channel: stable + revision: "f5a8537f90d143abd5bb2f658fa69c388da9677b" + channel: "stable" project_type: app @@ -13,26 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: android - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: ios - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: linux - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: macos - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: web - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b + create_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + base_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b - platform: windows - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b + create_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + base_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b # User provided section diff --git a/cryptography_flutter/example/analysis_options.yaml b/cryptography_flutter/example/analysis_options.yaml index ae08714c..0d290213 100644 --- a/cryptography_flutter/example/analysis_options.yaml +++ b/cryptography_flutter/example/analysis_options.yaml @@ -13,8 +13,7 @@ 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-lang.github.io/linter/lints/index.html. + # 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 @@ -22,8 +21,8 @@ linter: # `// 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 + # 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/cryptography_flutter/example/android/.gitignore b/cryptography_flutter/example/android/.gitignore index 6f568019..be3943c9 100644 --- a/cryptography_flutter/example/android/.gitignore +++ b/cryptography_flutter/example/android/.gitignore @@ -5,9 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ # 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/cryptography_flutter/example/android/app/build.gradle b/cryptography_flutter/example/android/app/build.gradle deleted file mode 100644 index ba979293..00000000 --- a/cryptography_flutter/example/android/app/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.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 21 - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - } - - 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 - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/cryptography_flutter/example/android/app/build.gradle.kts b/cryptography_flutter/example/android/app/build.gradle.kts new file mode 100644 index 00000000..72f259d3 --- /dev/null +++ b/cryptography_flutter/example/android/app/build.gradle.kts @@ -0,0 +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") +} + +android { + namespace = "dev.dint.cryptography_flutter_example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "dev.dint.cryptography_flutter_example" + // You can update the following values to match your application needs. + // 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.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/cryptography_flutter/example/android/app/src/debug/AndroidManifest.xml b/cryptography_flutter/example/android/app/src/debug/AndroidManifest.xml index 45d523a2..399f6981 100644 --- a/cryptography_flutter/example/android/app/src/debug/AndroidManifest.xml +++ b/cryptography_flutter/example/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + + + + + + + diff --git a/cryptography_flutter/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt b/cryptography_flutter/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt deleted file mode 100644 index e793a000..00000000 --- a/cryptography_flutter/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.example - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() { -} diff --git a/cryptography_flutter/example/android/app/src/main/kotlin/dev/dint/cryptography_flutter_example/MainActivity.kt b/cryptography_flutter/example/android/app/src/main/kotlin/dev/dint/cryptography_flutter_example/MainActivity.kt new file mode 100644 index 00000000..a685fa9b --- /dev/null +++ b/cryptography_flutter/example/android/app/src/main/kotlin/dev/dint/cryptography_flutter_example/MainActivity.kt @@ -0,0 +1,5 @@ +package dev.dint.cryptography_flutter_example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/cryptography_flutter/example/android/app/src/profile/AndroidManifest.xml b/cryptography_flutter/example/android/app/src/profile/AndroidManifest.xml index 45d523a2..399f6981 100644 --- a/cryptography_flutter/example/android/app/src/profile/AndroidManifest.xml +++ b/cryptography_flutter/example/android/app/src/profile/AndroidManifest.xml @@ -1,5 +1,4 @@ - + - - - - - - - - - - - - - - - - example - - - - - - - - - - diff --git a/cryptography_flutter/example/web/manifest.json b/cryptography_flutter/example/web/manifest.json deleted file mode 100644 index 096edf8f..00000000 --- a/cryptography_flutter/example/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "example", - "short_name": "example", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "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/cryptography_flutter/example/windows/CMakeLists.txt b/cryptography_flutter/example/windows/CMakeLists.txt index c0270746..d960948a 100644 --- a/cryptography_flutter/example/windows/CMakeLists.txt +++ b/cryptography_flutter/example/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "example") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) @@ -86,6 +87,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/cryptography_flutter/example/windows/flutter/CMakeLists.txt b/cryptography_flutter/example/windows/flutter/CMakeLists.txt index 930d2071..903f4899 100644 --- a/cryptography_flutter/example/windows/flutter/CMakeLists.txt +++ b/cryptography_flutter/example/windows/flutter/CMakeLists.txt @@ -10,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") @@ -92,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/cryptography_flutter/example/windows/runner/Runner.rc b/cryptography_flutter/example/windows/runner/Runner.rc index aecaa2b5..ee43a68d 100644 --- a/cryptography_flutter/example/windows/runner/Runner.rc +++ b/cryptography_flutter/example/windows/runner/Runner.rc @@ -89,11 +89,11 @@ BEGIN BEGIN BLOCK "040904e4" BEGIN - VALUE "CompanyName", "com.example" "\0" + VALUE "CompanyName", "dev.dint" "\0" VALUE "FileDescription", "example" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 dev.dint. All rights reserved." "\0" VALUE "OriginalFilename", "example.exe" "\0" VALUE "ProductName", "example" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/cryptography_flutter/example/windows/runner/flutter_window.cpp b/cryptography_flutter/example/windows/runner/flutter_window.cpp index b25e363e..955ee303 100644 --- a/cryptography_flutter/example/windows/runner/flutter_window.cpp +++ b/cryptography_flutter/example/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { 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; } diff --git a/cryptography_flutter/example/windows/runner/runner.exe.manifest b/cryptography_flutter/example/windows/runner/runner.exe.manifest index a42ea768..153653e8 100644 --- a/cryptography_flutter/example/windows/runner/runner.exe.manifest +++ b/cryptography_flutter/example/windows/runner/runner.exe.manifest @@ -9,12 +9,6 @@ - - - - - - diff --git a/cryptography_flutter/example/windows/runner/utils.cpp b/cryptography_flutter/example/windows/runner/utils.cpp index f5bf9fa0..3a0b4651 100644 --- a/cryptography_flutter/example/windows/runner/utils.cpp +++ b/cryptography_flutter/example/windows/runner/utils.cpp @@ -45,9 +45,11 @@ 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); + -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; @@ -55,8 +57,7 @@ std::string Utf8FromUtf16(const wchar_t* utf16_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/cryptography_flutter/example/windows/runner/win32_window.cpp b/cryptography_flutter/example/windows/runner/win32_window.cpp index 041a3855..60608d0f 100644 --- a/cryptography_flutter/example/windows/runner/win32_window.cpp +++ b/cryptography_flutter/example/windows/runner/win32_window.cpp @@ -60,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(); diff --git a/cryptography_flutter/example/windows/runner/win32_window.h b/cryptography_flutter/example/windows/runner/win32_window.h index c86632d8..e901dde6 100644 --- a/cryptography_flutter/example/windows/runner/win32_window.h +++ b/cryptography_flutter/example/windows/runner/win32_window.h @@ -77,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, diff --git a/cryptography_flutter/ios/.gitignore b/cryptography_flutter/ios/.gitignore index 7a7f9873..034771fc 100644 --- a/cryptography_flutter/ios/.gitignore +++ b/cryptography_flutter/ios/.gitignore @@ -1,34 +1,38 @@ -**/dgph +.idea/ +.vagrant/ +.sconsign.dblite +.svn/ + +.DS_Store +*.swp +profile + +DerivedData/ +build/ +GeneratedPluginRegistrant.h +GeneratedPluginRegistrant.m + +.generated/ + +*.pbxuser *.mode1v3 *.mode2v3 -*.moved-aside -*.pbxuser *.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. + +!default.pbxuser !default.mode1v3 !default.mode2v3 -!default.pbxuser !default.perspectivev3 + +xcuserdata + +*.moved-aside + +*.pyc +*sync/ +Icon? +.tags* + +/Flutter/Generated.xcconfig +/Flutter/ephemeral/ +/Flutter/flutter_export_environment.sh diff --git a/cryptography_flutter/ios/cryptography_flutter.podspec b/cryptography_flutter/ios/cryptography_flutter.podspec index 93dfd66e..82842867 100644 --- a/cryptography_flutter/ios/cryptography_flutter.podspec +++ b/cryptography_flutter/ios/cryptography_flutter.podspec @@ -1,23 +1,29 @@ # # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. -# Run `pod lib lint cryptography_flutter.podspec' to validate before publishing. +# Run `pod lib lint cryptography_flutter.podspec` to validate before publishing. # Pod::Spec.new do |s| s.name = 'cryptography_flutter' - s.version = '0.2.0' - s.summary = 'A cryptography plugin for Flutter.' + s.version = '0.0.1' + s.summary = 'A new Flutter plugin project.' s.description = <<-DESC -A new flutter plugin project. +A new Flutter plugin project. DESC - s.homepage = 'http://github.com/dint-dev/cryptography' + s.homepage = 'http://example.com' s.license = { :file => '../LICENSE' } - s.author = { 'Gohilla' => 'opensource@gohilla.com' } + s.author = { 'Your Company' => 'email@example.com' } s.source = { :path => '.' } - s.source_files = 'Classes/**/*' + s.source_files = 'cryptography_flutter/Sources/cryptography_flutter/**/*' s.dependency 'Flutter' - s.platform = :ios, '8.0' + s.platform = :ios, '13.0' - # 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' } + # Flutter.framework does not contain a i386 slice. + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } s.swift_version = '5.0' + + # If your plugin requires a privacy manifest, for example if it uses any + # required reason APIs, update the PrivacyInfo.xcprivacy file to describe your + # plugin's privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'cryptography_flutter_privacy' => ['cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy']} end diff --git a/cryptography_flutter/ios/cryptography_flutter/Package.swift b/cryptography_flutter/ios/cryptography_flutter/Package.swift new file mode 100644 index 00000000..32b0cb97 --- /dev/null +++ b/cryptography_flutter/ios/cryptography_flutter/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "cryptography_flutter", + platforms: [ + .iOS("13.0") + ], + products: [ + .library(name: "cryptography-flutter", targets: ["cryptography_flutter"]) + ], + dependencies: [], + targets: [ + .target( + name: "cryptography_flutter", + dependencies: [], + resources: [ + // If your plugin requires a privacy manifest, for example if it uses any required + // reason APIs, update the PrivacyInfo.xcprivacy file to describe your plugin's + // privacy impact, and then uncomment these lines. For more information, see + // https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + // .process("PrivacyInfo.xcprivacy"), + + // If you have other resources that need to be bundled with your plugin, refer to + // the following instructions to add them: + // https://developer.apple.com/documentation/xcode/bundling-resources-with-a-swift-package + ] + ) + ] +) diff --git a/cryptography_flutter/ios/Classes/CryptographyFlutterPlugin.swift b/cryptography_flutter/ios/cryptography_flutter/Sources/cryptography_flutter/CryptographyFlutterPlugin.swift similarity index 100% rename from cryptography_flutter/ios/Classes/CryptographyFlutterPlugin.swift rename to cryptography_flutter/ios/cryptography_flutter/Sources/cryptography_flutter/CryptographyFlutterPlugin.swift diff --git a/cryptography_flutter/ios/cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy b/cryptography_flutter/ios/cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy new file mode 100644 index 00000000..a34b7e2e --- /dev/null +++ b/cryptography_flutter/ios/cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy @@ -0,0 +1,14 @@ + + + + + NSPrivacyTrackingDomains + + NSPrivacyAccessedAPITypes + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/cryptography_flutter/macos/.gitignore b/cryptography_flutter/macos/.gitignore deleted file mode 100644 index 746adbb6..00000000 --- a/cryptography_flutter/macos/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Flutter-related -**/Flutter/ephemeral/ -**/Pods/ - -# Xcode-related -**/dgph -**/xcuserdata/ diff --git a/cryptography_flutter/macos/cryptography_flutter.podspec b/cryptography_flutter/macos/cryptography_flutter.podspec index 8f9b8cb6..7d3142df 100644 --- a/cryptography_flutter/macos/cryptography_flutter.podspec +++ b/cryptography_flutter/macos/cryptography_flutter.podspec @@ -1,22 +1,30 @@ # # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. -# Run `pod lib lint cryptography_flutter.podspec' to validate before publishing. +# Run `pod lib lint cryptography_flutter.podspec` to validate before publishing. # Pod::Spec.new do |s| s.name = 'cryptography_flutter' - s.version = '0.2.0' - s.summary = 'A cryptography plugin for Flutter.' + s.version = '0.0.1' + s.summary = 'A new Flutter plugin project.' s.description = <<-DESC -A new flutter plugin project. +A new Flutter plugin project. DESC - s.homepage = 'http://github.com/dint-dev/cryptography' + s.homepage = 'http://example.com' s.license = { :file => '../LICENSE' } - s.author = { 'Gohilla' => 'opensource@gohilla.com' } + s.author = { 'Your Company' => 'email@example.com' } + s.source = { :path => '.' } - s.source_files = 'Classes/**/*' + s.source_files = 'cryptography_flutter/Sources/cryptography_flutter/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'cryptography_flutter_privacy' => ['cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.swift_version = '5.0' -end \ No newline at end of file +end diff --git a/cryptography_flutter/macos/cryptography_flutter/Package.swift b/cryptography_flutter/macos/cryptography_flutter/Package.swift new file mode 100644 index 00000000..13511da4 --- /dev/null +++ b/cryptography_flutter/macos/cryptography_flutter/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "cryptography_flutter", + platforms: [ + .macOS("10.15") + ], + products: [ + .library(name: "cryptography-flutter", targets: ["cryptography_flutter"]) + ], + dependencies: [], + targets: [ + .target( + name: "cryptography_flutter", + dependencies: [], + resources: [ + // If your plugin requires a privacy manifest, for example if it collects user + // data, update the PrivacyInfo.xcprivacy file to describe your plugin's + // privacy impact, and then uncomment these lines. For more information, see + // https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + // .process("PrivacyInfo.xcprivacy"), + + // If you have other resources that need to be bundled with your plugin, refer to + // the following instructions to add them: + // https://developer.apple.com/documentation/xcode/bundling-resources-with-a-swift-package + ] + ) + ] +) diff --git a/cryptography_flutter/macos/Classes/CryptographyFlutterPlugin.swift b/cryptography_flutter/macos/cryptography_flutter/Sources/cryptography_flutter/CryptographyFlutterPlugin.swift similarity index 100% rename from cryptography_flutter/macos/Classes/CryptographyFlutterPlugin.swift rename to cryptography_flutter/macos/cryptography_flutter/Sources/cryptography_flutter/CryptographyFlutterPlugin.swift diff --git a/cryptography_flutter/macos/cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy b/cryptography_flutter/macos/cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy new file mode 100644 index 00000000..918d80be --- /dev/null +++ b/cryptography_flutter/macos/cryptography_flutter/Sources/cryptography_flutter/PrivacyInfo.xcprivacy @@ -0,0 +1,12 @@ + + + + + NSPrivacyTrackingDomains + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/cryptography_flutter/pubspec.yaml b/cryptography_flutter/pubspec.yaml index 649396b8..7f3fcbc8 100644 --- a/cryptography_flutter/pubspec.yaml +++ b/cryptography_flutter/pubspec.yaml @@ -26,7 +26,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^6.0.0 + flutter_lints: '>=3.0.0 <7.0.0' # A large range is needed because we support old Flutter SDKs dependency_overrides: cryptography: diff --git a/cryptography_flutter_integration_test/.metadata b/cryptography_flutter_integration_test/.metadata index caa269cf..54349e85 100644 --- a/cryptography_flutter_integration_test/.metadata +++ b/cryptography_flutter_integration_test/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: c07f7888888435fd9df505aa2efc38d3cf65681b - channel: stable + revision: "f5a8537f90d143abd5bb2f658fa69c388da9677b" + channel: "stable" project_type: app @@ -13,26 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: android - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: ios - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b + create_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + base_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b - platform: linux - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: macos - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: web - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - - platform: windows - create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b - base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b + create_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b + base_revision: f5a8537f90d143abd5bb2f658fa69c388da9677b # User provided section diff --git a/cryptography_flutter_integration_test/android/.gitignore b/cryptography_flutter_integration_test/android/.gitignore index 6f568019..be3943c9 100644 --- a/cryptography_flutter_integration_test/android/.gitignore +++ b/cryptography_flutter_integration_test/android/.gitignore @@ -5,9 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ # 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/cryptography_flutter_integration_test/android/app/build.gradle b/cryptography_flutter_integration_test/android/app/build.gradle deleted file mode 100644 index 691a9b8d..00000000 --- a/cryptography_flutter_integration_test/android/app/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.cryptography_flutter_integration_test" - // 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 - } - - 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 - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/cryptography_flutter_integration_test/android/app/build.gradle.kts b/cryptography_flutter_integration_test/android/app/build.gradle.kts new file mode 100644 index 00000000..2991108c --- /dev/null +++ b/cryptography_flutter_integration_test/android/app/build.gradle.kts @@ -0,0 +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") +} + +android { + namespace = "com.example.cryptography_flutter_integration_test" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.cryptography_flutter_integration_test" + // You can update the following values to match your application needs. + // 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.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/cryptography_flutter_integration_test/android/app/src/debug/AndroidManifest.xml b/cryptography_flutter_integration_test/android/app/src/debug/AndroidManifest.xml index e988a867..399f6981 100644 --- a/cryptography_flutter_integration_test/android/app/src/debug/AndroidManifest.xml +++ b/cryptography_flutter_integration_test/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + + + + + + + diff --git a/cryptography_flutter_integration_test/android/app/src/main/kotlin/com/example/cryptography_flutter_integration_test/MainActivity.kt b/cryptography_flutter_integration_test/android/app/src/main/kotlin/com/example/cryptography_flutter_integration_test/MainActivity.kt index 7f032c8b..81343cc9 100644 --- a/cryptography_flutter_integration_test/android/app/src/main/kotlin/com/example/cryptography_flutter_integration_test/MainActivity.kt +++ b/cryptography_flutter_integration_test/android/app/src/main/kotlin/com/example/cryptography_flutter_integration_test/MainActivity.kt @@ -2,5 +2,4 @@ package com.example.cryptography_flutter_integration_test import io.flutter.embedding.android.FlutterActivity -class MainActivity: FlutterActivity() { -} +class MainActivity : FlutterActivity() diff --git a/cryptography_flutter_integration_test/android/app/src/profile/AndroidManifest.xml b/cryptography_flutter_integration_test/android/app/src/profile/AndroidManifest.xml index e988a867..399f6981 100644 --- a/cryptography_flutter_integration_test/android/app/src/profile/AndroidManifest.xml +++ b/cryptography_flutter_integration_test/android/app/src/profile/AndroidManifest.xml @@ -1,5 +1,4 @@ - + - - - - - - - - - - - - - - - - cryptography_flutter_integration_test - - - - - - - - - - diff --git a/cryptography_flutter_integration_test/web/manifest.json b/cryptography_flutter_integration_test/web/manifest.json deleted file mode 100644 index e48ac7f8..00000000 --- a/cryptography_flutter_integration_test/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "cryptography_flutter_integration_test", - "short_name": "cryptography_flutter_integration_test", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "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/cryptography_flutter_integration_test/windows/CMakeLists.txt b/cryptography_flutter_integration_test/windows/CMakeLists.txt index a754a505..ef4440c6 100644 --- a/cryptography_flutter_integration_test/windows/CMakeLists.txt +++ b/cryptography_flutter_integration_test/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "cryptography_flutter_integration_test") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) @@ -86,6 +87,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/cryptography_flutter_integration_test/windows/flutter/CMakeLists.txt b/cryptography_flutter_integration_test/windows/flutter/CMakeLists.txt index 930d2071..903f4899 100644 --- a/cryptography_flutter_integration_test/windows/flutter/CMakeLists.txt +++ b/cryptography_flutter_integration_test/windows/flutter/CMakeLists.txt @@ -10,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") @@ -92,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/cryptography_flutter_integration_test/windows/runner/Runner.rc b/cryptography_flutter_integration_test/windows/runner/Runner.rc index 5be998c2..160bc082 100644 --- a/cryptography_flutter_integration_test/windows/runner/Runner.rc +++ b/cryptography_flutter_integration_test/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "cryptography_flutter_integration_test" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "cryptography_flutter_integration_test" "\0" - VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "cryptography_flutter_integration_test.exe" "\0" VALUE "ProductName", "cryptography_flutter_integration_test" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/cryptography_flutter_integration_test/windows/runner/flutter_window.cpp b/cryptography_flutter_integration_test/windows/runner/flutter_window.cpp index b25e363e..955ee303 100644 --- a/cryptography_flutter_integration_test/windows/runner/flutter_window.cpp +++ b/cryptography_flutter_integration_test/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { 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; } diff --git a/cryptography_flutter_integration_test/windows/runner/runner.exe.manifest b/cryptography_flutter_integration_test/windows/runner/runner.exe.manifest index a42ea768..153653e8 100644 --- a/cryptography_flutter_integration_test/windows/runner/runner.exe.manifest +++ b/cryptography_flutter_integration_test/windows/runner/runner.exe.manifest @@ -9,12 +9,6 @@ - - - - - - diff --git a/cryptography_flutter_integration_test/windows/runner/utils.cpp b/cryptography_flutter_integration_test/windows/runner/utils.cpp index f5bf9fa0..3a0b4651 100644 --- a/cryptography_flutter_integration_test/windows/runner/utils.cpp +++ b/cryptography_flutter_integration_test/windows/runner/utils.cpp @@ -45,9 +45,11 @@ 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); + -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; @@ -55,8 +57,7 @@ std::string Utf8FromUtf16(const wchar_t* utf16_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/cryptography_flutter_integration_test/windows/runner/win32_window.cpp b/cryptography_flutter_integration_test/windows/runner/win32_window.cpp index 041a3855..60608d0f 100644 --- a/cryptography_flutter_integration_test/windows/runner/win32_window.cpp +++ b/cryptography_flutter_integration_test/windows/runner/win32_window.cpp @@ -60,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(); diff --git a/cryptography_flutter_integration_test/windows/runner/win32_window.h b/cryptography_flutter_integration_test/windows/runner/win32_window.h index c86632d8..e901dde6 100644 --- a/cryptography_flutter_integration_test/windows/runner/win32_window.h +++ b/cryptography_flutter_integration_test/windows/runner/win32_window.h @@ -77,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, diff --git a/cryptography_test/lib/algorithms/ed25519.dart b/cryptography_test/lib/algorithms/ed25519.dart index c53978d7..a7771ee6 100644 --- a/cryptography_test/lib/algorithms/ed25519.dart +++ b/cryptography_test/lib/algorithms/ed25519.dart @@ -316,7 +316,7 @@ void _test() { ); }); - test('sign()', () async { + test('sign() returns the correct signature', () async { final keyPair = await algorithm.newKeyPairFromSeed(privateKeyBytes); final actualSignature = await algorithm.sign( message, @@ -326,17 +326,39 @@ void _test() { hexFromBytes(actualSignature.bytes), hexFromBytes(signature.bytes), ); - expect( - actualSignature.publicKey, - SimplePublicKey(publicKeyBytes, type: algorithm.keyPairType), + expect(actualSignature, signature); + + // This is not supported on iOS due to a platform limitation. + // iOS uses randomized signatures. + }, testOn: '!ios'); + + test('sign() returns the right public key', () async { + final keyPair = await algorithm.newKeyPairFromSeed(privateKeyBytes); + final actualSignature = await algorithm.sign( + message, + keyPair: keyPair, ); expect( actualSignature.publicKey, await keyPair.extractPublicKey(), ); - expect(actualSignature, signature); }); + test('result of sign() can be verified', () async { + final keyPair = await algorithm.newKeyPairFromSeed(privateKeyBytes); + final signature = await algorithm.sign( + message, + keyPair: keyPair, + ); + expect( + await algorithm.verify( + message, + signature: signature, + ), + isTrue, + ); + }, testOn: 'ios'); + test('verify(...)', () async { final isOk = await algorithm.verify( message, diff --git a/cryptography_test/lib/algorithms/hkdf.dart b/cryptography_test/lib/algorithms/hkdf.dart index ca030abe..8991fba4 100644 --- a/cryptography_test/lib/algorithms/hkdf.dart +++ b/cryptography_test/lib/algorithms/hkdf.dart @@ -13,7 +13,6 @@ // limitations under the License. import 'package:cryptography/cryptography.dart'; -import 'package:cryptography/dart.dart'; import 'package:test/test.dart'; import '../hex.dart'; diff --git a/cryptography_test/pubspec.yaml b/cryptography_test/pubspec.yaml index c01716ac..95367773 100644 --- a/cryptography_test/pubspec.yaml +++ b/cryptography_test/pubspec.yaml @@ -30,7 +30,7 @@ dev_dependencies: # # Packages by Google: # - lints: ^6.0.0 + lints: '>=3.0.0 <7.0.0' # A large range is needed because we support old Flutter SDKs dependency_overrides: cryptography: