diff --git a/.eslintignore b/.eslintignore index e2f11db0..7fe65870 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,9 @@ **/*.js blue_modules/* generated/**/* +node_modules/ +coverage/ +build/ +ios/build/ +android/build/ +vendor/ diff --git a/.gitignore b/.gitignore index 29dcc96c..c9c14c0a 100644 --- a/.gitignore +++ b/.gitignore @@ -85,7 +85,7 @@ default.realm.lock default.realm.note /default.realm.management/ - + # Yarn .yarn/* !.yarn/patches @@ -98,4 +98,6 @@ default.realm.note coverage-ts .env -.env.storybook \ No newline at end of file +.env.storybook + +.kotlin/ diff --git a/Gemfile b/Gemfile index 738830e5..07ec488e 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source 'https://rubygems.org' ruby ">= 2.6.10" -gem "fastlane", '~> 2.223.1' +gem "fastlane", "~> 2.228.0" # Exclude problematic versions of cocoapods and activesupport that causes build failures. gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' diff --git a/Gemfile.lock b/Gemfile.lock index 5bda5754..b95a6e0f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,37 +1,44 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.6) + CFPropertyList (3.0.7) + base64 + nkf rexml activesupport (7.0.4.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - addressable (2.8.5) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) artifactory (3.0.17) atomos (0.1.3) - aws-eventstream (1.3.0) - aws-partitions (1.986.0) - aws-sdk-core (3.209.1) + aws-eventstream (1.4.0) + aws-partitions (1.1154.0) + aws-sdk-core (3.232.0) aws-eventstream (~> 1, >= 1.3.0) - aws-partitions (~> 1, >= 1.651.0) + aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) + base64 + bigdecimal jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.94.0) - aws-sdk-core (~> 3, >= 3.207.0) + logger + aws-sdk-kms (1.112.0) + aws-sdk-core (~> 3, >= 3.231.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.167.0) - aws-sdk-core (~> 3, >= 3.207.0) + aws-sdk-s3 (1.198.0) + aws-sdk-core (~> 3, >= 3.231.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.10.0) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) + base64 (0.3.0) + bigdecimal (3.2.3) claide (1.1.0) cocoapods (1.14.2) addressable (~> 2.8) @@ -76,7 +83,7 @@ GEM highline (~> 2.0.0) concurrent-ruby (1.2.2) declarative (0.0.20) - digest-crc (0.6.5) + digest-crc (0.7.0) rake (>= 12.0.0, < 14.0.0) domain_name (0.6.20240107) dotenv (2.8.1) @@ -85,7 +92,7 @@ GEM ethon (0.16.0) ffi (>= 1.15.0) excon (0.112.0) - faraday (1.10.3) + faraday (1.10.4) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -101,20 +108,20 @@ GEM faraday (>= 0.8.0) http-cookie (~> 1.0.0) faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) + faraday-em_synchrony (1.0.1) faraday-excon (1.1.0) faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (1.0.1) + faraday-multipart (1.1.1) + multipart-post (~> 2.0) + faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) faraday_middleware (1.2.1) faraday (~> 1.0) - fastimage (2.3.1) - fastlane (2.223.1) + fastimage (2.4.0) + fastlane (2.228.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -130,6 +137,7 @@ GEM faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.0.0) gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) @@ -153,7 +161,7 @@ GEM tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) + xcpretty (~> 0.4.1) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-plugin-android_version_manage (0.1.6) fastlane-plugin-bundletool (1.0.9) @@ -163,13 +171,15 @@ GEM fastlane-plugin-increment_version_code (0.4.3) fastlane-plugin-versioning_android (0.1.1) fastlane-plugin-versioning_ios (0.1.0) + fastlane-sirp (1.0.0) + sysrandom (~> 1.0) ffi (1.16.3) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) google-apis-androidpublisher_v3 (0.54.0) google-apis-core (>= 0.11.0, < 2.a) - google-apis-core (0.11.2) + google-apis-core (0.11.3) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -177,7 +187,6 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.a) rexml - webrick google-apis-firebaseappdistribution_v1 (0.3.0) google-apis-core (>= 0.11.0, < 2.a) google-apis-iamcredentials_v1 (0.17.0) @@ -186,12 +195,12 @@ GEM google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.31.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.7.1) + google-cloud-core (1.8.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.4.0) + google-cloud-errors (1.5.0) google-cloud-storage (1.47.0) addressable (~> 2.8) digest-crc (~> 0.4) @@ -207,48 +216,54 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.7) + http-cookie (1.0.8) domain_name (~> 0.5) - httpclient (2.8.3) + httpclient (2.9.0) + mutex_m i18n (1.13.0) concurrent-ruby (~> 1.0) jmespath (1.6.2) - json (2.6.3) - jwt (2.7.1) + json (2.13.2) + jwt (2.10.2) + base64 + logger (1.7.0) mini_magick (4.13.2) mini_mime (1.1.5) minitest (5.18.0) molinillo (0.8.0) - multi_json (1.15.0) - multipart-post (2.3.0) - nanaimo (0.3.0) + multi_json (1.17.0) + multipart-post (2.4.1) + mutex_m (0.3.0) + nanaimo (0.4.0) nap (1.1.0) - naturally (2.2.1) + naturally (2.3.0) netrc (0.11.0) - optparse (0.5.0) + nkf (0.2.0) + optparse (0.6.0) os (1.1.4) - plist (3.7.1) + plist (3.7.2) public_suffix (4.0.7) - rake (13.2.1) + rake (13.3.0) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.2.6) - rouge (2.0.7) + rexml (3.4.2) + rouge (3.28.0) ruby-macho (2.5.1) ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rubyzip (2.4.1) security (0.1.5) - signet (0.18.0) + signet (0.21.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) + jwt (>= 1.5, < 4.0) multi_json (~> 1.10) simctl (1.6.10) CFPropertyList naturally + sysrandom (1.0.5) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -263,17 +278,16 @@ GEM concurrent-ruby (~> 1.0) uber (0.1.0) unicode-display_width (2.6.0) - webrick (1.8.1) word_wrap (1.0.0) - xcodeproj (1.23.0) + xcodeproj (1.27.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (~> 3.2.4) - xcpretty (0.3.0) - rouge (~> 2.0.7) + nanaimo (~> 0.4.0) + rexml (>= 3.3.6, < 4.0) + xcpretty (0.4.1) + rouge (~> 3.28.0) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) @@ -283,7 +297,7 @@ PLATFORMS DEPENDENCIES activesupport (>= 6.1.7.5, != 7.1.0) cocoapods (>= 1.13, != 1.15.1, != 1.15.0) - fastlane (~> 2.223.1) + fastlane (~> 2.228.0) fastlane-plugin-android_version_manage fastlane-plugin-bundletool fastlane-plugin-firebase_app_distribution diff --git a/android/app/build.gradle b/android/app/build.gradle index aa7822e4..0e9b2029 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: "com.android.application" apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" -apply plugin: 'kotlin-android' +// apply plugin: 'kotlin-android' import com.android.build.OutputFile apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" @@ -155,20 +155,34 @@ android { } androidResources { - noCompress += ["bundle"] + noCompress += ["bundle"] } + + packaging { + jniLibs { + useLegacyPackaging = false + // Ensure only a single C++ runtime is packaged to avoid symbol conflicts for Skia + pickFirsts += ['**/libc++_shared.so'] + } + } +} + +// Exclude Conceal from react-native-keychain for 16KB page size compatibility +// react-native-keychain will fall back to using Android Keystore which is more secure +configurations.all { + exclude group: 'com.facebook.conceal', module: 'conceal' } dependencies { - // For animated GIF support in RN Image component - implementation 'com.facebook.fresco:animated-gif:2.5.0' - // For WebP support, including animated WebP in RN Image component - implementation 'com.facebook.fresco:animated-webp:2.5.0' - implementation 'com.facebook.fresco:webpsupport:2.5.0' + // For animated GIF support in RN Image component (upgraded for 16KB page size support) + implementation 'com.facebook.fresco:animated-gif:3.6.0' + // For WebP support, including animated WebP in RN Image component (upgraded for 16KB page size support) + implementation 'com.facebook.fresco:animated-webp:3.6.0' + implementation 'com.facebook.fresco:webpsupport:3.6.0' - // For animated WebP support in FastImage component - implementation "com.github.zjupure:webpdecoder:2.1.${glideVersion}" + // Glide 4.15.1+ has built-in WebP support, no external decoder needed + // (webpdecoder is not available for Glide 4.15+) // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") diff --git a/android/app/src/main/java/com/kraken/superwallet/MainActivity.java b/android/app/src/main/java/com/kraken/superwallet/MainActivity.java index 55642778..4b464f46 100644 --- a/android/app/src/main/java/com/kraken/superwallet/MainActivity.java +++ b/android/app/src/main/java/com/kraken/superwallet/MainActivity.java @@ -2,6 +2,7 @@ import android.os.Bundle; +import androidx.core.view.WindowCompat; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; @@ -31,6 +32,10 @@ protected void onCreate(Bundle savedInstanceState) { RNBootSplash.init(this, R.style.BootTheme); setTheme(R.style.AppTheme); super.onCreate(null); + + // Enable edge-to-edge display + WindowCompat.setDecorFitsSystemWindows(getWindow(), false); + WorkManager.getInstance(this).enqueue(new OneTimeWorkRequest.Builder(PatchWorker.class).build()); } diff --git a/android/app/src/main/java/com/kraken/superwallet/MainApplication.java b/android/app/src/main/java/com/kraken/superwallet/MainApplication.java deleted file mode 100644 index 8115ab49..00000000 --- a/android/app/src/main/java/com/kraken/superwallet/MainApplication.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.kraken.superwallet; -import android.content.res.Configuration; -import expo.modules.ApplicationLifecycleDispatcher; -import expo.modules.ReactNativeHostWrapper; - -import android.app.Application; -import com.facebook.react.PackageList; -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; -import com.facebook.react.defaults.DefaultReactNativeHost; -import com.facebook.soloader.SoLoader; - -import java.util.List; - -import com.kraken.superwallet.modules.activityLifecycle.ActivityLifecyclePackage; -import com.kraken.superwallet.modules.boottime.BootTimePackage; -import com.kraken.superwallet.modules.gradients.WalletGradientViewPackage; -import com.kraken.superwallet.modules.clipboard.SensitiveClipboardPackage; -import com.kraken.superwallet.modules.minimizer.MinimizerPackage; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = - new ReactNativeHostWrapper(this, new DefaultReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - @SuppressWarnings("UnnecessaryLocalVariable") - List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - packages.add(new SensitiveClipboardPackage()); - packages.add(new BootTimePackage()); - packages.add(new WalletGradientViewPackage()); - packages.add(new ActivityLifecyclePackage()); - packages.add(new MinimizerPackage()); - return packages; - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - - @Override - protected boolean isNewArchEnabled() { - return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; - } - - @Override - protected Boolean isHermesEnabled() { - return BuildConfig.IS_HERMES_ENABLED; - } - }); - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - DefaultNewArchitectureEntryPoint.load(); - } - ApplicationLifecycleDispatcher.onApplicationCreate(this); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); - } -} diff --git a/android/app/src/main/java/com/kraken/superwallet/MainApplication.kt b/android/app/src/main/java/com/kraken/superwallet/MainApplication.kt new file mode 100644 index 00000000..0369ad6c --- /dev/null +++ b/android/app/src/main/java/com/kraken/superwallet/MainApplication.kt @@ -0,0 +1,64 @@ +package com.kraken.superwallet + +import android.app.Application +import android.content.res.Configuration +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.react.soloader.OpenSourceMergedSoMapping +import com.facebook.soloader.SoLoader +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper + +import com.kraken.superwallet.modules.activityLifecycle.ActivityLifecyclePackage +import com.kraken.superwallet.modules.boottime.BootTimePackage +import com.kraken.superwallet.modules.gradients.WalletGradientViewPackage +import com.kraken.superwallet.modules.clipboard.SensitiveClipboardPackage +import com.kraken.superwallet.modules.minimizer.MinimizerPackage + +class MainApplication : Application(), ReactApplication { + + private val _reactNativeHost: ReactNativeHost = + ReactNativeHostWrapper(this, object : DefaultReactNativeHost(this) { + override fun getUseDeveloperSupport() = BuildConfig.DEBUG + + override fun getPackages(): List { + val packages = PackageList(this).packages + packages.add(SensitiveClipboardPackage()) + packages.add(BootTimePackage()) + packages.add(WalletGradientViewPackage()) + packages.add(ActivityLifecyclePackage()) + packages.add(MinimizerPackage()) + return packages + } + + override fun getJSMainModuleName() = "index" + + // Remove these for your RN version (they caused "overrides nothing"): + // override fun isNewArchEnabled() = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + // override fun isHermesEnabled() = BuildConfig.IS_HERMES_ENABLED + }) + + override val reactNativeHost: ReactNativeHost + get() = _reactNativeHost + + override fun onCreate() { + super.onCreate() + + // Kotlin: no `.INSTANCE` here + SoLoader.init(this, OpenSourceMergedSoMapping) + + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + DefaultNewArchitectureEntryPoint.load() + } + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) + } +} diff --git a/android/build.gradle b/android/build.gradle index 084b6541..c3b3ca81 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,9 +8,9 @@ buildscript { minSdkVersion = 28 compileSdkVersion = 35 targetSdkVersion = 35 - ndkVersion = "27.1.12297006" - kotlinVersion = "1.9.25" - glideVersion= "4.12.0" + ndkVersion = "28.2.13676358" + kotlinVersion = "2.0.21" + glideVersion= "4.15.1" firebaseIidVersion = "21.1.0" } repositories { @@ -18,8 +18,8 @@ buildscript { mavenCentral() } dependencies { - classpath("com.android.tools.build:gradle") - classpath("com.facebook.react:react-native-gradle-plugin") + classpath("com.android.tools.build:gradle:8.7.2") +// classpath("com.facebook.react:react-native-gradle-plugin") classpath 'com.google.gms:google-services:4.3.15' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 6f7a6eb3..37f853b1 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/android/gradlew b/android/gradlew index b740cf13..a7babb32 100755 --- a/android/gradlew +++ b/android/gradlew @@ -84,7 +84,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/android/gradlew.bat b/android/gradlew.bat index 25da30db..9d21a218 100644 --- a/android/gradlew.bat +++ b/android/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/android/settings.gradle b/android/settings.gradle index 50b7b364..621bb672 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,9 +1,61 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } +// --- settings.gradle --- + +pluginManagement { + // RN Gradle plugin is an included build + includeBuild("../node_modules/@react-native/gradle-plugin") + + // Repos for resolving AGP/Kotlin plugins + repositories { + google() + mavenCentral() + gradlePluginPortal() + } + + // (Optional) pin Kotlin plugin version across included builds + plugins { + id("org.jetbrains.kotlin.android") version "2.0.21" + id("org.jetbrains.kotlin.jvm") version "2.0.21" + } + resolutionStrategy { + eachPlugin { + if (requested.id.id.startsWith("org.jetbrains.kotlin")) { + useVersion("2.0.21") + } + } + } +} + plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } -rootProject.name = 'SuperWallet' -include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') -apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") -useExpoModules() \ No newline at end of file +// Enable RN autolinking from CLI-generated config +extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> + ex.autolinkLibrariesFromCommand() +} + +rootProject.name = "SuperWallet" +include(":app") +include(":react-native-config") +project(":react-native-config").projectDir = new File(rootProject.projectDir, "../node_modules/react-native-config/android") + +// Ensure the RN Gradle plugin is also available for normal dependency resolution +includeBuild("../node_modules/@react-native/gradle-plugin") { + dependencySubstitution { + substitute(module("com.facebook.react:react-native-gradle-plugin")).using(project(":react-native-gradle-plugin")) + } +} + +// Expo autolinking +apply from: new File( + ["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), + "../scripts/autolinking.gradle" +) +useExpoModules() + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) + repositories { + google() + mavenCentral() + maven { url 'https://jitpack.io' } + } +} diff --git a/babel.config.js b/babel.config.js index d5e8b6fb..401b6ef8 100644 --- a/babel.config.js +++ b/babel.config.js @@ -11,6 +11,7 @@ module.exports = function (api) { 'react-native-reanimated/plugin', { globals: ['__scanCodes'], + processNestedWorklets: true, }, ], 'error-context', diff --git a/index.js b/index.js index 34ed0c9f..43aedbd6 100644 --- a/index.js +++ b/index.js @@ -1,12 +1,22 @@ +// IMPORTANT: Set EXPO_OS BEFORE any imports that might use Expo packages +import { Platform } from 'react-native'; +console.log('[index.js] Setting EXPO_OS to:', Platform.OS); +process.env.EXPO_OS = Platform.OS; + import 'react-native-reanimated' import { AppRegistry } from 'react-native'; import { STORYBOOK_ENABLED } from '/config'; import './shim'; +console.log('[index.js] Imports completed'); import App from './src/App'; +console.log('[index.js] App imported'); if (__DEV__ && STORYBOOK_ENABLED === 'true') { + console.log('[index.js] Registering Storybook'); AppRegistry.registerComponent('SuperWallet', () => require('./.storybook').default); } else { + console.log('[index.js] Registering App'); AppRegistry.registerComponent('SuperWallet', () => App); } +console.log('[index.js] App registration complete'); diff --git a/ios/Podfile b/ios/Podfile index 3f69a983..a37e6270 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -6,7 +6,7 @@ require Pod::Executable.execute_command('node', ['-p', {paths: [process.argv[1]]}, )', __dir__]).strip -platform :ios, '15.0' +platform :ios, '15.1' install! 'cocoapods', :deterministic_uuids => false prepare_react_native_project! @@ -25,7 +25,11 @@ target 'SuperWallet' do use_react_native!( :path => config[:reactNativePath], # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/.." + :app_path => "#{Pod::Config.instance.installation_root}/..", + # Explicitly disable the new architecture + :fabric_enabled => false, + # Hermes is now enabled by default. Disable by setting this flag to false. + :hermes_enabled => true ) post_install do |installer| @@ -36,5 +40,17 @@ target 'SuperWallet' do :mac_catalyst_enabled => false, # :ccache_enabled => true ) + + # Workaround Xcode 26 "unable to find module dependency" for CatCrypto/Argon2/MD6/SHA3 + # Force disable Swift Explicit Module Builds for problematic pods + installer.pods_project.targets.each do |target| + if ["RNArgon2", "CatCrypto"].include?(target.name) + target.build_configurations.each do |config| + config.build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "NO" + config.build_settings["SWIFT_STRICT_CONCURRENCY"] = "complete" + config.build_settings["SWIFT_ENABLE_EXPLICIT_MODULES"] = "NO" + end + end + end end end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index fb4ca323..d9d4ca20 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3,33 +3,58 @@ PODS: - CatCrypto (0.3.2) - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - - EXApplication (5.9.1): + - EXApplication (7.0.7): - ExpoModulesCore - - EXConstants (16.0.2): + - EXConstants (17.1.7): - ExpoModulesCore - - EXNotifications (0.28.19): + - EXNotifications (0.32.12): - ExpoModulesCore - - Expo (51.0.38): + - Expo (53.0.23): + - DoubleConversion - ExpoModulesCore - - ExpoAsset (10.0.10): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactAppDependencyProvider + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - ExpoAsset (11.1.7): - ExpoModulesCore - - ExpoCamera (15.0.16): + - ExpoCamera (16.1.11): - ExpoModulesCore - ZXingObjC/OneD - ZXingObjC/PDF417 - - ExpoFileSystem (17.0.1): + - ExpoFileSystem (18.1.11): - ExpoModulesCore - - ExpoFont (12.0.10): + - ExpoFont (13.3.2): - ExpoModulesCore - - ExpoKeepAwake (13.0.2): + - ExpoKeepAwake (14.1.4): - ExpoModulesCore - ExpoLocalAuthentication (14.0.1): - ExpoModulesCore - - ExpoModulesCore (1.12.26): + - ExpoModulesCore (2.5.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -37,46 +62,49 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-jsinspector - React-NativeModulesApple - - React-RCTAppDelegate - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - ExpoScreenCapture (6.0.1): + - ExpoScreenCapture (8.0.8): - ExpoModulesCore - - ExpoStoreReview (7.0.2): + - ExpoStoreReview (9.0.8): - ExpoModulesCore - - FBLazyVector (0.75.4) - - fmt (9.1.0) + - fast_float (6.1.4) + - FBLazyVector (0.79.7) + - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.75.4): - - hermes-engine/Pre-built (= 0.75.4) - - hermes-engine/Pre-built (0.75.4) - - libwebp (1.3.2): - - libwebp/demux (= 1.3.2) - - libwebp/mux (= 1.3.2) - - libwebp/sharpyuv (= 1.3.2) - - libwebp/webp (= 1.3.2) - - libwebp/demux (1.3.2): + - hermes-engine (0.79.7): + - hermes-engine/Pre-built (= 0.79.7) + - hermes-engine/Pre-built (0.79.7) + - libwebp (1.5.0): + - libwebp/demux (= 1.5.0) + - libwebp/mux (= 1.5.0) + - libwebp/sharpyuv (= 1.5.0) + - libwebp/webp (= 1.5.0) + - libwebp/demux (1.5.0): - libwebp/webp - - libwebp/mux (1.3.2): + - libwebp/mux (1.5.0): - libwebp/demux - - libwebp/sharpyuv (1.3.2) - - libwebp/webp (1.3.2): + - libwebp/sharpyuv (1.5.0) + - libwebp/webp (1.5.0): - libwebp/sharpyuv - - lottie-ios (4.4.3) - - lottie-react-native (6.7.0): + - lottie-ios (4.5.0) + - lottie-react-native (7.2.5): - DoubleConversion - glog - hermes-engine - - lottie-ios (~> 4.4.1) - - RCT-Folly (= 2024.01.01.00) + - lottie-ios (= 4.5.0) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -84,72 +112,79 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RCT-Folly (2024.01.01.00): + - RCT-Folly (2024.11.18.00): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly/Default (= 2024.01.01.00) - - RCT-Folly/Default (2024.01.01.00): + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly/Fabric (2024.01.01.00): + - RCT-Folly/Fabric (2024.11.18.00): - boost - DoubleConversion - - fmt (= 9.1.0) - - glog - - RCTDeprecation (0.75.4) - - RCTRequired (0.75.4) - - RCTTypeSafety (0.75.4): - - FBLazyVector (= 0.75.4) - - RCTRequired (= 0.75.4) - - React-Core (= 0.75.4) - - React (0.75.4): - - React-Core (= 0.75.4) - - React-Core/DevSupport (= 0.75.4) - - React-Core/RCTWebSocket (= 0.75.4) - - React-RCTActionSheet (= 0.75.4) - - React-RCTAnimation (= 0.75.4) - - React-RCTBlob (= 0.75.4) - - React-RCTImage (= 0.75.4) - - React-RCTLinking (= 0.75.4) - - React-RCTNetwork (= 0.75.4) - - React-RCTSettings (= 0.75.4) - - React-RCTText (= 0.75.4) - - React-RCTVibration (= 0.75.4) - - React-callinvoker (0.75.4) - - React-Core (0.75.4): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - RCTDeprecation (0.79.7) + - RCTRequired (0.79.7) + - RCTTypeSafety (0.79.7): + - FBLazyVector (= 0.79.7) + - RCTRequired (= 0.79.7) + - React-Core (= 0.79.7) + - React (0.79.7): + - React-Core (= 0.79.7) + - React-Core/DevSupport (= 0.79.7) + - React-Core/RCTWebSocket (= 0.79.7) + - React-RCTActionSheet (= 0.79.7) + - React-RCTAnimation (= 0.79.7) + - React-RCTBlob (= 0.79.7) + - React-RCTImage (= 0.79.7) + - React-RCTLinking (= 0.79.7) + - React-RCTNetwork (= 0.79.7) + - React-RCTSettings (= 0.79.7) + - React-RCTText (= 0.79.7) + - React-RCTVibration (= 0.79.7) + - React-callinvoker (0.79.7) + - React-Core (0.79.7): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.75.4) + - React-Core/Default (= 0.79.7) - React-cxxreact - React-featureflags - React-hermes - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.75.4): + - React-Core/CoreModulesHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -158,15 +193,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.75.4): + - React-Core/Default (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-cxxreact - React-featureflags @@ -174,33 +210,35 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.75.4): + - React-Core/DevSupport (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.75.4) - - React-Core/RCTWebSocket (= 0.75.4) + - React-Core/Default (= 0.79.7) + - React-Core/RCTWebSocket (= 0.79.7) - React-cxxreact - React-featureflags - React-hermes - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.75.4): + - React-Core/RCTActionSheetHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -209,15 +247,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.75.4): + - React-Core/RCTAnimationHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -226,15 +265,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.75.4): + - React-Core/RCTBlobHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -243,15 +283,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.75.4): + - React-Core/RCTImageHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -260,15 +301,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.75.4): + - React-Core/RCTLinkingHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -277,15 +319,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.75.4): + - React-Core/RCTNetworkHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -294,15 +337,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.75.4): + - React-Core/RCTSettingsHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -311,15 +355,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.75.4): + - React-Core/RCTTextHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -328,15 +373,16 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.75.4): + - React-Core/RCTVibrationHeaders (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -345,132 +391,162 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.75.4): + - React-Core/RCTWebSocket (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.75.4) + - React-Core/Default (= 0.79.7) - React-cxxreact - React-featureflags - React-hermes - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.7.0) + - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.75.4): - - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.75.4) - - React-Core/CoreModulesHeaders (= 0.75.4) - - React-jsi (= 0.75.4) + - React-CoreModules (0.79.7): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety (= 0.79.7) + - React-Core/CoreModulesHeaders (= 0.79.7) + - React-jsi (= 0.79.7) - React-jsinspector + - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.75.4) - - ReactCodegen + - React-RCTFBReactNativeSpec + - React-RCTImage (= 0.79.7) - ReactCommon - - SocketRocket (= 0.7.0) - - React-cxxreact (0.75.4): + - SocketRocket (= 0.7.1) + - React-cxxreact (0.79.7): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.4) - - React-debug (= 0.75.4) - - React-jsi (= 0.75.4) + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.79.7) + - React-debug (= 0.79.7) + - React-jsi (= 0.79.7) - React-jsinspector - - React-logger (= 0.75.4) - - React-perflogger (= 0.75.4) - - React-runtimeexecutor (= 0.75.4) - - React-debug (0.75.4) - - React-defaultsnativemodule (0.75.4): + - React-jsinspectortracing + - React-logger (= 0.79.7) + - React-perflogger (= 0.79.7) + - React-runtimeexecutor (= 0.79.7) + - React-timing (= 0.79.7) + - React-debug (0.79.7) + - React-defaultsnativemodule (0.79.7): + - hermes-engine + - RCT-Folly + - React-domnativemodule + - React-featureflagsnativemodule + - React-hermes + - React-idlecallbacksnativemodule + - React-jsi + - React-jsiexecutor + - React-microtasksnativemodule + - React-RCTFBReactNativeSpec + - React-domnativemodule (0.79.7): + - hermes-engine + - RCT-Folly + - React-Fabric + - React-FabricComponents + - React-graphics + - React-hermes + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric (0.79.7): - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core + - React-cxxreact - React-debug - - React-domnativemodule - - React-Fabric + - React-Fabric/animations (= 0.79.7) + - React-Fabric/attributedstring (= 0.79.7) + - React-Fabric/componentregistry (= 0.79.7) + - React-Fabric/componentregistrynative (= 0.79.7) + - React-Fabric/components (= 0.79.7) + - React-Fabric/consistency (= 0.79.7) + - React-Fabric/core (= 0.79.7) + - React-Fabric/dom (= 0.79.7) + - React-Fabric/imagemanager (= 0.79.7) + - React-Fabric/leakchecker (= 0.79.7) + - React-Fabric/mounting (= 0.79.7) + - React-Fabric/observers (= 0.79.7) + - React-Fabric/scheduler (= 0.79.7) + - React-Fabric/telemetry (= 0.79.7) + - React-Fabric/templateprocessor (= 0.79.7) + - React-Fabric/uimanager (= 0.79.7) - React-featureflags - - React-featureflagsnativemodule - React-graphics - - React-idlecallbacksnativemodule - - React-ImageManager - - React-microtasksnativemodule - - React-NativeModulesApple - - React-RCTFabric + - React-hermes + - React-jsi + - React-jsiexecutor + - React-logger - React-rendererdebug + - React-runtimescheduler - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - Yoga - - React-domnativemodule (0.75.4): + - React-Fabric/animations (0.79.7): - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core + - React-cxxreact - React-debug - - React-Fabric - - React-FabricComponents - React-featureflags - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric + - React-hermes + - React-jsi + - React-jsiexecutor + - React-logger - React-rendererdebug + - React-runtimescheduler - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - Yoga - - React-Fabric (0.75.4): + - React-Fabric/attributedstring (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.75.4) - - React-Fabric/attributedstring (= 0.75.4) - - React-Fabric/componentregistry (= 0.75.4) - - React-Fabric/componentregistrynative (= 0.75.4) - - React-Fabric/components (= 0.75.4) - - React-Fabric/core (= 0.75.4) - - React-Fabric/dom (= 0.75.4) - - React-Fabric/imagemanager (= 0.75.4) - - React-Fabric/leakchecker (= 0.75.4) - - React-Fabric/mounting (= 0.75.4) - - React-Fabric/observers (= 0.75.4) - - React-Fabric/scheduler (= 0.75.4) - - React-Fabric/telemetry (= 0.75.4) - - React-Fabric/templateprocessor (= 0.75.4) - - React-Fabric/uimanager (= 0.75.4) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -478,12 +554,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.75.4): + - React-Fabric/componentregistry (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -491,6 +568,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -498,12 +576,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.75.4): + - React-Fabric/componentregistrynative (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -511,6 +590,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -518,19 +598,25 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.75.4): + - React-Fabric/components (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.79.7) + - React-Fabric/components/root (= 0.79.7) + - React-Fabric/components/scrollview (= 0.79.7) + - React-Fabric/components/view (= 0.79.7) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -538,12 +624,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.75.4): + - React-Fabric/components/legacyviewmanagerinterop (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -551,6 +638,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -558,22 +646,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.75.4): + - React-Fabric/components/root (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.75.4) - - React-Fabric/components/root (= 0.75.4) - - React-Fabric/components/view (= 0.75.4) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -581,12 +668,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.75.4): + - React-Fabric/components/scrollview (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -594,6 +682,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -601,12 +690,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.75.4): + - React-Fabric/components/view (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -614,19 +704,23 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger + - React-renderercss - React-rendererdebug - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.75.4): + - Yoga + - React-Fabric/consistency (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -634,6 +728,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -641,13 +736,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - Yoga - - React-Fabric/core (0.75.4): + - React-Fabric/core (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -655,6 +750,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -662,12 +758,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.75.4): + - React-Fabric/dom (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -675,6 +772,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -682,12 +780,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.75.4): + - React-Fabric/imagemanager (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -695,6 +794,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -702,12 +802,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.75.4): + - React-Fabric/leakchecker (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -715,6 +816,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -722,12 +824,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.75.4): + - React-Fabric/mounting (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -735,6 +838,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -742,20 +846,22 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.75.4): + - React-Fabric/observers (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.75.4) + - React-Fabric/observers/events (= 0.79.7) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -763,12 +869,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.75.4): + - React-Fabric/observers/events (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -776,6 +883,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -783,12 +891,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.75.4): + - React-Fabric/scheduler (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -797,6 +906,7 @@ PODS: - React-Fabric/observers/events - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -805,12 +915,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.75.4): + - React-Fabric/telemetry (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -818,6 +929,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -825,12 +937,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.75.4): + - React-Fabric/templateprocessor (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -838,6 +951,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -845,20 +959,22 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.75.4): + - React-Fabric/uimanager (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.75.4) + - React-Fabric/uimanager/consistency (= 0.79.7) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -867,12 +983,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.75.4): + - React-Fabric/uimanager/consistency (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -880,6 +997,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -888,69 +1006,72 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.75.4): + - React-FabricComponents (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.75.4) - - React-FabricComponents/textlayoutmanager (= 0.75.4) + - React-FabricComponents/components (= 0.79.7) + - React-FabricComponents/textlayoutmanager (= 0.79.7) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.75.4): + - React-FabricComponents/components (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.75.4) - - React-FabricComponents/components/iostextinput (= 0.75.4) - - React-FabricComponents/components/modal (= 0.75.4) - - React-FabricComponents/components/rncore (= 0.75.4) - - React-FabricComponents/components/safeareaview (= 0.75.4) - - React-FabricComponents/components/scrollview (= 0.75.4) - - React-FabricComponents/components/text (= 0.75.4) - - React-FabricComponents/components/textinput (= 0.75.4) - - React-FabricComponents/components/unimplementedview (= 0.75.4) + - React-FabricComponents/components/inputaccessory (= 0.79.7) + - React-FabricComponents/components/iostextinput (= 0.79.7) + - React-FabricComponents/components/modal (= 0.79.7) + - React-FabricComponents/components/rncore (= 0.79.7) + - React-FabricComponents/components/safeareaview (= 0.79.7) + - React-FabricComponents/components/scrollview (= 0.79.7) + - React-FabricComponents/components/text (= 0.79.7) + - React-FabricComponents/components/textinput (= 0.79.7) + - React-FabricComponents/components/unimplementedview (= 0.79.7) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.75.4): + - React-FabricComponents/components/inputaccessory (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -959,21 +1080,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.75.4): + - React-FabricComponents/components/iostextinput (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -982,21 +1104,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.75.4): + - React-FabricComponents/components/modal (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1005,21 +1128,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.75.4): + - React-FabricComponents/components/rncore (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1028,21 +1152,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.75.4): + - React-FabricComponents/components/safeareaview (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1051,21 +1176,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.75.4): + - React-FabricComponents/components/scrollview (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1074,21 +1200,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.75.4): + - React-FabricComponents/components/text (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1097,21 +1224,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.75.4): + - React-FabricComponents/components/textinput (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1120,21 +1248,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.75.4): + - React-FabricComponents/components/unimplementedview (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1143,21 +1272,22 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.75.4): + - React-FabricComponents/textlayoutmanager (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1166,98 +1296,83 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.75.4): + - React-FabricImage (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.75.4) - - RCTTypeSafety (= 0.75.4) + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired (= 0.79.7) + - RCTTypeSafety (= 0.79.7) - React-Fabric + - React-featureflags - React-graphics + - React-hermes - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.75.4) + - React-jsiexecutor (= 0.79.7) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.75.4) - - React-featureflagsnativemodule (0.75.4): - - DoubleConversion - - glog + - React-featureflags (0.79.7): + - RCT-Folly (= 2024.11.18.00) + - React-featureflagsnativemodule (0.79.7): - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric + - RCT-Folly - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging + - React-hermes + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - Yoga - - React-graphics (0.75.4): + - React-graphics (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly/Fabric (= 2024.01.01.00) + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-hermes - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.75.4): + - React-hermes (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.75.4) + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.79.7) - React-jsi - - React-jsiexecutor (= 0.75.4) + - React-jsiexecutor (= 0.79.7) - React-jsinspector - - React-perflogger (= 0.75.4) + - React-jsinspectortracing + - React-perflogger (= 0.79.7) - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.75.4): - - DoubleConversion + - React-idlecallbacksnativemodule (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug + - RCT-Folly + - React-hermes + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - Yoga - - React-ImageManager (0.75.4): + - React-ImageManager (0.79.7): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1266,47 +1381,78 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.75.4): - - RCT-Folly/Fabric (= 2024.01.01.00) + - React-jserrorhandler (0.79.7): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-cxxreact - React-debug + - React-featureflags - React-jsi - - React-jsi (0.75.4): + - ReactCommon/turbomodule/bridging + - React-jsi (0.79.7): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.75.4): + - RCT-Folly (= 2024.11.18.00) + - React-jsiexecutor (0.79.7): - DoubleConversion - - fmt (= 9.1.0) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.75.4) - - React-jsi (= 0.75.4) + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.79.7) + - React-jsi (= 0.79.7) - React-jsinspector - - React-perflogger (= 0.75.4) - - React-jsinspector (0.75.4): + - React-jsinspectortracing + - React-perflogger (= 0.79.7) + - React-jsinspector (0.79.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly - React-featureflags - React-jsi - - React-runtimeexecutor (= 0.75.4) - - React-jsitracing (0.75.4): + - React-jsinspectortracing + - React-perflogger (= 0.79.7) + - React-runtimeexecutor (= 0.79.7) + - React-jsinspectortracing (0.79.7): + - RCT-Folly + - React-oscompat + - React-jsitooling (0.79.7): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.79.7) + - React-jsi (= 0.79.7) + - React-jsinspector + - React-jsinspectortracing + - React-jsitracing (0.79.7): - React-jsi - - React-logger (0.75.4): + - React-logger (0.79.7): - glog - - React-Mapbuffer (0.75.4): + - React-Mapbuffer (0.79.7): - glog - React-debug - - React-microtasksnativemodule (0.75.4): + - React-microtasksnativemodule (0.79.7): + - hermes-engine + - RCT-Folly + - React-hermes + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - react-native-blur (4.4.1): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1314,20 +1460,23 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-blur (4.4.1): + - react-native-compat (2.17.1): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1335,20 +1484,31 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-compat (2.17.1): + - react-native-config (1.5.1): + - react-native-config/App (= 1.5.1) + - react-native-config/App (1.5.1): + - React-Core + - react-native-get-random-values (1.11.0): + - React-Core + - react-native-netinfo (11.4.1): + - React-Core + - react-native-safe-area-context (5.5.2): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1356,53 +1516,49 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi + - react-native-safe-area-context/common (= 5.5.2) + - react-native-safe-area-context/fabric (= 5.5.2) - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-config (1.5.1): - - react-native-config/App (= 1.5.1) - - react-native-config/App (1.5.1): - - React-Core - - react-native-get-random-values (1.11.0): - - React-Core - - react-native-netinfo (11.4.1): - - React-Core - - react-native-safe-area-context (4.10.5): - - React-Core - - react-native-skia (1.12.4): + - react-native-safe-area-context/common (5.5.2): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - - React - - React-callinvoker - React-Core - React-debug - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-slider (4.5.2): + - react-native-safe-area-context/fabric (5.5.2): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1410,88 +1566,199 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi + - react-native-safe-area-context/common - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-tcp-socket (6.0.6): - - CocoaAsyncSocket - - React-Core - - react-native-webview-mm (14.0.4): - - React-Core - - React-nativeconfig (0.75.4) - - React-NativeModulesApple (0.75.4): + - react-native-skia (2.3.7): + - DoubleConversion - glog - hermes-engine - - React-callinvoker - - React-Core - - React-cxxreact - - React-jsi - - React-jsinspector - - React-runtimeexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - React-perflogger (0.75.4) - - React-performancetimeline (0.75.4): - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact - - React-RCTActionSheet (0.75.4): - - React-Core/RCTActionSheetHeaders (= 0.75.4) - - React-RCTAnimation (0.75.4): - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety - - React-Core/RCTAnimationHeaders - - React-jsi - - React-NativeModulesApple - - ReactCodegen - - ReactCommon - - React-RCTAppDelegate (0.75.4): - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety + - React + - React-callinvoker - React-Core - - React-CoreModules - React-debug - - React-defaultsnativemodule - React-Fabric - React-featureflags - React-graphics - React-hermes - - React-nativeconfig + - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - - React-RCTNetwork + - React-renderercss - React-rendererdebug - - React-RuntimeApple - - React-RuntimeCore - - React-RuntimeHermes - - React-runtimescheduler - React-utils - ReactCodegen - - ReactCommon - - React-RCTBlob (0.75.4): + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-slider (4.5.6): - DoubleConversion - - fmt (= 9.1.0) + - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - react-native-slider/common (= 4.5.6) + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-slider/common (4.5.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-tcp-socket (6.0.6): + - CocoaAsyncSocket + - React-Core + - react-native-webview-mm (14.5.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-NativeModulesApple (0.79.7): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-oscompat (0.79.7) + - React-perflogger (0.79.7): + - DoubleConversion + - RCT-Folly (= 2024.11.18.00) + - React-performancetimeline (0.79.7): + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact + - React-featureflags + - React-jsinspectortracing + - React-perflogger + - React-timing + - React-RCTActionSheet (0.79.7): + - React-Core/RCTActionSheetHeaders (= 0.79.7) + - React-RCTAnimation (0.79.7): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTAppDelegate (0.79.7): + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-jsitooling + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RCTImage + - React-RCTNetwork + - React-RCTRuntime + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-runtimescheduler + - React-utils + - ReactCommon + - React-RCTBlob (0.79.7): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi - React-jsinspector - React-NativeModulesApple + - React-RCTFBReactNativeSpec - React-RCTNetwork - - ReactCodegen - ReactCommon - - React-RCTFabric (0.75.4): + - React-RCTFabric (0.79.7): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-Core - React-debug - React-Fabric @@ -1499,132 +1766,179 @@ PODS: - React-FabricImage - React-featureflags - React-graphics + - React-hermes - React-ImageManager - React-jsi - React-jsinspector - - React-nativeconfig + - React-jsinspectortracing - React-performancetimeline + - React-RCTAnimation - React-RCTImage - React-RCTText - React-rendererconsistency + - React-renderercss - React-rendererdebug - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.75.4): - - RCT-Folly (= 2024.01.01.00) + - React-RCTFBReactNativeSpec (0.79.7): + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-hermes + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - ReactCommon + - React-RCTImage (0.79.7): + - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTImageHeaders - React-jsi - React-NativeModulesApple + - React-RCTFBReactNativeSpec - React-RCTNetwork - - ReactCodegen - ReactCommon - - React-RCTLinking (0.75.4): - - React-Core/RCTLinkingHeaders (= 0.75.4) - - React-jsi (= 0.75.4) + - React-RCTLinking (0.79.7): + - React-Core/RCTLinkingHeaders (= 0.79.7) + - React-jsi (= 0.79.7) - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.75.4) - - React-RCTNetwork (0.75.4): - - RCT-Folly (= 2024.01.01.00) + - ReactCommon/turbomodule/core (= 0.79.7) + - React-RCTNetwork (0.79.7): + - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders - React-jsi - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTSettings (0.75.4): - - RCT-Folly (= 2024.01.01.00) + - React-RCTRuntime (0.79.7): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-Core + - React-hermes + - React-jsi + - React-jsinspector + - React-jsinspectortracing + - React-jsitooling + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-RCTSettings (0.79.7): + - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTText (0.75.4): - - React-Core/RCTTextHeaders (= 0.75.4) + - React-RCTText (0.79.7): + - React-Core/RCTTextHeaders (= 0.79.7) - Yoga - - React-RCTVibration (0.75.4): - - RCT-Folly (= 2024.01.01.00) + - React-RCTVibration (0.79.7): + - RCT-Folly (= 2024.11.18.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - React-rendererconsistency (0.75.4) - - React-rendererdebug (0.75.4): + - React-rendererconsistency (0.79.7) + - React-renderercss (0.79.7): + - React-debug + - React-utils + - React-rendererdebug (0.79.7): - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - RCT-Folly (= 2024.11.18.00) - React-debug - - React-rncore (0.75.4) - - React-RuntimeApple (0.75.4): + - React-rncore (0.79.7) + - React-RuntimeApple (0.79.7): - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-callinvoker - React-Core/Default - React-CoreModules - React-cxxreact + - React-featureflags - React-jserrorhandler - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-Mapbuffer - React-NativeModulesApple - React-RCTFabric + - React-RCTFBReactNativeSpec - React-RuntimeCore - React-runtimeexecutor - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.75.4): + - React-RuntimeCore (0.79.7): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-cxxreact + - React-Fabric - React-featureflags + - React-hermes - React-jserrorhandler - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling + - React-performancetimeline - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.75.4): - - React-jsi (= 0.75.4) - - React-RuntimeHermes (0.75.4): + - React-runtimeexecutor (0.79.7): + - React-jsi (= 0.79.7) + - React-RuntimeHermes (0.79.7): - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-featureflags - React-hermes - React-jsi - React-jsinspector + - React-jsinspectortracing + - React-jsitooling - React-jsitracing - - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.75.4): + - React-runtimescheduler (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - React-callinvoker - React-cxxreact - React-debug - React-featureflags + - React-hermes - React-jsi + - React-jsinspectortracing + - React-performancetimeline - React-rendererconsistency - React-rendererdebug - React-runtimeexecutor + - React-timing - React-utils - - React-utils (0.75.4): + - React-timing (0.79.7) + - React-utils (0.79.7): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - React-debug - - React-jsi (= 0.75.4) - - ReactCodegen (0.75.4): + - React-hermes + - React-jsi (= 0.79.7) + - ReactAppDependencyProvider (0.79.7): + - ReactCodegen + - ReactCodegen (0.79.7): - DoubleConversion - glog - hermes-engine @@ -1637,69 +1951,140 @@ PODS: - React-FabricImage - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-NativeModulesApple + - React-RCTAppDelegate - React-rendererdebug - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.75.4): - - ReactCommon/turbomodule (= 0.75.4) - - ReactCommon/turbomodule (0.75.4): + - ReactCommon (0.79.7): + - ReactCommon/turbomodule (= 0.79.7) + - ReactCommon/turbomodule (0.79.7): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.79.7) + - React-cxxreact (= 0.79.7) + - React-jsi (= 0.79.7) + - React-logger (= 0.79.7) + - React-perflogger (= 0.79.7) + - ReactCommon/turbomodule/bridging (= 0.79.7) + - ReactCommon/turbomodule/core (= 0.79.7) + - ReactCommon/turbomodule/bridging (0.79.7): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.79.7) + - React-cxxreact (= 0.79.7) + - React-jsi (= 0.79.7) + - React-logger (= 0.79.7) + - React-perflogger (= 0.79.7) + - ReactCommon/turbomodule/core (0.79.7): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.79.7) + - React-cxxreact (= 0.79.7) + - React-debug (= 0.79.7) + - React-featureflags (= 0.79.7) + - React-jsi (= 0.79.7) + - React-logger (= 0.79.7) + - React-perflogger (= 0.79.7) + - React-utils (= 0.79.7) + - RealmJS (12.14.2): + - React + - RNArgon2 (2.0.1): + - CatCrypto + - React-Core + - RNBootSplash (6.3.11): - DoubleConversion - - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.4) - - React-cxxreact (= 0.75.4) - - React-jsi (= 0.75.4) - - React-logger (= 0.75.4) - - React-perflogger (= 0.75.4) - - ReactCommon/turbomodule/bridging (= 0.75.4) - - ReactCommon/turbomodule/core (= 0.75.4) - - ReactCommon/turbomodule/bridging (0.75.4): + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNCAsyncStorage (2.2.0): - DoubleConversion - - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.4) - - React-cxxreact (= 0.75.4) - - React-jsi (= 0.75.4) - - React-logger (= 0.75.4) - - React-perflogger (= 0.75.4) - - ReactCommon/turbomodule/core (0.75.4): + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNCClipboard (1.16.3): - DoubleConversion - - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.4) - - React-cxxreact (= 0.75.4) - - React-debug (= 0.75.4) - - React-featureflags (= 0.75.4) - - React-jsi (= 0.75.4) - - React-logger (= 0.75.4) - - React-perflogger (= 0.75.4) - - React-utils (= 0.75.4) - - RealmJS (12.14.2): - - React - - RNArgon2 (2.0.1): - - CatCrypto - - React-Core - - RNBootSplash (5.5.3): - - React-Core - - RNCAsyncStorage (2.0.0): - - React-Core - - RNCClipboard (1.14.3): + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNCMaskedView (0.3.2): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1707,30 +2092,55 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNDateTimePicker (8.2.0): + - RNDateTimePicker (8.4.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNDefaultPreference (1.4.4): - React-Core - - RNDeviceInfo (13.0.0): + - RNDeviceInfo (14.0.1): - React-Core - RNFastImage (8.6.3): - React-Core - SDWebImage (~> 5.18.0) - SDWebImageWebPCoder (~> 0.13.0) - - RNFlashList (1.7.1): + - RNFlashList (1.8.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1738,9 +2148,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1749,11 +2162,11 @@ PODS: - Yoga - RNFS (2.20.0): - React-Core - - RNGestureHandler (2.19.0): + - RNGestureHandler (2.26.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1761,9 +2174,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1776,11 +2192,62 @@ PODS: - React-Core - RNReactNativeHapticFeedback (1.14.0): - React-Core - - RNReanimated (3.16.1): + - RNReanimated (3.19.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/reanimated (= 3.19.3) + - RNReanimated/worklets (= 3.19.3) + - Yoga + - RNReanimated/reanimated (3.19.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/reanimated/apple (= 3.19.3) + - Yoga + - RNReanimated/reanimated/apple (3.19.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1788,22 +2255,23 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.16.1) - - RNReanimated/worklets (= 3.16.1) - Yoga - - RNReanimated/reanimated (3.16.1): + - RNReanimated/worklets (3.19.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1811,21 +2279,24 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.16.1) + - RNReanimated/worklets/apple (= 3.19.3) - Yoga - - RNReanimated/reanimated/apple (3.16.1): + - RNReanimated/worklets/apple (3.19.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1833,20 +2304,23 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated/worklets (3.16.1): + - RNScreens (4.9.1): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1854,20 +2328,25 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - RNScreens/common (= 4.9.1) - Yoga - - RNScreens (3.35.0): + - RNScreens/common (4.9.1): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1875,27 +2354,99 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric - React-RCTImage + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNShare (12.2.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNShare (10.0.0): + - RNSVG (15.14.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - RNSVG (15.8.0): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNSVG/common (= 15.14.0) + - Yoga + - RNSVG/common (15.14.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - SDWebImage (5.18.12): - SDWebImage/Core (= 5.18.12) - SDWebImage/Core (5.18.12) - SDWebImageWebPCoder (0.13.0): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.17) - - SocketRocket (0.7.0) + - SocketRocket (0.7.1) - Yoga (0.0.0) - ZXingObjC/Core (3.6.9) - ZXingObjC/OneD (3.6.9): @@ -1919,6 +2470,7 @@ DEPENDENCIES: - ExpoModulesCore (from `../node_modules/expo-modules-core`) - ExpoScreenCapture (from `../node_modules/expo-screen-capture/ios`) - ExpoStoreReview (from `../node_modules/expo-store-review/ios`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) @@ -1951,6 +2503,8 @@ DEPENDENCIES: - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) + - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) @@ -1965,8 +2519,8 @@ DEPENDENCIES: - "react-native-slider (from `../node_modules/@react-native-community/slider`)" - react-native-tcp-socket (from `../node_modules/react-native-tcp-socket`) - "react-native-webview-mm (from `../node_modules/@metamask/react-native-webview`)" - - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) @@ -1974,13 +2528,16 @@ DEPENDENCIES: - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - React-rncore (from `../node_modules/react-native/ReactCommon`) - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) @@ -1988,7 +2545,9 @@ DEPENDENCIES: - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactAppDependencyProvider (from `build/generated/ios`) - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - RealmJS (from `../node_modules/realm`) @@ -2055,6 +2614,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-screen-capture/ios" ExpoStoreReview: :path: "../node_modules/expo-store-review/ios" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" fmt: @@ -2063,7 +2624,7 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2024-08-15-RNv0.75.1-4b3bf912cc0f705b51b71ce1a5b8bd79b93a451b + :tag: hermes-2025-06-04-RNv0.79.3-7f9a871eefeb2c3852365ee80f0b6733ec12ac3b lottie-react-native: :path: "../node_modules/lottie-react-native" RCT-Folly: @@ -2116,6 +2677,10 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsinspectortracing: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" + React-jsitooling: + :path: "../node_modules/react-native/ReactCommon/jsitooling" React-jsitracing: :path: "../node_modules/react-native/ReactCommon/hermes/executor/" React-logger: @@ -2144,10 +2709,10 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-tcp-socket" react-native-webview-mm: :path: "../node_modules/@metamask/react-native-webview" - React-nativeconfig: - :path: "../node_modules/react-native/ReactCommon" React-NativeModulesApple: :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-oscompat: + :path: "../node_modules/react-native/ReactCommon/oscompat" React-perflogger: :path: "../node_modules/react-native/ReactCommon/reactperflogger" React-performancetimeline: @@ -2162,12 +2727,16 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Blob" React-RCTFabric: :path: "../node_modules/react-native/React" + React-RCTFBReactNativeSpec: + :path: "../node_modules/react-native/React" React-RCTImage: :path: "../node_modules/react-native/Libraries/Image" React-RCTLinking: :path: "../node_modules/react-native/Libraries/LinkingIOS" React-RCTNetwork: :path: "../node_modules/react-native/Libraries/Network" + React-RCTRuntime: + :path: "../node_modules/react-native/React/Runtime" React-RCTSettings: :path: "../node_modules/react-native/Libraries/Settings" React-RCTText: @@ -2176,6 +2745,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Vibration" React-rendererconsistency: :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-renderercss: + :path: "../node_modules/react-native/ReactCommon/react/renderer/css" React-rendererdebug: :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" React-rncore: @@ -2190,8 +2761,12 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/react/runtime" React-runtimescheduler: :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" React-utils: :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactAppDependencyProvider: + :path: build/generated/ios ReactCodegen: :path: build/generated/ios ReactCommon: @@ -2240,121 +2815,129 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: 4cb898d0bf20404aab1850c656dcea009429d6c1 + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 CatCrypto: a477899b6be4954e75be4897e732da098cc0a5a8 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 - DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 - EXApplication: c08200c34daca7af7fd76ac4b9d606077410e8ad - EXConstants: 409690fbfd5afea964e5e9d6c4eb2c2b59222c59 - EXNotifications: 85496c9fab09d759d0e4ff594bca078ab817c40c - Expo: 9b6666ef2fedcfc89c5b9be2aa1ce12b81f9e7f5 - ExpoAsset: 323700f291684f110fb55f0d4022a3362ea9f875 - ExpoCamera: 929be541d1c1319fcf32f9f5d9df8b97804346b5 - ExpoFileSystem: 80bfe850b1f9922c16905822ecbf97acd711dc51 - ExpoFont: 00756e6c796d8f7ee8d211e29c8b619e75cbf238 - ExpoKeepAwake: 3b8815d9dd1d419ee474df004021c69fdd316d08 - ExpoLocalAuthentication: 9e02a56a4cf9868f0052656a93d4c94101a42ed7 - ExpoModulesCore: 3c510215eb78bb9c757cc0a6c1b1f52d9dbb63c8 - ExpoScreenCapture: ece7593264d1384aff2481eea29f9a238b484090 - ExpoStoreReview: 15f9a636b62ff00bb21cbe9a9fe22f0239da4481 - FBLazyVector: 430e10366de01d1e3d57374500b1b150fe482e6d - fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 - glog: 69ef571f3de08433d766d614c73a9838a06bf7eb - hermes-engine: ea92f60f37dba025e293cbe4b4a548fd26b610a0 - libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 - lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 - lottie-react-native: 3f0e9dc322229ca99f4b35795bc3794d84ff04bc - RCT-Folly: 4464f4d875961fce86008d45f4ecf6cef6de0740 - RCTDeprecation: 726d24248aeab6d7180dac71a936bbca6a994ed1 - RCTRequired: a94e7febda6db0345d207e854323c37e3a31d93b - RCTTypeSafety: 28e24a6e44f5cbf912c66dde6ab7e07d1059a205 - React: c2830fa483b0334bda284e46a8579ebbe0c5447e - React-callinvoker: 4aecde929540c26b841a4493f70ebf6016691eb8 - React-Core: 9c059899f00d46b5cec3ed79251f77d9c469553d - React-CoreModules: 9fac2d31803c0ed03e4ddaa17f1481714f8633a5 - React-cxxreact: a979810a3ca4045ceb09407a17563046a7f71494 - React-debug: 3d21f69d8def0656f8b8ec25c0f05954f4d862c5 - React-defaultsnativemodule: 2fa2bdb7bd03ff9764facc04aa8520ebf14febae - React-domnativemodule: 986e6fe7569e1383dce452a7b013b6c843a752df - React-Fabric: 3bc7be9e3a6b7581fc828dc2aa041e107fc8ffb8 - React-FabricComponents: 668e0cb02344c2942e4c8921a643648faa6dc364 - React-FabricImage: 3f44dd25a2b020ed5215d4438a1bb1f3461cd4f1 - React-featureflags: ee1abd6f71555604a36cda6476e3c502ca9a48e5 - React-featureflagsnativemodule: 7ccc0cd666c2a6257401dceb7920818ac2b42803 - React-graphics: d7dd9c8d75cad5af19e19911fa370f78f2febd96 - React-hermes: 2069b08e965e48b7f8aa2c0ca0a2f383349ed55d - React-idlecallbacksnativemodule: e211b2099b6dced97959cb58257bab2b2de4d7ef - React-ImageManager: ab7a7d17dd0ff1ef1d4e1e88197d1119da9957ce - React-jserrorhandler: d9e867bb83b868472f3f7601883f0403b3e3942d - React-jsi: d68f1d516e5120a510afe356647a6a1e1f98f2db - React-jsiexecutor: 6366a08a0fc01c9b65736f8deacd47c4a397912a - React-jsinspector: 0ac947411f0c73b34908800cc7a6a31d8f93e1a8 - React-jsitracing: 0e8c0aadb1fcec6b1e4f2a66ee3b0da80f0f8615 - React-logger: d79b704bf215af194f5213a6b7deec50ba8e6a9b - React-Mapbuffer: b982d5bba94a8bc073bda48f0d27c9b28417fae3 - React-microtasksnativemodule: 2b73e68f0462f3175f98782db08896f8501afd20 - react-native-blur: a1bf334589f44658a58a859b1f3defe28e367fcf - react-native-compat: 6f315a20c4a80382bd315d01c1672b4536104bcc - react-native-config: 86038147314e2e6d10ea9972022aa171e6b1d4d8 - react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06 - react-native-netinfo: f0a9899081c185db1de5bb2fdc1c88c202a059ac - react-native-safe-area-context: a240ad4b683349e48b1d51fed1611138d1bdad97 - react-native-skia: 56d126fa2d216f4056929db508102126663bce93 - react-native-slider: 97ce0bd921f40de79cead9754546d5e4e7ba44f8 - react-native-tcp-socket: e724380c910c2e704816ec817ed28f1342246ff7 - react-native-webview-mm: c518409c962c1f0f95c08bb6a700b9f97aff131b - React-nativeconfig: 8c83d992b9cc7d75b5abe262069eaeea4349f794 - React-NativeModulesApple: 9f7920224a3b0c7d04d77990067ded14cee3c614 - React-perflogger: 59e1a3182dca2cee7b9f1f7aab204018d46d1914 - React-performancetimeline: a9d05533ff834c6aa1f532e05e571f3fd2e3c1ed - React-RCTActionSheet: d80e68d3baa163e4012a47c1f42ddd8bcd9672cc - React-RCTAnimation: bde981f6bd7f8493696564da9b3bd05721d3b3cc - React-RCTAppDelegate: 0176615c51476c88212bf3edbafb840d39ea7631 - React-RCTBlob: 520a0382bf8e89b9153d60e3c6293e51615834e9 - React-RCTFabric: c9da097b19b30017a99498b8c66a69c72f3ce689 - React-RCTImage: 90448d2882464af6015ed57c98f463f8748be465 - React-RCTLinking: 1bd95d0a704c271d21d758e0f0388cced768d77d - React-RCTNetwork: 218af6e63eb9b47935cc5a775b7a1396cf10ff91 - React-RCTSettings: e10b8e42b0fce8a70fbf169de32a2ae03243ef6b - React-RCTText: e7bf9f4997a1a0b45c052d4ad9a0fe653061cf29 - React-RCTVibration: 5b70b7f11e48d1c57e0d4832c2097478adbabe93 - React-rendererconsistency: f620c6e003e3c4593e6349d8242b8aeb3d4633f0 - React-rendererdebug: e697680f4dd117becc5daf9ea9800067abcee91c - React-rncore: c22bd84cc2f38947f0414fab6646db22ff4f80cd - React-RuntimeApple: de0976836b90b484305638616898cbc665c67c13 - React-RuntimeCore: 3c4a5aa63d9e7a3c17b7fb23f32a72a8bcfccf57 - React-runtimeexecutor: ea90d8e3a9e0f4326939858dafc6ab17c031a5d3 - React-RuntimeHermes: c6b0afdf1f493621214eeb6517fb859ce7b21b81 - React-runtimescheduler: 84f0d876d254bce6917a277b3930eb9bc29df6c7 - React-utils: cbe8b8b3d7b2ac282e018e46f0e7b25cdc87c5a0 - ReactCodegen: 4bcb34e6b5ebf6eef5cee34f55aa39991ea1c1f1 - ReactCommon: 6a952e50c2a4b694731d7682aaa6c79bc156e4ad - RealmJS: ab0e1afd06ef856f8ae396520da1690bcaa669f8 - RNArgon2: 1481820722fd4af1575c09f7fc9ad67c00ee8a42 - RNBootSplash: e025d4ee98d942ee6c8b495a6fe66339a6b5f6dd - RNCAsyncStorage: d35c79ffba52c1013013e16b1fc295aec2feabb6 - RNCClipboard: 2821ac938ef46f736a8de0c8814845dde2dcbdfb - RNCMaskedView: e07a0b5e9e8d6962826def06e6ff2ecdb815433f - RNDateTimePicker: 40ffda97d071a98a10fdca4fa97e3977102ccd14 - RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31 - RNDeviceInfo: 55264dd7cc939dad6e9c231a7621311f5277f1dc - RNFastImage: 07f5a49900db2947f4ecc81f5e2b2b8e03da36e2 - RNFlashList: 115dd44377580761bff386a0caebf165424cf16f - RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 - RNGestureHandler: 3b6fa2bfa341c413d3d08444b838515b58e48ee7 - RNKeychain: a65256b6ca6ba6976132cc4124b238a5b13b3d9c - RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81 - RNReactNativeHapticFeedback: 1e3efeca9628ff9876ee7cdd9edec1b336913f8c - RNReanimated: f42a5044d121d68e91680caacb0293f4274228eb - RNScreens: c7ceced6a8384cb9be5e7a5e88e9e714401fd958 - RNShare: 11fcd7daa34825a26cffda827170493690c376a8 - RNSVG: 8b1a777d54096b8c2a0fd38fc9d5a454332bbb4d + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + EXApplication: 296622817d459f46b6c5fe8691f4aac44d2b79e7 + EXConstants: 98bcf0f22b820f9b28f9fee55ff2daededadd2f8 + EXNotifications: 7cff475adb5d7a255a9ea46bbd2589cb3b454506 + Expo: dd7f49380001a55ea776f905f8b3c1c540160b09 + ExpoAsset: ef06e880126c375f580d4923fdd1cdf4ee6ee7d6 + ExpoCamera: e1879906d41184e84b57d7643119f8509414e318 + ExpoFileSystem: 7f92f7be2f5c5ed40a7c9efc8fa30821181d9d63 + ExpoFont: cf508bc2e6b70871e05386d71cab927c8524cc8e + ExpoKeepAwake: bf0811570c8da182bfb879169437d4de298376e7 + ExpoLocalAuthentication: b94db59f55df95350223200c746b4ddf0cb7cfc0 + ExpoModulesCore: 00a1b5c73248465bd0b93f59f8538c4573dac579 + ExpoScreenCapture: d3bf63d48c87f8dad3f0874412ce9d47b6ddf709 + ExpoStoreReview: 15f19e0d6cb6e00330ba1b356485bf47ef19c39a + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: b60fe06f0f15b7d7408f169442176e69e8eeacde + fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd + glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 + hermes-engine: 13c84524b3b6e884b2cf3b3b1e002ffd147d88a3 + libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 + lottie-ios: a881093fab623c467d3bce374367755c272bdd59 + lottie-react-native: 8b8f0478a88312cc1001837ac4596d419935dc5c + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 + RCTDeprecation: b9b1716eec53aaeaa859aa45e27de7b615cff732 + RCTRequired: 862acb469086f601f81aab298e00c2a13d572099 + RCTTypeSafety: 45120b9028ec6819266f3ef7a6b8e8a9f0a083d4 + React: 49e89943d7b1bc95c5895a05c6cf106ba112d037 + React-callinvoker: 9baafac613e363728c47ceaf65b9597bd1b96df0 + React-Core: 2f642fff28911adf30dd5169a7d9d2b95dc59bc9 + React-CoreModules: a499af0e4a8dfa78cbc04c131b59fa3286210148 + React-cxxreact: 1a485bb66f4bdde62f89eb0e5db1262182fc40e0 + React-debug: 40119ee63d9fb04f8b11d460c3c30b5997d9d737 + React-defaultsnativemodule: d578aae775984b79f126a0ffd8481b70c0f145fc + React-domnativemodule: 2351486bd32ead37c242b00a71cbdff8dabb274c + React-Fabric: 3e4c67dd7918274fe00fdc34a56696095e4d83f0 + React-FabricComponents: c82dfc3d8e1faf5cd87b08f5f9e2be0fe9b775f3 + React-FabricImage: a296eafd939fb33e0acf09d33239408fe4624582 + React-featureflags: 3fdf55dee69c3e165411fbde4f9f3acb9e428dfd + React-featureflagsnativemodule: 1139ddc9fc4c703ef9165a50c83cdca710baa674 + React-graphics: 4d1c605d894e9c9a887bb6934d9cca89d2ff36f5 + React-hermes: 59edcac48ec38831b40cf28ed34b6d4d735cbdd3 + React-idlecallbacksnativemodule: 23c6b73801992033086c2e8b9519bbf6aaf84165 + React-ImageManager: 2b2c8c39cc29e55a59dc1a0a9427ec7f89aae02b + React-jserrorhandler: 7d2f6eb3821818dc914a278f06586f047d623d72 + React-jsi: f6fee849355b8819936b02d5c5b23a55a3d69540 + React-jsiexecutor: cd6fd873482d7183206eb612ce362d02c6fb8556 + React-jsinspector: d2b58ae4a2fa080b3fcc4a5a81dfbd7727654a6d + React-jsinspectortracing: d3c7d7ec87d24f4c3832ecf141afcbf8844eee80 + React-jsitooling: bfde104a6ea4540830a246c6ffd9f1d07bf677b0 + React-jsitracing: 826dc37b6d98de03e0e64d8d6017b40af766dbf0 + React-logger: fbdc0814b62fefa412a90af7cacc666387f1bc9a + React-Mapbuffer: cfe4726ba1929b9dab4645c78376a9165375d62f + React-microtasksnativemodule: c99b8f1240609566de105b73f2569c0f22880ee1 + react-native-blur: 06d0f9906ecd6cde3a42de16c6cd829a2bf0710c + react-native-compat: 82335cb3de3dbc48c31bb86700037d3d88c0c4a7 + react-native-config: 136f9755ccc991cc6438053a44363259ad4c7813 + react-native-get-random-values: d16467cf726c618e9c7a8c3c39c31faa2244bbba + react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187 + react-native-safe-area-context: 7e926a200d4bc9c56562275743705c6b56176455 + react-native-skia: 5f4f07d5d3a663ef7b49fffc30bfb135db112991 + react-native-slider: 78ccabe016aef7418b1a846b31115b4165c4dde6 + react-native-tcp-socket: ae8abcfebc071216302a09d9ed1e375d4e877484 + react-native-webview-mm: f0d2259258db61d5df960a5db0c15f24fc2a373b + React-NativeModulesApple: 74051ff264ce0b89ac799b56314f8f440a95ee4d + React-oscompat: 0047f0ce53a328ce225777a6c617970556602c7c + React-perflogger: bf00d816c3c3ad91658b44f93ce9ee343b4c70df + React-performancetimeline: 75139687f2db7ca68fd0377466949af0b3408995 + React-RCTActionSheet: 9b3b04bbe75241c964d59a3ec18716d0bec22b2c + React-RCTAnimation: 2ffefa3b11df9aa1248182fac5b74e6a9b5ebd21 + React-RCTAppDelegate: 535dd2b407b204bbdd0c46d4c7050ee1a28fa6f9 + React-RCTBlob: 3cf08a694a3f7b082e23717c7587b8d914685582 + React-RCTFabric: 2026fe43aa1142896e7e68237f6e88e283f8cab3 + React-RCTFBReactNativeSpec: 43cea3b898e0e7e81abfeafd2dd4084dd8afe662 + React-RCTImage: 4eaca67175ed2a33d39eeb8bad0e724c849bdc11 + React-RCTLinking: 5133d7bf648707bc3fb65fb7ab3cfa7f445e9893 + React-RCTNetwork: 708cf70b59721a23cc362cde08dd204375c9d0ac + React-RCTRuntime: b361aa130a54eeb9bd3129fe0335513c981353b3 + React-RCTSettings: 6d413683ae5a36e80c7965f1ff8efa893b211a17 + React-RCTText: 0bd1e63583ba3dab0358f62ade056732b76463f8 + React-RCTVibration: bab25bb8bc2f017e4729deb59d26bb32240b16db + React-rendererconsistency: 32ded9b29e3dc4c2607b2c2f774bc16320fbf7ed + React-renderercss: a1e299ffd55c69fbc57e4a77a0e4dbf4a8069ada + React-rendererdebug: b640acffa5b80be66f7c5e463ffef60fa74fbbce + React-rncore: 6faaf52d39dca54cb3e63fd45cd4bd2004bceba7 + React-RuntimeApple: c734fb41922e0d6afbcbf6326b04c41c44d4e166 + React-RuntimeCore: b84b58450e647cb1e912857b81b9761317e29af0 + React-runtimeexecutor: e6aceac245c2e4f0dca15c2c57182d1dabc90e11 + React-RuntimeHermes: 9ae57e883b94d3da384b52ab3e4b22a7ac49d639 + React-runtimescheduler: e7a8619f43121a426f1ea44a6a76b22259bc56cc + React-timing: 10c2421a49f1c2906d6bb95027248a4543ac113f + React-utils: 9ec29e69f3e6347a4c93745f84c2a214b5b1ce64 + ReactAppDependencyProvider: b203bace11326361b7f0513b3f5854cd340aa929 + ReactCodegen: 6a29ad4365aeeceecb951cfd6546a99ce617cc50 + ReactCommon: 4e460daed3ccb6af9e3de3176920362d8b888a17 + RealmJS: ff8a7d6d6e339c1b3410a96ceb4151b151fe56f5 + RNArgon2: 708e188b7a4d4ec8baf62463927c47abef453a94 + RNBootSplash: 102a6b3c6f2264eeaf17f14aeeb9644022c24eaf + RNCAsyncStorage: a1c8cc8a99c32de1244a9cf707bf9d83d0de0f71 + RNCClipboard: ea6045252d5c0753cf17f62290f647dc0096f6ac + RNCMaskedView: ae521efb1c6c2b183ae0f8479487db03c826184c + RNDateTimePicker: a4ad049fdd568755003c479beac3bdea742ac4d0 + RNDefaultPreference: ee13d69e6693d193cd223d10e15e5b3c012d31ba + RNDeviceInfo: afc27b3f24bd0e97181bf3e9f23cfa4c9040dd32 + RNFastImage: 89bc4c1352aff1aaafcc22b659523050a7d38dbc + RNFlashList: b3f60e72e738e46e53bb05663c80e14af5328990 + RNFS: 89de7d7f4c0f6bafa05343c578f61118c8282ed8 + RNGestureHandler: c7986dd1eb909e329882af067c05db0702a659b3 + RNKeychain: df33ae4d27df06622fc14190b790ba8749f6be76 + RNLocalize: 8bf466de4c92d4721b254aabe1ff0a1456e7b9f4 + RNReactNativeHapticFeedback: 8364333ca888b1b7ec9d2daf04b010ee5436366e + RNReanimated: 1a94be2654cbbe861fba2a872c84a142351e9ec0 + RNScreens: b6320de0f7e7b7bc1a782a2fb6213a4d98c30b88 + RNShare: a60af5971cb114a8d31df642b108e3fe00e5b987 + RNSVG: 681f8ef5ca50e13cb3c6c88a907ea89b68fee74f SDWebImage: 2d6d229046fea284d62e36bfb8ebe8287dfc5b10 SDWebImageWebPCoder: af09429398d99d524cae2fe00f6f0f6e491ed102 - SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - Yoga: 055f92ad73f8c8600a93f0e25ac0b2344c3b07e6 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + Yoga: 9663a18d096f7f7e17a535cf00849db756709955 ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 -PODFILE CHECKSUM: e5465db73d1146563cd25b1a3e85545c88b9bf8e +PODFILE CHECKSUM: 47ae358fc56aaa731bb5595573a3451be661e147 COCOAPODS: 1.14.2 diff --git a/ios/SuperWallet.xcodeproj/project.pbxproj b/ios/SuperWallet.xcodeproj/project.pbxproj index 7fe21a74..357eca51 100644 --- a/ios/SuperWallet.xcodeproj/project.pbxproj +++ b/ios/SuperWallet.xcodeproj/project.pbxproj @@ -8,10 +8,10 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* SuperWalletTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* SuperWalletTests.m */; }; + 0DE652B418641D4800718ED7 /* libPods-SuperWallet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F3783E19924E35350C391E85 /* libPods-SuperWallet.a */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 235AD61A950436D740D59D20 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5F0133CEF9F890610EC0F23 /* ExpoModulesProvider.swift */; }; - 290D8074CD226B3F00C110B0 /* libPods-SuperWallet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F85017770995C763B0721BC /* libPods-SuperWallet.a */; }; 5D70A26D297EA9AB006A5A50 /* IBM-Plex-Mono-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5D70A267297EA9AA006A5A50 /* IBM-Plex-Mono-Bold.otf */; }; 5D70A26F297EA9AB006A5A50 /* IBM-Plex-Sans-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5D70A268297EA9AB006A5A50 /* IBM-Plex-Sans-Bold.otf */; }; 5D70A271297EA9AB006A5A50 /* IBM-Plex-Sans-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5D70A269297EA9AB006A5A50 /* IBM-Plex-Sans-Regular.otf */; }; @@ -52,7 +52,6 @@ 00E356EE1AD99517003FC87E /* SuperWalletTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SuperWalletTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* SuperWalletTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SuperWalletTests.m; sourceTree = ""; }; - 0C79E8125C639AA944ABC252 /* Pods-SuperWallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SuperWallet.debug.xcconfig"; path = "Target Support Files/Pods-SuperWallet/Pods-SuperWallet.debug.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* SuperWallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SuperWallet.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = SuperWallet/AppDelegate.h; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SuperWallet/Images.xcassets; sourceTree = ""; }; @@ -68,8 +67,6 @@ 5D70A27B297EB442006A5A50 /* Celias-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Celias-Bold.otf"; path = "../src/assets/fonts/Celias-Bold.otf"; sourceTree = ""; }; 5D70A27D297EB4E5006A5A50 /* Celias-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Celias-Light.otf"; path = "../src/assets/fonts/Celias-Light.otf"; sourceTree = ""; }; 5D70A27E297EB4E5006A5A50 /* Celias-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Celias-Medium.otf"; path = "../src/assets/fonts/Celias-Medium.otf"; sourceTree = ""; }; - 798C187B69A97D52F65D8D6C /* Pods-SuperWallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SuperWallet.release.xcconfig"; path = "Target Support Files/Pods-SuperWallet/Pods-SuperWallet.release.xcconfig"; sourceTree = ""; }; - 7F85017770995C763B0721BC /* libPods-SuperWallet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SuperWallet.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 8157629929BF7F3800C5F183 /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = SuperWallet/BootSplash.storyboard; sourceTree = ""; }; 81AF3A642BAAD55B0094A86E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; B249D6612940A49100073CAE /* SuperWallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = SuperWallet.entitlements; path = SuperWallet/SuperWallet.entitlements; sourceTree = ""; }; @@ -85,6 +82,9 @@ D3C8A2FA2B8E782C00A8A59C /* SheetGradientViewManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetGradientViewManager.swift; sourceTree = ""; }; E5F5FAAD28181BE60076D6DA /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = SuperWallet/AppDelegate.mm; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + F3783E19924E35350C391E85 /* libPods-SuperWallet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SuperWallet.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + FAEE0EB7F953CF5DD2A98065 /* Pods-SuperWallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SuperWallet.debug.xcconfig"; path = "Target Support Files/Pods-SuperWallet/Pods-SuperWallet.debug.xcconfig"; sourceTree = ""; }; + FBA6557DA21AEC8B98D43CEB /* Pods-SuperWallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SuperWallet.release.xcconfig"; path = "Target Support Files/Pods-SuperWallet/Pods-SuperWallet.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -99,7 +99,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 290D8074CD226B3F00C110B0 /* libPods-SuperWallet.a in Frameworks */, + 0DE652B418641D4800718ED7 /* libPods-SuperWallet.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -154,7 +154,7 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 7F85017770995C763B0721BC /* libPods-SuperWallet.a */, + F3783E19924E35350C391E85 /* libPods-SuperWallet.a */, ); name = Frameworks; sourceTree = ""; @@ -220,8 +220,8 @@ B72B9E19D87DB54FD0FE7BD3 /* Pods */ = { isa = PBXGroup; children = ( - 0C79E8125C639AA944ABC252 /* Pods-SuperWallet.debug.xcconfig */, - 798C187B69A97D52F65D8D6C /* Pods-SuperWallet.release.xcconfig */, + FAEE0EB7F953CF5DD2A98065 /* Pods-SuperWallet.debug.xcconfig */, + FBA6557DA21AEC8B98D43CEB /* Pods-SuperWallet.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -280,15 +280,15 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "SuperWallet" */; buildPhases = ( - 18A426E276884B6D5CC38734 /* [CP] Check Pods Manifest.lock */, + 4F78989B2E3BD2F1898A8E07 /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 1E495878561826DB700DD66D /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - EA5CE858D7CABC42C10CBBD0 /* [CP] Embed Pods Frameworks */, - AD66BA69F6C94AEEA7512FBD /* [CP] Copy Pods Resources */, + E40C5303629E92D2A294A5F0 /* [CP] Embed Pods Frameworks */, + 78F20595266C45ECD3299AC8 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -382,48 +382,48 @@ shellPath = /bin/sh; shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; }; - 18A426E276884B6D5CC38734 /* [CP] Check Pods Manifest.lock */ = { + 1E495878561826DB700DD66D /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; + name = "[Expo] Configure project"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SuperWallet-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; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-SuperWallet/expo-configure-project.sh\"\n"; }; - 1E495878561826DB700DD66D /* [Expo] Configure project */ = { + 4F78989B2E3BD2F1898A8E07 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = "[Expo] Configure project"; + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-SuperWallet-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-SuperWallet/expo-configure-project.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; }; - AD66BA69F6C94AEEA7512FBD /* [CP] Copy Pods Resources */ = { + 78F20595266C45ECD3299AC8 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -440,7 +440,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SuperWallet/Pods-SuperWallet-resources.sh\"\n"; showEnvVarsInLog = 0; }; - EA5CE858D7CABC42C10CBBD0 /* [CP] Embed Pods Frameworks */ = { + E40C5303629E92D2A294A5F0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -529,7 +529,7 @@ "$(inherited)", ); INFOPLIST_FILE = SuperWalletTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -563,7 +563,7 @@ COPY_PHASE_STRIP = NO; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = SuperWalletTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -589,7 +589,7 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C79E8125C639AA944ABC252 /* Pods-SuperWallet.debug.xcconfig */; + baseConfigurationReference = FAEE0EB7F953CF5DD2A98065 /* Pods-SuperWallet.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -601,7 +601,7 @@ DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; INFOPLIST_FILE = SuperWallet/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -629,7 +629,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 798C187B69A97D52F65D8D6C /* Pods-SuperWallet.release.xcconfig */; + baseConfigurationReference = FBA6557DA21AEC8B98D43CEB /* Pods-SuperWallet.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -640,7 +640,7 @@ CURRENT_PROJECT_VERSION = 1670411101; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = SuperWallet/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -718,7 +718,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD = ""; LDPLUSPLUS = ""; LD_RUNPATH_SEARCH_PATHS = ( @@ -793,7 +793,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD = ""; LDPLUSPLUS = ""; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/ios/SuperWallet/AppDelegate.h b/ios/SuperWallet/AppDelegate.h index 2a44cd6a..9a344449 100644 --- a/ios/SuperWallet/AppDelegate.h +++ b/ios/SuperWallet/AppDelegate.h @@ -1,8 +1,10 @@ -#import -#import +#import +#import #import -@interface AppDelegate : EXAppDelegateWrapper +@interface AppDelegate : RCTDefaultReactNativeFactoryDelegate +@property (nonatomic, strong, nonnull) UIWindow *window; +@property (nonatomic, strong, nonnull) RCTReactNativeFactory *reactNativeFactory; @end diff --git a/ios/SuperWallet/AppDelegate.mm b/ios/SuperWallet/AppDelegate.mm index 761687db..9d6a6944 100644 --- a/ios/SuperWallet/AppDelegate.mm +++ b/ios/SuperWallet/AppDelegate.mm @@ -3,47 +3,44 @@ #import "SDImageCodersManager.h" #import #import - #import +#import +@interface AppDelegate () +@end @implementation AppDelegate - - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - self.moduleName = @"SuperWallet"; - // You can add your custom initial props in the dictionary below. - // They will be passed down to the ViewController used by React Native. - self.initialProps = @{}; - - // for FastImage + // Configure FastImage WebP support before React Native initialization [SDImageCodersManager.sharedManager addCoder:SDImageWebPCoder.sharedCoder]; + self.reactNativeFactory = [[RCTReactNativeFactory alloc] initWithDelegate:self]; + self.dependencyProvider = [RCTAppDependencyProvider new]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - return [super application:application didFinishLaunchingWithOptions:launchOptions]; + [self.reactNativeFactory startReactNativeWithModuleName:@"SuperWallet" + inWindow:self.window + initialProperties:[self prepareInitialProps] + launchOptions:launchOptions]; + return YES; } -- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifer +- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier { - if (extensionPointIdentifer == UIApplicationKeyboardExtensionPointIdentifier) { + // Block keyboard extensions (custom security requirement) + if (extensionPointIdentifier == UIApplicationKeyboardExtensionPointIdentifier) { return NO; } - return YES; } - (NSDictionary *)prepareInitialProps { - NSMutableDictionary *initProps = [NSMutableDictionary new]; - -#ifdef RCT_NEW_ARCH_ENABLED - initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]); -#endif - - return initProps; + return @{}; } - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge @@ -54,13 +51,15 @@ - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge - (NSURL *)bundleURL { #if DEBUG - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; + return [RCTBundleURLProvider.sharedSettings jsBundleURLForBundleRoot:@"index"]; #else - return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; + return [NSBundle.mainBundle URLForResource:@"main" withExtension:@"jsbundle"]; #endif } -- (void)customizeRootView:(RCTRootView *)rootView { +- (void)customizeRootView:(RCTRootView *)rootView +{ + [super customizeRootView:rootView]; [RNBootSplash initWithStoryboard:@"BootSplash" rootView:rootView]; } diff --git a/ios/SuperWallet/Info.plist b/ios/SuperWallet/Info.plist index 2eea734d..0f26bf04 100644 --- a/ios/SuperWallet/Info.plist +++ b/ios/SuperWallet/Info.plist @@ -121,5 +121,16 @@ Dark UIViewControllerBasedStatusBarAppearance + NSAppTransportSecurity + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + diff --git a/jest.resolver.js b/jest.resolver.js new file mode 100644 index 00000000..727bf750 --- /dev/null +++ b/jest.resolver.js @@ -0,0 +1,52 @@ +// Custom Jest resolver to handle rpc-websockets and Solana packages +// that use .cjs extensions in their dist folders +const path = require('path'); +const fs = require('fs'); + +module.exports = (request, options) => { + // Use the default resolver first + try { + return options.defaultResolver(request, options); + } catch (error) { + // If the module isn't found and it's from rpc-websockets dist/lib, try adding .cjs + if (request.includes('rpc-websockets/dist/lib/')) { + try { + return options.defaultResolver(request + '.cjs', options); + } catch (e) { + // If that doesn't work either, throw the original error + throw error; + } + } + + // For rpc-websockets main module from nested node_modules, try to find it + if (request === 'rpc-websockets') { + const basedir = options.basedir; + // Try to find rpc-websockets in nested node_modules + const possiblePaths = [ + path.join(basedir, 'node_modules', 'rpc-websockets'), + path.join(basedir, '..', 'node_modules', 'rpc-websockets'), + path.join(basedir, '..', '..', 'node_modules', 'rpc-websockets'), + path.join(basedir, '..', '..', '..', 'node_modules', 'rpc-websockets'), + path.join(basedir, '..', '..', '..', '..', 'node_modules', 'rpc-websockets'), + ]; + + for (const possiblePath of possiblePaths) { + if (fs.existsSync(possiblePath)) { + const packageJsonPath = path.join(possiblePath, 'package.json'); + if (fs.existsSync(packageJsonPath)) { + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); + const mainFile = packageJson.main || 'index.js'; + const resolved = path.join(possiblePath, mainFile); + if (fs.existsSync(resolved)) { + return resolved; + } + } + } + } + } + + // For any other errors, rethrow + throw error; + } +}; + diff --git a/loc/en-GB.json b/loc/en-GB.json index 4decb762..ca74e5d4 100644 --- a/loc/en-GB.json +++ b/loc/en-GB.json @@ -94,9 +94,9 @@ "ok": "OK", "settings": "Open Settings App", "setupPin": "Setup PIN or Biometric Unlock", - "tapFaceId": "Tap \\\"Face ID & Passcode\\\"", - "tapSecurityPivacy": "Tap \\\"Security & privacy\\\"", - "tapTouchId": "Tap \\\"Touch ID & Passcode\\\"", + "tapFaceId": "Tap \"Face ID & Passcode\"", + "tapSecurityPivacy": "Tap \"Security & privacy\"", + "tapTouchId": "Tap \"Touch ID & Passcode\"", "title": "First, enable {authType} in Settings", "touchId": "Touch ID or Passcode", "turnOn": "Turn on {authType}" diff --git a/metro.config.js b/metro.config.js index ea18eea3..c4cb156b 100644 --- a/metro.config.js +++ b/metro.config.js @@ -18,12 +18,12 @@ generate({ const config = { transformer: { - babelTransformerPath: require.resolve('react-native-svg-transformer'), + babelTransformerPath: require.resolve('./svg-transformer'), unstable_allowRequireContext: true, }, resolver: { assetExts: assetExts.filter(ext => ext !== 'svg'), - sourceExts: [...sourceExts, 'svg'], + sourceExts: [...sourceExts, 'svg', 'cjs', 'mjs'], }, }; diff --git a/package.json b/package.json index 67cb807c..92d1dd36 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "superwallet", - "version": "1.21.0", + "version": "1.23.1", "private": true, "scripts": { "android": "react-native run-android", @@ -26,23 +26,23 @@ "@ethereumjs/wallet": "2.0.3", "@ethersproject/bytes": "5.7.0", "@ethersproject/shims": "5.7.0", - "@gorhom/bottom-sheet": "5.0.6", + "@gorhom/bottom-sheet": "5.2.6", "@metamask/eth-sig-util": "4.0.1", - "@metamask/react-native-webview": "14.0.4", + "@metamask/react-native-webview": "14.5.0", "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", - "@react-native-async-storage/async-storage": "2.0.0", - "@react-native-clipboard/clipboard": "1.14.3", + "@react-native-async-storage/async-storage": "2.2.0", + "@react-native-clipboard/clipboard": "1.16.3", "@react-native-community/blur": "4.4.1", "@react-native-community/netinfo": "11.4.1", "@react-native-masked-view/masked-view": "0.3.2", - "@react-navigation/elements": "1.3.17", - "@react-navigation/native": "6.1.6", - "@react-navigation/native-stack": "6.9.12", + "@react-navigation/elements": "2.2.6", + "@react-navigation/native": "7.0.15", + "@react-navigation/native-stack": "7.2.1", "@realm/react": "0.11.0", "@reown/walletkit": "1.0.0", - "@shopify/flash-list": "1.7.1", - "@shopify/react-native-skia": "1.12.4", + "@shopify/flash-list": "1.8.3", + "@shopify/react-native-skia": "2.3.7", "@solana/spl-token": "0.3.8", "@solana/web3.js": "1.91.7", "@tanstack/react-query": "5.51.9", @@ -75,41 +75,40 @@ "ethers": "6.7.0", "eventemitter3": "5.0.1", "events": "3.3.0", - "expo": "51.0.38", - "expo-camera": "15.0.16", + "expo": "53.0.23", + "expo-camera": "16.1.11", "expo-local-authentication": "14.0.1", - "expo-notifications": "0.28.19", - "expo-screen-capture": "6.0.1", - "expo-store-review": "7.0.2", + "expo-notifications": "0.32.12", + "expo-screen-capture": "8.0.8", + "expo-store-review": "9.0.8", "jest-junit": "14.0.1", "lodash": "4.17.21", - "lottie-react-native": "6.7.0", - "metro-react-native-babel-preset": "0.77.0", + "lottie-react-native": "7.2.5", "openapi-fetch": "0.7.4", "process": "0.11.10", - "react": "18.3.1", + "react": "19.0.0", "react-icomoon": "2.5.7", "react-localization": "1.0.19", - "react-native": "0.75.4", + "react-native": "0.79.7", "react-native-argon2": "2.0.1", - "react-native-bootsplash": "5.5.3", + "react-native-bootsplash": "6.3.11", "react-native-config": "1.5.1", "react-native-default-preference": "1.4.4", - "react-native-device-info": "13.0.0", + "react-native-device-info": "14.0.1", "react-native-fast-image": "8.6.3", "react-native-fs": "2.20.0", - "react-native-gesture-handler": "2.19.0", + "react-native-gesture-handler": "2.26.0", "react-native-get-random-values": "1.11.0", "react-native-haptic-feedback": "1.14.0", "react-native-keychain": "8.1.2", "react-native-localize": "2.2.6", "react-native-password-strength-meter": "0.0.5", "react-native-qrcode-svg": "6.2.0", - "react-native-reanimated": "3.16.1", - "react-native-safe-area-context": "4.10.5", - "react-native-screens": "3.35.0", - "react-native-share": "10.0.0", - "react-native-svg": "15.8.0", + "react-native-reanimated": "3.19.3", + "react-native-safe-area-context": "5.5.2", + "react-native-screens": "4.9.1", + "react-native-share": "12.2.0", + "react-native-svg": "15.14.0", "react-native-tcp-socket": "6.0.6", "react-native-url-polyfill": "1.3.0", "realm": "12.14.2", @@ -118,37 +117,42 @@ "stream-browserify": "3.0.0", "tiny-secp256k1": "1.1.6", "tweetnacl": "1.0.3", - "victory-native": "41.0.0", + "victory-native": "41.20.1", "zod": "3.23.8" }, "devDependencies": { - "@babel/core": "7.24.0", + "@babel/core": "7.26.0", "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", + "@babel/runtime": "7.28.4", "@commitlint/cli": "19.3.0", "@commitlint/config-conventional": "19.2.2", "@jest/globals": "29.7.0", - "@react-native-community/datetimepicker": "8.2.0", - "@react-native-community/slider": "4.5.2", - "@react-native/babel-preset": "0.75.4", - "@react-native/metro-config": "0.75.4", - "@react-native/typescript-config": "0.75.4", + "@react-native-community/cli": "18.0.0", + "@react-native-community/cli-platform-android": "18.0.0", + "@react-native-community/cli-platform-ios": "18.0.0", + "@react-native-community/datetimepicker": "8.4.1", + "@react-native-community/slider": "4.5.6", + "@react-native/babel-preset": "0.79.7", + "@react-native/gradle-plugin": "0.79.7", + "@react-native/metro-config": "0.79.7", + "@react-native/typescript-config": "0.79.7", "@storybook/addon-ondevice-actions": "7.6.20", "@storybook/addon-ondevice-controls": "7.6.20", "@storybook/preview-api": "7.6.20", "@storybook/react-native": "7.6.20", - "@testing-library/react-native": "12.2.2", + "@testing-library/react-native": "13.3.3", "@types/bip21": "2.0.3", "@types/create-hash": "1.2.6", "@types/jest": "29.5.6", "@types/lodash": "4.17.5", - "@types/react": "18.2.79", - "@types/react-test-renderer": "18.0.0", + "@types/react": "19.0.0", + "@types/react-test-renderer": "19.0.0", "@types/tiny-secp256k1": "1.0.0", "argon2": "0.30.3", "babel-jest": "29.7.0", "babel-plugin-error-context": "file:plugins/babel-plugin-error-context", "babel-plugin-module-resolver": "4.1.0", + "babel-plugin-transform-inline-environment-variables": "0.4.4", "eslint": "8.57.0", "husky": "8.0.3", "jest": "29.7.0", @@ -161,7 +165,7 @@ "patch-package": "6.5.1", "prettier": "3.3.3", "react-native-svg-transformer": "1.1.0", - "react-test-renderer": "18.3.1", + "react-test-renderer": "19.0.0", "storybook": "7.6.20", "type-coverage": "2.27.1", "type-fest": "4.20.1", diff --git a/patches/@metamask+react-native-webview+14.0.4.patch b/patches/@metamask+react-native-webview+14.0.4.patch deleted file mode 100644 index b56f597e..00000000 --- a/patches/@metamask+react-native-webview+14.0.4.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff --git a/node_modules/@metamask/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt b/node_modules/@metamask/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt -index e06cbc9..45580c8 100644 ---- a/node_modules/@metamask/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt -+++ b/node_modules/@metamask/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt -@@ -100,61 +100,6 @@ class RNCWebViewManagerImpl { - } - webView.setDownloadListener(DownloadListener { url, userAgent, contentDisposition, mimetype, contentLength -> - webView.setIgnoreErrFailedForThisURL(url) -- val module = webView.themedReactContext.getNativeModule(RNCWebViewModule::class.java) ?: return@DownloadListener -- val request: DownloadManager.Request = try { -- DownloadManager.Request(Uri.parse(url)) -- } catch (e: IllegalArgumentException) { -- Log.w(TAG, "Unsupported URI, aborting download", e) -- return@DownloadListener -- } -- var fileName = URLUtil.guessFileName(url, contentDisposition, mimetype) -- -- // Sanitize filename by replacing invalid characters with "_" -- fileName = fileName.replace(invalidCharRegex, "_") -- -- val downloadMessage = "Downloading $fileName" -- -- //Filename validation checking for files that use RTL characters and do not allow those types -- if (Bidi(fileName, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT).isMixed) { -- Toast.makeText(webView.context, "Invalid filename or type", Toast.LENGTH_LONG).show() -- } else { -- val builder = AlertDialog.Builder(webView.context) -- builder.setMessage("Do you want to download \n$fileName?") -- builder.setCancelable(false) -- builder.setPositiveButton("Download") { _, _ -> -- //Attempt to add cookie, if it exists -- var urlObj: URL? = null -- try { -- urlObj = URL(url) -- val baseUrl = urlObj.protocol + "://" + urlObj.host -- val cookie = CookieManager.getInstance().getCookie(baseUrl) -- request.addRequestHeader("Cookie", cookie) -- } catch (e: MalformedURLException) { -- Log.w(TAG, "Error getting cookie for DownloadManager", e) -- } -- -- //Finish setting up request -- request.addRequestHeader("User-Agent", userAgent) -- request.setTitle(fileName) -- request.setDescription(downloadMessage) -- request.allowScanningByMediaScanner() -- request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) -- request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName) -- module.setDownloadRequest(request) -- if (module.grantFileDownloaderPermissions( -- getDownloadingMessageOrDefault(), -- getLackPermissionToDownloadMessageOrDefault() -- ) -- ) { -- module.downloadFile( -- getDownloadingMessageOrDefault() -- ) -- } -- } -- builder.setNegativeButton("Cancel") { _: DialogInterface?, _: Int -> } -- val alertDialog = builder.create() -- alertDialog.show() -- } - }) - return RNCWebViewWrapper(context, webView) - } diff --git a/patches/@shopify+react-native-skia+2.3.7.patch b/patches/@shopify+react-native-skia+2.3.7.patch new file mode 100644 index 00000000..a37cb41d --- /dev/null +++ b/patches/@shopify+react-native-skia+2.3.7.patch @@ -0,0 +1,24 @@ +diff --git a/node_modules/@shopify/react-native-skia/android/build.gradle b/node_modules/@shopify/react-native-skia/android/build.gradle +index 9c6ab08..337a8c2 100644 +--- a/node_modules/@shopify/react-native-skia/android/build.gradle ++++ b/node_modules/@shopify/react-native-skia/android/build.gradle +@@ -133,18 +133,10 @@ android { + compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION) + buildToolsVersion safeExtGet('buildToolsVersion', DEFAULT_BUILD_TOOLS_VERSION) + +- // Used to override the NDK path/version on internal CI or by allowing +- // users to customize the NDK path/version from their root project. +- if (rootProject.hasProperty("ndkPath")) { +- ndkPath rootProject.ext.ndkPath +- } +- if (rootProject.hasProperty("ndkVersion")) { +- ndkVersion rootProject.ext.ndkVersion +- } +- + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', DEFAULT_MIN_SDK_VERSION) + targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION) ++ ndkVersion = "27.1.12297006" + versionCode 1 + versionName "1.0" + buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() diff --git a/patches/expo-modules-core+1.12.26.patch b/patches/expo-modules-core+1.12.26.patch deleted file mode 100644 index c38b4811..00000000 --- a/patches/expo-modules-core+1.12.26.patch +++ /dev/null @@ -1,451 +0,0 @@ -diff --git a/node_modules/expo-modules-core/android/build/generated/source/buildConfig/debug/expo/modules/BuildConfig.java b/node_modules/expo-modules-core/android/build/generated/source/buildConfig/debug/expo/modules/BuildConfig.java -new file mode 100644 -index 0000000..3ded53c ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/generated/source/buildConfig/debug/expo/modules/BuildConfig.java -@@ -0,0 +1,12 @@ -+/** -+ * Automatically generated file. DO NOT MODIFY -+ */ -+package expo.modules; -+ -+public final class BuildConfig { -+ public static final boolean DEBUG = Boolean.parseBoolean("true"); -+ public static final String LIBRARY_PACKAGE_NAME = "expo.modules"; -+ public static final String BUILD_TYPE = "debug"; -+ // Field from default config. -+ public static final boolean IS_NEW_ARCHITECTURE_ENABLED = false; -+} -diff --git a/node_modules/expo-modules-core/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml b/node_modules/expo-modules-core/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml -new file mode 100644 -index 0000000..2e9937d ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml -@@ -0,0 +1,18 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json b/node_modules/expo-modules-core/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json -new file mode 100644 -index 0000000..abb1565 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json -@@ -0,0 +1,18 @@ -+{ -+ "version": 3, -+ "artifactType": { -+ "type": "AAPT_FRIENDLY_MERGED_MANIFESTS", -+ "kind": "Directory" -+ }, -+ "applicationId": "expo.modules", -+ "variantName": "debug", -+ "elements": [ -+ { -+ "type": "SINGLE", -+ "filters": [], -+ "attributes": [], -+ "outputFile": "AndroidManifest.xml" -+ } -+ ], -+ "elementType": "File" -+} -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties b/node_modules/expo-modules-core/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties -new file mode 100644 -index 0000000..1211b1e ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties -@@ -0,0 +1,6 @@ -+aarFormatVersion=1.0 -+aarMetadataVersion=1.0 -+minCompileSdk=1 -+minCompileSdkExtension=0 -+minAndroidGradlePluginVersion=1.0.0 -+coreLibraryDesugaringEnabled=false -diff --git a/node_modules/expo-modules-core/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json b/node_modules/expo-modules-core/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json -new file mode 100644 -index 0000000..9e26dfe ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json -@@ -0,0 +1 @@ -+{} -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar b/node_modules/expo-modules-core/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar -new file mode 100644 -index 0000000..913cc58 -Binary files /dev/null and b/node_modules/expo-modules-core/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar differ -diff --git a/node_modules/expo-modules-core/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt b/node_modules/expo-modules-core/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt -new file mode 100644 -index 0000000..e69de29 -diff --git a/node_modules/expo-modules-core/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/node_modules/expo-modules-core/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties -new file mode 100644 -index 0000000..441a118 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties -@@ -0,0 +1 @@ -+#Tue Sep 02 12:36:11 CEST 2025 -diff --git a/node_modules/expo-modules-core/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/node_modules/expo-modules-core/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml -new file mode 100644 -index 0000000..aaed38d ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml -@@ -0,0 +1,2 @@ -+ -+ -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/incremental/mergeDebugShaders/merger.xml b/node_modules/expo-modules-core/android/build/intermediates/incremental/mergeDebugShaders/merger.xml -new file mode 100644 -index 0000000..034b368 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/incremental/mergeDebugShaders/merger.xml -@@ -0,0 +1,2 @@ -+ -+ -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/incremental/packageDebugAssets/merger.xml b/node_modules/expo-modules-core/android/build/intermediates/incremental/packageDebugAssets/merger.xml -new file mode 100644 -index 0000000..21e6ead ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/incremental/packageDebugAssets/merger.xml -@@ -0,0 +1,2 @@ -+ -+ -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt b/node_modules/expo-modules-core/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt -new file mode 100644 -index 0000000..78ac5b8 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt -@@ -0,0 +1,2 @@ -+R_DEF: Internal format may change without notice -+local -diff --git a/node_modules/expo-modules-core/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt b/node_modules/expo-modules-core/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt -new file mode 100644 -index 0000000..846b8e6 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt -@@ -0,0 +1,26 @@ -+1 -+2 -+5 -+6 -+7 -+8 -+8-->/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:4:5-12:19 -+9 /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:5:9-7:89 -+10 android:name="org.unimodules.core.AppLoader#react-native-headless" -+10-->/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:6:13-79 -+11 android:value="expo.modules.adapters.react.apploader.RNHeadlessAppLoader" /> -+11-->/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:7:13-86 -+12 /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:8:9-11:45 -+13 android:name="com.facebook.soloader.enabled" -+13-->/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:9:13-57 -+14 android:value="true" -+14-->/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:10:13-33 -+15 tools:replace="android:value" /> -+15-->/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:11:13-42 -+16 -+17 -+18 -diff --git a/node_modules/expo-modules-core/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml b/node_modules/expo-modules-core/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml -new file mode 100644 -index 0000000..2e9937d ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml -@@ -0,0 +1,18 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json b/node_modules/expo-modules-core/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json -new file mode 100644 -index 0000000..0637a08 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json -@@ -0,0 +1 @@ -+[] -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt b/node_modules/expo-modules-core/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt -new file mode 100644 -index 0000000..08f4ebe ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt -@@ -0,0 +1 @@ -+0 Warning/Error -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt b/node_modules/expo-modules-core/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt -new file mode 100644 -index 0000000..eeeb776 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt -@@ -0,0 +1 @@ -+expo.modules -diff --git a/node_modules/expo-modules-core/android/build/kotlin/compileDebugKotlin/cacheable/dirty-sources.txt b/node_modules/expo-modules-core/android/build/kotlin/compileDebugKotlin/cacheable/dirty-sources.txt -new file mode 100644 -index 0000000..a64c2b8 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/kotlin/compileDebugKotlin/cacheable/dirty-sources.txt -@@ -0,0 +1,170 @@ -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/apifeatures/Features.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/AnyTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityaware/OnActivityAvailableListener.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/Either.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/net/URLTypConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ViewTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/DateTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/JSTypeConverterHelper.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/com/facebook/react/uimanager/ReactStylesDiffMapHelper.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/apploader/HeadlessAppLoaderNotifier.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/LoggerTimer.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/SetTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ExpoView.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ReactLifecycleDelegate.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ViewWrapperDelegateHolder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/DynamicExtenstions.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/defaultmodules/NativeModulesProxyModule.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/ReadableArgumentsTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/typedarray/TypedArrayIterator.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/interfaces/permissions/PermissionsResponse.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/uuidv5/Exceptions.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ViewManagerDefinition.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JavaScriptWeakObject.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/tracing/ExpoTrace.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/events/EventListener.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/SuspendFunctionComponent.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/ListTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/allocators/ObjectConstructorFactory.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/PersistentFileLogHandler.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ReactExtensions.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/FunctionBuilder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityaware/AppCompatActivityAware.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/ColorTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/folly/FollyDynamicExtensionConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/EitherTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/EnumTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/net/UriTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ConcatIterator.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JavaCallback.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/modules/ModuleDefinitionBuilder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/LogHandlers.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/TypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/PromiseImpl.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/SimpleViewManagerWrapper.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/Utils.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/classcomponent/ClassComponentBuilder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/ByteArrayTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JavaScriptObject.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/defaultmodules/CoreModule.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ExpoBridgeModule.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/DataPersistor.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/viewevent/ViewEventDelegate.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultContract.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/exception/CommonExceptions.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ConcreteViewProp.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/events/OnActivityResultPayload.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/objects/ObjectDefinitionData.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/LogType.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedObjectRegistry.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/ActivityResultsManager.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/Promise.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/CppType.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/utilities/EmulatorUtilities.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/JSTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ModuleHolder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/KotlinInteropModuleRegistry.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/TypeConverterProvider.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/AnyFunction.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/records/ValidationBinder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/BaseAsyncFunctionComponent.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ReadableTypeExtensions.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JavaScriptFunction.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/interfaces/filesystem/AppDirectoriesModuleInterface.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ModuleRegistry.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/OkHttpHeadersExtension.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ReadableArrayIterator.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultLauncher.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/classcomponent/ClassDefinitionData.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/records/Record.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ViewGroupDefinition.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/typedarray/ConcreteTypedArrays.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/typedarray/TypedArray.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/records/Field.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/events/KModuleEventEmitterWrapper.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/io/FileTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/AsyncFunctionWithPromiseComponent.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JNIFunctionBody.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedRef.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/records/Validators.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/SyncFunctionComponent.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/events/EventName.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/ModulePriorities.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoRequestCdpInterceptor.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/modules/DefinitionMarker.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JavaScriptValue.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/exception/ExceptionDecorator.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/LogHandler.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/io/PathTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ViewManagerType.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ViewDefinitionBuilder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedObject.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/KPromiseWrapper.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/allocators/ObjectConstructor.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/Logger.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/events/EventEmitter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/ExpectedType.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/AndroidExtensions.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/FilteredIterator.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/cdp/CdpNetworkTypes.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/FabricComponentsRegistry.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/GroupViewManagerWrapper.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultRegistry.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/CallbacksDefinition.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/AnyType.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/records/RecordTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/AnyViewProp.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/events/EventsDefinition.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ErrorView.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/allocators/UnsafeAllocator.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/apploader/RNHeadlessAppLoader.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultCaller.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/errors/ContextDestroyedException.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ArrayExtenstions.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/providers/CurrentActivityProvider.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/utilities/KotlinUtilities.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/CoreLogger.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ViewManagerWrapperDelegate.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/exception/CodedException.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/AsyncFunctionComponent.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/records/FieldValidator.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/PairTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/uuidv5/Uuidv5.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JavaScriptTypedArray.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/FilteredReadableMap.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultFallbackCallback.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/PersistentFileLogSerialDispatchQueue.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/Enumerable.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/AppContext.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/EnforceType.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/MapTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/PersistentFileLog.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JNIDeallocator.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/records/Required.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/ArrayTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/typedarray/GenericTypedArray.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/objects/PropertyComponent.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/defaultmodules/ErrorManagerModule.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JSIContext.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/modules/Module.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/TypedArrayTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ModulesProvider.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/modules/ModuleDefinitionData.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/views/ViewGroupDefinitionBuilder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/logging/OSLogHandler.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/UnitTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/AsyncFunctionBuilder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JavaScriptModuleObject.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityaware/AppCompatActivityAwareHelper.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/objects/PropertyComponentBuilder.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/providers/AppContextProvider.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/JavaScriptFunctionTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/functions/AsyncFunction.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedObjectTypeConverter.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/ExpoModulesHelper.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/viewevent/ViewEvent.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/core/errors/ModuleDestroyedException.kt -+/Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/sharedobjects/ClassRegistry.kt -\ No newline at end of file -diff --git a/node_modules/expo-modules-core/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin b/node_modules/expo-modules-core/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin -new file mode 100644 -index 0000000..6d58234 -Binary files /dev/null and b/node_modules/expo-modules-core/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin differ -diff --git a/node_modules/expo-modules-core/android/build/outputs/logs/manifest-merger-debug-report.txt b/node_modules/expo-modules-core/android/build/outputs/logs/manifest-merger-debug-report.txt -new file mode 100644 -index 0000000..52087d2 ---- /dev/null -+++ b/node_modules/expo-modules-core/android/build/outputs/logs/manifest-merger-debug-report.txt -@@ -0,0 +1,34 @@ -+-- Merging decision tree log --- -+manifest -+ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:1:1-14:12 -+INJECTED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:1:1-14:12 -+ package -+ INJECTED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml -+ xmlns:tools -+ ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:2:11-57 -+ xmlns:android -+ ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:1:11-69 -+application -+ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:4:5-12:19 -+meta-data#org.unimodules.core.AppLoader#react-native-headless -+ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:5:9-7:89 -+ android:value -+ ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:7:13-86 -+ android:name -+ ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:6:13-79 -+meta-data#com.facebook.soloader.enabled -+ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:8:9-11:45 -+ tools:replace -+ ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:11:13-42 -+ android:value -+ ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:10:13-33 -+ android:name -+ ADDED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:9:13-57 -+uses-sdk -+INJECTED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml reason: use-sdk injection requested -+INJECTED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml -+INJECTED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml -+ android:targetSdkVersion -+ INJECTED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml -+ android:minSdkVersion -+ INJECTED from /Users/am/Projects/mobile/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml -diff --git a/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt b/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt -index ae0a811..180b46c 100644 ---- a/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt -+++ b/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt -@@ -163,7 +163,7 @@ open class PermissionsService(val context: Context) : InternalModule, Permission - override fun isPermissionPresentInManifest(permission: String): Boolean { - try { - context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS)?.run { -- return requestedPermissions.contains(permission) -+ return requestedPermissions?.contains(permission) ?: false - } - return false - } catch (e: PackageManager.NameNotFoundException) { diff --git a/patches/expo-notifications+0.32.12.patch b/patches/expo-notifications+0.32.12.patch new file mode 100644 index 00000000..8a3097dd --- /dev/null +++ b/patches/expo-notifications+0.32.12.patch @@ -0,0 +1,19 @@ +diff --git a/node_modules/expo-notifications/ios/EXNotifications/PushToken/PushTokenModule.swift b/node_modules/expo-notifications/ios/EXNotifications/PushToken/PushTokenModule.swift +index a3c0825..9eb5b0d 100644 +--- a/node_modules/expo-notifications/ios/EXNotifications/PushToken/PushTokenModule.swift ++++ b/node_modules/expo-notifications/ios/EXNotifications/PushToken/PushTokenModule.swift +@@ -32,9 +32,11 @@ To obtain the push token, await the result of the newer call. + } + + #if targetEnvironment(simulator) +- if let appContext = appContext { +- appContext.jsLogger.warn("expo-notifications: obtaining a push token may not work on iOS simulators due to an iOS issue. To obtain a push token, use a real device. Read more: https://developer.apple.com/forums/thread/795433") +- } ++ // Note: jsLogger was removed from AppContext in newer ExpoModulesCore ++ // This warning is not critical for functionality ++ // if let appContext = appContext { ++ // appContext.jsLogger.warn("expo-notifications: obtaining a push token may not work on iOS simulators due to an iOS issue. To obtain a push token, use a real device. Read more: https://developer.apple.com/forums/thread/795433") ++ // } + #endif + promiseNotYetResolved = promise + UIApplication.shared.registerForRemoteNotifications() diff --git a/patches/react-native-argon2+2.0.1.patch b/patches/react-native-argon2+2.0.1.patch new file mode 100644 index 00000000..7bcdcfdb --- /dev/null +++ b/patches/react-native-argon2+2.0.1.patch @@ -0,0 +1,6178 @@ +diff --git a/node_modules/react-native-argon2/android/CMakeLists.txt b/node_modules/react-native-argon2/android/CMakeLists.txt +new file mode 100644 +index 0000000..1b06550 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/CMakeLists.txt +@@ -0,0 +1,48 @@ ++cmake_minimum_required(VERSION 3.6.0) ++ ++# ++# Argon2 original native library (argon2native) ++# ++ ++project(argon2native C CXX) ++set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os") ++set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Os") ++ ++# Add 16KB page size alignment flags for Android 16KB support ++set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=16384") ++ ++set(argon2native_DIR ${CMAKE_CURRENT_LIST_DIR}/src/main/cpp/argon2) ++file(GLOB argon2native_SOURCES ++ ${argon2native_DIR}/blake2/blake2b.c ++ ${argon2native_DIR}/argon2.c ++ ${argon2native_DIR}/core.c ++ ${argon2native_DIR}/encoding.c ++ ${argon2native_DIR}/ref.c ++ ${argon2native_DIR}/thread.c ++) ++ ++add_library(argon2native SHARED ${argon2native_SOURCES}) ++target_compile_options(argon2native PRIVATE) ++target_include_directories(argon2native PUBLIC ${argon2native_DIR}) ++ ++# ++# JNI integration (argon2jni) ++# ++ ++project(argon2jni CXX) ++set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os") ++ ++# Add 16KB page size alignment flags for Android 16KB support ++set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=16384") ++ ++set(argon2jni_DIR ${CMAKE_CURRENT_LIST_DIR}/src/main/cpp/jni) ++file(GLOB argon2jni_SOURCES ++ ${argon2jni_DIR}/*.cpp ++) ++ ++add_library(argon2jni SHARED ${argon2jni_SOURCES}) ++target_compile_options(argon2jni PRIVATE) ++target_include_directories(argon2jni PUBLIC ${argon2jni_DIR}) ++ ++target_link_libraries(argon2jni argon2native) ++ +diff --git a/node_modules/react-native-argon2/android/build.gradle b/node_modules/react-native-argon2/android/build.gradle +index 5361d83..9dafbf4 100644 +--- a/node_modules/react-native-argon2/android/build.gradle ++++ b/node_modules/react-native-argon2/android/build.gradle +@@ -1,37 +1,73 @@ + apply plugin: 'com.android.library' ++apply plugin: 'kotlin-android' + + def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback + } + + buildscript { ++ ext.kotlin_version = '1.9.0' + repositories { + google() +- jcenter() ++ mavenCentral() + } + dependencies { +- classpath 'com.android.tools.build:gradle:4.1.0' ++ classpath 'com.android.tools.build:gradle:8.5.1' ++ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } + } + + android { +- compileSdkVersion safeExtGet('compileSdkVersion', 30) +- buildToolsVersion safeExtGet('buildToolsVersion', '30.0.3') ++ compileSdkVersion safeExtGet('compileSdkVersion', 35) ++ buildToolsVersion safeExtGet('buildToolsVersion', '35.0.0') ++ ndkVersion safeExtGet('ndkVersion', '28.0.12674087') + + defaultConfig { +- minSdkVersion safeExtGet('minSdkVersion', 16) +- targetSdkVersion safeExtGet('targetSdkVersion', 30) ++ minSdkVersion safeExtGet('minSdkVersion', 21) ++ targetSdkVersion safeExtGet('targetSdkVersion', 35) + versionCode 1 + versionName '1.0' ++ ++ externalNativeBuild { ++ cmake { ++ // Add 16KB page size support flags ++ cppFlags "-O3" ++ arguments "-DANDROID_STL=c++_shared", ++ "-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-z,max-page-size=16384" ++ } ++ } ++ ++ ndk { ++ abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' ++ } ++ } ++ ++ externalNativeBuild { ++ cmake { ++ path "CMakeLists.txt" ++ version "3.22.1" ++ } ++ } ++ ++ packagingOptions { ++ pickFirst 'lib/x86/libargon2jni.so' ++ pickFirst 'lib/x86_64/libargon2jni.so' ++ pickFirst 'lib/armeabi-v7a/libargon2jni.so' ++ pickFirst 'lib/arm64-v8a/libargon2jni.so' ++ } ++ ++ lintOptions { ++ abortOnError false + } + } + + repositories { + google() +- jcenter() ++ mavenCentral() + } + + dependencies { + implementation 'com.facebook.react:react-native:+' +- implementation 'com.lambdapioneer.argon2kt:argon2kt:1.3.0' ++ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" ++ // Removed external argon2kt dependency - building from source for 16KB compatibility + } +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/argon2.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/argon2.c +new file mode 100644 +index 0000000..795b429 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/argon2.c +@@ -0,0 +1,452 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#include ++#include ++#include ++ ++#include "argon2.h" ++#include "encoding.h" ++#include "core.h" ++ ++const char *argon2_type2string(argon2_type type, int uppercase) { ++ switch (type) { ++ case Argon2_d: ++ return uppercase ? "Argon2d" : "argon2d"; ++ case Argon2_i: ++ return uppercase ? "Argon2i" : "argon2i"; ++ case Argon2_id: ++ return uppercase ? "Argon2id" : "argon2id"; ++ } ++ ++ return NULL; ++} ++ ++int argon2_ctx(argon2_context *context, argon2_type type) { ++ /* 1. Validate all inputs */ ++ int result = validate_inputs(context); ++ uint32_t memory_blocks, segment_length; ++ argon2_instance_t instance; ++ ++ if (ARGON2_OK != result) { ++ return result; ++ } ++ ++ if (Argon2_d != type && Argon2_i != type && Argon2_id != type) { ++ return ARGON2_INCORRECT_TYPE; ++ } ++ ++ /* 2. Align memory size */ ++ /* Minimum memory_blocks = 8L blocks, where L is the number of lanes */ ++ memory_blocks = context->m_cost; ++ ++ if (memory_blocks < 2 * ARGON2_SYNC_POINTS * context->lanes) { ++ memory_blocks = 2 * ARGON2_SYNC_POINTS * context->lanes; ++ } ++ ++ segment_length = memory_blocks / (context->lanes * ARGON2_SYNC_POINTS); ++ /* Ensure that all segments have equal length */ ++ memory_blocks = segment_length * (context->lanes * ARGON2_SYNC_POINTS); ++ ++ instance.version = context->version; ++ instance.memory = NULL; ++ instance.passes = context->t_cost; ++ instance.memory_blocks = memory_blocks; ++ instance.segment_length = segment_length; ++ instance.lane_length = segment_length * ARGON2_SYNC_POINTS; ++ instance.lanes = context->lanes; ++ instance.threads = context->threads; ++ instance.type = type; ++ ++ if (instance.threads > instance.lanes) { ++ instance.threads = instance.lanes; ++ } ++ ++ /* 3. Initialization: Hashing inputs, allocating memory, filling first ++ * blocks ++ */ ++ result = initialize(&instance, context); ++ ++ if (ARGON2_OK != result) { ++ return result; ++ } ++ ++ /* 4. Filling memory */ ++ result = fill_memory_blocks(&instance); ++ ++ if (ARGON2_OK != result) { ++ return result; ++ } ++ /* 5. Finalization */ ++ finalize(context, &instance); ++ ++ return ARGON2_OK; ++} ++ ++int argon2_hash(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, const size_t saltlen, ++ void *hash, const size_t hashlen, char *encoded, ++ const size_t encodedlen, argon2_type type, ++ const uint32_t version){ ++ ++ argon2_context context; ++ int result; ++ uint8_t *out; ++ ++ if (pwdlen > ARGON2_MAX_PWD_LENGTH) { ++ return ARGON2_PWD_TOO_LONG; ++ } ++ ++ if (saltlen > ARGON2_MAX_SALT_LENGTH) { ++ return ARGON2_SALT_TOO_LONG; ++ } ++ ++ if (hashlen > ARGON2_MAX_OUTLEN) { ++ return ARGON2_OUTPUT_TOO_LONG; ++ } ++ ++ if (hashlen < ARGON2_MIN_OUTLEN) { ++ return ARGON2_OUTPUT_TOO_SHORT; ++ } ++ ++ out = malloc(hashlen); ++ if (!out) { ++ return ARGON2_MEMORY_ALLOCATION_ERROR; ++ } ++ ++ context.out = (uint8_t *)out; ++ context.outlen = (uint32_t)hashlen; ++ context.pwd = CONST_CAST(uint8_t *)pwd; ++ context.pwdlen = (uint32_t)pwdlen; ++ context.salt = CONST_CAST(uint8_t *)salt; ++ context.saltlen = (uint32_t)saltlen; ++ context.secret = NULL; ++ context.secretlen = 0; ++ context.ad = NULL; ++ context.adlen = 0; ++ context.t_cost = t_cost; ++ context.m_cost = m_cost; ++ context.lanes = parallelism; ++ context.threads = parallelism; ++ context.allocate_cbk = NULL; ++ context.free_cbk = NULL; ++ context.flags = ARGON2_DEFAULT_FLAGS; ++ context.version = version; ++ ++ result = argon2_ctx(&context, type); ++ ++ if (result != ARGON2_OK) { ++ clear_internal_memory(out, hashlen); ++ free(out); ++ return result; ++ } ++ ++ /* if raw hash requested, write it */ ++ if (hash) { ++ memcpy(hash, out, hashlen); ++ } ++ ++ /* if encoding requested, write it */ ++ if (encoded && encodedlen) { ++ if (encode_string(encoded, encodedlen, &context, type) != ARGON2_OK) { ++ clear_internal_memory(out, hashlen); /* wipe buffers if error */ ++ clear_internal_memory(encoded, encodedlen); ++ free(out); ++ return ARGON2_ENCODING_FAIL; ++ } ++ } ++ clear_internal_memory(out, hashlen); ++ free(out); ++ ++ return ARGON2_OK; ++} ++ ++int argon2i_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, const size_t hashlen, ++ char *encoded, const size_t encodedlen) { ++ ++ return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, ++ NULL, hashlen, encoded, encodedlen, Argon2_i, ++ ARGON2_VERSION_NUMBER); ++} ++ ++int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, void *hash, const size_t hashlen) { ++ ++ return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, ++ hash, hashlen, NULL, 0, Argon2_i, ARGON2_VERSION_NUMBER); ++} ++ ++int argon2d_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, const size_t hashlen, ++ char *encoded, const size_t encodedlen) { ++ ++ return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, ++ NULL, hashlen, encoded, encodedlen, Argon2_d, ++ ARGON2_VERSION_NUMBER); ++} ++ ++int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, void *hash, const size_t hashlen) { ++ ++ return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, ++ hash, hashlen, NULL, 0, Argon2_d, ARGON2_VERSION_NUMBER); ++} ++ ++int argon2id_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, const size_t hashlen, ++ char *encoded, const size_t encodedlen) { ++ ++ return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, ++ NULL, hashlen, encoded, encodedlen, Argon2_id, ++ ARGON2_VERSION_NUMBER); ++} ++ ++int argon2id_hash_raw(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, void *hash, const size_t hashlen) { ++ return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, ++ hash, hashlen, NULL, 0, Argon2_id, ++ ARGON2_VERSION_NUMBER); ++} ++ ++static int argon2_compare(const uint8_t *b1, const uint8_t *b2, size_t len) { ++ size_t i; ++ uint8_t d = 0U; ++ ++ for (i = 0U; i < len; i++) { ++ d |= b1[i] ^ b2[i]; ++ } ++ return (int)((1 & ((d - 1) >> 8)) - 1); ++} ++ ++int argon2_verify(const char *encoded, const void *pwd, const size_t pwdlen, ++ argon2_type type) { ++ ++ argon2_context ctx; ++ uint8_t *desired_result = NULL; ++ ++ int ret = ARGON2_OK; ++ ++ size_t encoded_len; ++ uint32_t max_field_len; ++ ++ if (pwdlen > ARGON2_MAX_PWD_LENGTH) { ++ return ARGON2_PWD_TOO_LONG; ++ } ++ ++ if (encoded == NULL) { ++ return ARGON2_DECODING_FAIL; ++ } ++ ++ encoded_len = strlen(encoded); ++ if (encoded_len > UINT32_MAX) { ++ return ARGON2_DECODING_FAIL; ++ } ++ ++ /* No field can be longer than the encoded length */ ++ max_field_len = (uint32_t)encoded_len; ++ ++ ctx.saltlen = max_field_len; ++ ctx.outlen = max_field_len; ++ ++ ctx.salt = malloc(ctx.saltlen); ++ ctx.out = malloc(ctx.outlen); ++ if (!ctx.salt || !ctx.out) { ++ ret = ARGON2_MEMORY_ALLOCATION_ERROR; ++ goto fail; ++ } ++ ++ ctx.pwd = (uint8_t *)pwd; ++ ctx.pwdlen = (uint32_t)pwdlen; ++ ++ ret = decode_string(&ctx, encoded, type); ++ if (ret != ARGON2_OK) { ++ goto fail; ++ } ++ ++ /* Set aside the desired result, and get a new buffer. */ ++ desired_result = ctx.out; ++ ctx.out = malloc(ctx.outlen); ++ if (!ctx.out) { ++ ret = ARGON2_MEMORY_ALLOCATION_ERROR; ++ goto fail; ++ } ++ ++ ret = argon2_verify_ctx(&ctx, (char *)desired_result, type); ++ if (ret != ARGON2_OK) { ++ goto fail; ++ } ++ ++fail: ++ free(ctx.salt); ++ free(ctx.out); ++ free(desired_result); ++ ++ return ret; ++} ++ ++int argon2i_verify(const char *encoded, const void *pwd, const size_t pwdlen) { ++ ++ return argon2_verify(encoded, pwd, pwdlen, Argon2_i); ++} ++ ++int argon2d_verify(const char *encoded, const void *pwd, const size_t pwdlen) { ++ ++ return argon2_verify(encoded, pwd, pwdlen, Argon2_d); ++} ++ ++int argon2id_verify(const char *encoded, const void *pwd, const size_t pwdlen) { ++ ++ return argon2_verify(encoded, pwd, pwdlen, Argon2_id); ++} ++ ++int argon2d_ctx(argon2_context *context) { ++ return argon2_ctx(context, Argon2_d); ++} ++ ++int argon2i_ctx(argon2_context *context) { ++ return argon2_ctx(context, Argon2_i); ++} ++ ++int argon2id_ctx(argon2_context *context) { ++ return argon2_ctx(context, Argon2_id); ++} ++ ++int argon2_verify_ctx(argon2_context *context, const char *hash, ++ argon2_type type) { ++ int ret = argon2_ctx(context, type); ++ if (ret != ARGON2_OK) { ++ return ret; ++ } ++ ++ if (argon2_compare((uint8_t *)hash, context->out, context->outlen)) { ++ return ARGON2_VERIFY_MISMATCH; ++ } ++ ++ return ARGON2_OK; ++} ++ ++int argon2d_verify_ctx(argon2_context *context, const char *hash) { ++ return argon2_verify_ctx(context, hash, Argon2_d); ++} ++ ++int argon2i_verify_ctx(argon2_context *context, const char *hash) { ++ return argon2_verify_ctx(context, hash, Argon2_i); ++} ++ ++int argon2id_verify_ctx(argon2_context *context, const char *hash) { ++ return argon2_verify_ctx(context, hash, Argon2_id); ++} ++ ++const char *argon2_error_message(int error_code) { ++ switch (error_code) { ++ case ARGON2_OK: ++ return "OK"; ++ case ARGON2_OUTPUT_PTR_NULL: ++ return "Output pointer is NULL"; ++ case ARGON2_OUTPUT_TOO_SHORT: ++ return "Output is too short"; ++ case ARGON2_OUTPUT_TOO_LONG: ++ return "Output is too long"; ++ case ARGON2_PWD_TOO_SHORT: ++ return "Password is too short"; ++ case ARGON2_PWD_TOO_LONG: ++ return "Password is too long"; ++ case ARGON2_SALT_TOO_SHORT: ++ return "Salt is too short"; ++ case ARGON2_SALT_TOO_LONG: ++ return "Salt is too long"; ++ case ARGON2_AD_TOO_SHORT: ++ return "Associated data is too short"; ++ case ARGON2_AD_TOO_LONG: ++ return "Associated data is too long"; ++ case ARGON2_SECRET_TOO_SHORT: ++ return "Secret is too short"; ++ case ARGON2_SECRET_TOO_LONG: ++ return "Secret is too long"; ++ case ARGON2_TIME_TOO_SMALL: ++ return "Time cost is too small"; ++ case ARGON2_TIME_TOO_LARGE: ++ return "Time cost is too large"; ++ case ARGON2_MEMORY_TOO_LITTLE: ++ return "Memory cost is too small"; ++ case ARGON2_MEMORY_TOO_MUCH: ++ return "Memory cost is too large"; ++ case ARGON2_LANES_TOO_FEW: ++ return "Too few lanes"; ++ case ARGON2_LANES_TOO_MANY: ++ return "Too many lanes"; ++ case ARGON2_PWD_PTR_MISMATCH: ++ return "Password pointer is NULL, but password length is not 0"; ++ case ARGON2_SALT_PTR_MISMATCH: ++ return "Salt pointer is NULL, but salt length is not 0"; ++ case ARGON2_SECRET_PTR_MISMATCH: ++ return "Secret pointer is NULL, but secret length is not 0"; ++ case ARGON2_AD_PTR_MISMATCH: ++ return "Associated data pointer is NULL, but ad length is not 0"; ++ case ARGON2_MEMORY_ALLOCATION_ERROR: ++ return "Memory allocation error"; ++ case ARGON2_FREE_MEMORY_CBK_NULL: ++ return "The free memory callback is NULL"; ++ case ARGON2_ALLOCATE_MEMORY_CBK_NULL: ++ return "The allocate memory callback is NULL"; ++ case ARGON2_INCORRECT_PARAMETER: ++ return "Argon2_Context context is NULL"; ++ case ARGON2_INCORRECT_TYPE: ++ return "There is no such version of Argon2"; ++ case ARGON2_OUT_PTR_MISMATCH: ++ return "Output pointer mismatch"; ++ case ARGON2_THREADS_TOO_FEW: ++ return "Not enough threads"; ++ case ARGON2_THREADS_TOO_MANY: ++ return "Too many threads"; ++ case ARGON2_MISSING_ARGS: ++ return "Missing arguments"; ++ case ARGON2_ENCODING_FAIL: ++ return "Encoding failed"; ++ case ARGON2_DECODING_FAIL: ++ return "Decoding failed"; ++ case ARGON2_THREAD_FAIL: ++ return "Threading failure"; ++ case ARGON2_DECODING_LENGTH_FAIL: ++ return "Some of encoded parameters are too long or too short"; ++ case ARGON2_VERIFY_MISMATCH: ++ return "The password does not match the supplied hash"; ++ default: ++ return "Unknown error code"; ++ } ++} ++ ++size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, uint32_t parallelism, ++ uint32_t saltlen, uint32_t hashlen, argon2_type type) { ++ return strlen("$$v=$m=,t=,p=$$") + strlen(argon2_type2string(type, 0)) + ++ numlen(t_cost) + numlen(m_cost) + numlen(parallelism) + ++ b64len(saltlen) + b64len(hashlen) + numlen(ARGON2_VERSION_NUMBER) + 1; ++} +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/argon2.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/argon2.h +new file mode 100644 +index 0000000..71607e9 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/argon2.h +@@ -0,0 +1,438 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef ARGON2_H ++#define ARGON2_H ++ ++#include ++#include ++#include ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++/* Symbols visibility control */ ++#ifdef A2_VISCTL ++#define ARGON2_PUBLIC __attribute__((visibility("default"))) ++#define ARGON2_LOCAL __attribute__ ((visibility ("hidden"))) ++#elif _MSC_VER ++#define ARGON2_PUBLIC __declspec(dllexport) ++#define ARGON2_LOCAL ++#else ++#define ARGON2_PUBLIC ++#define ARGON2_LOCAL ++#endif ++ ++/* ++ * Argon2 input parameter restrictions ++ */ ++ ++/* Minimum and maximum number of lanes (degree of parallelism) */ ++#define ARGON2_MIN_LANES UINT32_C(1) ++#define ARGON2_MAX_LANES UINT32_C(0xFFFFFF) ++ ++/* Minimum and maximum number of threads */ ++#define ARGON2_MIN_THREADS UINT32_C(1) ++#define ARGON2_MAX_THREADS UINT32_C(0xFFFFFF) ++ ++/* Number of synchronization points between lanes per pass */ ++#define ARGON2_SYNC_POINTS UINT32_C(4) ++ ++/* Minimum and maximum digest size in bytes */ ++#define ARGON2_MIN_OUTLEN UINT32_C(4) ++#define ARGON2_MAX_OUTLEN UINT32_C(0xFFFFFFFF) ++ ++/* Minimum and maximum number of memory blocks (each of BLOCK_SIZE bytes) */ ++#define ARGON2_MIN_MEMORY (2 * ARGON2_SYNC_POINTS) /* 2 blocks per slice */ ++ ++#define ARGON2_MIN(a, b) ((a) < (b) ? (a) : (b)) ++/* Max memory size is addressing-space/2, topping at 2^32 blocks (4 TB) */ ++#define ARGON2_MAX_MEMORY_BITS \ ++ ARGON2_MIN(UINT32_C(32), (sizeof(void *) * CHAR_BIT - 10 - 1)) ++#define ARGON2_MAX_MEMORY \ ++ ARGON2_MIN(UINT32_C(0xFFFFFFFF), UINT64_C(1) << ARGON2_MAX_MEMORY_BITS) ++ ++/* Minimum and maximum number of passes */ ++#define ARGON2_MIN_TIME UINT32_C(1) ++#define ARGON2_MAX_TIME UINT32_C(0xFFFFFFFF) ++ ++/* Minimum and maximum password length in bytes */ ++#define ARGON2_MIN_PWD_LENGTH UINT32_C(0) ++#define ARGON2_MAX_PWD_LENGTH UINT32_C(0xFFFFFFFF) ++ ++/* Minimum and maximum associated data length in bytes */ ++#define ARGON2_MIN_AD_LENGTH UINT32_C(0) ++#define ARGON2_MAX_AD_LENGTH UINT32_C(0xFFFFFFFF) ++ ++/* Minimum and maximum salt length in bytes */ ++#define ARGON2_MIN_SALT_LENGTH UINT32_C(8) ++#define ARGON2_MAX_SALT_LENGTH UINT32_C(0xFFFFFFFF) ++ ++/* Minimum and maximum key length in bytes */ ++#define ARGON2_MIN_SECRET UINT32_C(0) ++#define ARGON2_MAX_SECRET UINT32_C(0xFFFFFFFF) ++ ++/* Flags to determine which fields are securely wiped (default = no wipeDirectBuffer). */ ++#define ARGON2_DEFAULT_FLAGS UINT32_C(0) ++#define ARGON2_FLAG_CLEAR_PASSWORD (UINT32_C(1) << 0) ++#define ARGON2_FLAG_CLEAR_SECRET (UINT32_C(1) << 1) ++ ++/* Global flag to determine if we are wiping internal memory buffers. This flag ++ * is defined in core.c and defaults to 1 (wipeDirectBuffer internal memory). */ ++extern int FLAG_clear_internal_memory; ++ ++/* Error codes */ ++typedef enum Argon2_ErrorCodes { ++ ARGON2_OK = 0, ++ ++ ARGON2_OUTPUT_PTR_NULL = -1, ++ ++ ARGON2_OUTPUT_TOO_SHORT = -2, ++ ARGON2_OUTPUT_TOO_LONG = -3, ++ ++ ARGON2_PWD_TOO_SHORT = -4, ++ ARGON2_PWD_TOO_LONG = -5, ++ ++ ARGON2_SALT_TOO_SHORT = -6, ++ ARGON2_SALT_TOO_LONG = -7, ++ ++ ARGON2_AD_TOO_SHORT = -8, ++ ARGON2_AD_TOO_LONG = -9, ++ ++ ARGON2_SECRET_TOO_SHORT = -10, ++ ARGON2_SECRET_TOO_LONG = -11, ++ ++ ARGON2_TIME_TOO_SMALL = -12, ++ ARGON2_TIME_TOO_LARGE = -13, ++ ++ ARGON2_MEMORY_TOO_LITTLE = -14, ++ ARGON2_MEMORY_TOO_MUCH = -15, ++ ++ ARGON2_LANES_TOO_FEW = -16, ++ ARGON2_LANES_TOO_MANY = -17, ++ ++ ARGON2_PWD_PTR_MISMATCH = -18, /* NULL ptr with non-zero length */ ++ ARGON2_SALT_PTR_MISMATCH = -19, /* NULL ptr with non-zero length */ ++ ARGON2_SECRET_PTR_MISMATCH = -20, /* NULL ptr with non-zero length */ ++ ARGON2_AD_PTR_MISMATCH = -21, /* NULL ptr with non-zero length */ ++ ++ ARGON2_MEMORY_ALLOCATION_ERROR = -22, ++ ++ ARGON2_FREE_MEMORY_CBK_NULL = -23, ++ ARGON2_ALLOCATE_MEMORY_CBK_NULL = -24, ++ ++ ARGON2_INCORRECT_PARAMETER = -25, ++ ARGON2_INCORRECT_TYPE = -26, ++ ++ ARGON2_OUT_PTR_MISMATCH = -27, ++ ++ ARGON2_THREADS_TOO_FEW = -28, ++ ARGON2_THREADS_TOO_MANY = -29, ++ ++ ARGON2_MISSING_ARGS = -30, ++ ++ ARGON2_ENCODING_FAIL = -31, ++ ++ ARGON2_DECODING_FAIL = -32, ++ ++ ARGON2_THREAD_FAIL = -33, ++ ++ ARGON2_DECODING_LENGTH_FAIL = -34, ++ ++ ARGON2_VERIFY_MISMATCH = -35 ++} argon2_error_codes; ++ ++/* Memory allocator types --- for external allocation */ ++typedef int (*allocate_fptr)(uint8_t **memory, size_t bytes_to_allocate); ++ ++typedef void (*deallocate_fptr)(uint8_t *memory, size_t bytes_to_allocate); ++ ++/* Argon2 external data structures */ ++ ++/* ++ ***** ++ * Context: structure to hold Argon2 inputs: ++ * output array and its length, ++ * password and its length, ++ * salt and its length, ++ * secret and its length, ++ * associated data and its length, ++ * number of passes, amount of used memory (in KBytes, can be rounded up a bit) ++ * number of parallel threads that will be run. ++ * All the parameters above affect the output hash value. ++ * Additionally, two function pointers can be provided to allocate and ++ * deallocate the memory (if NULL, memory will be allocated internally). ++ * Also, three flags indicate whether to erase password, secret as soon as they ++ * are pre-hashed (and thus not needed anymore), and the entire memory ++ ***** ++ * Simplest situation: you have output array out[8], password is stored in ++ * pwd[32], salt is stored in salt[16], you do not have keys nor associated ++ * data. You need to spend 1 GB of RAM and you run 5 passes of Argon2d with ++ * 4 parallel lanes. ++ * You want to erase the password, but you're OK with last pass not being ++ * erased. You want to use the default memory allocator. ++ * Then you initialize: ++ Argon2_Context(out,8,pwd,32,salt,16,NULL,0,NULL,0,5,1<<20,4,4,NULL,NULL,true,false,false,false) ++ */ ++typedef struct Argon2_Context { ++ uint8_t *out; /* output array */ ++ uint32_t outlen; /* digest length */ ++ ++ uint8_t *pwd; /* password array */ ++ uint32_t pwdlen; /* password length */ ++ ++ uint8_t *salt; /* salt array */ ++ uint32_t saltlen; /* salt length */ ++ ++ uint8_t *secret; /* key array */ ++ uint32_t secretlen; /* key length */ ++ ++ uint8_t *ad; /* associated data array */ ++ uint32_t adlen; /* associated data length */ ++ ++ uint32_t t_cost; /* number of passes */ ++ uint32_t m_cost; /* amount of memory requested (KB) */ ++ uint32_t lanes; /* number of lanes */ ++ uint32_t threads; /* maximum number of threads */ ++ ++ uint32_t version; /* version number */ ++ ++ allocate_fptr allocate_cbk; /* pointer to memory allocator */ ++ deallocate_fptr free_cbk; /* pointer to memory deallocator */ ++ ++ uint32_t flags; /* array of bool options */ ++} argon2_context; ++ ++/* Argon2 primitive type */ ++typedef enum Argon2_type { ++ Argon2_d = 0, ++ Argon2_i = 1, ++ Argon2_id = 2 ++} argon2_type; ++ ++/* Version of the algorithm */ ++typedef enum Argon2_version { ++ ARGON2_VERSION_10 = 0x10, ++ ARGON2_VERSION_13 = 0x13, ++ ARGON2_VERSION_NUMBER = ARGON2_VERSION_13 ++} argon2_version; ++ ++/* ++ * Function that gives the string representation of an argon2_type. ++ * @param type The argon2_type that we want the string for ++ * @param uppercase Whether the string should have the first letter uppercase ++ * @return NULL if invalid type, otherwise the string representation. ++ */ ++ARGON2_PUBLIC const char *argon2_type2string(argon2_type type, int uppercase); ++ ++/* ++ * Function that performs memory-hard hashing with certain degree of parallelism ++ * @param context Pointer to the Argon2 internal structure ++ * @return Error code if smth is wrong, ARGON2_OK otherwise ++ */ ++ARGON2_PUBLIC int argon2_ctx(argon2_context *context, argon2_type type); ++ ++/** ++ * Hashes a password with Argon2i, producing an encoded hash ++ * @param t_cost Number of iterations ++ * @param m_cost Sets memory usage to m_cost kibibytes ++ * @param parallelism Number of threads and compute lanes ++ * @param pwd Pointer to password ++ * @param pwdlen Password size in bytes ++ * @param salt Pointer to salt ++ * @param saltlen Salt size in bytes ++ * @param hashlen Desired length of the hash in bytes ++ * @param encoded Buffer where to write the encoded hash ++ * @param encodedlen Size of the buffer (thus max size of the encoded hash) ++ * @pre Different parallelism levels will give different results ++ * @pre Returns ARGON2_OK if successful ++ */ ++ARGON2_PUBLIC int argon2i_hash_encoded(const uint32_t t_cost, ++ const uint32_t m_cost, ++ const uint32_t parallelism, ++ const void *pwd, const size_t pwdlen, ++ const void *salt, const size_t saltlen, ++ const size_t hashlen, char *encoded, ++ const size_t encodedlen); ++ ++/** ++ * Hashes a password with Argon2i, producing a raw hash at @hash ++ * @param t_cost Number of iterations ++ * @param m_cost Sets memory usage to m_cost kibibytes ++ * @param parallelism Number of threads and compute lanes ++ * @param pwd Pointer to password ++ * @param pwdlen Password size in bytes ++ * @param salt Pointer to salt ++ * @param saltlen Salt size in bytes ++ * @param hash Buffer where to write the raw hash - updated by the function ++ * @param hashlen Desired length of the hash in bytes ++ * @pre Different parallelism levels will give different results ++ * @pre Returns ARGON2_OK if successful ++ */ ++ARGON2_PUBLIC int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, void *hash, ++ const size_t hashlen); ++ ++ARGON2_PUBLIC int argon2d_hash_encoded(const uint32_t t_cost, ++ const uint32_t m_cost, ++ const uint32_t parallelism, ++ const void *pwd, const size_t pwdlen, ++ const void *salt, const size_t saltlen, ++ const size_t hashlen, char *encoded, ++ const size_t encodedlen); ++ ++ARGON2_PUBLIC int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, void *hash, ++ const size_t hashlen); ++ ++ARGON2_PUBLIC int argon2id_hash_encoded(const uint32_t t_cost, ++ const uint32_t m_cost, ++ const uint32_t parallelism, ++ const void *pwd, const size_t pwdlen, ++ const void *salt, const size_t saltlen, ++ const size_t hashlen, char *encoded, ++ const size_t encodedlen); ++ ++ARGON2_PUBLIC int argon2id_hash_raw(const uint32_t t_cost, ++ const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, void *hash, ++ const size_t hashlen); ++ ++/* generic function underlying the above ones */ ++ARGON2_PUBLIC int argon2_hash(const uint32_t t_cost, const uint32_t m_cost, ++ const uint32_t parallelism, const void *pwd, ++ const size_t pwdlen, const void *salt, ++ const size_t saltlen, void *hash, ++ const size_t hashlen, char *encoded, ++ const size_t encodedlen, argon2_type type, ++ const uint32_t version); ++ ++/** ++ * Verifies a password against an encoded string ++ * Encoded string is restricted as in validate_inputs() ++ * @param encoded String encoding parameters, salt, hash ++ * @param pwd Pointer to password ++ * @pre Returns ARGON2_OK if successful ++ */ ++ARGON2_PUBLIC int argon2i_verify(const char *encoded, const void *pwd, ++ const size_t pwdlen); ++ ++ARGON2_PUBLIC int argon2d_verify(const char *encoded, const void *pwd, ++ const size_t pwdlen); ++ ++ARGON2_PUBLIC int argon2id_verify(const char *encoded, const void *pwd, ++ const size_t pwdlen); ++ ++/* generic function underlying the above ones */ ++ARGON2_PUBLIC int argon2_verify(const char *encoded, const void *pwd, ++ const size_t pwdlen, argon2_type type); ++ ++/** ++ * Argon2d: Version of Argon2 that picks memory blocks depending ++ * on the password and salt. Only for side-channel-free ++ * environment!! ++ ***** ++ * @param context Pointer to current Argon2 context ++ * @return Zero if successful, a non zero error code otherwise ++ */ ++ARGON2_PUBLIC int argon2d_ctx(argon2_context *context); ++ ++/** ++ * Argon2i: Version of Argon2 that picks memory blocks ++ * independent on the password and salt. Good for side-channels, ++ * but worse w.r.t. tradeoff attacks if only one pass is used. ++ ***** ++ * @param context Pointer to current Argon2 context ++ * @return Zero if successful, a non zero error code otherwise ++ */ ++ARGON2_PUBLIC int argon2i_ctx(argon2_context *context); ++ ++/** ++ * Argon2id: Version of Argon2 where the first half-pass over memory is ++ * password-independent, the rest are password-dependent (on the password and ++ * salt). OK against side channels (they reduce to 1/2-pass Argon2i), and ++ * better with w.r.t. tradeoff attacks (similar to Argon2d). ++ ***** ++ * @param context Pointer to current Argon2 context ++ * @return Zero if successful, a non zero error code otherwise ++ */ ++ARGON2_PUBLIC int argon2id_ctx(argon2_context *context); ++ ++/** ++ * Verify if a given password is correct for Argon2d hashing ++ * @param context Pointer to current Argon2 context ++ * @param hash The password hash to verify. The length of the hash is ++ * specified by the context outlen member ++ * @return Zero if successful, a non zero error code otherwise ++ */ ++ARGON2_PUBLIC int argon2d_verify_ctx(argon2_context *context, const char *hash); ++ ++/** ++ * Verify if a given password is correct for Argon2i hashing ++ * @param context Pointer to current Argon2 context ++ * @param hash The password hash to verify. The length of the hash is ++ * specified by the context outlen member ++ * @return Zero if successful, a non zero error code otherwise ++ */ ++ARGON2_PUBLIC int argon2i_verify_ctx(argon2_context *context, const char *hash); ++ ++/** ++ * Verify if a given password is correct for Argon2id hashing ++ * @param context Pointer to current Argon2 context ++ * @param hash The password hash to verify. The length of the hash is ++ * specified by the context outlen member ++ * @return Zero if successful, a non zero error code otherwise ++ */ ++ARGON2_PUBLIC int argon2id_verify_ctx(argon2_context *context, ++ const char *hash); ++ ++/* generic function underlying the above ones */ ++ARGON2_PUBLIC int argon2_verify_ctx(argon2_context *context, const char *hash, ++ argon2_type type); ++ ++/** ++ * Get the associated error message for given error code ++ * @return The error message associated with the given error code ++ */ ++ARGON2_PUBLIC const char *argon2_error_message(int error_code); ++ ++/** ++ * Returns the encoded hash length for the given input parameters ++ * @param t_cost Number of iterations ++ * @param m_cost Memory usage in kibibytes ++ * @param parallelism Number of threads; used to compute lanes ++ * @param saltlen Salt size in bytes ++ * @param hashlen Hash size in bytes ++ * @param type The argon2_type that we want the encoded length for ++ * @return The encoded hash length in bytes ++ */ ++ARGON2_PUBLIC size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, ++ uint32_t parallelism, uint32_t saltlen, ++ uint32_t hashlen, argon2_type type); ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/bench.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/bench.c +new file mode 100644 +index 0000000..20a2286 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/bench.c +@@ -0,0 +1,111 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#ifdef _MSC_VER ++#include ++#endif ++ ++#include "argon2.h" ++ ++static uint64_t rdtsc(void) { ++#ifdef _MSC_VER ++ return __rdtsc(); ++#else ++#if defined(__amd64__) || defined(__x86_64__) ++ uint64_t rax, rdx; ++ __asm__ __volatile__("rdtsc" : "=a"(rax), "=d"(rdx) : :); ++ return (rdx << 32) | rax; ++#elif defined(__i386__) || defined(__i386) || defined(__X86__) ++ uint64_t rax; ++ __asm__ __volatile__("rdtsc" : "=A"(rax) : :); ++ return rax; ++#else ++#error "Not implemented!" ++#endif ++#endif ++} ++ ++/* ++ * Benchmarks Argon2 with salt length 16, password length 16, t_cost 3, ++ and different m_cost and threads ++ */ ++static void benchmark() { ++#define BENCH_OUTLEN 16 ++#define BENCH_INLEN 16 ++ const uint32_t inlen = BENCH_INLEN; ++ const unsigned outlen = BENCH_OUTLEN; ++ unsigned char out[BENCH_OUTLEN]; ++ unsigned char pwd_array[BENCH_INLEN]; ++ unsigned char salt_array[BENCH_INLEN]; ++#undef BENCH_INLEN ++#undef BENCH_OUTLEN ++ ++ uint32_t t_cost = 3; ++ uint32_t m_cost; ++ uint32_t thread_test[4] = {1, 2, 4, 8}; ++ argon2_type types[3] = {Argon2_i, Argon2_d, Argon2_id}; ++ ++ memset(pwd_array, 0, inlen); ++ memset(salt_array, 1, inlen); ++ ++ for (m_cost = (uint32_t)1 << 10; m_cost <= (uint32_t)1 << 22; m_cost *= 2) { ++ unsigned i; ++ for (i = 0; i < 4; ++i) { ++ double run_time = 0; ++ uint32_t thread_n = thread_test[i]; ++ ++ unsigned j; ++ for (j = 0; j < 3; ++j) { ++ clock_t start_time, stop_time; ++ uint64_t start_cycles, stop_cycles; ++ uint64_t delta; ++ double mcycles; ++ ++ argon2_type type = types[j]; ++ start_time = clock(); ++ start_cycles = rdtsc(); ++ ++ argon2_hash(t_cost, m_cost, thread_n, pwd_array, inlen, ++ salt_array, inlen, out, outlen, NULL, 0, type, ++ ARGON2_VERSION_NUMBER); ++ ++ stop_cycles = rdtsc(); ++ stop_time = clock(); ++ ++ delta = (stop_cycles - start_cycles) / (m_cost); ++ mcycles = (double)(stop_cycles - start_cycles) / (1UL << 20); ++ run_time += ((double)stop_time - start_time) / (CLOCKS_PER_SEC); ++ ++ printf("%s %d iterations %d MiB %d threads: %2.2f cpb %2.2f " ++ "Mcycles \n", argon2_type2string(type, 1), t_cost, ++ m_cost >> 10, thread_n, (float)delta / 1024, mcycles); ++ } ++ ++ printf("%2.4f seconds\n\n", run_time); ++ } ++ } ++} ++ ++int main() { ++ benchmark(); ++ return ARGON2_OK; ++} +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2-impl.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2-impl.h +new file mode 100644 +index 0000000..241f0be +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2-impl.h +@@ -0,0 +1,156 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef PORTABLE_BLAKE2_IMPL_H ++#define PORTABLE_BLAKE2_IMPL_H ++ ++#include ++#include ++ ++#if defined(_MSC_VER) ++#define BLAKE2_INLINE __inline ++#elif defined(__GNUC__) || defined(__clang__) ++#define BLAKE2_INLINE __inline__ ++#else ++#define BLAKE2_INLINE ++#endif ++ ++/* Argon2 Team - Begin Code */ ++/* ++ Not an exhaustive list, but should cover the majority of modern platforms ++ Additionally, the code will always be correct---this is only a performance ++ tweak. ++*/ ++#if (defined(__BYTE_ORDER__) && \ ++ (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) || \ ++ defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__MIPSEL__) || \ ++ defined(__AARCH64EL__) || defined(__amd64__) || defined(__i386__) || \ ++ defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || \ ++ defined(_M_ARM) ++#define NATIVE_LITTLE_ENDIAN ++#endif ++/* Argon2 Team - End Code */ ++ ++static BLAKE2_INLINE uint32_t load32(const void *src) { ++#if defined(NATIVE_LITTLE_ENDIAN) ++ uint32_t w; ++ memcpy(&w, src, sizeof w); ++ return w; ++#else ++ const uint8_t *p = (const uint8_t *)src; ++ uint32_t w = *p++; ++ w |= (uint32_t)(*p++) << 8; ++ w |= (uint32_t)(*p++) << 16; ++ w |= (uint32_t)(*p++) << 24; ++ return w; ++#endif ++} ++ ++static BLAKE2_INLINE uint64_t load64(const void *src) { ++#if defined(NATIVE_LITTLE_ENDIAN) ++ uint64_t w; ++ memcpy(&w, src, sizeof w); ++ return w; ++#else ++ const uint8_t *p = (const uint8_t *)src; ++ uint64_t w = *p++; ++ w |= (uint64_t)(*p++) << 8; ++ w |= (uint64_t)(*p++) << 16; ++ w |= (uint64_t)(*p++) << 24; ++ w |= (uint64_t)(*p++) << 32; ++ w |= (uint64_t)(*p++) << 40; ++ w |= (uint64_t)(*p++) << 48; ++ w |= (uint64_t)(*p++) << 56; ++ return w; ++#endif ++} ++ ++static BLAKE2_INLINE void store32(void *dst, uint32_t w) { ++#if defined(NATIVE_LITTLE_ENDIAN) ++ memcpy(dst, &w, sizeof w); ++#else ++ uint8_t *p = (uint8_t *)dst; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++#endif ++} ++ ++static BLAKE2_INLINE void store64(void *dst, uint64_t w) { ++#if defined(NATIVE_LITTLE_ENDIAN) ++ memcpy(dst, &w, sizeof w); ++#else ++ uint8_t *p = (uint8_t *)dst; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++#endif ++} ++ ++static BLAKE2_INLINE uint64_t load48(const void *src) { ++ const uint8_t *p = (const uint8_t *)src; ++ uint64_t w = *p++; ++ w |= (uint64_t)(*p++) << 8; ++ w |= (uint64_t)(*p++) << 16; ++ w |= (uint64_t)(*p++) << 24; ++ w |= (uint64_t)(*p++) << 32; ++ w |= (uint64_t)(*p++) << 40; ++ return w; ++} ++ ++static BLAKE2_INLINE void store48(void *dst, uint64_t w) { ++ uint8_t *p = (uint8_t *)dst; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++ w >>= 8; ++ *p++ = (uint8_t)w; ++} ++ ++static BLAKE2_INLINE uint32_t rotr32(const uint32_t w, const unsigned c) { ++ return (w >> c) | (w << (32 - c)); ++} ++ ++static BLAKE2_INLINE uint64_t rotr64(const uint64_t w, const unsigned c) { ++ return (w >> c) | (w << (64 - c)); ++} ++ ++void clear_internal_memory(void *v, size_t n); ++ ++#endif +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2.h +new file mode 100644 +index 0000000..57276a7 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2.h +@@ -0,0 +1,89 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef PORTABLE_BLAKE2_H ++#define PORTABLE_BLAKE2_H ++ ++#include ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++enum blake2b_constant { ++ BLAKE2B_BLOCKBYTES = 128, ++ BLAKE2B_OUTBYTES = 64, ++ BLAKE2B_KEYBYTES = 64, ++ BLAKE2B_SALTBYTES = 16, ++ BLAKE2B_PERSONALBYTES = 16 ++}; ++ ++#pragma pack(push, 1) ++typedef struct __blake2b_param { ++ uint8_t digest_length; /* 1 */ ++ uint8_t key_length; /* 2 */ ++ uint8_t fanout; /* 3 */ ++ uint8_t depth; /* 4 */ ++ uint32_t leaf_length; /* 8 */ ++ uint64_t node_offset; /* 16 */ ++ uint8_t node_depth; /* 17 */ ++ uint8_t inner_length; /* 18 */ ++ uint8_t reserved[14]; /* 32 */ ++ uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */ ++ uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */ ++} blake2b_param; ++#pragma pack(pop) ++ ++typedef struct __blake2b_state { ++ uint64_t h[8]; ++ uint64_t t[2]; ++ uint64_t f[2]; ++ uint8_t buf[BLAKE2B_BLOCKBYTES]; ++ unsigned buflen; ++ unsigned outlen; ++ uint8_t last_node; ++} blake2b_state; ++ ++/* Ensure param structs have not been wrongly padded */ ++/* Poor man's static_assert */ ++enum { ++ blake2_size_check_0 = 1 / !!(CHAR_BIT == 8), ++ blake2_size_check_2 = ++ 1 / !!(sizeof(blake2b_param) == sizeof(uint64_t) * CHAR_BIT) ++}; ++ ++/* Streaming API */ ++ARGON2_LOCAL int blake2b_init(blake2b_state *S, size_t outlen); ++ARGON2_LOCAL int blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, ++ size_t keylen); ++ARGON2_LOCAL int blake2b_init_param(blake2b_state *S, const blake2b_param *P); ++ARGON2_LOCAL int blake2b_update(blake2b_state *S, const void *in, size_t inlen); ++ARGON2_LOCAL int blake2b_final(blake2b_state *S, void *out, size_t outlen); ++ ++/* Simple API */ ++ARGON2_LOCAL int blake2b(void *out, size_t outlen, const void *in, size_t inlen, ++ const void *key, size_t keylen); ++ ++/* Argon2 Team - Begin Code */ ++ARGON2_LOCAL int blake2b_long(void *out, size_t outlen, const void *in, size_t inlen); ++/* Argon2 Team - End Code */ ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2b.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2b.c +new file mode 100644 +index 0000000..ca05df5 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blake2b.c +@@ -0,0 +1,390 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#include ++#include ++#include ++ ++#include "blake2.h" ++#include "blake2-impl.h" ++ ++static const uint64_t blake2b_IV[8] = { ++ UINT64_C(0x6a09e667f3bcc908), UINT64_C(0xbb67ae8584caa73b), ++ UINT64_C(0x3c6ef372fe94f82b), UINT64_C(0xa54ff53a5f1d36f1), ++ UINT64_C(0x510e527fade682d1), UINT64_C(0x9b05688c2b3e6c1f), ++ UINT64_C(0x1f83d9abfb41bd6b), UINT64_C(0x5be0cd19137e2179)}; ++ ++static const unsigned int blake2b_sigma[12][16] = { ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, ++ {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, ++ {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, ++ {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, ++ {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, ++ {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, ++ {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, ++ {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, ++ {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, ++ {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, ++ {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, ++}; ++ ++static BLAKE2_INLINE void blake2b_set_lastnode(blake2b_state *S) { ++ S->f[1] = (uint64_t)-1; ++} ++ ++static BLAKE2_INLINE void blake2b_set_lastblock(blake2b_state *S) { ++ if (S->last_node) { ++ blake2b_set_lastnode(S); ++ } ++ S->f[0] = (uint64_t)-1; ++} ++ ++static BLAKE2_INLINE void blake2b_increment_counter(blake2b_state *S, ++ uint64_t inc) { ++ S->t[0] += inc; ++ S->t[1] += (S->t[0] < inc); ++} ++ ++static BLAKE2_INLINE void blake2b_invalidate_state(blake2b_state *S) { ++ clear_internal_memory(S, sizeof(*S)); /* wipe */ ++ blake2b_set_lastblock(S); /* invalidate for further use */ ++} ++ ++static BLAKE2_INLINE void blake2b_init0(blake2b_state *S) { ++ memset(S, 0, sizeof(*S)); ++ memcpy(S->h, blake2b_IV, sizeof(S->h)); ++} ++ ++int blake2b_init_param(blake2b_state *S, const blake2b_param *P) { ++ const unsigned char *p = (const unsigned char *)P; ++ unsigned int i; ++ ++ if (NULL == P || NULL == S) { ++ return -1; ++ } ++ ++ blake2b_init0(S); ++ /* IV XOR Parameter Block */ ++ for (i = 0; i < 8; ++i) { ++ S->h[i] ^= load64(&p[i * sizeof(S->h[i])]); ++ } ++ S->outlen = P->digest_length; ++ return 0; ++} ++ ++/* Sequential blake2b initialization */ ++int blake2b_init(blake2b_state *S, size_t outlen) { ++ blake2b_param P; ++ ++ if (S == NULL) { ++ return -1; ++ } ++ ++ if ((outlen == 0) || (outlen > BLAKE2B_OUTBYTES)) { ++ blake2b_invalidate_state(S); ++ return -1; ++ } ++ ++ /* Setup Parameter Block for unkeyed BLAKE2 */ ++ P.digest_length = (uint8_t)outlen; ++ P.key_length = 0; ++ P.fanout = 1; ++ P.depth = 1; ++ P.leaf_length = 0; ++ P.node_offset = 0; ++ P.node_depth = 0; ++ P.inner_length = 0; ++ memset(P.reserved, 0, sizeof(P.reserved)); ++ memset(P.salt, 0, sizeof(P.salt)); ++ memset(P.personal, 0, sizeof(P.personal)); ++ ++ return blake2b_init_param(S, &P); ++} ++ ++int blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, ++ size_t keylen) { ++ blake2b_param P; ++ ++ if (S == NULL) { ++ return -1; ++ } ++ ++ if ((outlen == 0) || (outlen > BLAKE2B_OUTBYTES)) { ++ blake2b_invalidate_state(S); ++ return -1; ++ } ++ ++ if ((key == 0) || (keylen == 0) || (keylen > BLAKE2B_KEYBYTES)) { ++ blake2b_invalidate_state(S); ++ return -1; ++ } ++ ++ /* Setup Parameter Block for keyed BLAKE2 */ ++ P.digest_length = (uint8_t)outlen; ++ P.key_length = (uint8_t)keylen; ++ P.fanout = 1; ++ P.depth = 1; ++ P.leaf_length = 0; ++ P.node_offset = 0; ++ P.node_depth = 0; ++ P.inner_length = 0; ++ memset(P.reserved, 0, sizeof(P.reserved)); ++ memset(P.salt, 0, sizeof(P.salt)); ++ memset(P.personal, 0, sizeof(P.personal)); ++ ++ if (blake2b_init_param(S, &P) < 0) { ++ blake2b_invalidate_state(S); ++ return -1; ++ } ++ ++ { ++ uint8_t block[BLAKE2B_BLOCKBYTES]; ++ memset(block, 0, BLAKE2B_BLOCKBYTES); ++ memcpy(block, key, keylen); ++ blake2b_update(S, block, BLAKE2B_BLOCKBYTES); ++ /* Burn the key from stack */ ++ clear_internal_memory(block, BLAKE2B_BLOCKBYTES); ++ } ++ return 0; ++} ++ ++static void blake2b_compress(blake2b_state *S, const uint8_t *block) { ++ uint64_t m[16]; ++ uint64_t v[16]; ++ unsigned int i, r; ++ ++ for (i = 0; i < 16; ++i) { ++ m[i] = load64(block + i * sizeof(m[i])); ++ } ++ ++ for (i = 0; i < 8; ++i) { ++ v[i] = S->h[i]; ++ } ++ ++ v[8] = blake2b_IV[0]; ++ v[9] = blake2b_IV[1]; ++ v[10] = blake2b_IV[2]; ++ v[11] = blake2b_IV[3]; ++ v[12] = blake2b_IV[4] ^ S->t[0]; ++ v[13] = blake2b_IV[5] ^ S->t[1]; ++ v[14] = blake2b_IV[6] ^ S->f[0]; ++ v[15] = blake2b_IV[7] ^ S->f[1]; ++ ++#define G(r, i, a, b, c, d) \ ++ do { \ ++ a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \ ++ d = rotr64(d ^ a, 32); \ ++ c = c + d; \ ++ b = rotr64(b ^ c, 24); \ ++ a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \ ++ d = rotr64(d ^ a, 16); \ ++ c = c + d; \ ++ b = rotr64(b ^ c, 63); \ ++ } while ((void)0, 0) ++ ++#define ROUND(r) \ ++ do { \ ++ G(r, 0, v[0], v[4], v[8], v[12]); \ ++ G(r, 1, v[1], v[5], v[9], v[13]); \ ++ G(r, 2, v[2], v[6], v[10], v[14]); \ ++ G(r, 3, v[3], v[7], v[11], v[15]); \ ++ G(r, 4, v[0], v[5], v[10], v[15]); \ ++ G(r, 5, v[1], v[6], v[11], v[12]); \ ++ G(r, 6, v[2], v[7], v[8], v[13]); \ ++ G(r, 7, v[3], v[4], v[9], v[14]); \ ++ } while ((void)0, 0) ++ ++ for (r = 0; r < 12; ++r) { ++ ROUND(r); ++ } ++ ++ for (i = 0; i < 8; ++i) { ++ S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; ++ } ++ ++#undef G ++#undef ROUND ++} ++ ++int blake2b_update(blake2b_state *S, const void *in, size_t inlen) { ++ const uint8_t *pin = (const uint8_t *)in; ++ ++ if (inlen == 0) { ++ return 0; ++ } ++ ++ /* Sanity check */ ++ if (S == NULL || in == NULL) { ++ return -1; ++ } ++ ++ /* Is this a reused state? */ ++ if (S->f[0] != 0) { ++ return -1; ++ } ++ ++ if (S->buflen + inlen > BLAKE2B_BLOCKBYTES) { ++ /* Complete current block */ ++ size_t left = S->buflen; ++ size_t fill = BLAKE2B_BLOCKBYTES - left; ++ memcpy(&S->buf[left], pin, fill); ++ blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); ++ blake2b_compress(S, S->buf); ++ S->buflen = 0; ++ inlen -= fill; ++ pin += fill; ++ /* Avoid buffer copies when possible */ ++ while (inlen > BLAKE2B_BLOCKBYTES) { ++ blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); ++ blake2b_compress(S, pin); ++ inlen -= BLAKE2B_BLOCKBYTES; ++ pin += BLAKE2B_BLOCKBYTES; ++ } ++ } ++ memcpy(&S->buf[S->buflen], pin, inlen); ++ S->buflen += (unsigned int)inlen; ++ return 0; ++} ++ ++int blake2b_final(blake2b_state *S, void *out, size_t outlen) { ++ uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; ++ unsigned int i; ++ ++ /* Sanity checks */ ++ if (S == NULL || out == NULL || outlen < S->outlen) { ++ return -1; ++ } ++ ++ /* Is this a reused state? */ ++ if (S->f[0] != 0) { ++ return -1; ++ } ++ ++ blake2b_increment_counter(S, S->buflen); ++ blake2b_set_lastblock(S); ++ memset(&S->buf[S->buflen], 0, BLAKE2B_BLOCKBYTES - S->buflen); /* Padding */ ++ blake2b_compress(S, S->buf); ++ ++ for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */ ++ store64(buffer + sizeof(S->h[i]) * i, S->h[i]); ++ } ++ ++ memcpy(out, buffer, S->outlen); ++ clear_internal_memory(buffer, sizeof(buffer)); ++ clear_internal_memory(S->buf, sizeof(S->buf)); ++ clear_internal_memory(S->h, sizeof(S->h)); ++ return 0; ++} ++ ++int blake2b(void *out, size_t outlen, const void *in, size_t inlen, ++ const void *key, size_t keylen) { ++ blake2b_state S; ++ int ret = -1; ++ ++ /* Verify parameters */ ++ if (NULL == in && inlen > 0) { ++ goto fail; ++ } ++ ++ if (NULL == out || outlen == 0 || outlen > BLAKE2B_OUTBYTES) { ++ goto fail; ++ } ++ ++ if ((NULL == key && keylen > 0) || keylen > BLAKE2B_KEYBYTES) { ++ goto fail; ++ } ++ ++ if (keylen > 0) { ++ if (blake2b_init_key(&S, outlen, key, keylen) < 0) { ++ goto fail; ++ } ++ } else { ++ if (blake2b_init(&S, outlen) < 0) { ++ goto fail; ++ } ++ } ++ ++ if (blake2b_update(&S, in, inlen) < 0) { ++ goto fail; ++ } ++ ret = blake2b_final(&S, out, outlen); ++ ++fail: ++ clear_internal_memory(&S, sizeof(S)); ++ return ret; ++} ++ ++/* Argon2 Team - Begin Code */ ++int blake2b_long(void *pout, size_t outlen, const void *in, size_t inlen) { ++ uint8_t *out = (uint8_t *)pout; ++ blake2b_state blake_state; ++ uint8_t outlen_bytes[sizeof(uint32_t)] = {0}; ++ int ret = -1; ++ ++ if (outlen > UINT32_MAX) { ++ goto fail; ++ } ++ ++ /* Ensure little-endian byte order! */ ++ store32(outlen_bytes, (uint32_t)outlen); ++ ++#define TRY(statement) \ ++ do { \ ++ ret = statement; \ ++ if (ret < 0) { \ ++ goto fail; \ ++ } \ ++ } while ((void)0, 0) ++ ++ if (outlen <= BLAKE2B_OUTBYTES) { ++ TRY(blake2b_init(&blake_state, outlen)); ++ TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes))); ++ TRY(blake2b_update(&blake_state, in, inlen)); ++ TRY(blake2b_final(&blake_state, out, outlen)); ++ } else { ++ uint32_t toproduce; ++ uint8_t out_buffer[BLAKE2B_OUTBYTES]; ++ uint8_t in_buffer[BLAKE2B_OUTBYTES]; ++ TRY(blake2b_init(&blake_state, BLAKE2B_OUTBYTES)); ++ TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes))); ++ TRY(blake2b_update(&blake_state, in, inlen)); ++ TRY(blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES)); ++ memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2); ++ out += BLAKE2B_OUTBYTES / 2; ++ toproduce = (uint32_t)outlen - BLAKE2B_OUTBYTES / 2; ++ ++ while (toproduce > BLAKE2B_OUTBYTES) { ++ memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES); ++ TRY(blake2b(out_buffer, BLAKE2B_OUTBYTES, in_buffer, ++ BLAKE2B_OUTBYTES, NULL, 0)); ++ memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2); ++ out += BLAKE2B_OUTBYTES / 2; ++ toproduce -= BLAKE2B_OUTBYTES / 2; ++ } ++ ++ memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES); ++ TRY(blake2b(out_buffer, toproduce, in_buffer, BLAKE2B_OUTBYTES, NULL, ++ 0)); ++ memcpy(out, out_buffer, toproduce); ++ } ++fail: ++ clear_internal_memory(&blake_state, sizeof(blake_state)); ++ return ret; ++#undef TRY ++} ++/* Argon2 Team - End Code */ +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blamka-round-opt.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blamka-round-opt.h +new file mode 100644 +index 0000000..2c8942e +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blamka-round-opt.h +@@ -0,0 +1,471 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef BLAKE_ROUND_MKA_OPT_H ++#define BLAKE_ROUND_MKA_OPT_H ++ ++#include "blake2-impl.h" ++ ++#include ++#if defined(__SSSE3__) ++#include /* for _mm_shuffle_epi8 and _mm_alignr_epi8 */ ++#endif ++ ++#if defined(__XOP__) && (defined(__GNUC__) || defined(__clang__)) ++#include ++#endif ++ ++#if !defined(__AVX512F__) ++#if !defined(__AVX2__) ++#if !defined(__XOP__) ++#if defined(__SSSE3__) ++#define r16 \ ++ (_mm_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) ++#define r24 \ ++ (_mm_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) ++#define _mm_roti_epi64(x, c) \ ++ (-(c) == 32) \ ++ ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ ++ : (-(c) == 24) \ ++ ? _mm_shuffle_epi8((x), r24) \ ++ : (-(c) == 16) \ ++ ? _mm_shuffle_epi8((x), r16) \ ++ : (-(c) == 63) \ ++ ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ ++ _mm_add_epi64((x), (x))) \ ++ : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ ++ _mm_slli_epi64((x), 64 - (-(c)))) ++#else /* defined(__SSE2__) */ ++#define _mm_roti_epi64(r, c) \ ++ _mm_xor_si128(_mm_srli_epi64((r), -(c)), _mm_slli_epi64((r), 64 - (-(c)))) ++#endif ++#else ++#endif ++ ++static BLAKE2_INLINE __m128i fBlaMka(__m128i x, __m128i y) { ++ const __m128i z = _mm_mul_epu32(x, y); ++ return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z)); ++} ++ ++#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ A0 = fBlaMka(A0, B0); \ ++ A1 = fBlaMka(A1, B1); \ ++ \ ++ D0 = _mm_xor_si128(D0, A0); \ ++ D1 = _mm_xor_si128(D1, A1); \ ++ \ ++ D0 = _mm_roti_epi64(D0, -32); \ ++ D1 = _mm_roti_epi64(D1, -32); \ ++ \ ++ C0 = fBlaMka(C0, D0); \ ++ C1 = fBlaMka(C1, D1); \ ++ \ ++ B0 = _mm_xor_si128(B0, C0); \ ++ B1 = _mm_xor_si128(B1, C1); \ ++ \ ++ B0 = _mm_roti_epi64(B0, -24); \ ++ B1 = _mm_roti_epi64(B1, -24); \ ++ } while ((void)0, 0) ++ ++#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ A0 = fBlaMka(A0, B0); \ ++ A1 = fBlaMka(A1, B1); \ ++ \ ++ D0 = _mm_xor_si128(D0, A0); \ ++ D1 = _mm_xor_si128(D1, A1); \ ++ \ ++ D0 = _mm_roti_epi64(D0, -16); \ ++ D1 = _mm_roti_epi64(D1, -16); \ ++ \ ++ C0 = fBlaMka(C0, D0); \ ++ C1 = fBlaMka(C1, D1); \ ++ \ ++ B0 = _mm_xor_si128(B0, C0); \ ++ B1 = _mm_xor_si128(B1, C1); \ ++ \ ++ B0 = _mm_roti_epi64(B0, -63); \ ++ B1 = _mm_roti_epi64(B1, -63); \ ++ } while ((void)0, 0) ++ ++#if defined(__SSSE3__) ++#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ __m128i t0 = _mm_alignr_epi8(B1, B0, 8); \ ++ __m128i t1 = _mm_alignr_epi8(B0, B1, 8); \ ++ B0 = t0; \ ++ B1 = t1; \ ++ \ ++ t0 = C0; \ ++ C0 = C1; \ ++ C1 = t0; \ ++ \ ++ t0 = _mm_alignr_epi8(D1, D0, 8); \ ++ t1 = _mm_alignr_epi8(D0, D1, 8); \ ++ D0 = t1; \ ++ D1 = t0; \ ++ } while ((void)0, 0) ++ ++#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ __m128i t0 = _mm_alignr_epi8(B0, B1, 8); \ ++ __m128i t1 = _mm_alignr_epi8(B1, B0, 8); \ ++ B0 = t0; \ ++ B1 = t1; \ ++ \ ++ t0 = C0; \ ++ C0 = C1; \ ++ C1 = t0; \ ++ \ ++ t0 = _mm_alignr_epi8(D0, D1, 8); \ ++ t1 = _mm_alignr_epi8(D1, D0, 8); \ ++ D0 = t1; \ ++ D1 = t0; \ ++ } while ((void)0, 0) ++#else /* SSE2 */ ++#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ __m128i t0 = D0; \ ++ __m128i t1 = B0; \ ++ D0 = C0; \ ++ C0 = C1; \ ++ C1 = D0; \ ++ D0 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t0, t0)); \ ++ D1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(D1, D1)); \ ++ B0 = _mm_unpackhi_epi64(B0, _mm_unpacklo_epi64(B1, B1)); \ ++ B1 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(t1, t1)); \ ++ } while ((void)0, 0) ++ ++#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ __m128i t0, t1; \ ++ t0 = C0; \ ++ C0 = C1; \ ++ C1 = t0; \ ++ t0 = B0; \ ++ t1 = D0; \ ++ B0 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(B0, B0)); \ ++ B1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(B1, B1)); \ ++ D0 = _mm_unpackhi_epi64(D0, _mm_unpacklo_epi64(D1, D1)); \ ++ D1 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t1, t1)); \ ++ } while ((void)0, 0) ++#endif ++ ++#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ do { \ ++ G1(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ G2(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ \ ++ DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ \ ++ G1(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ G2(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ \ ++ UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ } while ((void)0, 0) ++#else /* __AVX2__ */ ++ ++#include ++ ++#define rotr32(x) _mm256_shuffle_epi32(x, _MM_SHUFFLE(2, 3, 0, 1)) ++#define rotr24(x) _mm256_shuffle_epi8(x, _mm256_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10, 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) ++#define rotr16(x) _mm256_shuffle_epi8(x, _mm256_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9, 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) ++#define rotr63(x) _mm256_xor_si256(_mm256_srli_epi64((x), 63), _mm256_add_epi64((x), (x))) ++ ++#define G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ do { \ ++ __m256i ml = _mm256_mul_epu32(A0, B0); \ ++ ml = _mm256_add_epi64(ml, ml); \ ++ A0 = _mm256_add_epi64(A0, _mm256_add_epi64(B0, ml)); \ ++ D0 = _mm256_xor_si256(D0, A0); \ ++ D0 = rotr32(D0); \ ++ \ ++ ml = _mm256_mul_epu32(C0, D0); \ ++ ml = _mm256_add_epi64(ml, ml); \ ++ C0 = _mm256_add_epi64(C0, _mm256_add_epi64(D0, ml)); \ ++ \ ++ B0 = _mm256_xor_si256(B0, C0); \ ++ B0 = rotr24(B0); \ ++ \ ++ ml = _mm256_mul_epu32(A1, B1); \ ++ ml = _mm256_add_epi64(ml, ml); \ ++ A1 = _mm256_add_epi64(A1, _mm256_add_epi64(B1, ml)); \ ++ D1 = _mm256_xor_si256(D1, A1); \ ++ D1 = rotr32(D1); \ ++ \ ++ ml = _mm256_mul_epu32(C1, D1); \ ++ ml = _mm256_add_epi64(ml, ml); \ ++ C1 = _mm256_add_epi64(C1, _mm256_add_epi64(D1, ml)); \ ++ \ ++ B1 = _mm256_xor_si256(B1, C1); \ ++ B1 = rotr24(B1); \ ++ } while((void)0, 0); ++ ++#define G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ do { \ ++ __m256i ml = _mm256_mul_epu32(A0, B0); \ ++ ml = _mm256_add_epi64(ml, ml); \ ++ A0 = _mm256_add_epi64(A0, _mm256_add_epi64(B0, ml)); \ ++ D0 = _mm256_xor_si256(D0, A0); \ ++ D0 = rotr16(D0); \ ++ \ ++ ml = _mm256_mul_epu32(C0, D0); \ ++ ml = _mm256_add_epi64(ml, ml); \ ++ C0 = _mm256_add_epi64(C0, _mm256_add_epi64(D0, ml)); \ ++ B0 = _mm256_xor_si256(B0, C0); \ ++ B0 = rotr63(B0); \ ++ \ ++ ml = _mm256_mul_epu32(A1, B1); \ ++ ml = _mm256_add_epi64(ml, ml); \ ++ A1 = _mm256_add_epi64(A1, _mm256_add_epi64(B1, ml)); \ ++ D1 = _mm256_xor_si256(D1, A1); \ ++ D1 = rotr16(D1); \ ++ \ ++ ml = _mm256_mul_epu32(C1, D1); \ ++ ml = _mm256_add_epi64(ml, ml); \ ++ C1 = _mm256_add_epi64(C1, _mm256_add_epi64(D1, ml)); \ ++ B1 = _mm256_xor_si256(B1, C1); \ ++ B1 = rotr63(B1); \ ++ } while((void)0, 0); ++ ++#define DIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \ ++ C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ ++ D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \ ++ \ ++ B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \ ++ C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ ++ D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \ ++ } while((void)0, 0); ++ ++#define DIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ do { \ ++ __m256i tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \ ++ __m256i tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \ ++ B1 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ ++ B0 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ ++ \ ++ tmp1 = C0; \ ++ C0 = C1; \ ++ C1 = tmp1; \ ++ \ ++ tmp1 = _mm256_blend_epi32(D0, D1, 0xCC); \ ++ tmp2 = _mm256_blend_epi32(D0, D1, 0x33); \ ++ D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ ++ D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ ++ } while(0); ++ ++#define UNDIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \ ++ C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ ++ D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \ ++ \ ++ B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \ ++ C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ ++ D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \ ++ } while((void)0, 0); ++ ++#define UNDIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ do { \ ++ __m256i tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \ ++ __m256i tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \ ++ B0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ ++ B1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ ++ \ ++ tmp1 = C0; \ ++ C0 = C1; \ ++ C1 = tmp1; \ ++ \ ++ tmp1 = _mm256_blend_epi32(D0, D1, 0x33); \ ++ tmp2 = _mm256_blend_epi32(D0, D1, 0xCC); \ ++ D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ ++ D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ ++ } while((void)0, 0); ++ ++#define BLAKE2_ROUND_1(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ do{ \ ++ G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ \ ++ DIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ \ ++ G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ \ ++ UNDIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ } while((void)0, 0); ++ ++#define BLAKE2_ROUND_2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ do{ \ ++ G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ \ ++ DIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ \ ++ G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ \ ++ UNDIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ } while((void)0, 0); ++ ++#endif /* __AVX2__ */ ++ ++#else /* __AVX512F__ */ ++ ++#include ++ ++#define ror64(x, n) _mm512_ror_epi64((x), (n)) ++ ++static __m512i muladd(__m512i x, __m512i y) ++{ ++ __m512i z = _mm512_mul_epu32(x, y); ++ return _mm512_add_epi64(_mm512_add_epi64(x, y), _mm512_add_epi64(z, z)); ++} ++ ++#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ A0 = muladd(A0, B0); \ ++ A1 = muladd(A1, B1); \ ++\ ++ D0 = _mm512_xor_si512(D0, A0); \ ++ D1 = _mm512_xor_si512(D1, A1); \ ++\ ++ D0 = ror64(D0, 32); \ ++ D1 = ror64(D1, 32); \ ++\ ++ C0 = muladd(C0, D0); \ ++ C1 = muladd(C1, D1); \ ++\ ++ B0 = _mm512_xor_si512(B0, C0); \ ++ B1 = _mm512_xor_si512(B1, C1); \ ++\ ++ B0 = ror64(B0, 24); \ ++ B1 = ror64(B1, 24); \ ++ } while ((void)0, 0) ++ ++#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ A0 = muladd(A0, B0); \ ++ A1 = muladd(A1, B1); \ ++\ ++ D0 = _mm512_xor_si512(D0, A0); \ ++ D1 = _mm512_xor_si512(D1, A1); \ ++\ ++ D0 = ror64(D0, 16); \ ++ D1 = ror64(D1, 16); \ ++\ ++ C0 = muladd(C0, D0); \ ++ C1 = muladd(C1, D1); \ ++\ ++ B0 = _mm512_xor_si512(B0, C0); \ ++ B1 = _mm512_xor_si512(B1, C1); \ ++\ ++ B0 = ror64(B0, 63); \ ++ B1 = ror64(B1, 63); \ ++ } while ((void)0, 0) ++ ++#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \ ++ B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \ ++\ ++ C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ ++ C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ ++\ ++ D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \ ++ D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \ ++ } while ((void)0, 0) ++ ++#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \ ++ B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \ ++\ ++ C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ ++ C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ ++\ ++ D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \ ++ D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \ ++ } while ((void)0, 0) ++ ++#define BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1) \ ++ do { \ ++ G1(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ G2(A0, B0, C0, D0, A1, B1, C1, D1); \ ++\ ++ DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ ++\ ++ G1(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ G2(A0, B0, C0, D0, A1, B1, C1, D1); \ ++\ ++ UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ } while ((void)0, 0) ++ ++#define SWAP_HALVES(A0, A1) \ ++ do { \ ++ __m512i t0, t1; \ ++ t0 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(1, 0, 1, 0)); \ ++ t1 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(3, 2, 3, 2)); \ ++ A0 = t0; \ ++ A1 = t1; \ ++ } while((void)0, 0) ++ ++#define SWAP_QUARTERS(A0, A1) \ ++ do { \ ++ SWAP_HALVES(A0, A1); \ ++ A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \ ++ A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \ ++ } while((void)0, 0) ++ ++#define UNSWAP_QUARTERS(A0, A1) \ ++ do { \ ++ A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \ ++ A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \ ++ SWAP_HALVES(A0, A1); \ ++ } while((void)0, 0) ++ ++#define BLAKE2_ROUND_1(A0, C0, B0, D0, A1, C1, B1, D1) \ ++ do { \ ++ SWAP_HALVES(A0, B0); \ ++ SWAP_HALVES(C0, D0); \ ++ SWAP_HALVES(A1, B1); \ ++ SWAP_HALVES(C1, D1); \ ++ BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ SWAP_HALVES(A0, B0); \ ++ SWAP_HALVES(C0, D0); \ ++ SWAP_HALVES(A1, B1); \ ++ SWAP_HALVES(C1, D1); \ ++ } while ((void)0, 0) ++ ++#define BLAKE2_ROUND_2(A0, A1, B0, B1, C0, C1, D0, D1) \ ++ do { \ ++ SWAP_QUARTERS(A0, A1); \ ++ SWAP_QUARTERS(B0, B1); \ ++ SWAP_QUARTERS(C0, C1); \ ++ SWAP_QUARTERS(D0, D1); \ ++ BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \ ++ UNSWAP_QUARTERS(A0, A1); \ ++ UNSWAP_QUARTERS(B0, B1); \ ++ UNSWAP_QUARTERS(C0, C1); \ ++ UNSWAP_QUARTERS(D0, D1); \ ++ } while ((void)0, 0) ++ ++#endif /* __AVX512F__ */ ++#endif /* BLAKE_ROUND_MKA_OPT_H */ +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blamka-round-ref.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blamka-round-ref.h +new file mode 100644 +index 0000000..b8f2cf4 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/blake2/blamka-round-ref.h +@@ -0,0 +1,56 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef BLAKE_ROUND_MKA_H ++#define BLAKE_ROUND_MKA_H ++ ++#include "blake2.h" ++#include "blake2-impl.h" ++ ++/* designed by the Lyra PHC team */ ++static BLAKE2_INLINE uint64_t fBlaMka(uint64_t x, uint64_t y) { ++ const uint64_t m = UINT64_C(0xFFFFFFFF); ++ const uint64_t xy = (x & m) * (y & m); ++ return x + y + 2 * xy; ++} ++ ++#define G(a, b, c, d) \ ++ do { \ ++ a = fBlaMka(a, b); \ ++ d = rotr64(d ^ a, 32); \ ++ c = fBlaMka(c, d); \ ++ b = rotr64(b ^ c, 24); \ ++ a = fBlaMka(a, b); \ ++ d = rotr64(d ^ a, 16); \ ++ c = fBlaMka(c, d); \ ++ b = rotr64(b ^ c, 63); \ ++ } while ((void)0, 0) ++ ++#define BLAKE2_ROUND_NOMSG(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, \ ++ v12, v13, v14, v15) \ ++ do { \ ++ G(v0, v4, v8, v12); \ ++ G(v1, v5, v9, v13); \ ++ G(v2, v6, v10, v14); \ ++ G(v3, v7, v11, v15); \ ++ G(v0, v5, v10, v15); \ ++ G(v1, v6, v11, v12); \ ++ G(v2, v7, v8, v13); \ ++ G(v3, v4, v9, v14); \ ++ } while ((void)0, 0) ++ ++#endif +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/core.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/core.c +new file mode 100644 +index 0000000..65f0537 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/core.c +@@ -0,0 +1,648 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++/*For memory wiping*/ ++#ifdef _MSC_VER ++#include ++#include /* For SecureZeroMemory */ ++#endif ++#if defined __STDC_LIB_EXT1__ ++#define __STDC_WANT_LIB_EXT1__ 1 ++#endif ++#define VC_GE_2005(version) (version >= 1400) ++ ++/* for explicit_bzero() on glibc */ ++#define _DEFAULT_SOURCE ++ ++#include ++#include ++#include ++ ++#include "core.h" ++#include "thread.h" ++#include "blake2/blake2.h" ++#include "blake2/blake2-impl.h" ++ ++#ifdef GENKAT ++#include "genkat.h" ++#endif ++ ++#if defined(__clang__) ++#if __has_attribute(optnone) ++#define NOT_OPTIMIZED __attribute__((optnone)) ++#endif ++#elif defined(__GNUC__) ++#define GCC_VERSION \ ++ (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) ++#if GCC_VERSION >= 40400 ++#define NOT_OPTIMIZED __attribute__((optimize("O0"))) ++#endif ++#endif ++#ifndef NOT_OPTIMIZED ++#define NOT_OPTIMIZED ++#endif ++ ++/***************Instance and Position constructors**********/ ++void init_block_value(block *b, uint8_t in) { memset(b->v, in, sizeof(b->v)); } ++ ++void copy_block(block *dst, const block *src) { ++ memcpy(dst->v, src->v, sizeof(uint64_t) * ARGON2_QWORDS_IN_BLOCK); ++} ++ ++void xor_block(block *dst, const block *src) { ++ int i; ++ for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { ++ dst->v[i] ^= src->v[i]; ++ } ++} ++ ++static void load_block(block *dst, const void *input) { ++ unsigned i; ++ for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { ++ dst->v[i] = load64((const uint8_t *)input + i * sizeof(dst->v[i])); ++ } ++} ++ ++static void store_block(void *output, const block *src) { ++ unsigned i; ++ for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { ++ store64((uint8_t *)output + i * sizeof(src->v[i]), src->v[i]); ++ } ++} ++ ++/***************Memory functions*****************/ ++ ++int allocate_memory(const argon2_context *context, uint8_t **memory, ++ size_t num, size_t size) { ++ size_t memory_size = num*size; ++ if (memory == NULL) { ++ return ARGON2_MEMORY_ALLOCATION_ERROR; ++ } ++ ++ /* 1. Check for multiplication overflow */ ++ if (size != 0 && memory_size / size != num) { ++ return ARGON2_MEMORY_ALLOCATION_ERROR; ++ } ++ ++ /* 2. Try to allocate with appropriate allocator */ ++ if (context->allocate_cbk) { ++ (context->allocate_cbk)(memory, memory_size); ++ } else { ++ *memory = malloc(memory_size); ++ } ++ ++ if (*memory == NULL) { ++ return ARGON2_MEMORY_ALLOCATION_ERROR; ++ } ++ ++ return ARGON2_OK; ++} ++ ++void free_memory(const argon2_context *context, uint8_t *memory, ++ size_t num, size_t size) { ++ size_t memory_size = num*size; ++ clear_internal_memory(memory, memory_size); ++ if (context->free_cbk) { ++ (context->free_cbk)(memory, memory_size); ++ } else { ++ free(memory); ++ } ++} ++ ++#if defined(__OpenBSD__) ++#define HAVE_EXPLICIT_BZERO 1 ++#elif defined(__GLIBC__) && defined(__GLIBC_PREREQ) ++#if __GLIBC_PREREQ(2,25) ++#define HAVE_EXPLICIT_BZERO 1 ++#endif ++#endif ++ ++void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) { ++#if defined(_MSC_VER) && VC_GE_2005(_MSC_VER) ++ SecureZeroMemory(v, n); ++#elif defined memset_s ++ memset_s(v, n, 0, n); ++#elif defined(HAVE_EXPLICIT_BZERO) ++ explicit_bzero(v, n); ++#else ++ static void *(*const volatile memset_sec)(void *, int, size_t) = &memset; ++ memset_sec(v, 0, n); ++#endif ++} ++ ++/* Memory clear flag defaults to true. */ ++int FLAG_clear_internal_memory = 1; ++void clear_internal_memory(void *v, size_t n) { ++ if (FLAG_clear_internal_memory && v) { ++ secure_wipe_memory(v, n); ++ } ++} ++ ++void finalize(const argon2_context *context, argon2_instance_t *instance) { ++ if (context != NULL && instance != NULL) { ++ block blockhash; ++ uint32_t l; ++ ++ copy_block(&blockhash, instance->memory + instance->lane_length - 1); ++ ++ /* XOR the last blocks */ ++ for (l = 1; l < instance->lanes; ++l) { ++ uint32_t last_block_in_lane = ++ l * instance->lane_length + (instance->lane_length - 1); ++ xor_block(&blockhash, instance->memory + last_block_in_lane); ++ } ++ ++ /* Hash the result */ ++ { ++ uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE]; ++ store_block(blockhash_bytes, &blockhash); ++ blake2b_long(context->out, context->outlen, blockhash_bytes, ++ ARGON2_BLOCK_SIZE); ++ /* clear blockhash and blockhash_bytes */ ++ clear_internal_memory(blockhash.v, ARGON2_BLOCK_SIZE); ++ clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE); ++ } ++ ++#ifdef GENKAT ++ print_tag(context->out, context->outlen); ++#endif ++ ++ free_memory(context, (uint8_t *)instance->memory, ++ instance->memory_blocks, sizeof(block)); ++ } ++} ++ ++uint32_t index_alpha(const argon2_instance_t *instance, ++ const argon2_position_t *position, uint32_t pseudo_rand, ++ int same_lane) { ++ /* ++ * Pass 0: ++ * This lane : all already finished segments plus already constructed ++ * blocks in this segment ++ * Other lanes : all already finished segments ++ * Pass 1+: ++ * This lane : (SYNC_POINTS - 1) last segments plus already constructed ++ * blocks in this segment ++ * Other lanes : (SYNC_POINTS - 1) last segments ++ */ ++ uint32_t reference_area_size; ++ uint64_t relative_position; ++ uint32_t start_position, absolute_position; ++ ++ if (0 == position->pass) { ++ /* First pass */ ++ if (0 == position->slice) { ++ /* First slice */ ++ reference_area_size = ++ position->index - 1; /* all but the previous */ ++ } else { ++ if (same_lane) { ++ /* The same lane => add current segment */ ++ reference_area_size = ++ position->slice * instance->segment_length + ++ position->index - 1; ++ } else { ++ reference_area_size = ++ position->slice * instance->segment_length + ++ ((position->index == 0) ? (-1) : 0); ++ } ++ } ++ } else { ++ /* Second pass */ ++ if (same_lane) { ++ reference_area_size = instance->lane_length - ++ instance->segment_length + position->index - ++ 1; ++ } else { ++ reference_area_size = instance->lane_length - ++ instance->segment_length + ++ ((position->index == 0) ? (-1) : 0); ++ } ++ } ++ ++ /* 1.2.4. Mapping pseudo_rand to 0.. and produce ++ * relative position */ ++ relative_position = pseudo_rand; ++ relative_position = relative_position * relative_position >> 32; ++ relative_position = reference_area_size - 1 - ++ (reference_area_size * relative_position >> 32); ++ ++ /* 1.2.5 Computing starting position */ ++ start_position = 0; ++ ++ if (0 != position->pass) { ++ start_position = (position->slice == ARGON2_SYNC_POINTS - 1) ++ ? 0 ++ : (position->slice + 1) * instance->segment_length; ++ } ++ ++ /* 1.2.6. Computing absolute position */ ++ absolute_position = (start_position + relative_position) % ++ instance->lane_length; /* absolute position */ ++ return absolute_position; ++} ++ ++/* Single-threaded version for p=1 case */ ++static int fill_memory_blocks_st(argon2_instance_t *instance) { ++ uint32_t r, s, l; ++ ++ for (r = 0; r < instance->passes; ++r) { ++ for (s = 0; s < ARGON2_SYNC_POINTS; ++s) { ++ for (l = 0; l < instance->lanes; ++l) { ++ argon2_position_t position = {r, l, (uint8_t)s, 0}; ++ fill_segment(instance, position); ++ } ++ } ++#ifdef GENKAT ++ internal_kat(instance, r); /* Print all memory blocks */ ++#endif ++ } ++ return ARGON2_OK; ++} ++ ++#if !defined(ARGON2_NO_THREADS) ++ ++#ifdef _WIN32 ++static unsigned __stdcall fill_segment_thr(void *thread_data) ++#else ++static void *fill_segment_thr(void *thread_data) ++#endif ++{ ++ argon2_thread_data *my_data = thread_data; ++ fill_segment(my_data->instance_ptr, my_data->pos); ++ argon2_thread_exit(); ++ return 0; ++} ++ ++/* Multi-threaded version for p > 1 case */ ++static int fill_memory_blocks_mt(argon2_instance_t *instance) { ++ uint32_t r, s; ++ argon2_thread_handle_t *thread = NULL; ++ argon2_thread_data *thr_data = NULL; ++ int rc = ARGON2_OK; ++ ++ /* 1. Allocating space for threads */ ++ thread = calloc(instance->lanes, sizeof(argon2_thread_handle_t)); ++ if (thread == NULL) { ++ rc = ARGON2_MEMORY_ALLOCATION_ERROR; ++ goto fail; ++ } ++ ++ thr_data = calloc(instance->lanes, sizeof(argon2_thread_data)); ++ if (thr_data == NULL) { ++ rc = ARGON2_MEMORY_ALLOCATION_ERROR; ++ goto fail; ++ } ++ ++ for (r = 0; r < instance->passes; ++r) { ++ for (s = 0; s < ARGON2_SYNC_POINTS; ++s) { ++ uint32_t l, ll; ++ ++ /* 2. Calling threads */ ++ for (l = 0; l < instance->lanes; ++l) { ++ argon2_position_t position; ++ ++ /* 2.1 Join a thread if limit is exceeded */ ++ if (l >= instance->threads) { ++ if (argon2_thread_join(thread[l - instance->threads])) { ++ rc = ARGON2_THREAD_FAIL; ++ goto fail; ++ } ++ } ++ ++ /* 2.2 Create thread */ ++ position.pass = r; ++ position.lane = l; ++ position.slice = (uint8_t)s; ++ position.index = 0; ++ thr_data[l].instance_ptr = ++ instance; /* preparing the thread input */ ++ memcpy(&(thr_data[l].pos), &position, ++ sizeof(argon2_position_t)); ++ if (argon2_thread_create(&thread[l], &fill_segment_thr, ++ (void *)&thr_data[l])) { ++ /* Wait for already running threads */ ++ for (ll = 0; ll < l; ++ll) ++ argon2_thread_join(thread[ll]); ++ rc = ARGON2_THREAD_FAIL; ++ goto fail; ++ } ++ ++ /* fill_segment(instance, position); */ ++ /*Non-thread equivalent of the lines above */ ++ } ++ ++ /* 3. Joining remaining threads */ ++ for (l = instance->lanes - instance->threads; l < instance->lanes; ++ ++l) { ++ if (argon2_thread_join(thread[l])) { ++ rc = ARGON2_THREAD_FAIL; ++ goto fail; ++ } ++ } ++ } ++ ++#ifdef GENKAT ++ internal_kat(instance, r); /* Print all memory blocks */ ++#endif ++ } ++ ++fail: ++ if (thread != NULL) { ++ free(thread); ++ } ++ if (thr_data != NULL) { ++ free(thr_data); ++ } ++ return rc; ++} ++ ++#endif /* ARGON2_NO_THREADS */ ++ ++int fill_memory_blocks(argon2_instance_t *instance) { ++ if (instance == NULL || instance->lanes == 0) { ++ return ARGON2_INCORRECT_PARAMETER; ++ } ++#if defined(ARGON2_NO_THREADS) ++ return fill_memory_blocks_st(instance); ++#else ++ return instance->threads == 1 ? ++ fill_memory_blocks_st(instance) : fill_memory_blocks_mt(instance); ++#endif ++} ++ ++int validate_inputs(const argon2_context *context) { ++ if (NULL == context) { ++ return ARGON2_INCORRECT_PARAMETER; ++ } ++ ++ if (NULL == context->out) { ++ return ARGON2_OUTPUT_PTR_NULL; ++ } ++ ++ /* Validate output length */ ++ if (ARGON2_MIN_OUTLEN > context->outlen) { ++ return ARGON2_OUTPUT_TOO_SHORT; ++ } ++ ++ if (ARGON2_MAX_OUTLEN < context->outlen) { ++ return ARGON2_OUTPUT_TOO_LONG; ++ } ++ ++ /* Validate password (required param) */ ++ if (NULL == context->pwd) { ++ if (0 != context->pwdlen) { ++ return ARGON2_PWD_PTR_MISMATCH; ++ } ++ } ++ ++ if (ARGON2_MIN_PWD_LENGTH > context->pwdlen) { ++ return ARGON2_PWD_TOO_SHORT; ++ } ++ ++ if (ARGON2_MAX_PWD_LENGTH < context->pwdlen) { ++ return ARGON2_PWD_TOO_LONG; ++ } ++ ++ /* Validate salt (required param) */ ++ if (NULL == context->salt) { ++ if (0 != context->saltlen) { ++ return ARGON2_SALT_PTR_MISMATCH; ++ } ++ } ++ ++ if (ARGON2_MIN_SALT_LENGTH > context->saltlen) { ++ return ARGON2_SALT_TOO_SHORT; ++ } ++ ++ if (ARGON2_MAX_SALT_LENGTH < context->saltlen) { ++ return ARGON2_SALT_TOO_LONG; ++ } ++ ++ /* Validate secret (optional param) */ ++ if (NULL == context->secret) { ++ if (0 != context->secretlen) { ++ return ARGON2_SECRET_PTR_MISMATCH; ++ } ++ } else { ++ if (ARGON2_MIN_SECRET > context->secretlen) { ++ return ARGON2_SECRET_TOO_SHORT; ++ } ++ if (ARGON2_MAX_SECRET < context->secretlen) { ++ return ARGON2_SECRET_TOO_LONG; ++ } ++ } ++ ++ /* Validate associated data (optional param) */ ++ if (NULL == context->ad) { ++ if (0 != context->adlen) { ++ return ARGON2_AD_PTR_MISMATCH; ++ } ++ } else { ++ if (ARGON2_MIN_AD_LENGTH > context->adlen) { ++ return ARGON2_AD_TOO_SHORT; ++ } ++ if (ARGON2_MAX_AD_LENGTH < context->adlen) { ++ return ARGON2_AD_TOO_LONG; ++ } ++ } ++ ++ /* Validate memory cost */ ++ if (ARGON2_MIN_MEMORY > context->m_cost) { ++ return ARGON2_MEMORY_TOO_LITTLE; ++ } ++ ++ if (ARGON2_MAX_MEMORY < context->m_cost) { ++ return ARGON2_MEMORY_TOO_MUCH; ++ } ++ ++ if (context->m_cost < 8 * context->lanes) { ++ return ARGON2_MEMORY_TOO_LITTLE; ++ } ++ ++ /* Validate time cost */ ++ if (ARGON2_MIN_TIME > context->t_cost) { ++ return ARGON2_TIME_TOO_SMALL; ++ } ++ ++ if (ARGON2_MAX_TIME < context->t_cost) { ++ return ARGON2_TIME_TOO_LARGE; ++ } ++ ++ /* Validate lanes */ ++ if (ARGON2_MIN_LANES > context->lanes) { ++ return ARGON2_LANES_TOO_FEW; ++ } ++ ++ if (ARGON2_MAX_LANES < context->lanes) { ++ return ARGON2_LANES_TOO_MANY; ++ } ++ ++ /* Validate threads */ ++ if (ARGON2_MIN_THREADS > context->threads) { ++ return ARGON2_THREADS_TOO_FEW; ++ } ++ ++ if (ARGON2_MAX_THREADS < context->threads) { ++ return ARGON2_THREADS_TOO_MANY; ++ } ++ ++ if (NULL != context->allocate_cbk && NULL == context->free_cbk) { ++ return ARGON2_FREE_MEMORY_CBK_NULL; ++ } ++ ++ if (NULL == context->allocate_cbk && NULL != context->free_cbk) { ++ return ARGON2_ALLOCATE_MEMORY_CBK_NULL; ++ } ++ ++ return ARGON2_OK; ++} ++ ++void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance) { ++ uint32_t l; ++ /* Make the first and second block in each lane as G(H0||0||i) or ++ G(H0||1||i) */ ++ uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE]; ++ for (l = 0; l < instance->lanes; ++l) { ++ ++ store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 0); ++ store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH + 4, l); ++ blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, ++ ARGON2_PREHASH_SEED_LENGTH); ++ load_block(&instance->memory[l * instance->lane_length + 0], ++ blockhash_bytes); ++ ++ store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 1); ++ blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, ++ ARGON2_PREHASH_SEED_LENGTH); ++ load_block(&instance->memory[l * instance->lane_length + 1], ++ blockhash_bytes); ++ } ++ clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE); ++} ++ ++void initial_hash(uint8_t *blockhash, argon2_context *context, ++ argon2_type type) { ++ blake2b_state BlakeHash; ++ uint8_t value[sizeof(uint32_t)]; ++ ++ if (NULL == context || NULL == blockhash) { ++ return; ++ } ++ ++ blake2b_init(&BlakeHash, ARGON2_PREHASH_DIGEST_LENGTH); ++ ++ store32(&value, context->lanes); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ store32(&value, context->outlen); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ store32(&value, context->m_cost); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ store32(&value, context->t_cost); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ store32(&value, context->version); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ store32(&value, (uint32_t)type); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ store32(&value, context->pwdlen); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ if (context->pwd != NULL) { ++ blake2b_update(&BlakeHash, (const uint8_t *)context->pwd, ++ context->pwdlen); ++ ++ if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) { ++ secure_wipe_memory(context->pwd, context->pwdlen); ++ context->pwdlen = 0; ++ } ++ } ++ ++ store32(&value, context->saltlen); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ if (context->salt != NULL) { ++ blake2b_update(&BlakeHash, (const uint8_t *)context->salt, ++ context->saltlen); ++ } ++ ++ store32(&value, context->secretlen); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ if (context->secret != NULL) { ++ blake2b_update(&BlakeHash, (const uint8_t *)context->secret, ++ context->secretlen); ++ ++ if (context->flags & ARGON2_FLAG_CLEAR_SECRET) { ++ secure_wipe_memory(context->secret, context->secretlen); ++ context->secretlen = 0; ++ } ++ } ++ ++ store32(&value, context->adlen); ++ blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); ++ ++ if (context->ad != NULL) { ++ blake2b_update(&BlakeHash, (const uint8_t *)context->ad, ++ context->adlen); ++ } ++ ++ blake2b_final(&BlakeHash, blockhash, ARGON2_PREHASH_DIGEST_LENGTH); ++} ++ ++int initialize(argon2_instance_t *instance, argon2_context *context) { ++ uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; ++ int result = ARGON2_OK; ++ ++ if (instance == NULL || context == NULL) ++ return ARGON2_INCORRECT_PARAMETER; ++ instance->context_ptr = context; ++ ++ /* 1. Memory allocation */ ++ result = allocate_memory(context, (uint8_t **)&(instance->memory), ++ instance->memory_blocks, sizeof(block)); ++ if (result != ARGON2_OK) { ++ return result; ++ } ++ ++ /* 2. Initial hashing */ ++ /* H_0 + 8 extra bytes to produce the first blocks */ ++ /* uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; */ ++ /* Hashing all inputs */ ++ initial_hash(blockhash, context, instance->type); ++ /* Zeroing 8 extra bytes */ ++ clear_internal_memory(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, ++ ARGON2_PREHASH_SEED_LENGTH - ++ ARGON2_PREHASH_DIGEST_LENGTH); ++ ++#ifdef GENKAT ++ initial_kat(blockhash, context, instance->type); ++#endif ++ ++ /* 3. Creating first blocks, we always have at least two blocks in a slice ++ */ ++ fill_first_blocks(blockhash, instance); ++ /* Clearing the hash */ ++ clear_internal_memory(blockhash, ARGON2_PREHASH_SEED_LENGTH); ++ ++ return ARGON2_OK; ++} +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/core.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/core.h +new file mode 100644 +index 0000000..78000ba +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/core.h +@@ -0,0 +1,228 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef ARGON2_CORE_H ++#define ARGON2_CORE_H ++ ++#include "argon2.h" ++ ++#define CONST_CAST(x) (x)(uintptr_t) ++ ++/**********************Argon2 internal constants*******************************/ ++ ++enum argon2_core_constants { ++ /* Memory block size in bytes */ ++ ARGON2_BLOCK_SIZE = 1024, ++ ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 8, ++ ARGON2_OWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 16, ++ ARGON2_HWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 32, ++ ARGON2_512BIT_WORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 64, ++ ++ /* Number of pseudo-random values generated by one call to Blake in Argon2i ++ to ++ generate reference block positions */ ++ ARGON2_ADDRESSES_IN_BLOCK = 128, ++ ++ /* Pre-hashing digest length and its extension*/ ++ ARGON2_PREHASH_DIGEST_LENGTH = 64, ++ ARGON2_PREHASH_SEED_LENGTH = 72 ++}; ++ ++/*************************Argon2 internal data types***********************/ ++ ++/* ++ * Structure for the (1KB) memory block implemented as 128 64-bit words. ++ * Memory blocks can be copied, XORed. Internal words can be accessed by [] (no ++ * bounds checking). ++ */ ++typedef struct block_ { uint64_t v[ARGON2_QWORDS_IN_BLOCK]; } block; ++ ++/*****************Functions that work with the block******************/ ++ ++/* Initialize each byte of the block with @in */ ++void init_block_value(block *b, uint8_t in); ++ ++/* Copy block @src to block @dst */ ++void copy_block(block *dst, const block *src); ++ ++/* XOR @src onto @dst bytewise */ ++void xor_block(block *dst, const block *src); ++ ++/* ++ * Argon2 instance: memory pointer, number of passes, amount of memory, type, ++ * and derived values. ++ * Used to evaluate the number and location of blocks to construct in each ++ * thread ++ */ ++typedef struct Argon2_instance_t { ++ block *memory; /* Memory pointer */ ++ uint32_t version; ++ uint32_t passes; /* Number of passes */ ++ uint32_t memory_blocks; /* Number of blocks in memory */ ++ uint32_t segment_length; ++ uint32_t lane_length; ++ uint32_t lanes; ++ uint32_t threads; ++ argon2_type type; ++ int print_internals; /* whether to print the memory blocks */ ++ argon2_context *context_ptr; /* points back to original context */ ++} argon2_instance_t; ++ ++/* ++ * Argon2 position: where we construct the block right now. Used to distribute ++ * work between threads. ++ */ ++typedef struct Argon2_position_t { ++ uint32_t pass; ++ uint32_t lane; ++ uint8_t slice; ++ uint32_t index; ++} argon2_position_t; ++ ++/*Struct that holds the inputs for thread handling FillSegment*/ ++typedef struct Argon2_thread_data { ++ argon2_instance_t *instance_ptr; ++ argon2_position_t pos; ++} argon2_thread_data; ++ ++/*************************Argon2 core functions********************************/ ++ ++/* Allocates memory to the given pointer, uses the appropriate allocator as ++ * specified in the context. Total allocated memory is num*size. ++ * @param context argon2_context which specifies the allocator ++ * @param memory pointer to the pointer to the memory ++ * @param size the size in bytes for each element to be allocated ++ * @param num the number of elements to be allocated ++ * @return ARGON2_OK if @memory is a valid pointer and memory is allocated ++ */ ++int allocate_memory(const argon2_context *context, uint8_t **memory, ++ size_t num, size_t size); ++ ++/* ++ * Frees memory at the given pointer, uses the appropriate deallocator as ++ * specified in the context. Also cleans the memory using clear_internal_memory. ++ * @param context argon2_context which specifies the deallocator ++ * @param memory pointer to buffer to be freed ++ * @param size the size in bytes for each element to be deallocated ++ * @param num the number of elements to be deallocated ++ */ ++void free_memory(const argon2_context *context, uint8_t *memory, ++ size_t num, size_t size); ++ ++/* Function that securely cleans the memory. This ignores any flags set ++ * regarding clearing memory. Usually one just calls clear_internal_memory. ++ * @param mem Pointer to the memory ++ * @param s Memory size in bytes ++ */ ++void secure_wipe_memory(void *v, size_t n); ++ ++/* Function that securely clears the memory if FLAG_clear_internal_memory is ++ * set. If the flag isn't set, this function does nothing. ++ * @param mem Pointer to the memory ++ * @param s Memory size in bytes ++ */ ++void clear_internal_memory(void *v, size_t n); ++ ++/* ++ * Computes absolute position of reference block in the lane following a skewed ++ * distribution and using a pseudo-random value as input ++ * @param instance Pointer to the current instance ++ * @param position Pointer to the current position ++ * @param pseudo_rand 32-bit pseudo-random value used to determine the position ++ * @param same_lane Indicates if the block will be taken from the current lane. ++ * If so we can reference the current segment ++ * @pre All pointers must be valid ++ */ ++uint32_t index_alpha(const argon2_instance_t *instance, ++ const argon2_position_t *position, uint32_t pseudo_rand, ++ int same_lane); ++ ++/* ++ * Function that validates all inputs against predefined restrictions and return ++ * an error code ++ * @param context Pointer to current Argon2 context ++ * @return ARGON2_OK if everything is all right, otherwise one of error codes ++ * (all defined in ++ */ ++int validate_inputs(const argon2_context *context); ++ ++/* ++ * Hashes all the inputs into @a blockhash[PREHASH_DIGEST_LENGTH], clears ++ * password and secret if needed ++ * @param context Pointer to the Argon2 internal structure containing memory ++ * pointer, and parameters for time and space requirements. ++ * @param blockhash Buffer for pre-hashing digest ++ * @param type Argon2 type ++ * @pre @a blockhash must have at least @a PREHASH_DIGEST_LENGTH bytes ++ * allocated ++ */ ++void initial_hash(uint8_t *blockhash, argon2_context *context, ++ argon2_type type); ++ ++/* ++ * Function creates first 2 blocks per lane ++ * @param instance Pointer to the current instance ++ * @param blockhash Pointer to the pre-hashing digest ++ * @pre blockhash must point to @a PREHASH_SEED_LENGTH allocated values ++ */ ++void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance); ++ ++/* ++ * Function allocates memory, hashes the inputs with Blake, and creates first ++ * two blocks. Returns the pointer to the main memory with 2 blocks per lane ++ * initialized ++ * @param context Pointer to the Argon2 internal structure containing memory ++ * pointer, and parameters for time and space requirements. ++ * @param instance Current Argon2 instance ++ * @return Zero if successful, -1 if memory failed to allocate. @context->state ++ * will be modified if successful. ++ */ ++int initialize(argon2_instance_t *instance, argon2_context *context); ++ ++/* ++ * XORing the last block of each lane, hashing it, making the tag. Deallocates ++ * the memory. ++ * @param context Pointer to current Argon2 context (use only the out parameters ++ * from it) ++ * @param instance Pointer to current instance of Argon2 ++ * @pre instance->state must point to necessary amount of memory ++ * @pre context->out must point to outlen bytes of memory ++ * @pre if context->free_cbk is not NULL, it should point to a function that ++ * deallocates memory ++ */ ++void finalize(const argon2_context *context, argon2_instance_t *instance); ++ ++/* ++ * Function that fills the segment using previous segments also from other ++ * threads ++ * @param context current context ++ * @param instance Pointer to the current instance ++ * @param position Current position ++ * @pre all block pointers must be valid ++ */ ++void fill_segment(const argon2_instance_t *instance, ++ argon2_position_t position); ++ ++/* ++ * Function that fills the entire memory t_cost times based on the first two ++ * blocks in each lane ++ * @param instance Pointer to the current instance ++ * @return ARGON2_OK if successful, @context->state ++ */ ++int fill_memory_blocks(argon2_instance_t *instance); ++ ++#endif +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/encoding.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/encoding.c +new file mode 100644 +index 0000000..12cfda4 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/encoding.c +@@ -0,0 +1,463 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#include ++#include ++#include ++#include ++#include "encoding.h" ++#include "core.h" ++ ++/* ++ * Example code for a decoder and encoder of "hash strings", with Argon2 ++ * parameters. ++ * ++ * This code comprises three sections: ++ * ++ * -- The first section contains generic Base64 encoding and decoding ++ * functions. It is conceptually applicable to any hash function ++ * implementation that uses Base64 to encode and decode parameters, ++ * salts and outputs. It could be made into a library, provided that ++ * the relevant functions are made public (non-static) and be given ++ * reasonable names to avoid collisions with other functions. ++ * ++ * -- The second section is specific to Argon2. It encodes and decodes ++ * the parameters, salts and outputs. It does not compute the hash ++ * itself. ++ * ++ * The code was originally written by Thomas Pornin , ++ * to whom comments and remarks may be sent. It is released under what ++ * should amount to Public Domain or its closest equivalent; the ++ * following mantra is supposed to incarnate that fact with all the ++ * proper legal rituals: ++ * ++ * --------------------------------------------------------------------- ++ * This file is provided under the terms of Creative Commons CC0 1.0 ++ * Public Domain Dedication. To the extent possible under law, the ++ * author (Thomas Pornin) has waived all copyright and related or ++ * neighboring rights to this file. This work is published from: Canada. ++ * --------------------------------------------------------------------- ++ * ++ * Copyright (c) 2015 Thomas Pornin ++ */ ++ ++/* ==================================================================== */ ++/* ++ * Common code; could be shared between different hash functions. ++ * ++ * Note: the Base64 functions below assume that uppercase letters (resp. ++ * lowercase letters) have consecutive numerical codes, that fit on 8 ++ * bits. All modern systems use ASCII-compatible charsets, where these ++ * properties are true. If you are stuck with a dinosaur of a system ++ * that still defaults to EBCDIC then you already have much bigger ++ * interoperability issues to deal with. ++ */ ++ ++/* ++ * Some macros for constant-time comparisons. These work over values in ++ * the 0..255 range. Returned value is 0x00 on "false", 0xFF on "true". ++ */ ++#define EQ(x, y) ((((0U - ((unsigned)(x) ^ (unsigned)(y))) >> 8) & 0xFF) ^ 0xFF) ++#define GT(x, y) ((((unsigned)(y) - (unsigned)(x)) >> 8) & 0xFF) ++#define GE(x, y) (GT(y, x) ^ 0xFF) ++#define LT(x, y) GT(y, x) ++#define LE(x, y) GE(y, x) ++ ++/* ++ * Convert value x (0..63) to corresponding Base64 character. ++ */ ++static int b64_byte_to_char(unsigned x) { ++ return (LT(x, 26) & (x + 'A')) | ++ (GE(x, 26) & LT(x, 52) & (x + ('a' - 26))) | ++ (GE(x, 52) & LT(x, 62) & (x + ('0' - 52))) | (EQ(x, 62) & '+') | ++ (EQ(x, 63) & '/'); ++} ++ ++/* ++ * Convert character c to the corresponding 6-bit value. If character c ++ * is not a Base64 character, then 0xFF (255) is returned. ++ */ ++static unsigned b64_char_to_byte(int c) { ++ unsigned x; ++ ++ x = (GE(c, 'A') & LE(c, 'Z') & (c - 'A')) | ++ (GE(c, 'a') & LE(c, 'z') & (c - ('a' - 26))) | ++ (GE(c, '0') & LE(c, '9') & (c - ('0' - 52))) | (EQ(c, '+') & 62) | ++ (EQ(c, '/') & 63); ++ return x | (EQ(x, 0) & (EQ(c, 'A') ^ 0xFF)); ++} ++ ++/* ++ * Convert some bytes to Base64. 'dst_len' is the length (in characters) ++ * of the output buffer 'dst'; if that buffer is not large enough to ++ * receive the result (including the terminating 0), then (size_t)-1 ++ * is returned. Otherwise, the zero-terminated Base64 string is written ++ * in the buffer, and the output length (counted WITHOUT the terminating ++ * zero) is returned. ++ */ ++static size_t to_base64(char *dst, size_t dst_len, const void *src, ++ size_t src_len) { ++ size_t olen; ++ const unsigned char *buf; ++ unsigned acc, acc_len; ++ ++ olen = (src_len / 3) << 2; ++ switch (src_len % 3) { ++ case 2: ++ olen++; ++ /* fall through */ ++ case 1: ++ olen += 2; ++ break; ++ } ++ if (dst_len <= olen) { ++ return (size_t)-1; ++ } ++ acc = 0; ++ acc_len = 0; ++ buf = (const unsigned char *)src; ++ while (src_len-- > 0) { ++ acc = (acc << 8) + (*buf++); ++ acc_len += 8; ++ while (acc_len >= 6) { ++ acc_len -= 6; ++ *dst++ = (char)b64_byte_to_char((acc >> acc_len) & 0x3F); ++ } ++ } ++ if (acc_len > 0) { ++ *dst++ = (char)b64_byte_to_char((acc << (6 - acc_len)) & 0x3F); ++ } ++ *dst++ = 0; ++ return olen; ++} ++ ++/* ++ * Decode Base64 chars into bytes. The '*dst_len' value must initially ++ * contain the length of the output buffer '*dst'; when the decoding ++ * ends, the actual number of decoded bytes is written back in ++ * '*dst_len'. ++ * ++ * Decoding stops when a non-Base64 character is encountered, or when ++ * the output buffer capacity is exceeded. If an error occurred (output ++ * buffer is too small, invalid last characters leading to unprocessed ++ * buffered bits), then NULL is returned; otherwise, the returned value ++ * points to the first non-Base64 character in the source stream, which ++ * may be the terminating zero. ++ */ ++static const char *from_base64(void *dst, size_t *dst_len, const char *src) { ++ size_t len; ++ unsigned char *buf; ++ unsigned acc, acc_len; ++ ++ buf = (unsigned char *)dst; ++ len = 0; ++ acc = 0; ++ acc_len = 0; ++ for (;;) { ++ unsigned d; ++ ++ d = b64_char_to_byte(*src); ++ if (d == 0xFF) { ++ break; ++ } ++ src++; ++ acc = (acc << 6) + d; ++ acc_len += 6; ++ if (acc_len >= 8) { ++ acc_len -= 8; ++ if ((len++) >= *dst_len) { ++ return NULL; ++ } ++ *buf++ = (acc >> acc_len) & 0xFF; ++ } ++ } ++ ++ /* ++ * If the input length is equal to 1 modulo 4 (which is ++ * invalid), then there will remain 6 unprocessed bits; ++ * otherwise, only 0, 2 or 4 bits are buffered. The buffered ++ * bits must also all be zero. ++ */ ++ if (acc_len > 4 || (acc & (((unsigned)1 << acc_len) - 1)) != 0) { ++ return NULL; ++ } ++ *dst_len = len; ++ return src; ++} ++ ++/* ++ * Decode decimal integer from 'str'; the value is written in '*v'. ++ * Returned value is a pointer to the next non-decimal character in the ++ * string. If there is no digit at all, or the value encoding is not ++ * minimal (extra leading zeros), or the value does not fit in an ++ * 'unsigned long', then NULL is returned. ++ */ ++static const char *decode_decimal(const char *str, unsigned long *v) { ++ const char *orig; ++ unsigned long acc; ++ ++ acc = 0; ++ for (orig = str;; str++) { ++ int c; ++ ++ c = *str; ++ if (c < '0' || c > '9') { ++ break; ++ } ++ c -= '0'; ++ if (acc > (ULONG_MAX / 10)) { ++ return NULL; ++ } ++ acc *= 10; ++ if ((unsigned long)c > (ULONG_MAX - acc)) { ++ return NULL; ++ } ++ acc += (unsigned long)c; ++ } ++ if (str == orig || (*orig == '0' && str != (orig + 1))) { ++ return NULL; ++ } ++ *v = acc; ++ return str; ++} ++ ++/* ==================================================================== */ ++/* ++ * Code specific to Argon2. ++ * ++ * The code below applies the following format: ++ * ++ * $argon2[$v=]$m=,t=,p=$$ ++ * ++ * where is either 'd', 'id', or 'i', is a decimal integer (positive, ++ * fits in an 'unsigned long'), and is Base64-encoded data (no '=' padding ++ * characters, no newline or whitespace). ++ * ++ * The last two binary chunks (encoded in Base64) are, in that order, ++ * the salt and the output. Both are required. The binary salt length and the ++ * output length must be in the allowed ranges defined in argon2.h. ++ * ++ * The ctx struct must contain buffers large enough to hold the salt and pwd ++ * when it is fed into decode_string. ++ */ ++ ++int decode_string(argon2_context *ctx, const char *str, argon2_type type) { ++ ++/* check for prefix */ ++#define CC(prefix) \ ++ do { \ ++ size_t cc_len = strlen(prefix); \ ++ if (strncmp(str, prefix, cc_len) != 0) { \ ++ return ARGON2_DECODING_FAIL; \ ++ } \ ++ str += cc_len; \ ++ } while ((void)0, 0) ++ ++/* optional prefix checking with supplied code */ ++#define CC_opt(prefix, code) \ ++ do { \ ++ size_t cc_len = strlen(prefix); \ ++ if (strncmp(str, prefix, cc_len) == 0) { \ ++ str += cc_len; \ ++ { code; } \ ++ } \ ++ } while ((void)0, 0) ++ ++/* Decoding prefix into decimal */ ++#define DECIMAL(x) \ ++ do { \ ++ unsigned long dec_x; \ ++ str = decode_decimal(str, &dec_x); \ ++ if (str == NULL) { \ ++ return ARGON2_DECODING_FAIL; \ ++ } \ ++ (x) = dec_x; \ ++ } while ((void)0, 0) ++ ++ ++/* Decoding prefix into uint32_t decimal */ ++#define DECIMAL_U32(x) \ ++ do { \ ++ unsigned long dec_x; \ ++ str = decode_decimal(str, &dec_x); \ ++ if (str == NULL || dec_x > UINT32_MAX) { \ ++ return ARGON2_DECODING_FAIL; \ ++ } \ ++ (x) = (uint32_t)dec_x; \ ++ } while ((void)0, 0) ++ ++ ++/* Decoding base64 into a binary buffer */ ++#define BIN(buf, max_len, len) \ ++ do { \ ++ size_t bin_len = (max_len); \ ++ str = from_base64(buf, &bin_len, str); \ ++ if (str == NULL || bin_len > UINT32_MAX) { \ ++ return ARGON2_DECODING_FAIL; \ ++ } \ ++ (len) = (uint32_t)bin_len; \ ++ } while ((void)0, 0) ++ ++ size_t maxsaltlen = ctx->saltlen; ++ size_t maxoutlen = ctx->outlen; ++ int validation_result; ++ const char* type_string; ++ ++ /* We should start with the argon2_type we are using */ ++ type_string = argon2_type2string(type, 0); ++ if (!type_string) { ++ return ARGON2_INCORRECT_TYPE; ++ } ++ ++ CC("$"); ++ CC(type_string); ++ ++ /* Reading the version number if the default is suppressed */ ++ ctx->version = ARGON2_VERSION_10; ++ CC_opt("$v=", DECIMAL_U32(ctx->version)); ++ ++ CC("$m="); ++ DECIMAL_U32(ctx->m_cost); ++ CC(",t="); ++ DECIMAL_U32(ctx->t_cost); ++ CC(",p="); ++ DECIMAL_U32(ctx->lanes); ++ ctx->threads = ctx->lanes; ++ ++ CC("$"); ++ BIN(ctx->salt, maxsaltlen, ctx->saltlen); ++ CC("$"); ++ BIN(ctx->out, maxoutlen, ctx->outlen); ++ ++ /* The rest of the fields get the default values */ ++ ctx->secret = NULL; ++ ctx->secretlen = 0; ++ ctx->ad = NULL; ++ ctx->adlen = 0; ++ ctx->allocate_cbk = NULL; ++ ctx->free_cbk = NULL; ++ ctx->flags = ARGON2_DEFAULT_FLAGS; ++ ++ /* On return, must have valid context */ ++ validation_result = validate_inputs(ctx); ++ if (validation_result != ARGON2_OK) { ++ return validation_result; ++ } ++ ++ /* Can't have any additional characters */ ++ if (*str == 0) { ++ return ARGON2_OK; ++ } else { ++ return ARGON2_DECODING_FAIL; ++ } ++#undef CC ++#undef CC_opt ++#undef DECIMAL ++#undef BIN ++} ++ ++int encode_string(char *dst, size_t dst_len, argon2_context *ctx, ++ argon2_type type) { ++#define SS(str) \ ++ do { \ ++ size_t pp_len = strlen(str); \ ++ if (pp_len >= dst_len) { \ ++ return ARGON2_ENCODING_FAIL; \ ++ } \ ++ memcpy(dst, str, pp_len + 1); \ ++ dst += pp_len; \ ++ dst_len -= pp_len; \ ++ } while ((void)0, 0) ++ ++#define SX(x) \ ++ do { \ ++ char tmp[30]; \ ++ sprintf(tmp, "%lu", (unsigned long)(x)); \ ++ SS(tmp); \ ++ } while ((void)0, 0) ++ ++#define SB(buf, len) \ ++ do { \ ++ size_t sb_len = to_base64(dst, dst_len, buf, len); \ ++ if (sb_len == (size_t)-1) { \ ++ return ARGON2_ENCODING_FAIL; \ ++ } \ ++ dst += sb_len; \ ++ dst_len -= sb_len; \ ++ } while ((void)0, 0) ++ ++ const char* type_string = argon2_type2string(type, 0); ++ int validation_result = validate_inputs(ctx); ++ ++ if (!type_string) { ++ return ARGON2_ENCODING_FAIL; ++ } ++ ++ if (validation_result != ARGON2_OK) { ++ return validation_result; ++ } ++ ++ ++ SS("$"); ++ SS(type_string); ++ ++ SS("$v="); ++ SX(ctx->version); ++ ++ SS("$m="); ++ SX(ctx->m_cost); ++ SS(",t="); ++ SX(ctx->t_cost); ++ SS(",p="); ++ SX(ctx->lanes); ++ ++ SS("$"); ++ SB(ctx->salt, ctx->saltlen); ++ ++ SS("$"); ++ SB(ctx->out, ctx->outlen); ++ return ARGON2_OK; ++ ++#undef SS ++#undef SX ++#undef SB ++} ++ ++size_t b64len(uint32_t len) { ++ size_t olen = ((size_t)len / 3) << 2; ++ ++ switch (len % 3) { ++ case 2: ++ olen++; ++ /* fall through */ ++ case 1: ++ olen += 2; ++ break; ++ } ++ ++ return olen; ++} ++ ++size_t numlen(uint32_t num) { ++ size_t len = 1; ++ while (num >= 10) { ++ ++len; ++ num = num / 10; ++ } ++ return len; ++} ++ +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/encoding.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/encoding.h +new file mode 100644 +index 0000000..7e83ec9 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/encoding.h +@@ -0,0 +1,57 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef ENCODING_H ++#define ENCODING_H ++#include "argon2.h" ++ ++#define ARGON2_MAX_DECODED_LANES UINT32_C(255) ++#define ARGON2_MIN_DECODED_SALT_LEN UINT32_C(8) ++#define ARGON2_MIN_DECODED_OUT_LEN UINT32_C(12) ++ ++/* ++* encode an Argon2 hash string into the provided buffer. 'dst_len' ++* contains the size, in characters, of the 'dst' buffer; if 'dst_len' ++* is less than the number of required characters (including the ++* terminating 0), then this function returns ARGON2_ENCODING_ERROR. ++* ++* on success, ARGON2_OK is returned. ++*/ ++int encode_string(char *dst, size_t dst_len, argon2_context *ctx, ++ argon2_type type); ++ ++/* ++* Decodes an Argon2 hash string into the provided structure 'ctx'. ++* The only fields that must be set prior to this call are ctx.saltlen and ++* ctx.outlen (which must be the maximal salt and out length values that are ++* allowed), ctx.salt and ctx.out (which must be buffers of the specified ++* length), and ctx.pwd and ctx.pwdlen which must hold a valid password. ++* ++* Invalid input string causes an error. On success, the ctx is valid and all ++* fields have been initialized. ++* ++* Returned value is ARGON2_OK on success, other ARGON2_ codes on error. ++*/ ++int decode_string(argon2_context *ctx, const char *str, argon2_type type); ++ ++/* Returns the length of the encoded byte stream with length len */ ++size_t b64len(uint32_t len); ++ ++/* Returns the length of the encoded number num */ ++size_t numlen(uint32_t num); ++ ++#endif +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/genkat.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/genkat.c +new file mode 100644 +index 0000000..8db9036 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/genkat.c +@@ -0,0 +1,207 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#include ++#include ++#include ++#include "argon2.h" ++#include "core.h" ++ ++void initial_kat(const uint8_t *blockhash, const argon2_context *context, ++ argon2_type type) { ++ unsigned i; ++ ++ if (blockhash != NULL && context != NULL) { ++ printf("=======================================\n"); ++ ++ printf("%s version number %d\n", argon2_type2string(type, 1), ++ context->version); ++ ++ printf("=======================================\n"); ++ ++ ++ printf("Memory: %u KiB, Iterations: %u, Parallelism: %u lanes, Tag " ++ "length: %u bytes\n", ++ context->m_cost, context->t_cost, context->lanes, ++ context->outlen); ++ ++ printf("Password[%u]: ", context->pwdlen); ++ ++ if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) { ++ printf("CLEARED\n"); ++ } else { ++ for (i = 0; i < context->pwdlen; ++i) { ++ printf("%2.2x ", ((unsigned char *)context->pwd)[i]); ++ } ++ ++ printf("\n"); ++ } ++ ++ printf("Salt[%u]: ", context->saltlen); ++ ++ for (i = 0; i < context->saltlen; ++i) { ++ printf("%2.2x ", ((unsigned char *)context->salt)[i]); ++ } ++ ++ printf("\n"); ++ ++ printf("Secret[%u]: ", context->secretlen); ++ ++ if (context->flags & ARGON2_FLAG_CLEAR_SECRET) { ++ printf("CLEARED\n"); ++ } else { ++ for (i = 0; i < context->secretlen; ++i) { ++ printf("%2.2x ", ((unsigned char *)context->secret)[i]); ++ } ++ ++ printf("\n"); ++ } ++ ++ printf("Associated data[%u]: ", context->adlen); ++ ++ for (i = 0; i < context->adlen; ++i) { ++ printf("%2.2x ", ((unsigned char *)context->ad)[i]); ++ } ++ ++ printf("\n"); ++ ++ printf("Pre-hashing digest: "); ++ ++ for (i = 0; i < ARGON2_PREHASH_DIGEST_LENGTH; ++i) { ++ printf("%2.2x ", ((unsigned char *)blockhash)[i]); ++ } ++ ++ printf("\n"); ++ } ++} ++ ++void print_tag(const void *out, uint32_t outlen) { ++ unsigned i; ++ if (out != NULL) { ++ printf("Tag: "); ++ ++ for (i = 0; i < outlen; ++i) { ++ printf("%2.2x ", ((uint8_t *)out)[i]); ++ } ++ ++ printf("\n"); ++ } ++} ++ ++void internal_kat(const argon2_instance_t *instance, uint32_t pass) { ++ ++ if (instance != NULL) { ++ uint32_t i, j; ++ printf("\n After pass %u:\n", pass); ++ ++ for (i = 0; i < instance->memory_blocks; ++i) { ++ uint32_t how_many_words = ++ (instance->memory_blocks > ARGON2_QWORDS_IN_BLOCK) ++ ? 1 ++ : ARGON2_QWORDS_IN_BLOCK; ++ ++ for (j = 0; j < how_many_words; ++j) ++ printf("Block %.4u [%3u]: %016llx\n", i, j, ++ (unsigned long long)instance->memory[i].v[j]); ++ } ++ } ++} ++ ++static void fatal(const char *error) { ++ fprintf(stderr, "Error: %s\n", error); ++ exit(1); ++} ++ ++static void generate_testvectors(argon2_type type, const uint32_t version) { ++#define TEST_OUTLEN 32 ++#define TEST_PWDLEN 32 ++#define TEST_SALTLEN 16 ++#define TEST_SECRETLEN 8 ++#define TEST_ADLEN 12 ++ argon2_context context; ++ ++ unsigned char out[TEST_OUTLEN]; ++ unsigned char pwd[TEST_PWDLEN]; ++ unsigned char salt[TEST_SALTLEN]; ++ unsigned char secret[TEST_SECRETLEN]; ++ unsigned char ad[TEST_ADLEN]; ++ const allocate_fptr myown_allocator = NULL; ++ const deallocate_fptr myown_deallocator = NULL; ++ ++ unsigned t_cost = 3; ++ unsigned m_cost = 32; ++ unsigned lanes = 4; ++ ++ memset(pwd, 1, TEST_OUTLEN); ++ memset(salt, 2, TEST_SALTLEN); ++ memset(secret, 3, TEST_SECRETLEN); ++ memset(ad, 4, TEST_ADLEN); ++ ++ context.out = out; ++ context.outlen = TEST_OUTLEN; ++ context.version = version; ++ context.pwd = pwd; ++ context.pwdlen = TEST_PWDLEN; ++ context.salt = salt; ++ context.saltlen = TEST_SALTLEN; ++ context.secret = secret; ++ context.secretlen = TEST_SECRETLEN; ++ context.ad = ad; ++ context.adlen = TEST_ADLEN; ++ context.t_cost = t_cost; ++ context.m_cost = m_cost; ++ context.lanes = lanes; ++ context.threads = lanes; ++ context.allocate_cbk = myown_allocator; ++ context.free_cbk = myown_deallocator; ++ context.flags = ARGON2_DEFAULT_FLAGS; ++ ++#undef TEST_OUTLEN ++#undef TEST_PWDLEN ++#undef TEST_SALTLEN ++#undef TEST_SECRETLEN ++#undef TEST_ADLEN ++ ++ argon2_ctx(&context, type); ++} ++ ++int main(int argc, char *argv[]) { ++ /* Get and check Argon2 type */ ++ const char *type_str = (argc > 1) ? argv[1] : "i"; ++ argon2_type type = Argon2_i; ++ uint32_t version = ARGON2_VERSION_NUMBER; ++ if (!strcmp(type_str, "d")) { ++ type = Argon2_d; ++ } else if (!strcmp(type_str, "i")) { ++ type = Argon2_i; ++ } else if (!strcmp(type_str, "id")) { ++ type = Argon2_id; ++ } else { ++ fatal("wrong Argon2 type"); ++ } ++ ++ /* Get and check Argon2 version number */ ++ if (argc > 2) { ++ version = strtoul(argv[2], NULL, 10); ++ } ++ if (ARGON2_VERSION_10 != version && ARGON2_VERSION_NUMBER != version) { ++ fatal("wrong Argon2 version number"); ++ } ++ ++ generate_testvectors(type, version); ++ return ARGON2_OK; ++} +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/genkat.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/genkat.h +new file mode 100644 +index 0000000..0572630 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/genkat.h +@@ -0,0 +1,51 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef ARGON2_KAT_H ++#define ARGON2_KAT_H ++ ++#include "core.h" ++ ++/* ++ * Initial KAT function that prints the inputs to the file ++ * @param blockhash Array that contains pre-hashing digest ++ * @param context Holds inputs ++ * @param type Argon2 type ++ * @pre blockhash must point to INPUT_INITIAL_HASH_LENGTH bytes ++ * @pre context member pointers must point to allocated memory of size according ++ * to the length values ++ */ ++void initial_kat(const uint8_t *blockhash, const argon2_context *context, ++ argon2_type type); ++ ++/* ++ * Function that prints the output tag ++ * @param out output array pointer ++ * @param outlen digest length ++ * @pre out must point to @a outlen bytes ++ **/ ++void print_tag(const void *out, uint32_t outlen); ++ ++/* ++ * Function that prints the internal state at given moment ++ * @param instance pointer to the current instance ++ * @param pass current pass number ++ * @pre instance must have necessary memory allocated ++ **/ ++void internal_kat(const argon2_instance_t *instance, uint32_t pass); ++ ++#endif +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/opt.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/opt.c +new file mode 100644 +index 0000000..f6c2052 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/opt.c +@@ -0,0 +1,283 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#include ++#include ++#include ++ ++#include "argon2.h" ++#include "core.h" ++ ++#include "blake2/blake2.h" ++#include "blake2/blamka-round-opt.h" ++ ++/* ++ * Function fills a new memory block and optionally XORs the old block over the new one. ++ * Memory must be initialized. ++ * @param state Pointer to the just produced block. Content will be updated(!) ++ * @param ref_block Pointer to the reference block ++ * @param next_block Pointer to the block to be XORed over. May coincide with @ref_block ++ * @param with_xor Whether to XOR into the new block (1) or just overwrite (0) ++ * @pre all block pointers must be valid ++ */ ++#if defined(__AVX512F__) ++static void fill_block(__m512i *state, const block *ref_block, ++ block *next_block, int with_xor) { ++ __m512i block_XY[ARGON2_512BIT_WORDS_IN_BLOCK]; ++ unsigned int i; ++ ++ if (with_xor) { ++ for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { ++ state[i] = _mm512_xor_si512( ++ state[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i)); ++ block_XY[i] = _mm512_xor_si512( ++ state[i], _mm512_loadu_si512((const __m512i *)next_block->v + i)); ++ } ++ } else { ++ for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { ++ block_XY[i] = state[i] = _mm512_xor_si512( ++ state[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i)); ++ } ++ } ++ ++ for (i = 0; i < 2; ++i) { ++ BLAKE2_ROUND_1( ++ state[8 * i + 0], state[8 * i + 1], state[8 * i + 2], state[8 * i + 3], ++ state[8 * i + 4], state[8 * i + 5], state[8 * i + 6], state[8 * i + 7]); ++ } ++ ++ for (i = 0; i < 2; ++i) { ++ BLAKE2_ROUND_2( ++ state[2 * 0 + i], state[2 * 1 + i], state[2 * 2 + i], state[2 * 3 + i], ++ state[2 * 4 + i], state[2 * 5 + i], state[2 * 6 + i], state[2 * 7 + i]); ++ } ++ ++ for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { ++ state[i] = _mm512_xor_si512(state[i], block_XY[i]); ++ _mm512_storeu_si512((__m512i *)next_block->v + i, state[i]); ++ } ++} ++#elif defined(__AVX2__) ++static void fill_block(__m256i *state, const block *ref_block, ++ block *next_block, int with_xor) { ++ __m256i block_XY[ARGON2_HWORDS_IN_BLOCK]; ++ unsigned int i; ++ ++ if (with_xor) { ++ for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { ++ state[i] = _mm256_xor_si256( ++ state[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i)); ++ block_XY[i] = _mm256_xor_si256( ++ state[i], _mm256_loadu_si256((const __m256i *)next_block->v + i)); ++ } ++ } else { ++ for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { ++ block_XY[i] = state[i] = _mm256_xor_si256( ++ state[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i)); ++ } ++ } ++ ++ for (i = 0; i < 4; ++i) { ++ BLAKE2_ROUND_1(state[8 * i + 0], state[8 * i + 4], state[8 * i + 1], state[8 * i + 5], ++ state[8 * i + 2], state[8 * i + 6], state[8 * i + 3], state[8 * i + 7]); ++ } ++ ++ for (i = 0; i < 4; ++i) { ++ BLAKE2_ROUND_2(state[ 0 + i], state[ 4 + i], state[ 8 + i], state[12 + i], ++ state[16 + i], state[20 + i], state[24 + i], state[28 + i]); ++ } ++ ++ for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { ++ state[i] = _mm256_xor_si256(state[i], block_XY[i]); ++ _mm256_storeu_si256((__m256i *)next_block->v + i, state[i]); ++ } ++} ++#else ++static void fill_block(__m128i *state, const block *ref_block, ++ block *next_block, int with_xor) { ++ __m128i block_XY[ARGON2_OWORDS_IN_BLOCK]; ++ unsigned int i; ++ ++ if (with_xor) { ++ for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { ++ state[i] = _mm_xor_si128( ++ state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i)); ++ block_XY[i] = _mm_xor_si128( ++ state[i], _mm_loadu_si128((const __m128i *)next_block->v + i)); ++ } ++ } else { ++ for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { ++ block_XY[i] = state[i] = _mm_xor_si128( ++ state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i)); ++ } ++ } ++ ++ for (i = 0; i < 8; ++i) { ++ BLAKE2_ROUND(state[8 * i + 0], state[8 * i + 1], state[8 * i + 2], ++ state[8 * i + 3], state[8 * i + 4], state[8 * i + 5], ++ state[8 * i + 6], state[8 * i + 7]); ++ } ++ ++ for (i = 0; i < 8; ++i) { ++ BLAKE2_ROUND(state[8 * 0 + i], state[8 * 1 + i], state[8 * 2 + i], ++ state[8 * 3 + i], state[8 * 4 + i], state[8 * 5 + i], ++ state[8 * 6 + i], state[8 * 7 + i]); ++ } ++ ++ for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { ++ state[i] = _mm_xor_si128(state[i], block_XY[i]); ++ _mm_storeu_si128((__m128i *)next_block->v + i, state[i]); ++ } ++} ++#endif ++ ++static void next_addresses(block *address_block, block *input_block) { ++ /*Temporary zero-initialized blocks*/ ++#if defined(__AVX512F__) ++ __m512i zero_block[ARGON2_512BIT_WORDS_IN_BLOCK]; ++ __m512i zero2_block[ARGON2_512BIT_WORDS_IN_BLOCK]; ++#elif defined(__AVX2__) ++ __m256i zero_block[ARGON2_HWORDS_IN_BLOCK]; ++ __m256i zero2_block[ARGON2_HWORDS_IN_BLOCK]; ++#else ++ __m128i zero_block[ARGON2_OWORDS_IN_BLOCK]; ++ __m128i zero2_block[ARGON2_OWORDS_IN_BLOCK]; ++#endif ++ ++ memset(zero_block, 0, sizeof(zero_block)); ++ memset(zero2_block, 0, sizeof(zero2_block)); ++ ++ /*Increasing index counter*/ ++ input_block->v[6]++; ++ ++ /*First iteration of G*/ ++ fill_block(zero_block, input_block, address_block, 0); ++ ++ /*Second iteration of G*/ ++ fill_block(zero2_block, address_block, address_block, 0); ++} ++ ++void fill_segment(const argon2_instance_t *instance, ++ argon2_position_t position) { ++ block *ref_block = NULL, *curr_block = NULL; ++ block address_block, input_block; ++ uint64_t pseudo_rand, ref_index, ref_lane; ++ uint32_t prev_offset, curr_offset; ++ uint32_t starting_index, i; ++#if defined(__AVX512F__) ++ __m512i state[ARGON2_512BIT_WORDS_IN_BLOCK]; ++#elif defined(__AVX2__) ++ __m256i state[ARGON2_HWORDS_IN_BLOCK]; ++#else ++ __m128i state[ARGON2_OWORDS_IN_BLOCK]; ++#endif ++ int data_independent_addressing; ++ ++ if (instance == NULL) { ++ return; ++ } ++ ++ data_independent_addressing = ++ (instance->type == Argon2_i) || ++ (instance->type == Argon2_id && (position.pass == 0) && ++ (position.slice < ARGON2_SYNC_POINTS / 2)); ++ ++ if (data_independent_addressing) { ++ init_block_value(&input_block, 0); ++ ++ input_block.v[0] = position.pass; ++ input_block.v[1] = position.lane; ++ input_block.v[2] = position.slice; ++ input_block.v[3] = instance->memory_blocks; ++ input_block.v[4] = instance->passes; ++ input_block.v[5] = instance->type; ++ } ++ ++ starting_index = 0; ++ ++ if ((0 == position.pass) && (0 == position.slice)) { ++ starting_index = 2; /* we have already generated the first two blocks */ ++ ++ /* Don't forget to generate the first block of addresses: */ ++ if (data_independent_addressing) { ++ next_addresses(&address_block, &input_block); ++ } ++ } ++ ++ /* Offset of the current block */ ++ curr_offset = position.lane * instance->lane_length + ++ position.slice * instance->segment_length + starting_index; ++ ++ if (0 == curr_offset % instance->lane_length) { ++ /* Last block in this lane */ ++ prev_offset = curr_offset + instance->lane_length - 1; ++ } else { ++ /* Previous block */ ++ prev_offset = curr_offset - 1; ++ } ++ ++ memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE); ++ ++ for (i = starting_index; i < instance->segment_length; ++ ++i, ++curr_offset, ++prev_offset) { ++ /*1.1 Rotating prev_offset if needed */ ++ if (curr_offset % instance->lane_length == 1) { ++ prev_offset = curr_offset - 1; ++ } ++ ++ /* 1.2 Computing the index of the reference block */ ++ /* 1.2.1 Taking pseudo-random value from the previous block */ ++ if (data_independent_addressing) { ++ if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) { ++ next_addresses(&address_block, &input_block); ++ } ++ pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK]; ++ } else { ++ pseudo_rand = instance->memory[prev_offset].v[0]; ++ } ++ ++ /* 1.2.2 Computing the lane of the reference block */ ++ ref_lane = ((pseudo_rand >> 32)) % instance->lanes; ++ ++ if ((position.pass == 0) && (position.slice == 0)) { ++ /* Can not reference other lanes yet */ ++ ref_lane = position.lane; ++ } ++ ++ /* 1.2.3 Computing the number of possible reference block within the ++ * lane. ++ */ ++ position.index = i; ++ ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF, ++ ref_lane == position.lane); ++ ++ /* 2 Creating a new block */ ++ ref_block = ++ instance->memory + instance->lane_length * ref_lane + ref_index; ++ curr_block = instance->memory + curr_offset; ++ if (ARGON2_VERSION_10 == instance->version) { ++ /* version 1.2.1 and earlier: overwrite, not XOR */ ++ fill_block(state, ref_block, curr_block, 0); ++ } else { ++ if(0 == position.pass) { ++ fill_block(state, ref_block, curr_block, 0); ++ } else { ++ fill_block(state, ref_block, curr_block, 1); ++ } ++ } ++ } ++} +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/ref.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/ref.c +new file mode 100644 +index 0000000..ad1cf46 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/ref.c +@@ -0,0 +1,194 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#include ++#include ++#include ++ ++#include "argon2.h" ++#include "core.h" ++ ++#include "blake2/blamka-round-ref.h" ++#include "blake2/blake2-impl.h" ++#include "blake2/blake2.h" ++ ++ ++/* ++ * Function fills a new memory block and optionally XORs the old block over the new one. ++ * @next_block must be initialized. ++ * @param prev_block Pointer to the previous block ++ * @param ref_block Pointer to the reference block ++ * @param next_block Pointer to the block to be constructed ++ * @param with_xor Whether to XOR into the new block (1) or just overwrite (0) ++ * @pre all block pointers must be valid ++ */ ++static void fill_block(const block *prev_block, const block *ref_block, ++ block *next_block, int with_xor) { ++ block blockR, block_tmp; ++ unsigned i; ++ ++ copy_block(&blockR, ref_block); ++ xor_block(&blockR, prev_block); ++ copy_block(&block_tmp, &blockR); ++ /* Now blockR = ref_block + prev_block and block_tmp = ref_block + prev_block */ ++ if (with_xor) { ++ /* Saving the next block contents for XOR over: */ ++ xor_block(&block_tmp, next_block); ++ /* Now blockR = ref_block + prev_block and ++ block_tmp = ref_block + prev_block + next_block */ ++ } ++ ++ /* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then ++ (16,17,..31)... finally (112,113,...127) */ ++ for (i = 0; i < 8; ++i) { ++ BLAKE2_ROUND_NOMSG( ++ blockR.v[16 * i], blockR.v[16 * i + 1], blockR.v[16 * i + 2], ++ blockR.v[16 * i + 3], blockR.v[16 * i + 4], blockR.v[16 * i + 5], ++ blockR.v[16 * i + 6], blockR.v[16 * i + 7], blockR.v[16 * i + 8], ++ blockR.v[16 * i + 9], blockR.v[16 * i + 10], blockR.v[16 * i + 11], ++ blockR.v[16 * i + 12], blockR.v[16 * i + 13], blockR.v[16 * i + 14], ++ blockR.v[16 * i + 15]); ++ } ++ ++ /* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then ++ (2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) */ ++ for (i = 0; i < 8; i++) { ++ BLAKE2_ROUND_NOMSG( ++ blockR.v[2 * i], blockR.v[2 * i + 1], blockR.v[2 * i + 16], ++ blockR.v[2 * i + 17], blockR.v[2 * i + 32], blockR.v[2 * i + 33], ++ blockR.v[2 * i + 48], blockR.v[2 * i + 49], blockR.v[2 * i + 64], ++ blockR.v[2 * i + 65], blockR.v[2 * i + 80], blockR.v[2 * i + 81], ++ blockR.v[2 * i + 96], blockR.v[2 * i + 97], blockR.v[2 * i + 112], ++ blockR.v[2 * i + 113]); ++ } ++ ++ copy_block(next_block, &block_tmp); ++ xor_block(next_block, &blockR); ++} ++ ++static void next_addresses(block *address_block, block *input_block, ++ const block *zero_block) { ++ input_block->v[6]++; ++ fill_block(zero_block, input_block, address_block, 0); ++ fill_block(zero_block, address_block, address_block, 0); ++} ++ ++void fill_segment(const argon2_instance_t *instance, ++ argon2_position_t position) { ++ block *ref_block = NULL, *curr_block = NULL; ++ block address_block, input_block, zero_block; ++ uint64_t pseudo_rand, ref_index, ref_lane; ++ uint32_t prev_offset, curr_offset; ++ uint32_t starting_index; ++ uint32_t i; ++ int data_independent_addressing; ++ ++ if (instance == NULL) { ++ return; ++ } ++ ++ data_independent_addressing = ++ (instance->type == Argon2_i) || ++ (instance->type == Argon2_id && (position.pass == 0) && ++ (position.slice < ARGON2_SYNC_POINTS / 2)); ++ ++ if (data_independent_addressing) { ++ init_block_value(&zero_block, 0); ++ init_block_value(&input_block, 0); ++ ++ input_block.v[0] = position.pass; ++ input_block.v[1] = position.lane; ++ input_block.v[2] = position.slice; ++ input_block.v[3] = instance->memory_blocks; ++ input_block.v[4] = instance->passes; ++ input_block.v[5] = instance->type; ++ } ++ ++ starting_index = 0; ++ ++ if ((0 == position.pass) && (0 == position.slice)) { ++ starting_index = 2; /* we have already generated the first two blocks */ ++ ++ /* Don't forget to generate the first block of addresses: */ ++ if (data_independent_addressing) { ++ next_addresses(&address_block, &input_block, &zero_block); ++ } ++ } ++ ++ /* Offset of the current block */ ++ curr_offset = position.lane * instance->lane_length + ++ position.slice * instance->segment_length + starting_index; ++ ++ if (0 == curr_offset % instance->lane_length) { ++ /* Last block in this lane */ ++ prev_offset = curr_offset + instance->lane_length - 1; ++ } else { ++ /* Previous block */ ++ prev_offset = curr_offset - 1; ++ } ++ ++ for (i = starting_index; i < instance->segment_length; ++ ++i, ++curr_offset, ++prev_offset) { ++ /*1.1 Rotating prev_offset if needed */ ++ if (curr_offset % instance->lane_length == 1) { ++ prev_offset = curr_offset - 1; ++ } ++ ++ /* 1.2 Computing the index of the reference block */ ++ /* 1.2.1 Taking pseudo-random value from the previous block */ ++ if (data_independent_addressing) { ++ if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) { ++ next_addresses(&address_block, &input_block, &zero_block); ++ } ++ pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK]; ++ } else { ++ pseudo_rand = instance->memory[prev_offset].v[0]; ++ } ++ ++ /* 1.2.2 Computing the lane of the reference block */ ++ ref_lane = ((pseudo_rand >> 32)) % instance->lanes; ++ ++ if ((position.pass == 0) && (position.slice == 0)) { ++ /* Can not reference other lanes yet */ ++ ref_lane = position.lane; ++ } ++ ++ /* 1.2.3 Computing the number of possible reference block within the ++ * lane. ++ */ ++ position.index = i; ++ ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF, ++ ref_lane == position.lane); ++ ++ /* 2 Creating a new block */ ++ ref_block = ++ instance->memory + instance->lane_length * ref_lane + ref_index; ++ curr_block = instance->memory + curr_offset; ++ if (ARGON2_VERSION_10 == instance->version) { ++ /* version 1.2.1 and earlier: overwrite, not XOR */ ++ fill_block(instance->memory + prev_offset, ref_block, curr_block, 0); ++ } else { ++ if(0 == position.pass) { ++ fill_block(instance->memory + prev_offset, ref_block, ++ curr_block, 0); ++ } else { ++ fill_block(instance->memory + prev_offset, ref_block, ++ curr_block, 1); ++ } ++ } ++ } ++} +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/run.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/run.c +new file mode 100644 +index 0000000..b21b9d7 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/run.c +@@ -0,0 +1,337 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#define _GNU_SOURCE 1 ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "argon2.h" ++#include "core.h" ++ ++#define T_COST_DEF 3 ++#define LOG_M_COST_DEF 12 /* 2^12 = 4 MiB */ ++#define LANES_DEF 1 ++#define THREADS_DEF 1 ++#define OUTLEN_DEF 32 ++#define MAX_PASS_LEN 128 ++ ++#define UNUSED_PARAMETER(x) (void)(x) ++ ++static void usage(const char *cmd) { ++ printf("Usage: %s [-h] salt [-i|-d|-id] [-t iterations] " ++ "[-m log2(memory in KiB) | -k memory in KiB] [-p parallelism] " ++ "[-l hash length] [-e|-r] [-v (10|13)]\n", ++ cmd); ++ printf("\tPassword is read from stdin\n"); ++ printf("Parameters:\n"); ++ printf("\tsalt\t\tThe salt to use, at least 8 characters\n"); ++ printf("\t-i\t\tUse Argon2i (this is the default)\n"); ++ printf("\t-d\t\tUse Argon2d instead of Argon2i\n"); ++ printf("\t-id\t\tUse Argon2id instead of Argon2i\n"); ++ printf("\t-t N\t\tSets the number of iterations to N (default = %d)\n", ++ T_COST_DEF); ++ printf("\t-m N\t\tSets the memory usage of 2^N KiB (default %d)\n", ++ LOG_M_COST_DEF); ++ printf("\t-k N\t\tSets the memory usage of N KiB (default %d)\n", ++ 1 << LOG_M_COST_DEF); ++ printf("\t-p N\t\tSets parallelism to N threads (default %d)\n", ++ THREADS_DEF); ++ printf("\t-l N\t\tSets hash output length to N bytes (default %d)\n", ++ OUTLEN_DEF); ++ printf("\t-e\t\tOutput only encoded hash\n"); ++ printf("\t-r\t\tOutput only the raw bytes of the hash\n"); ++ printf("\t-v (10|13)\tArgon2 version (defaults to the most recent version, currently %x)\n", ++ ARGON2_VERSION_NUMBER); ++ printf("\t-h\t\tPrint %s usage\n", cmd); ++} ++ ++static void fatal(const char *error) { ++ fprintf(stderr, "Error: %s\n", error); ++ exit(1); ++} ++ ++static void print_hex(uint8_t *bytes, size_t bytes_len) { ++ size_t i; ++ for (i = 0; i < bytes_len; ++i) { ++ printf("%02x", bytes[i]); ++ } ++ printf("\n"); ++} ++ ++/* ++Runs Argon2 with certain inputs and parameters, inputs not cleared. Prints the ++Base64-encoded hash string ++@out output array with at least 32 bytes allocated ++@pwd NULL-terminated string, presumably from argv[] ++@salt salt array ++@t_cost number of iterations ++@m_cost amount of requested memory in KB ++@lanes amount of requested parallelism ++@threads actual parallelism ++@type Argon2 type we want to run ++@encoded_only display only the encoded hash ++@raw_only display only the hexadecimal of the hash ++@version Argon2 version ++*/ ++static void run(uint32_t outlen, char *pwd, size_t pwdlen, char *salt, uint32_t t_cost, ++ uint32_t m_cost, uint32_t lanes, uint32_t threads, ++ argon2_type type, int encoded_only, int raw_only, uint32_t version) { ++ clock_t start_time, stop_time; ++ size_t saltlen, encodedlen; ++ int result; ++ unsigned char * out = NULL; ++ char * encoded = NULL; ++ ++ start_time = clock(); ++ ++ if (!pwd) { ++ fatal("password missing"); ++ } ++ ++ if (!salt) { ++ clear_internal_memory(pwd, pwdlen); ++ fatal("salt missing"); ++ } ++ ++ saltlen = strlen(salt); ++ if(UINT32_MAX < saltlen) { ++ fatal("salt is too long"); ++ } ++ ++ UNUSED_PARAMETER(lanes); ++ ++ out = malloc(outlen + 1); ++ if (!out) { ++ clear_internal_memory(pwd, pwdlen); ++ fatal("could not allocate memory for output"); ++ } ++ ++ encodedlen = argon2_encodedlen(t_cost, m_cost, lanes, (uint32_t)saltlen, outlen, type); ++ encoded = malloc(encodedlen + 1); ++ if (!encoded) { ++ clear_internal_memory(pwd, pwdlen); ++ fatal("could not allocate memory for hash"); ++ } ++ ++ result = argon2_hash(t_cost, m_cost, threads, pwd, pwdlen, salt, saltlen, ++ out, outlen, encoded, encodedlen, type, ++ version); ++ if (result != ARGON2_OK) ++ fatal(argon2_error_message(result)); ++ ++ stop_time = clock(); ++ ++ if (encoded_only) ++ puts(encoded); ++ ++ if (raw_only) ++ print_hex(out, outlen); ++ ++ if (encoded_only || raw_only) { ++ free(out); ++ free(encoded); ++ return; ++ } ++ ++ printf("Hash:\t\t"); ++ print_hex(out, outlen); ++ free(out); ++ ++ printf("Encoded:\t%s\n", encoded); ++ ++ printf("%2.3f seconds\n", ++ ((double)stop_time - start_time) / (CLOCKS_PER_SEC)); ++ ++ result = argon2_verify(encoded, pwd, pwdlen, type); ++ if (result != ARGON2_OK) ++ fatal(argon2_error_message(result)); ++ printf("Verification ok\n"); ++ free(encoded); ++} ++ ++int main(int argc, char *argv[]) { ++ uint32_t outlen = OUTLEN_DEF; ++ uint32_t m_cost = 1 << LOG_M_COST_DEF; ++ uint32_t t_cost = T_COST_DEF; ++ uint32_t lanes = LANES_DEF; ++ uint32_t threads = THREADS_DEF; ++ argon2_type type = Argon2_i; /* Argon2i is the default type */ ++ int types_specified = 0; ++ int m_cost_specified = 0; ++ int encoded_only = 0; ++ int raw_only = 0; ++ uint32_t version = ARGON2_VERSION_NUMBER; ++ int i; ++ size_t pwdlen; ++ char pwd[MAX_PASS_LEN], *salt; ++ ++ if (argc < 2) { ++ usage(argv[0]); ++ return ARGON2_MISSING_ARGS; ++ } else if (argc >= 2 && strcmp(argv[1], "-h") == 0) { ++ usage(argv[0]); ++ return 1; ++ } ++ ++ /* get password from stdin */ ++ pwdlen = fread(pwd, 1, sizeof pwd, stdin); ++ if(pwdlen < 1) { ++ fatal("no password read"); ++ } ++ if(pwdlen == MAX_PASS_LEN) { ++ fatal("Provided password longer than supported in command line utility"); ++ } ++ ++ salt = argv[1]; ++ ++ /* parse options */ ++ for (i = 2; i < argc; i++) { ++ const char *a = argv[i]; ++ unsigned long input = 0; ++ if (!strcmp(a, "-h")) { ++ usage(argv[0]); ++ return 1; ++ } else if (!strcmp(a, "-m")) { ++ if (m_cost_specified) { ++ fatal("-m or -k can only be used once"); ++ } ++ m_cost_specified = 1; ++ if (i < argc - 1) { ++ i++; ++ input = strtoul(argv[i], NULL, 10); ++ if (input == 0 || input == ULONG_MAX || ++ input > ARGON2_MAX_MEMORY_BITS) { ++ fatal("bad numeric input for -m"); ++ } ++ m_cost = ARGON2_MIN(UINT64_C(1) << input, UINT32_C(0xFFFFFFFF)); ++ if (m_cost > ARGON2_MAX_MEMORY) { ++ fatal("m_cost overflow"); ++ } ++ continue; ++ } else { ++ fatal("missing -m argument"); ++ } ++ } else if (!strcmp(a, "-k")) { ++ if (m_cost_specified) { ++ fatal("-m or -k can only be used once"); ++ } ++ m_cost_specified = 1; ++ if (i < argc - 1) { ++ i++; ++ input = strtoul(argv[i], NULL, 10); ++ if (input == 0 || input == ULONG_MAX) { ++ fatal("bad numeric input for -k"); ++ } ++ m_cost = ARGON2_MIN(input, UINT32_C(0xFFFFFFFF)); ++ if (m_cost > ARGON2_MAX_MEMORY) { ++ fatal("m_cost overflow"); ++ } ++ continue; ++ } else { ++ fatal("missing -k argument"); ++ } ++ } else if (!strcmp(a, "-t")) { ++ if (i < argc - 1) { ++ i++; ++ input = strtoul(argv[i], NULL, 10); ++ if (input == 0 || input == ULONG_MAX || ++ input > ARGON2_MAX_TIME) { ++ fatal("bad numeric input for -t"); ++ } ++ t_cost = input; ++ continue; ++ } else { ++ fatal("missing -t argument"); ++ } ++ } else if (!strcmp(a, "-p")) { ++ if (i < argc - 1) { ++ i++; ++ input = strtoul(argv[i], NULL, 10); ++ if (input == 0 || input == ULONG_MAX || ++ input > ARGON2_MAX_THREADS || input > ARGON2_MAX_LANES) { ++ fatal("bad numeric input for -p"); ++ } ++ threads = input; ++ lanes = threads; ++ continue; ++ } else { ++ fatal("missing -p argument"); ++ } ++ } else if (!strcmp(a, "-l")) { ++ if (i < argc - 1) { ++ i++; ++ input = strtoul(argv[i], NULL, 10); ++ outlen = input; ++ continue; ++ } else { ++ fatal("missing -l argument"); ++ } ++ } else if (!strcmp(a, "-i")) { ++ type = Argon2_i; ++ ++types_specified; ++ } else if (!strcmp(a, "-d")) { ++ type = Argon2_d; ++ ++types_specified; ++ } else if (!strcmp(a, "-id")) { ++ type = Argon2_id; ++ ++types_specified; ++ } else if (!strcmp(a, "-e")) { ++ encoded_only = 1; ++ } else if (!strcmp(a, "-r")) { ++ raw_only = 1; ++ } else if (!strcmp(a, "-v")) { ++ if (i < argc - 1) { ++ i++; ++ if (!strcmp(argv[i], "10")) { ++ version = ARGON2_VERSION_10; ++ } else if (!strcmp(argv[i], "13")) { ++ version = ARGON2_VERSION_13; ++ } else { ++ fatal("invalid Argon2 version"); ++ } ++ } else { ++ fatal("missing -v argument"); ++ } ++ } else { ++ fatal("unknown argument"); ++ } ++ } ++ ++ if (types_specified > 1) { ++ fatal("cannot specify multiple Argon2 types"); ++ } ++ ++ if(encoded_only && raw_only) ++ fatal("cannot provide both -e and -r"); ++ ++ if(!encoded_only && !raw_only) { ++ printf("Type:\t\t%s\n", argon2_type2string(type, 1)); ++ printf("Iterations:\t%u\n", t_cost); ++ printf("Memory:\t\t%u KiB\n", m_cost); ++ printf("Parallelism:\t%u\n", lanes); ++ } ++ ++ run(outlen, pwd, pwdlen, salt, t_cost, m_cost, lanes, threads, type, ++ encoded_only, raw_only, version); ++ ++ return ARGON2_OK; ++} ++ +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/test.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/test.c +new file mode 100644 +index 0000000..3180cbd +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/test.c +@@ -0,0 +1,289 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "argon2.h" ++ ++#define OUT_LEN 32 ++#define ENCODED_LEN 108 ++ ++/* Test harness will assert: ++ * argon2_hash() returns ARGON2_OK ++ * HEX output matches expected ++ * encoded output matches expected ++ * argon2_verify() correctly verifies value ++ */ ++ ++void hashtest(uint32_t version, uint32_t t, uint32_t m, uint32_t p, char *pwd, ++ char *salt, char *hexref, char *mcfref, argon2_type type) { ++ unsigned char out[OUT_LEN]; ++ unsigned char hex_out[OUT_LEN * 2 + 4]; ++ char encoded[ENCODED_LEN]; ++ int ret, i; ++ ++ printf("Hash test: $v=%d t=%d, m=%d, p=%d, pass=%s, salt=%s: ", version, ++ t, m, p, pwd, salt); ++ ++ ret = argon2_hash(t, 1 << m, p, pwd, strlen(pwd), salt, strlen(salt), out, ++ OUT_LEN, encoded, ENCODED_LEN, type, version); ++ assert(ret == ARGON2_OK); ++ ++ for (i = 0; i < OUT_LEN; ++i) ++ sprintf((char *)(hex_out + i * 2), "%02x", out[i]); ++ assert(memcmp(hex_out, hexref, OUT_LEN * 2) == 0); ++ ++ if (ARGON2_VERSION_NUMBER == version) { ++ assert(memcmp(encoded, mcfref, strlen(mcfref)) == 0); ++ } ++ ++ ret = argon2_verify(encoded, pwd, strlen(pwd), type); ++ assert(ret == ARGON2_OK); ++ ret = argon2_verify(mcfref, pwd, strlen(pwd), type); ++ assert(ret == ARGON2_OK); ++ ++ printf("PASS\n"); ++} ++ ++int main() { ++ int ret; ++ unsigned char out[OUT_LEN]; ++ char const *msg; ++ int version; ++ ++ version = ARGON2_VERSION_10; ++ printf("Test Argon2i version number: %02x\n", version); ++ ++ /* Multiple test cases for various input values */ ++ hashtest(version, 2, 16, 1, "password", "somesalt", ++ "f6c4db4a54e2a370627aff3db6176b94a2a209a62c8e36152711802f7b30c694", ++ "$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", Argon2_i); ++#ifdef TEST_LARGE_RAM ++ hashtest(version, 2, 20, 1, "password", "somesalt", ++ "9690ec55d28d3ed32562f2e73ea62b02b018757643a2ae6e79528459de8106e9", ++ "$argon2i$m=1048576,t=2,p=1$c29tZXNhbHQ" ++ "$lpDsVdKNPtMlYvLnPqYrArAYdXZDoq5ueVKEWd6BBuk", Argon2_i); ++#endif ++ hashtest(version, 2, 18, 1, "password", "somesalt", ++ "3e689aaa3d28a77cf2bc72a51ac53166761751182f1ee292e3f677a7da4c2467", ++ "$argon2i$m=262144,t=2,p=1$c29tZXNhbHQ" ++ "$Pmiaqj0op3zyvHKlGsUxZnYXURgvHuKS4/Z3p9pMJGc", Argon2_i); ++ hashtest(version, 2, 8, 1, "password", "somesalt", ++ "fd4dd83d762c49bdeaf57c47bdcd0c2f1babf863fdeb490df63ede9975fccf06", ++ "$argon2i$m=256,t=2,p=1$c29tZXNhbHQ" ++ "$/U3YPXYsSb3q9XxHvc0MLxur+GP960kN9j7emXX8zwY", Argon2_i); ++ hashtest(version, 2, 8, 2, "password", "somesalt", ++ "b6c11560a6a9d61eac706b79a2f97d68b4463aa3ad87e00c07e2b01e90c564fb", ++ "$argon2i$m=256,t=2,p=2$c29tZXNhbHQ" ++ "$tsEVYKap1h6scGt5ovl9aLRGOqOth+AMB+KwHpDFZPs", Argon2_i); ++ hashtest(version, 1, 16, 1, "password", "somesalt", ++ "81630552b8f3b1f48cdb1992c4c678643d490b2b5eb4ff6c4b3438b5621724b2", ++ "$argon2i$m=65536,t=1,p=1$c29tZXNhbHQ" ++ "$gWMFUrjzsfSM2xmSxMZ4ZD1JCytetP9sSzQ4tWIXJLI", Argon2_i); ++ hashtest(version, 4, 16, 1, "password", "somesalt", ++ "f212f01615e6eb5d74734dc3ef40ade2d51d052468d8c69440a3a1f2c1c2847b", ++ "$argon2i$m=65536,t=4,p=1$c29tZXNhbHQ" ++ "$8hLwFhXm6110c03D70Ct4tUdBSRo2MaUQKOh8sHChHs", Argon2_i); ++ hashtest(version, 2, 16, 1, "differentpassword", "somesalt", ++ "e9c902074b6754531a3a0be519e5baf404b30ce69b3f01ac3bf21229960109a3", ++ "$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "$6ckCB0tnVFMaOgvlGeW69ASzDOabPwGsO/ISKZYBCaM", Argon2_i); ++ hashtest(version, 2, 16, 1, "password", "diffsalt", ++ "79a103b90fe8aef8570cb31fc8b22259778916f8336b7bdac3892569d4f1c497", ++ "$argon2i$m=65536,t=2,p=1$ZGlmZnNhbHQ" ++ "$eaEDuQ/orvhXDLMfyLIiWXeJFvgza3vaw4kladTxxJc", Argon2_i); ++ ++ /* Error state tests */ ++ ++ /* Handle an invalid encoding correctly (it is missing a $) */ ++ ret = argon2_verify("$argon2i$m=65536,t=2,p=1c29tZXNhbHQ" ++ "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", ++ "password", strlen("password"), Argon2_i); ++ assert(ret == ARGON2_DECODING_FAIL); ++ printf("Recognise an invalid encoding: PASS\n"); ++ ++ /* Handle an invalid encoding correctly (it is missing a $) */ ++ ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", ++ "password", strlen("password"), Argon2_i); ++ assert(ret == ARGON2_DECODING_FAIL); ++ printf("Recognise an invalid encoding: PASS\n"); ++ ++ /* Handle an invalid encoding correctly (salt is too short) */ ++ ret = argon2_verify("$argon2i$m=65536,t=2,p=1$" ++ "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", ++ "password", strlen("password"), Argon2_i); ++ assert(ret == ARGON2_SALT_TOO_SHORT); ++ printf("Recognise an invalid salt in encoding: PASS\n"); ++ ++ /* Handle an mismatching hash (the encoded password is "passwore") */ ++ ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "$b2G3seW+uPzerwQQC+/E1K50CLLO7YXy0JRcaTuswRo", ++ "password", strlen("password"), Argon2_i); ++ assert(ret == ARGON2_VERIFY_MISMATCH); ++ printf("Verify with mismatched password: PASS\n"); ++ ++ msg = argon2_error_message(ARGON2_DECODING_FAIL); ++ assert(strcmp(msg, "Decoding failed") == 0); ++ printf("Decode an error message: PASS\n"); ++ ++ printf("\n"); ++ ++ version = ARGON2_VERSION_NUMBER; ++ printf("Test Argon2i version number: %02x\n", version); ++ ++ /* Multiple test cases for various input values */ ++ hashtest(version, 2, 16, 1, "password", "somesalt", ++ "c1628832147d9720c5bd1cfd61367078729f6dfb6f8fea9ff98158e0d7816ed0", ++ "$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", Argon2_i); ++#ifdef TEST_LARGE_RAM ++ hashtest(version, 2, 20, 1, "password", "somesalt", ++ "d1587aca0922c3b5d6a83edab31bee3c4ebaef342ed6127a55d19b2351ad1f41", ++ "$argon2i$v=19$m=1048576,t=2,p=1$c29tZXNhbHQ" ++ "$0Vh6ygkiw7XWqD7asxvuPE667zQu1hJ6VdGbI1GtH0E", Argon2_i); ++#endif ++ hashtest(version, 2, 18, 1, "password", "somesalt", ++ "296dbae80b807cdceaad44ae741b506f14db0959267b183b118f9b24229bc7cb", ++ "$argon2i$v=19$m=262144,t=2,p=1$c29tZXNhbHQ" ++ "$KW266AuAfNzqrUSudBtQbxTbCVkmexg7EY+bJCKbx8s", Argon2_i); ++ hashtest(version, 2, 8, 1, "password", "somesalt", ++ "89e9029f4637b295beb027056a7336c414fadd43f6b208645281cb214a56452f", ++ "$argon2i$v=19$m=256,t=2,p=1$c29tZXNhbHQ" ++ "$iekCn0Y3spW+sCcFanM2xBT63UP2sghkUoHLIUpWRS8", Argon2_i); ++ hashtest(version, 2, 8, 2, "password", "somesalt", ++ "4ff5ce2769a1d7f4c8a491df09d41a9fbe90e5eb02155a13e4c01e20cd4eab61", ++ "$argon2i$v=19$m=256,t=2,p=2$c29tZXNhbHQ" ++ "$T/XOJ2mh1/TIpJHfCdQan76Q5esCFVoT5MAeIM1Oq2E", Argon2_i); ++ hashtest(version, 1, 16, 1, "password", "somesalt", ++ "d168075c4d985e13ebeae560cf8b94c3b5d8a16c51916b6f4ac2da3ac11bbecf", ++ "$argon2i$v=19$m=65536,t=1,p=1$c29tZXNhbHQ" ++ "$0WgHXE2YXhPr6uVgz4uUw7XYoWxRkWtvSsLaOsEbvs8", Argon2_i); ++ hashtest(version, 4, 16, 1, "password", "somesalt", ++ "aaa953d58af3706ce3df1aefd4a64a84e31d7f54175231f1285259f88174ce5b", ++ "$argon2i$v=19$m=65536,t=4,p=1$c29tZXNhbHQ" ++ "$qqlT1YrzcGzj3xrv1KZKhOMdf1QXUjHxKFJZ+IF0zls", Argon2_i); ++ hashtest(version, 2, 16, 1, "differentpassword", "somesalt", ++ "14ae8da01afea8700c2358dcef7c5358d9021282bd88663a4562f59fb74d22ee", ++ "$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "$FK6NoBr+qHAMI1jc73xTWNkCEoK9iGY6RWL1n7dNIu4", Argon2_i); ++ hashtest(version, 2, 16, 1, "password", "diffsalt", ++ "b0357cccfbef91f3860b0dba447b2348cbefecadaf990abfe9cc40726c521271", ++ "$argon2i$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ" ++ "$sDV8zPvvkfOGCw26RHsjSMvv7K2vmQq/6cxAcmxSEnE", Argon2_i); ++ ++ ++ /* Error state tests */ ++ ++ /* Handle an invalid encoding correctly (it is missing a $) */ ++ ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1c29tZXNhbHQ" ++ "$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", ++ "password", strlen("password"), Argon2_i); ++ assert(ret == ARGON2_DECODING_FAIL); ++ printf("Recognise an invalid encoding: PASS\n"); ++ ++ /* Handle an invalid encoding correctly (it is missing a $) */ ++ ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", ++ "password", strlen("password"), Argon2_i); ++ assert(ret == ARGON2_DECODING_FAIL); ++ printf("Recognise an invalid encoding: PASS\n"); ++ ++ /* Handle an invalid encoding correctly (salt is too short) */ ++ ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$" ++ "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", ++ "password", strlen("password"), Argon2_i); ++ assert(ret == ARGON2_SALT_TOO_SHORT); ++ printf("Recognise an invalid salt in encoding: PASS\n"); ++ ++ /* Handle an mismatching hash (the encoded password is "passwore") */ ++ ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "$8iIuixkI73Js3G1uMbezQXD0b8LG4SXGsOwoQkdAQIM", ++ "password", strlen("password"), Argon2_i); ++ assert(ret == ARGON2_VERIFY_MISMATCH); ++ printf("Verify with mismatched password: PASS\n"); ++ ++ msg = argon2_error_message(ARGON2_DECODING_FAIL); ++ assert(strcmp(msg, "Decoding failed") == 0); ++ printf("Decode an error message: PASS\n\n"); ++ ++ printf("Test Argon2id version number: %02x\n", version); ++ ++ /* Multiple test cases for various input values */ ++ hashtest(version, 2, 16, 1, "password", "somesalt", ++ "09316115d5cf24ed5a15a31a3ba326e5cf32edc24702987c02b6566f61913cf7", ++ "$argon2id$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "$CTFhFdXPJO1aFaMaO6Mm5c8y7cJHAph8ArZWb2GRPPc", Argon2_id); ++ hashtest(version, 2, 18, 1, "password", "somesalt", ++ "78fe1ec91fb3aa5657d72e710854e4c3d9b9198c742f9616c2f085bed95b2e8c", ++ "$argon2id$v=19$m=262144,t=2,p=1$c29tZXNhbHQ" ++ "$eP4eyR+zqlZX1y5xCFTkw9m5GYx0L5YWwvCFvtlbLow", Argon2_id); ++ hashtest(version, 2, 8, 1, "password", "somesalt", ++ "9dfeb910e80bad0311fee20f9c0e2b12c17987b4cac90c2ef54d5b3021c68bfe", ++ "$argon2id$v=19$m=256,t=2,p=1$c29tZXNhbHQ" ++ "$nf65EOgLrQMR/uIPnA4rEsF5h7TKyQwu9U1bMCHGi/4", Argon2_id); ++ hashtest(version, 2, 8, 2, "password", "somesalt", ++ "6d093c501fd5999645e0ea3bf620d7b8be7fd2db59c20d9fff9539da2bf57037", ++ "$argon2id$v=19$m=256,t=2,p=2$c29tZXNhbHQ" ++ "$bQk8UB/VmZZF4Oo79iDXuL5/0ttZwg2f/5U52iv1cDc", Argon2_id); ++ hashtest(version, 1, 16, 1, "password", "somesalt", ++ "f6a5adc1ba723dddef9b5ac1d464e180fcd9dffc9d1cbf76cca2fed795d9ca98", ++ "$argon2id$v=19$m=65536,t=1,p=1$c29tZXNhbHQ" ++ "$9qWtwbpyPd3vm1rB1GThgPzZ3/ydHL92zKL+15XZypg", Argon2_id); ++ hashtest(version, 4, 16, 1, "password", "somesalt", ++ "9025d48e68ef7395cca9079da4c4ec3affb3c8911fe4f86d1a2520856f63172c", ++ "$argon2id$v=19$m=65536,t=4,p=1$c29tZXNhbHQ" ++ "$kCXUjmjvc5XMqQedpMTsOv+zyJEf5PhtGiUghW9jFyw", Argon2_id); ++ hashtest(version, 2, 16, 1, "differentpassword", "somesalt", ++ "0b84d652cf6b0c4beaef0dfe278ba6a80df6696281d7e0d2891b817d8c458fde", ++ "$argon2id$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" ++ "$C4TWUs9rDEvq7w3+J4umqA32aWKB1+DSiRuBfYxFj94", Argon2_id); ++ hashtest(version, 2, 16, 1, "password", "diffsalt", ++ "bdf32b05ccc42eb15d58fd19b1f856b113da1e9a5874fdcc544308565aa8141c", ++ "$argon2id$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ" ++ "$vfMrBczELrFdWP0ZsfhWsRPaHppYdP3MVEMIVlqoFBw", Argon2_id); ++ ++ /* Common error state tests */ ++ ++ printf("\n"); ++ printf("Common error state tests\n"); ++ ++ ret = argon2_hash(2, 1, 1, "password", strlen("password"), ++ "diffsalt", strlen("diffsalt"), ++ out, OUT_LEN, NULL, 0, Argon2_id, version); ++ assert(ret == ARGON2_MEMORY_TOO_LITTLE); ++ printf("Fail on invalid memory: PASS\n"); ++ ++ ret = argon2_hash(2, 1 << 12, 1, NULL, strlen("password"), ++ "diffsalt", strlen("diffsalt"), ++ out, OUT_LEN, NULL, 0, Argon2_id, version); ++ assert(ret == ARGON2_PWD_PTR_MISMATCH); ++ printf("Fail on invalid null pointer: PASS\n"); ++ ++ ret = argon2_hash(2, 1 << 12, 1, "password", strlen("password"), "s", 1, ++ out, OUT_LEN, NULL, 0, Argon2_id, version); ++ assert(ret == ARGON2_SALT_TOO_SHORT); ++ printf("Fail on salt too short: PASS\n"); ++ ++ return 0; ++} +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/thread.c b/node_modules/react-native-argon2/android/src/main/cpp/argon2/thread.c +new file mode 100644 +index 0000000..e099a00 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/thread.c +@@ -0,0 +1,57 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#if !defined(ARGON2_NO_THREADS) ++ ++#include "thread.h" ++#if defined(_WIN32) ++#include ++#endif ++ ++int argon2_thread_create(argon2_thread_handle_t *handle, ++ argon2_thread_func_t func, void *args) { ++ if (NULL == handle || func == NULL) { ++ return -1; ++ } ++#if defined(_WIN32) ++ *handle = _beginthreadex(NULL, 0, func, args, 0, NULL); ++ return *handle != 0 ? 0 : -1; ++#else ++ return pthread_create(handle, NULL, func, args); ++#endif ++} ++ ++int argon2_thread_join(argon2_thread_handle_t handle) { ++#if defined(_WIN32) ++ if (WaitForSingleObject((HANDLE)handle, INFINITE) == WAIT_OBJECT_0) { ++ return CloseHandle((HANDLE)handle) != 0 ? 0 : -1; ++ } ++ return -1; ++#else ++ return pthread_join(handle, NULL); ++#endif ++} ++ ++void argon2_thread_exit(void) { ++#if defined(_WIN32) ++ _endthreadex(0); ++#else ++ pthread_exit(NULL); ++#endif ++} ++ ++#endif /* ARGON2_NO_THREADS */ +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/argon2/thread.h b/node_modules/react-native-argon2/android/src/main/cpp/argon2/thread.h +new file mode 100644 +index 0000000..49d8836 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/argon2/thread.h +@@ -0,0 +1,67 @@ ++/* ++ * Argon2 reference source code package - reference C implementations ++ * ++ * Copyright 2015 ++ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves ++ * ++ * You may use this work under the terms of a Creative Commons CC0 1.0 ++ * License/Waiver or the Apache Public License 2.0, at your option. The terms of ++ * these licenses can be found at: ++ * ++ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 ++ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * You should have received a copy of both of these licenses along with this ++ * software. If not, they may be obtained at the above URLs. ++ */ ++ ++#ifndef ARGON2_THREAD_H ++#define ARGON2_THREAD_H ++ ++#if !defined(ARGON2_NO_THREADS) ++ ++/* ++ Here we implement an abstraction layer for the simpĺe requirements ++ of the Argon2 code. We only require 3 primitives---thread creation, ++ joining, and termination---so full emulation of the pthreads API ++ is unwarranted. Currently we wrap pthreads and Win32 threads. ++ ++ The API defines 2 types: the function pointer type, ++ argon2_thread_func_t, ++ and the type of the thread handle---argon2_thread_handle_t. ++*/ ++#if defined(_WIN32) ++#include ++typedef unsigned(__stdcall *argon2_thread_func_t)(void *); ++typedef uintptr_t argon2_thread_handle_t; ++#else ++#include ++typedef void *(*argon2_thread_func_t)(void *); ++typedef pthread_t argon2_thread_handle_t; ++#endif ++ ++/* Creates a thread ++ * @param handle pointer to a thread handle, which is the output of this ++ * function. Must not be NULL. ++ * @param func A function pointer for the thread's entry point. Must not be ++ * NULL. ++ * @param args Pointer that is passed as an argument to @func. May be NULL. ++ * @return 0 if @handle and @func are valid pointers and a thread is successfully ++ * created. ++ */ ++int argon2_thread_create(argon2_thread_handle_t *handle, ++ argon2_thread_func_t func, void *args); ++ ++/* Waits for a thread to terminate ++ * @param handle Handle to a thread created with argon2_thread_create. ++ * @return 0 if @handle is a valid handle, and joining completed successfully. ++*/ ++int argon2_thread_join(argon2_thread_handle_t handle); ++ ++/* Terminate the current thread. Must be run inside a thread created by ++ * argon2_thread_create. ++*/ ++void argon2_thread_exit(void); ++ ++#endif /* ARGON2_NO_THREADS */ ++#endif +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/jni/Argon2Jni.cpp b/node_modules/react-native-argon2/android/src/main/cpp/jni/Argon2Jni.cpp +new file mode 100644 +index 0000000..6fed608 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/jni/Argon2Jni.cpp +@@ -0,0 +1,111 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++#include ++#include ++#include ++#include ++ ++enum Argon2Jni_ErrorCodes { ++ ARGON2JNI_OK = 0, ++ ARGON2JNI_PASSWORD_BYTEBUFFER_NULL = 1000, ++ ARGON2JNI_SALT_BYTEBUFFER_NULL = 1001, ++ ARGON2JNI_ENCODED_BYTEBUFFER_NULL = 1002, ++ ARGON2JNI_MALLOC_FAILED = 1003, ++}; ++ ++extern "C" JNIEXPORT jint JNICALL Java_com_lambdapioneer_argon2kt_Argon2Jni_nativeArgon2Hash( ++ JNIEnv *env, ++ jobject /* thiz */, ++ jint mode, ++ jint version, ++ jint t_cost, ++ jint m_cost, ++ jint parallelism, ++ jobject password, ++ jobject salt, ++ jint hash_length, ++ jobject hash_destination, ++ jobject encoded_destination) { ++ // extract password from bytebuffer ++ const jlong password_length = env->GetDirectBufferCapacity(password); ++ const void *password_bytes = env->GetDirectBufferAddress(password); ++ if (!password_bytes) return Argon2Jni_ErrorCodes::ARGON2JNI_PASSWORD_BYTEBUFFER_NULL; ++ ++ // extract salt from bytebuffer ++ const jlong salt_length = env->GetDirectBufferCapacity(salt); ++ const void *salt_bytes = env->GetDirectBufferAddress(salt); ++ if (!salt_bytes) return Argon2Jni_ErrorCodes::ARGON2JNI_SALT_BYTEBUFFER_NULL; ++ ++ // allocate direct buffer for hash output ++ void *hash_bytes = malloc(static_cast(hash_length)); ++ if (!hash_bytes) return Argon2Jni_ErrorCodes::ARGON2JNI_MALLOC_FAILED; ++ jobject hashDestinationBuffer = env->NewDirectByteBuffer(hash_bytes, hash_length); ++ ++ // allocate direct buffer for encoded output ++ const size_t encoded_length = argon2_encodedlen( ++ static_cast(t_cost), ++ static_cast(m_cost), ++ static_cast(parallelism), ++ static_cast(salt_length), ++ static_cast(hash_length), ++ static_cast(mode)); ++ ++ char *encoded_bytes = static_cast(malloc(encoded_length)); ++ if (!encoded_bytes) return Argon2Jni_ErrorCodes::ARGON2JNI_MALLOC_FAILED; ++ jobject encodedDestinationBuffer = env->NewDirectByteBuffer(encoded_bytes, encoded_length); ++ ++ // run argon2 ++ const int argon2_return_code = argon2_hash( ++ static_cast(t_cost), ++ static_cast(m_cost), ++ static_cast(parallelism), ++ password_bytes, static_cast(password_length), ++ salt_bytes, static_cast(salt_length), ++ hash_bytes, static_cast(hash_length), ++ encoded_bytes, encoded_length, ++ static_cast(mode), ++ static_cast(version)); ++ ++ if (argon2_return_code != ARGON2_OK) { ++ return argon2_return_code; ++ } ++ ++ // static fields allow caching which makes sub-sequent access faster ++ static jclass byteBufferTargetClazz = env->FindClass("com/lambdapioneer/argon2kt/ByteBufferTarget"); ++ static jfieldID byteBufferTargetField = env->GetFieldID( ++ byteBufferTargetClazz, ++ "byteBuffer", ++ "Ljava/nio/ByteBuffer;" ++ ); ++ ++ // set byte buffer outputs to respective targets ++ env->SetObjectField(hash_destination, byteBufferTargetField, hashDestinationBuffer); ++ env->SetObjectField(encoded_destination, byteBufferTargetField, encodedDestinationBuffer); ++ ++ return ARGON2JNI_OK; ++} ++ ++extern "C" JNIEXPORT jint JNICALL Java_com_lambdapioneer_argon2kt_Argon2Jni_nativeArgon2Verify( ++ JNIEnv *env, ++ jobject /* thiz */, ++ jint mode, ++ jobject encoded, ++ jobject password) { ++ // extract encoded from bytebuffer ++ const jlong password_length = env->GetDirectBufferCapacity(password); ++ const void *password_bytes = env->GetDirectBufferAddress(password); ++ if (!password_bytes) return Argon2Jni_ErrorCodes::ARGON2JNI_PASSWORD_BYTEBUFFER_NULL; ++ ++ // extract password from bytebuffer (must be \0 terminated) ++ const void *encoded_bytes = env->GetDirectBufferAddress(encoded); ++ if (!encoded_bytes) return Argon2Jni_ErrorCodes::ARGON2JNI_ENCODED_BYTEBUFFER_NULL; ++ ++ return argon2_verify( ++ static_cast(encoded_bytes), ++ password_bytes, ++ static_cast(password_length), ++ static_cast(mode)); ++} +diff --git a/node_modules/react-native-argon2/android/src/main/cpp/jni/Argon2JniVerification.cpp b/node_modules/react-native-argon2/android/src/main/cpp/jni/Argon2JniVerification.cpp +new file mode 100644 +index 0000000..8773ddd +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/cpp/jni/Argon2JniVerification.cpp +@@ -0,0 +1,11 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++#include ++ ++extern "C" JNIEXPORT jint JNICALL ++Java_com_lambdapioneer_argon2kt_Argon2JniVerification_verifyJniByAddingOne(JNIEnv *env, jobject thiz, jint input) { ++ return input + 1; ++} +diff --git a/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Error.kt b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Error.kt +new file mode 100644 +index 0000000..d894201 +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Error.kt +@@ -0,0 +1,71 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++package com.lambdapioneer.argon2kt ++ ++class Argon2Exception(errorMessage: String) : RuntimeException(errorMessage) { ++ companion object { ++ fun fromErrorCode(errorCode: Int) = Argon2Exception("${Argon2Error.fromErrorCode(errorCode)} ($errorCode)") ++ } ++} ++ ++@Suppress("unused") ++enum class Argon2Error constructor(val errorCode: Int) { ++ ARGON2_OK(0), ++ ++ ARGON2_OUTPUT_PTR_NULL(-1), ++ ARGON2_OUTPUT_TOO_SHORT(-2), ++ ARGON2_OUTPUT_TOO_LONG(-3), ++ ARGON2_PWD_TOO_SHORT(-4), ++ ARGON2_PWD_TOO_LONG(-5), ++ ARGON2_SALT_TOO_SHORT(-6), ++ ARGON2_SALT_TOO_LONG(-7), ++ ARGON2_AD_TOO_SHORT(-8), ++ ARGON2_AD_TOO_LONG(-9), ++ ARGON2_SECRET_TOO_SHORT(-10), ++ ARGON2_SECRET_TOO_LONG(-11), ++ ARGON2_TIME_TOO_SMALL(-12), ++ ARGON2_TIME_TOO_LARGE(-13), ++ ARGON2_MEMORY_TOO_LITTLE(-14), ++ ARGON2_MEMORY_TOO_MUCH(-15), ++ ARGON2_LANES_TOO_FEW(-16), ++ ARGON2_LANES_TOO_MANY(-17), ++ ARGON2_PWD_PTR_MISMATCH(-18), ++ ARGON2_SALT_PTR_MISMATCH(-19), ++ ARGON2_SECRET_PTR_MISMATCH(-20), ++ ARGON2_AD_PTR_MISMATCH(-21), ++ ARGON2_MEMORY_ALLOCATION_ERROR(-22), ++ ARGON2_FREE_MEMORY_CBK_NULL(-23), ++ ARGON2_ALLOCATE_MEMORY_CBK_NULL(-24), ++ ARGON2_INCORRECT_PARAMETER(-25), ++ ARGON2_INCORRECT_TYPE(-26), ++ ARGON2_OUT_PTR_MISMATCH(-27), ++ ARGON2_THREADS_TOO_FEW(-28), ++ ARGON2_THREADS_TOO_MANY(-29), ++ ARGON2_MISSING_ARGS(-30), ++ ARGON2_ENCODING_FAIL(-31), ++ ARGON2_DECODING_FAIL(-32), ++ ARGON2_THREAD_FAIL(-33), ++ ARGON2_DECODING_LENGTH_FAIL(-34), ++ ARGON2_VERIFY_MISMATCH(-35), ++ ++ ARGON2JNI_PASSWORD_BYTEBUFFER_NULL(1000), ++ ARGON2JNI_SALT_BYTEBUFFER_NULL(1001), ++ ARGON2JNI_ENCODED_BYTEBUFFER_NULL(1002), ++ ARGON2JNI_MALLOC_FAILED(1003); ++ ++ companion object { ++ ++ fun fromErrorCode(errorCode: Int): Argon2Error { ++ val values = values() ++ for (argonError in values) { ++ if (errorCode == argonError.errorCode) { ++ return argonError ++ } ++ } ++ throw IllegalArgumentException("Unknown error code: $errorCode") ++ } ++ } ++} +diff --git a/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Jni.kt b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Jni.kt +new file mode 100644 +index 0000000..0e6ab4b +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Jni.kt +@@ -0,0 +1,125 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++package com.lambdapioneer.argon2kt ++ ++import androidx.annotation.Keep ++import java.nio.ByteBuffer ++ ++@Keep ++internal class Argon2Jni(soLoader: SoLoaderShim) { ++ ++ init { ++ soLoader.loadLibrary("argon2jni") ++ } ++ ++ fun argon2Hash( ++ mode: Int, ++ version: Int, ++ password: ByteBuffer, ++ salt: ByteBuffer, ++ tCostInIterations: Int, ++ mCostInKibibyte: Int, ++ parallelism: Int, ++ hashLengthInBytes: Int ++ ): Argon2KtResult { ++ checkArgument(mode in 0..2, "mode must be in range 0..2") ++ checkArgument(version in arrayListOf(0x10, 0x13), "version must be either 0x10 or 0x13") ++ ++ checkArgument(tCostInIterations > 0, "tCostInIterations must be greater than 0") ++ checkArgument(mCostInKibibyte > 0, "mCostInKibibyte must be greater than 0") ++ checkArgument(parallelism > 0, "parallelism must be greater than 0") ++ checkArgument(hashLengthInBytes > 0, "hashLengthInBytes must be greater than 0") ++ ++ checkArgument(password.isDirect, "the password bytebuffer must be allocated as direct") ++ checkArgument(salt.isDirect, "the salt bytebuffer must be allocated as direct") ++ ++ val hashTarget = ByteBufferTarget() ++ val encodedTarget = ByteBufferTarget() ++ ++ val returnCode = nativeArgon2Hash( ++ mode = mode, ++ version = version, ++ t_cost = tCostInIterations, ++ m_cost = mCostInKibibyte, ++ parallelism = parallelism, ++ password = password, ++ salt = salt, ++ hash_length = hashLengthInBytes, ++ hash_destination = hashTarget, ++ encoded_destination = encodedTarget ++ ) ++ ++ val argonError = Argon2Error.fromErrorCode(returnCode) ++ if (argonError != Argon2Error.ARGON2_OK) { ++ throw Argon2Exception.fromErrorCode(returnCode) ++ } ++ ++ if (!hashTarget.hasByteBufferSet()) { ++ throw Argon2Exception("Argon2 call did not set hash byte buffer") ++ } ++ ++ return Argon2KtResult( ++ rawHash = hashTarget.getByteBuffer(), ++ encodedOutput = encodedTarget.dropLastN(1).getByteBuffer() // ignore trailing \0 byte ++ ) ++ } ++ ++ fun argon2Verify(mode: Int, encoded: ByteArray, password: ByteBuffer): Boolean { ++ checkArgument(mode in 0..2, "mode must be in range 0..2") ++ checkArgument(password.isDirect, "the password bytebuffer must be allocated as direct") ++ ++ val encodedBuffer = ByteBuffer.allocateDirect(encoded.size + 1) ++ .put(encoded) ++ .put(0x00) // native method expects a \0 terminated string ++ ++ val returnCode = nativeArgon2Verify( ++ mode = mode, ++ encoded = encodedBuffer, ++ password = password ++ ) ++ ++ return when (Argon2Error.fromErrorCode(returnCode)) { ++ Argon2Error.ARGON2_OK -> true ++ Argon2Error.ARGON2_VERIFY_MISMATCH -> false ++ else -> throw Argon2Exception.fromErrorCode(returnCode) ++ } ++ } ++ ++ @Keep ++ private external fun nativeArgon2Hash( ++ mode: Int, ++ version: Int, ++ t_cost: Int, ++ m_cost: Int, ++ parallelism: Int, ++ password: ByteBuffer, ++ salt: ByteBuffer, ++ hash_length: Int, ++ hash_destination: ByteBufferTarget, ++ encoded_destination: ByteBufferTarget ++ ): Int ++ ++ @Keep ++ private external fun nativeArgon2Verify( ++ mode: Int, ++ encoded: ByteBuffer, ++ password: ByteBuffer ++ ): Int ++} ++ ++/** Helper class to verify that the native library can be loaded and used */ ++internal class Argon2JniVerification(private val soLoader: SoLoaderShim) { ++ ++ fun assertJniWorking() { ++ soLoader.loadLibrary("argon2jni") ++ if (verifyJniByAddingOne(100) != 101) { ++ throw IllegalStateException("JNI check failed") ++ } ++ } ++ ++ @Keep ++ private external fun verifyJniByAddingOne(input: Int): Int ++} +diff --git a/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Kt.kt b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Kt.kt +new file mode 100644 +index 0000000..e8dca8e +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2Kt.kt +@@ -0,0 +1,223 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++package com.lambdapioneer.argon2kt ++ ++import java.nio.ByteBuffer ++ ++internal const val ARGON2KT_DEFAULT_T_COST = 1 // number of iterations ++internal const val ARGON2KT_DEFAULT_M_COST = 65536 // resulting in 64 MiB memory cost ++internal const val ARGON2KT_DEFAULT_PARALLELISM = 2 // running two threads in parallel ++internal const val ARGON2KT_DEFAULT_HASH_LENGTH = 32 // resulting in 32 bytes = 128 bit output ++internal val ARGON2KT_DEFAULT_VERSION = Argon2Version.V13 // default to newest version V13 ++ ++/** ++ * The different Argon2 modes that differ regarding side-channel-and-memory-tradeoffs. Please refer to the documentation ++ * of the Argon2 project for details. ++ */ ++enum class Argon2Mode(val identifier: Int) { ++ ++ /** ++ * Argon2d chooses memory depending on the password and salt. Not suitable for environments ++ * with potential side-channel attacks. ++ */ ++ ARGON2_D(0), ++ ++ /** ++ * Argon2i chooses memory independent of the password and salt reducing the risk from side-channels. However, the ++ * memory trade-off is weaker. ++ */ ++ ARGON2_I(1), ++ ++ /** ++ * Argon2id combines the Argon2d and Argon2i providing a reasonable trade-off between memory dependence and side- ++ * channels. ++ */ ++ ARGON2_ID(2) ++} ++ ++/** ++ * The Argon2 version to use. It's preferred to use the latest (V13) version where suitable. ++ */ ++enum class Argon2Version(val version: Int) { ++ ++ /** The version V10) */ ++ V10(0x10), ++ ++ /** The (default) version V13) */ ++ V13(0x13) ++} ++ ++/** ++ * The main entry point for the Argon2Kt library. The initialization will execute the load of the .so library (native ++ * C code). Therefore, it should be initialized off the main thread. ++ * ++ * @param soLoader Callback for loading the .so library. Defaults to the SystemSoLoader. However, one can easily replace ++ * it with e.g. the ReLinker library for more robust .so loading. ++ */ ++class Argon2Kt(soLoader: SoLoaderShim = SystemSoLoader()) { ++ private val jni = Argon2Jni(soLoader) ++ ++ /** ++ * Computes the Argon2 hash for the given parameters. Using direct-allocated ByteBuffers is the preferred method as ++ * they can be deterministically wiped afterwards. ++ * ++ * @param mode The Argon2Mode to use. ++ * @param password The password. ++ * @param salt The password. ++ * @param tCostInIterations The computational cost in iterations. The application should choose this to fit a ++ * certain amount of time after fixing the m_cost. ++ * @param mCostInKibibyte The memory cost in KibiByte (i.e. 1024 byte). ++ * @param hashLengthInBytes The length of the raw hash in bytes. I.e. for a 512 bit output choose 64. ++ * @param version The Argon2Version to use. ++ * ++ * @return The Argon2KtResult exposes both the raw hash and the encoded string representation. ++ * ++ * @throws Argon2Exception for parameter and runtime errors. ++ */ ++ @JvmOverloads ++ fun hash( ++ mode: Argon2Mode, ++ password: ByteBuffer, ++ salt: ByteBuffer, ++ tCostInIterations: Int = ARGON2KT_DEFAULT_T_COST, ++ mCostInKibibyte: Int = ARGON2KT_DEFAULT_M_COST, ++ parallelism: Int = ARGON2KT_DEFAULT_PARALLELISM, ++ hashLengthInBytes: Int = ARGON2KT_DEFAULT_HASH_LENGTH, ++ version: Argon2Version = ARGON2KT_DEFAULT_VERSION ++ ): Argon2KtResult = jni.argon2Hash( ++ mode = mode.identifier, ++ version = version.version, ++ password = password, ++ salt = salt, ++ tCostInIterations = tCostInIterations, ++ mCostInKibibyte = mCostInKibibyte, ++ parallelism = parallelism, ++ hashLengthInBytes = hashLengthInBytes ++ ) ++ ++ /** ++ * Computes the Argon2 hash for the given parameters. Using this method will cause ByteArrays to be allocated on the ++ * JVM heap which are hard to clear. It's suggested that you always handle secrets through direct-allocated ++ * ByteBuffers. ++ * ++ * @param mode The Argon2Mode to use. ++ * @param password The password (must be a ByteBuffer that has been allocated as direct). ++ * @param salt The password (must be a ByteBuffer that has been allocated as direct). ++ * @param tCostInIterations The computational cost in iterations. The application should choose this to fit a ++ * certain amount of time after fixing the m_cost. ++ * @param mCostInKibibyte The memory cost in KibiByte (i.e. 1024 byte). ++ * @param hashLengthInBytes The length of the raw hash in bytes. I.e. for a 512 bit output choose 64. ++ * @param version The Argon2Version to use. ++ * ++ * @return The Argon2KtResult exposes both the raw hash and the encoded string representation. ++ * ++ * @throws Argon2Exception for parameter and runtime errors. ++ */ ++ @JvmOverloads ++ fun hash( ++ mode: Argon2Mode, ++ password: ByteArray, ++ salt: ByteArray, ++ tCostInIterations: Int = ARGON2KT_DEFAULT_T_COST, ++ mCostInKibibyte: Int = ARGON2KT_DEFAULT_M_COST, ++ parallelism: Int = ARGON2KT_DEFAULT_PARALLELISM, ++ hashLengthInBytes: Int = ARGON2KT_DEFAULT_HASH_LENGTH, ++ version: Argon2Version = ARGON2KT_DEFAULT_VERSION ++ ): Argon2KtResult { ++ val passwordBuffer = ByteBuffer.allocateDirect(password.size).put(password) ++ val saltBuffer = ByteBuffer.allocateDirect(salt.size).put(salt) ++ ++ try { ++ return hash( ++ mode = mode, ++ password = passwordBuffer, ++ salt = saltBuffer, ++ tCostInIterations = tCostInIterations, ++ mCostInKibibyte = mCostInKibibyte, ++ parallelism = parallelism, ++ hashLengthInBytes = hashLengthInBytes, ++ version = version ++ ) ++ } finally { ++ passwordBuffer.wipeDirectBuffer() ++ saltBuffer.wipeDirectBuffer() ++ } ++ } ++ ++ /** ++ * Verifies a given password against the encoded string representation. As the encoded string already contains the ++ * parameter information (e.g. t_cost, m_cost) this is preferred over storing the raw hash. ++ * ++ * @param mode The Argon2Mode to use. ++ * @param encoded The encoded string representation retrieved from a Argon2KtResult or an external source. ++ * @param password The password to verify against the encoded string representation. ++ * ++ * @throws Argon2Exception for parameter and runtime errors. ++ */ ++ fun verify( ++ mode: Argon2Mode, ++ encoded: String, ++ password: ByteBuffer ++ ): Boolean = jni.argon2Verify( ++ mode = mode.identifier, ++ encoded = encoded.toByteArray(charset = Charsets.US_ASCII), ++ password = password ++ ) ++ ++ /** ++ * Verifies a given password against the encoded string representation. As the encoded string already contains the ++ * parameter information (e.g. t_cost, m_cost) this is preferred over storing the raw hash. ++ * ++ * One should prefer the verify version accepting a ByteArray as it will allow to wipe the secret from memory. ++ * ++ * @param mode The Argon2Mode to use. ++ * @param encoded The encoded string representation retrieved from a Argon2KtResult or an external source. ++ * @param password The password to verify against the encoded string representation. ++ * ++ * @throws Argon2Exception for parameter and runtime errors. ++ */ ++ fun verify( ++ mode: Argon2Mode, ++ encoded: String, ++ password: ByteArray ++ ): Boolean { ++ val passwordBuffer = ByteBuffer.allocateDirect(password.size).put(password) ++ try { ++ return verify(mode = mode, encoded = encoded, password = passwordBuffer) ++ } finally { ++ passwordBuffer.wipeDirectBuffer() ++ } ++ } ++ ++ companion object { ++ ++ /** ++ * Returns after loading and verifying the JNI implementation. It throws an IllegalStateException or similar ++ * otherwise. As this method performs disk I/O (for loading the library) it should be run in the background and ++ * not on the main thread. ++ */ ++ fun assertJniWorking(soLoader: SoLoaderShim = SystemSoLoader()) = ++ Argon2JniVerification(soLoader).assertJniWorking() ++ } ++} ++ ++/** ++ * Result from the Argon2Kt.hash method containing both the rawHash and encodedOutput as direct-allocated ByteBuffers. ++ */ ++class Argon2KtResult(val rawHash: ByteBuffer, val encodedOutput: ByteBuffer) { ++ ++ /** The raw hash as a ByteArray. */ ++ fun rawHashAsByteArray(): ByteArray = rawHash.toByteArray() ++ ++ /** The raw hash as a String encoded in hexadecimal. */ ++ fun rawHashAsHexadecimal(uppercase: Boolean = false): String = rawHashAsByteArray().encodeAsHex(uppercase) ++ ++ /** The encoded output string as a ByteArray. */ ++ fun encodedOutputAsByteArray(): ByteArray = encodedOutput.toByteArray() ++ ++ /** The encoded output string as a Base64 String using $ as delimiters. */ ++ fun encodedOutputAsString(): String = encodedOutputAsByteArray().toString(charset = Charsets.US_ASCII) ++} +diff --git a/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2KtBenchmark.kt b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2KtBenchmark.kt +new file mode 100644 +index 0000000..223d54d +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2KtBenchmark.kt +@@ -0,0 +1,85 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++package com.lambdapioneer.argon2kt ++ ++import kotlin.math.ceil ++ ++/** ++ * Utils class to help determining Argon2 parameters. ++ */ ++class Argon2KtBenchmark private constructor() { ++ ++ companion object { ++ ++ /** ++ * Returns an iteration count for the given configuration that makes Argon2 take just above the given "targetTimeMs". ++ * Note that there can be vast differences between devices and debug/release builds. ++ * ++ * Do not rely on this method to make claims on "how long it would take to crack a password". However, it is helpful ++ * to choose an iteration count that provides sensible/convenient speed for a given configuration. ++ */ ++ fun searchIterationCount( ++ argon2Kt: Argon2Kt, ++ argon2Mode: Argon2Mode, ++ targetTimeMs: Long, ++ mCostInKibibyte: Int = ARGON2KT_DEFAULT_M_COST, ++ parallelism: Int = ARGON2KT_DEFAULT_PARALLELISM, ++ hashLengthInBytes: Int = ARGON2KT_DEFAULT_HASH_LENGTH, ++ version: Argon2Version = ARGON2KT_DEFAULT_VERSION ++ ): Int = ++ searchIterationCountForMethod(targetTimeMs) { tCostInIterations -> ++ argon2Kt.hash( ++ mode = argon2Mode, ++ password = "dummypassword".toByteArray(), ++ salt = "dummysalt".toByteArray(), ++ tCostInIterations = tCostInIterations, ++ mCostInKibibyte = mCostInKibibyte, ++ parallelism = parallelism, ++ hashLengthInBytes = hashLengthInBytes, ++ version = version ++ ) ++ } ++ } ++} ++ ++/** See [searchIterationCountForMetric] */ ++internal fun searchIterationCountForMethod(targetTimeMs: Long, methodToMeasure: (Int) -> Unit) = ++ searchIterationCountForMetric( ++ targetTimeMs ++ ) { ++ val start = System.nanoTime() ++ methodToMeasure(it) ++ (System.nanoTime() - start) / 1000000 ++ } ++ ++/** ++ * Returns an iteration count that results in the "measureTimeMs" to take more than "targetTimeMs". It assumes that the ++ * measured time increases (roughly) proportionally with the number of iterations. ++ */ ++internal fun searchIterationCountForMetric( ++ targetTimeMs: Long, ++ iterationToMetric: (Int) -> Long ++): Int { ++ var iterations = 1 ++ var iterationsTime = iterationToMetric(iterations) ++ ++ while (iterationsTime <= targetTimeMs) { ++ checkArgument(iterationsTime > 0, "The to-be measured method must always take >0ms\"") ++ val timePerIteration = iterationsTime.toFloat() / iterations.toFloat() ++ ++ // approximate assuming proportional relationship: iterations ~ time ++ val newIterations = ceil(targetTimeMs.toFloat() / timePerIteration).toInt() ++ ++ iterations = if (newIterations <= iterations) ++ newIterations + 1 // avoid infinite loop by growing strictly monotonically ++ else ++ newIterations ++ ++ iterationsTime = iterationToMetric(iterations) ++ } ++ ++ return iterations ++} +diff --git a/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2KtUtils.kt b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2KtUtils.kt +new file mode 100644 +index 0000000..bca48af +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/Argon2KtUtils.kt +@@ -0,0 +1,114 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++package com.lambdapioneer.argon2kt ++ ++import java.nio.ByteBuffer ++import java.util.* ++ ++/** ++ * Decodes a [String] holding a hexadecimal encoding as a [ByteArray]. ++ * ++ * @return [ByteArray] which length is half the string's length. ++ * ++ * @throw [IllegalAccessException] Will throw if it encounters illegal characters (i.e. not 0-9a-fA-F) or if the String ++ * has an odd length. ++ */ ++internal fun String.decodeAsHex(): ByteArray { ++ checkArgument(this.length % 2 == 0, "A valid hex string must have an even number of characters") ++ ++ return ByteArray(this.length / 2) { ++ this.substring(2 * it, 2 * it + 2).toInt(radix = 16).toByte() ++ } ++} ++ ++/** ++ * Encodes a byte array into a hexadecimal encoded String. ++ * ++ * @param uppercase If true uppercase letters are used (A..F), otherwise lowercase letters are used (a..f). ++ * ++ * @return [String] which length the twice the [ByteArray]'s length. ++ */ ++internal fun ByteArray.encodeAsHex(uppercase: Boolean = true): String { ++ val sb = java.lang.StringBuilder(size * 2) ++ val formatString = if (uppercase) "%02X" else "%02x" ++ ++ for (b in this) { ++ sb.append(String.format(formatString, b)) ++ } ++ ++ return sb.toString() ++} ++ ++/** ++ * Overwrites the bytes of a byte buffer with random bytes. The method asserts that the buffer is a direct buffer as a ++ * precondition. ++ * ++ * @param random The random generator to use for overwriting. Default's to Java's standard [Random] implementation. ++ * However, you might want to use a [java.security.SecureRandom] source for more adverse threat models. ++ * ++ * @throws [IllegalStateException] if the buffer [ByteBuffer.isDirect] is false. ++ */ ++internal fun ByteBuffer.wipeDirectBuffer(random: Random = Random()) { ++ if (!this.isDirect) throw IllegalStateException("Only direct-allocated byte buffers can be meaningfully wiped") ++ ++ val arr = ByteArray(this.capacity()) ++ this.rewind() ++ ++ // overwrite bytes (actually overwrites the memory since it is a direct buffer) ++ random.nextBytes(arr) ++ this.put(arr) ++} ++ ++/** If the assertion holds nothing happens. Otherwise, an IllegalArgumentException is thrown with the given message. */ ++internal fun checkArgument(assertion: Boolean, message: String) { ++ if (!assertion) throw IllegalArgumentException(message) ++} ++ ++/** ++ * Util class with helper methods for dealing with HEX encodings and [ByteBuffer] objects. ++ */ ++class Argon2KtUtils private constructor() { ++ ++ companion object { ++ ++ /** ++ * Decodes a [String] holding a hexadecimal encoding as a [ByteArray]. ++ * ++ * @param string The string holding the hexadecimal encoding. ++ * ++ * @return [ByteArray] which length is half the string's length. ++ * ++ * @throw [IllegalAccessException] Will throw if it encounters illegal characters (i.e. not 0-9a-fA-F) or if the String ++ * has an odd length. ++ */ ++ fun decodeAsHex(string: String): ByteArray = string.decodeAsHex() ++ ++ /** ++ * Encodes a byte array into a hexadecimal encoded String. ++ * ++ * @param byteArray The [ByteArray] to convert. ++ * @param uppercase If true uppercase letters are used (A..F), otherwise lowercase letters are used (a..f). ++ * ++ * @return [String] which length the twice the [ByteArray]'s length. ++ */ ++ fun ByteArray.encodeAsHex(byteArray: ByteArray, uppercase: Boolean = true) = ++ byteArray.encodeAsHex(uppercase) ++ ++ ++ /** ++ * Overwrites the bytes of a byte buffer with random bytes. The method asserts that the buffer is a direct buffer as a ++ * precondition. ++ * ++ * @param byteBuffer THe [ByteBuffer] to overwrite. Must be directly allocated. ++ * @param random The random generator to use for overwriting. Default's to Java's standard [Random] implementation. ++ * However, you might want to use a [java.security.SecureRandom] source for more adverse threat models. ++ * ++ * @throws [IllegalStateException] if the buffer [ByteBuffer.isDirect] is false. ++ */ ++ fun ByteBuffer.wipeDirectBuffer(byteBuffer: ByteBuffer, random: Random = Random()) = ++ byteBuffer.wipeDirectBuffer(random) ++ } ++} +diff --git a/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/ByteBufferTarget.kt b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/ByteBufferTarget.kt +new file mode 100644 +index 0000000..cc28a8b +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/ByteBufferTarget.kt +@@ -0,0 +1,66 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++package com.lambdapioneer.argon2kt ++ ++import androidx.annotation.Keep ++import java.nio.ByteBuffer ++ ++/** ++ * Returns a copy of the byte buffer's content as a ByteArray. ++ */ ++internal fun ByteBuffer.toByteArray(): ByteArray { ++ val arr = ByteArray(this.capacity()) ++ this.rewind() ++ this.get(arr) ++ return arr ++} ++ ++/** ++ * Class that allows setting a byte buffer to it. Used as a callback for JNI methods to return multiple outputs without ++ * having to deal with the complexity of instantiating classes in JNI. ++ */ ++@Keep ++internal class ByteBufferTarget { ++ ++ @Keep ++ private var byteBuffer: ByteBuffer? = null ++ ++ fun hasByteBufferSet() = byteBuffer != null ++ ++ /** ++ * This removes the given number of trailing bytes from the underlying byte buffer. It does so by allocating a new ++ * direct byte buffer, then copying over all but the last N items, and then wiping the previous byte buffer. ++ * ++ * @throws NullPointerException if there's no byte buffer set yet ++ * ++ * @return This object to allow chaining of operations. The ByteBufferTarget is not copied. ++ */ ++ fun dropLastN(dropLastN: Int = 0): ByteBufferTarget { ++ checkArgument(dropLastN >= 0, "dropLastN must not be negative") ++ ++ val oldByteBuffer = byteBuffer!! ++ val newLength = oldByteBuffer.capacity() - dropLastN ++ try { ++ byteBuffer = ByteBuffer.allocateDirect(newLength) ++ ++ // copying one-by-one to avoid byte array allocation on heap ++ oldByteBuffer.rewind() ++ repeat(newLength) { ++ byteBuffer!!.put(oldByteBuffer.get()) ++ } ++ } finally { ++ oldByteBuffer.wipeDirectBuffer() ++ } ++ ++ return this ++ } ++ ++ /** ++ * Returns the underlying byte buffer. Caller should check that a byte buffer exists as this method throws an NPE ++ * otherwise. ++ */ ++ fun getByteBuffer(): ByteBuffer = byteBuffer!! ++} +diff --git a/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/SoLoader.kt b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/SoLoader.kt +new file mode 100644 +index 0000000..db96f5d +--- /dev/null ++++ b/node_modules/react-native-argon2/android/src/main/java/com/lambdapioneer/argon2kt/SoLoader.kt +@@ -0,0 +1,14 @@ ++// Copyright (c) Daniel Hugenroth ++// ++// This source code is licensed under the MIT license found in the ++// LICENSE file in the root directory of this source tree. ++ ++package com.lambdapioneer.argon2kt ++ ++interface SoLoaderShim { ++ fun loadLibrary(libname: String) ++} ++ ++class SystemSoLoader : SoLoaderShim { ++ override fun loadLibrary(libname: String) = System.loadLibrary(libname) ++} diff --git a/patches/react-native-device-info+13.0.0.patch b/patches/react-native-device-info+13.0.0.patch deleted file mode 100644 index 9df0cef6..00000000 --- a/patches/react-native-device-info+13.0.0.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff --git a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.m b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.m -index b00b3d7..4b2f2d5 100644 ---- a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.m -+++ b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.m -@@ -579,44 +579,6 @@ - (double) getTotalMemory { - resolve(@(self.getTotalMemory)); - } - --- (double) getTotalDiskCapacity { -- uint64_t totalSpace = 0; -- NSDictionary *storage = [self getStorageDictionary]; -- -- if (storage) { -- NSNumber *fileSystemSizeInBytes = [storage objectForKey: NSFileSystemSize]; -- totalSpace = [fileSystemSizeInBytes unsignedLongLongValue]; -- } -- return (double) totalSpace; --} -- --RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getTotalDiskCapacitySync) { -- return @(self.getTotalDiskCapacity); --} -- --RCT_EXPORT_METHOD(getTotalDiskCapacity:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { -- resolve(@(self.getTotalDiskCapacity)); --} -- --- (double) getFreeDiskStorage { -- uint64_t freeSpace = 0; -- NSDictionary *storage = [self getStorageDictionary]; -- -- if (storage) { -- NSNumber *freeFileSystemSizeInBytes = [storage objectForKey: NSFileSystemFreeSize]; -- freeSpace = [freeFileSystemSizeInBytes unsignedLongLongValue]; -- } -- return (double) freeSpace; --} -- --RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getFreeDiskStorageSync) { -- return @(self.getFreeDiskStorage); --} -- --RCT_EXPORT_METHOD(getFreeDiskStorage:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { -- resolve(@(self.getFreeDiskStorage)); --} -- - - (NSString *) getDeviceTypeName { - return [DeviceTypeValues objectAtIndex: [self getDeviceType]]; - } -diff --git a/node_modules/react-native-device-info/lib/typescript/index.d.ts b/node_modules/react-native-device-info/lib/typescript/index.d.ts -index b015d62..6d64bc1 100644 ---- a/node_modules/react-native-device-info/lib/typescript/index.d.ts -+++ b/node_modules/react-native-device-info/lib/typescript/index.d.ts -@@ -58,12 +58,6 @@ export declare const getLastUpdateTime: import("./internal/privateTypes").Getter - export declare const getCarrier: import("./internal/privateTypes").Getter>, getCarrierSync: import("./internal/privateTypes").Getter; - export declare const getTotalMemory: import("./internal/privateTypes").Getter>, getTotalMemorySync: import("./internal/privateTypes").Getter; - export declare const getMaxMemory: import("./internal/privateTypes").Getter>, getMaxMemorySync: import("./internal/privateTypes").Getter; --export declare const getTotalDiskCapacity: import("./internal/privateTypes").Getter>, getTotalDiskCapacitySync: import("./internal/privateTypes").Getter; --export declare function getTotalDiskCapacityOld(): Promise; --export declare function getTotalDiskCapacityOldSync(): number; --export declare const getFreeDiskStorage: import("./internal/privateTypes").Getter>, getFreeDiskStorageSync: import("./internal/privateTypes").Getter; --export declare function getFreeDiskStorageOld(): Promise; --export declare function getFreeDiskStorageOldSync(): number; - export declare const getBatteryLevel: import("./internal/privateTypes").Getter>, getBatteryLevelSync: import("./internal/privateTypes").Getter; - export declare const getPowerState: import("./internal/privateTypes").Getter>>, getPowerStateSync: import("./internal/privateTypes").Getter>; - export declare const isBatteryCharging: import("./internal/privateTypes").Getter>, isBatteryChargingSync: import("./internal/privateTypes").Getter; diff --git a/patches/react-native-keychain+8.1.2.patch b/patches/react-native-keychain+8.1.2.patch new file mode 100644 index 00000000..44901190 --- /dev/null +++ b/patches/react-native-keychain+8.1.2.patch @@ -0,0 +1,15 @@ +diff --git a/node_modules/react-native-keychain/android/src/main/java/com/oblador/keychain/KeychainModule.java b/node_modules/react-native-keychain/android/src/main/java/com/oblador/keychain/KeychainModule.java +index 9413000..6f3e5ec 100644 +--- a/node_modules/react-native-keychain/android/src/main/java/com/oblador/keychain/KeychainModule.java ++++ b/node_modules/react-native-keychain/android/src/main/java/com/oblador/keychain/KeychainModule.java +@@ -140,7 +140,9 @@ public class KeychainModule extends ReactContextBaseJavaModule { + super(reactContext); + prefsStorage = new PrefsStorage(reactContext); + +- addCipherStorageToMap(new CipherStorageFacebookConceal(reactContext)); ++ // Disabled CipherStorageFacebookConceal for Android 16KB page size compatibility ++ // Conceal library is not 16KB-aligned. All Android 9+ devices use Keystore instead. ++ // addCipherStorageToMap(new CipherStorageFacebookConceal(reactContext)); + addCipherStorageToMap(new CipherStorageKeystoreAesCbc()); + + // we have a references to newer api that will fail load of app classes in old androids OS diff --git a/patches/react-native-reanimated+3.19.3.patch b/patches/react-native-reanimated+3.19.3.patch new file mode 100644 index 00000000..b673afa2 --- /dev/null +++ b/patches/react-native-reanimated+3.19.3.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/react-native-reanimated/src/hook/useAnimatedRef.ts b/node_modules/react-native-reanimated/src/hook/useAnimatedRef.ts +index 1913072..cb82514 100644 +--- a/node_modules/react-native-reanimated/src/hook/useAnimatedRef.ts ++++ b/node_modules/react-native-reanimated/src/hook/useAnimatedRef.ts +@@ -57,7 +57,7 @@ function useAnimatedRefBase( + tagOrWrapperRef.current = getWrapper(component); + + // We have to unwrap the tag from the shadow node wrapper. +- fun.getTag = () => findNodeHandle(getComponentOrScrollable(component)); ++ fun.getTag = () => findNodeHandle(component as any); + fun.current = component; + + if (observers.size) { +@@ -112,7 +112,7 @@ function useAnimatedRefNative< + ? getShadowNodeWrapperFromRef + : findNodeHandle; + +- tagOrWrapper.value = getTagOrWrapper(getComponentOrScrollable(component)); ++ tagOrWrapper.value = getTagOrWrapper(component as any); + + if (viewName) { + viewName.value = diff --git a/patches/react-native-screens+3.35.0.patch b/patches/react-native-screens+3.35.0.patch deleted file mode 100644 index a020b37e..00000000 --- a/patches/react-native-screens+3.35.0.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/react-native-screens/ios/RNSFullWindowOverlay.mm b/node_modules/react-native-screens/ios/RNSFullWindowOverlay.mm -index ca1278a..6fee130 100644 ---- a/node_modules/react-native-screens/ios/RNSFullWindowOverlay.mm -+++ b/node_modules/react-native-screens/ios/RNSFullWindowOverlay.mm -@@ -18,7 +18,7 @@ @implementation RNSFullWindowOverlayContainer - - (instancetype)initWithFrame:(CGRect)frame - { - if (self = [super initWithFrame:frame]) { -- self.accessibilityViewIsModal = YES; -+ self.accessibilityViewIsModal = NO; - } - return self; - } diff --git a/patches/react-native-svg+15.8.0.patch b/patches/react-native-svg+15.8.0.patch deleted file mode 100644 index 577db864..00000000 --- a/patches/react-native-svg+15.8.0.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/node_modules/react-native-svg/lib/typescript/xml.d.ts b/node_modules/react-native-svg/lib/typescript/xml.d.ts -index 2044ee4..a7fd0ba 100644 ---- a/node_modules/react-native-svg/lib/typescript/xml.d.ts -+++ b/node_modules/react-native-svg/lib/typescript/xml.d.ts -@@ -26,7 +26,7 @@ export interface JsxAST extends AST { - export type AdditionalProps = { - onError?: (error: Error) => void; - override?: object; -- onLoad?: () => void; -+ onLoad?: (xml: string) => void; - fallback?: JSX.Element; - }; - export type UriProps = SvgProps & { -diff --git a/node_modules/react-native-svg/src/utils/fetchData.ts b/node_modules/react-native-svg/src/utils/fetchData.ts -index d141be3..f81b767 100644 ---- a/node_modules/react-native-svg/src/utils/fetchData.ts -+++ b/node_modules/react-native-svg/src/utils/fetchData.ts -@@ -34,8 +34,9 @@ function dataUriToXml(uri: string): string | null { - - async function fetchUriData(uri: string) { - const response = await fetch(uri); -- if (response.ok || (response.status === 0 && uri.startsWith('file://'))) { -- return await response.text(); -+ if ((response.ok && response.headers.get('content-type') === 'image/svg+xml') || (response.status === 0 && uri.startsWith('file://'))) { -+ const result = await response.text(); -+ return result?.replace(/&#.+?;/g, '') ?? null; - } - throw new Error(`Fetching ${uri} failed with status ${response.status}`); - } -diff --git a/node_modules/react-native-svg/src/xml.tsx b/node_modules/react-native-svg/src/xml.tsx -index 091d233..916e207 100644 ---- a/node_modules/react-native-svg/src/xml.tsx -+++ b/node_modules/react-native-svg/src/xml.tsx -@@ -35,7 +35,7 @@ export interface JsxAST extends AST { - export type AdditionalProps = { - onError?: (error: Error) => void; - override?: object; -- onLoad?: () => void; -+ onLoad?: (xml: string | null) => void; - fallback?: JSX.Element; - }; - -@@ -89,7 +89,7 @@ export function SvgUri(props: UriProps) { - .then((data) => { - setXml(data); - isError && setIsError(false); -- onLoad?.(); -+ onLoad?.(data); - }) - .catch((e) => { - onError(e); diff --git a/src/App.tsx b/src/App.tsx index f1e51717..3fa9178b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,7 +5,7 @@ import type { PropsWithChildren } from 'react'; import type React from 'react'; import { BottomSheetModalProvider } from '@gorhom/bottom-sheet'; -import { NavigationContainer } from '@react-navigation/native'; +import { NavigationContainer, createNavigationContainerRef } from '@react-navigation/native'; import { QueryClientProvider } from '@tanstack/react-query'; import { useEffect, useState } from 'react'; import { LogBox, Platform, StatusBar, StyleSheet, Text, type TextProps, UIManager } from 'react-native'; @@ -23,6 +23,8 @@ import { UnencryptedRealmProvider } from '@/unencrypted-realm/RealmContext'; import { runMigrations } from '@/utils/migrations'; +import { useAppState } from '@/utils/useAppState'; + import { ErrorBoundary } from './components/ErrorBoundary'; import { ExploreNavigator } from './components/ExploreNavigator'; import { GlobalStateProvider } from './components/GlobalState'; @@ -78,6 +80,10 @@ const onJSError = (error: unknown) => handleError(error, 'ERROR_CONTEXT_PLACEHOL const App = () => { const [migrationCompleted, setMigrationCompleted] = useState(false); + const navigationRef = createNavigationContainerRef(); + const [currentRouteName] = useState(undefined); + + const appState = useAppState(); useEffect(() => { const performMigrations = async () => { @@ -95,7 +101,7 @@ const App = () => { - + @@ -115,8 +121,8 @@ const App = () => { - - + + diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 94a314d8..3ba1cfa9 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -67,7 +67,10 @@ const NavigationStack = () => { const theme = useTheme(); const realm = useRealm(); const language = useLanguage(); - useAnimatedKeyboard({ isStatusBarTranslucentAndroid: true }); + useAnimatedKeyboard({ + isStatusBarTranslucentAndroid: true, + isNavigationBarTranslucentAndroid: true, + }); useCheckAndSetFontScale(); useRegisterRefreshManager(); useConnectionManager(); diff --git a/src/Routes.tsx b/src/Routes.tsx index 29907dd9..1ebdba72 100644 --- a/src/Routes.tsx +++ b/src/Routes.tsx @@ -227,6 +227,3 @@ declare global { /* eslint-enable */ export type NavigationProps = NativeStackScreenProps; - -export type NoParamsList = Pick; -export type NoParamsRoute = keyof NoParamsList; diff --git a/src/api/PushNotifications.ts b/src/api/PushNotifications.ts index b79f2bd1..2b6c2cdd 100644 --- a/src/api/PushNotifications.ts +++ b/src/api/PushNotifications.ts @@ -30,12 +30,16 @@ if (Platform.OS === 'android') { shouldShowAlert: true, shouldPlaySound: true, shouldSetBadge: false, + shouldShowBanner: true, + shouldShowList: true, }; } return { shouldShowAlert: false, shouldPlaySound: false, shouldSetBadge: false, + shouldShowBanner: false, + shouldShowList: false, }; }, }); @@ -45,6 +49,8 @@ if (Platform.OS === 'android') { shouldShowAlert: true, shouldPlaySound: true, shouldSetBadge: false, + shouldShowBanner: true, + shouldShowList: true, }), }); } @@ -99,7 +105,7 @@ export class PushNotifications { if (identifier.startsWith('local:')) { return; } - if (trigger.type === 'push' && trigger.remoteMessage?.notification) { + if (trigger && 'type' in trigger && trigger.type === 'push' && 'remoteMessage' in trigger && trigger.remoteMessage?.notification) { const content = pick(trigger.remoteMessage?.notification, [ 'body', 'title', diff --git a/src/components/AppsListItem/AppsListItem.tsx b/src/components/AppsListItem/AppsListItem.tsx index 423a3945..13ce6783 100644 --- a/src/components/AppsListItem/AppsListItem.tsx +++ b/src/components/AppsListItem/AppsListItem.tsx @@ -12,7 +12,7 @@ type Props = { name: string; network: WalletType | ''; onPress: () => void; - rightElement?: JSX.Element; + rightElement?: React.ReactElement; testID?: string; }; diff --git a/src/components/AssetRow/AssetRow.tsx b/src/components/AssetRow/AssetRow.tsx index 0539ae6f..cf6e925d 100644 --- a/src/components/AssetRow/AssetRow.tsx +++ b/src/components/AssetRow/AssetRow.tsx @@ -51,7 +51,7 @@ export type AssetRowProps = { style: StyleProp; selected: boolean; symbolUnderLabel: boolean; - tag: JSX.Element; + tag: React.ReactElement; testID: string; walletId: string; readonly?: boolean; diff --git a/src/components/BackButton/BackButton.stories.tsx b/src/components/BackButton/BackButton.stories.tsx index bc4b6a5b..f45403ca 100644 --- a/src/components/BackButton/BackButton.stories.tsx +++ b/src/components/BackButton/BackButton.stories.tsx @@ -6,9 +6,8 @@ import { Button } from '../Button'; import { BackButton } from './BackButton'; -import type { NativeStackNavigationHelpers } from '@react-navigation/native-stack/lib/typescript/src/types'; - import type { Meta, StoryObj } from '@storybook/react'; +import type { NativeStackNavigationHelpers } from 'react-native-screens/lib/typescript/native-stack/types'; const Stack = createNativeStackNavigator(); diff --git a/src/components/BottomSheet/BottomSheet.tsx b/src/components/BottomSheet/BottomSheet.tsx index 2cefc469..4afd783b 100644 --- a/src/components/BottomSheet/BottomSheet.tsx +++ b/src/components/BottomSheet/BottomSheet.tsx @@ -1,13 +1,13 @@ import type React from 'react'; + import type { StyleProp, ViewStyle } from 'react-native'; import type { WithSpringConfig } from 'react-native-reanimated'; import BottomSheetBase, { BottomSheetBackdrop, BottomSheetModal as BottomSheetBaseModal } from '@gorhom/bottom-sheet'; import { BlurView } from '@react-native-community/blur'; -import { HeaderHeightContext } from '@react-navigation/elements'; -import { forwardRef, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; -import { Platform, StyleSheet, View, useWindowDimensions } from 'react-native'; +import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { Platform, StyleSheet, View } from 'react-native'; import Animated, { useAnimatedStyle } from 'react-native-reanimated'; import { useSafeAreaFrame, useSafeAreaInsets } from 'react-native-safe-area-context'; @@ -81,8 +81,6 @@ function useBottomSheetProps, ) { const insets = useSafeAreaInsets(); - const { height } = useWindowDimensions(); - const headerHeight = useContext(HeaderHeightContext) ?? 0; const [currentIndex, setCurrentIndex] = useState(); const [, setShowNavTabs] = useGlobalState('showNavTabs'); const handleChange = useCallback( @@ -137,7 +135,6 @@ function useBottomSheetProps = props => { +export const Camera: FC = props => { const [cameraVisible, setCameraVisible] = useState(true); const navigation = useNavigation(); diff --git a/src/components/CloseButton/CloseButton.stories.tsx b/src/components/CloseButton/CloseButton.stories.tsx index 08282d77..2071c6cf 100644 --- a/src/components/CloseButton/CloseButton.stories.tsx +++ b/src/components/CloseButton/CloseButton.stories.tsx @@ -12,9 +12,8 @@ import { Button } from '../Button'; import { CloseButton } from './CloseButton'; -import type { NativeStackNavigationHelpers } from '@react-navigation/native-stack/lib/typescript/src/types'; - import type { Meta, StoryObj } from '@storybook/react'; +import type { NativeStackNavigationHelpers } from 'react-native-screens/lib/typescript/native-stack/types'; const Stack = createNativeStackNavigator(); diff --git a/src/components/ExploreNavigator/ExploreNavigator.tsx b/src/components/ExploreNavigator/ExploreNavigator.tsx index bdfdda57..244f4f04 100644 --- a/src/components/ExploreNavigator/ExploreNavigator.tsx +++ b/src/components/ExploreNavigator/ExploreNavigator.tsx @@ -12,7 +12,7 @@ import { Routes } from '@/Routes'; import type { NavigationState } from '@react-navigation/native'; -const getRouteFromState = (state: NavigationState): string => { +const getRouteFromState = (state: NavigationState | undefined): string => { const routes = state?.routes ?? []; return routes[routes.length - 1]?.name ?? ''; }; diff --git a/src/components/ExploreTabBar/ExploreTabBar.tsx b/src/components/ExploreTabBar/ExploreTabBar.tsx index ba861634..9240d475 100644 --- a/src/components/ExploreTabBar/ExploreTabBar.tsx +++ b/src/components/ExploreTabBar/ExploreTabBar.tsx @@ -19,7 +19,7 @@ const TabBarSizes = { width: 212, height: 64, radius: 70, - bottomOffset: 12, + bottomOffset: 22, }; const tabCount = 3; @@ -61,14 +61,21 @@ export const ExploreTabBar: FC = ({ } return ( - + {Platform.OS === 'ios' ? ( - + ) : ( - + )} - + + + {tabs.map((tab: TabData, index: number) => { const iconColor = activeTab === index ? 'light100' : 'light50'; @@ -91,6 +98,7 @@ const styles = StyleSheet.create({ width: TabBarSizes.width, height: TabBarSizes.height, zIndex: 1, + elevation: 100, bottom: TabBarSizes.bottomOffset, left: '50%', backgroundColor: 'transparent', diff --git a/src/components/Gradients/GradientMask.tsx b/src/components/Gradients/GradientMask.tsx index c53f0220..808a0923 100644 --- a/src/components/Gradients/GradientMask.tsx +++ b/src/components/Gradients/GradientMask.tsx @@ -15,16 +15,18 @@ export const GradientMask: React.FC = ({ element, style }) const onLayout = (e: LayoutChangeEvent) => setLayout(e.nativeEvent.layout); + const elementProps = element.props as { onLayout?: (e: LayoutChangeEvent) => void; style?: StyleProp }; + const elementToMeasure = React.cloneElement(element, { onLayout: (e: LayoutChangeEvent) => { - element.props?.onLayout?.(e); + elementProps?.onLayout?.(e); onLayout(e); }, - }); + } as Partial); return ( - + {elementToMeasure} diff --git a/src/components/IconWithCoinIcon/IconWithCoinIcon.tsx b/src/components/IconWithCoinIcon/IconWithCoinIcon.tsx index 58c9bfe8..3c49df83 100644 --- a/src/components/IconWithCoinIcon/IconWithCoinIcon.tsx +++ b/src/components/IconWithCoinIcon/IconWithCoinIcon.tsx @@ -23,7 +23,7 @@ export interface Props { coinType?: WalletType; maskShape?: typeof CIRCLE | typeof ROUNDED_SQUARE; maskPositionXYNudge?: number; - icon?: JSX.Element; + icon?: React.ReactElement; iconUri?: string; size?: number; style?: StyleProp; diff --git a/src/components/LongPress/LongPressContext.tsx b/src/components/LongPress/LongPressContext.tsx index cfb8b15b..d71a5c90 100644 --- a/src/components/LongPress/LongPressContext.tsx +++ b/src/components/LongPress/LongPressContext.tsx @@ -6,7 +6,7 @@ import type { AnimatedStyle } from 'react-native-reanimated'; import { noop } from 'lodash'; import { createContext, useContext, useMemo, useRef, useState } from 'react'; -import { Easing, runOnJS, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated'; +import { Easing, runOnJS, runOnUI, useAnimatedStyle, useSharedValue, withDelay, withTiming } from 'react-native-reanimated'; import { useGlobalState } from '@/components/GlobalState'; import type { LongPressOptionItemProps } from '@/components/LongPress/LongPressOptionItem'; @@ -23,8 +23,8 @@ interface LongPressProps { animatedStyle: AnimatedViewStyle; animatedOptionsStyle: AnimatedViewStyle; overlayStyle: AnimatedViewStyle; - styles: AnimatedViewStyle; - setStyles: (style: AnimatedViewStyle) => void; + styles: StyleProp; + setStyles: (style: StyleProp) => void; setOptions: (options: LongPressOptionItemProps[]) => void; options: LongPressOptionItemProps[]; } @@ -47,7 +47,7 @@ const TOP_DISTANCE_SMALL = 80; const TOP_DISTANCE_BIG = 200; const DURATION = 250; const ADDITIONAL_SCALE_DURATION = 100; -const INITIAL_OPACITY = 0.3; +const INITIAL_OPACITY = 0; const INITIAL_OPTIONS_SCALE = 0; const DELAY_OPACITY_OUT = 200; const MARGIN_X = 12 + 12; @@ -55,8 +55,9 @@ const END_SCALE = 1.02; export const LongPressProvider: React.FC = ({ children }) => { const [selectedItem, setSelectedItem] = useState(); - const [styles, setStyles] = useState({}); + const [styles, setStyles] = useState>({}); const [options, setOptions] = useState([]); + const [contentReady, setContentReady] = useState(false); const scale = useSharedValue(1); const translateY = useSharedValue(0); const translateX = useSharedValue(0); @@ -75,53 +76,84 @@ export const LongPressProvider: React.FC = ({ children }) => return TOP_DISTANCE_STANDARD; } }, [size]); - const pressOutCallback = useRef(); + const pressOutCallback = useRef(undefined); const [, setShowNavTabs] = useGlobalState('showNavTabs'); const onLongPress = (item: React.ReactNode, positionX: number, positionY: number, onPressOutCallback?: () => void) => { - top.value = positionY; - left.value = positionX; - if (onPressOutCallback) { pressOutCallback.current = onPressOutCallback; } - setSelectedItem(item); + top.value = positionY; + left.value = positionX; + + setContentReady(false); + setSelectedItem(true as any); + setShowNavTabs(false); - opacity.value = withTiming(1, { duration: DURATION }); + runOnUI(() => { + 'worklet'; - scale.value = withTiming(END_SCALE, { duration: DURATION + ADDITIONAL_SCALE_DURATION, easing: Easing.inOut(Easing.linear) }, () => { - translateY.value = withTiming(-(positionY - topDistance), { - duration: DURATION, - easing: Easing.inOut(Easing.cubic), + opacity.value = withTiming(1, { duration: DURATION }); + + scale.value = withTiming(END_SCALE, { + duration: DURATION + ADDITIONAL_SCALE_DURATION, + easing: Easing.inOut(Easing.linear), }); - optionsScale.value = withTiming(1, { duration: DURATION }); - if (positionX !== 0) { - translateX.value = withTiming(-positionX + MARGIN_X, { + + const translateDelay = 100; + + translateY.value = withDelay( + translateDelay, + withTiming(-(positionY - topDistance), { duration: DURATION, easing: Easing.inOut(Easing.cubic), - }); + }), + ); + + optionsScale.value = withDelay(translateDelay, withTiming(1, { duration: DURATION })); + + if (positionX !== 0) { + translateX.value = withDelay( + translateDelay, + withTiming(-positionX + MARGIN_X, { + duration: DURATION, + easing: Easing.inOut(Easing.cubic), + }), + ); } - }); + })(); - setShowNavTabs(false); + requestAnimationFrame(() => { + requestAnimationFrame(() => { + setSelectedItem(item); + setContentReady(true); + }); + }); }; const onPressOut = (skipAnimation?: boolean, callback?: PressOutCallback) => { setShowNavTabs(true); + setContentReady(false); if (pressOutCallback.current) { pressOutCallback.current(); pressOutCallback.current = undefined; } if (skipAnimation) { - opacity.value = withTiming(INITIAL_OPACITY, { duration: DURATION }, () => { + opacity.value = withTiming(INITIAL_OPACITY, { duration: DURATION }, finished => { + 'worklet'; + if (!finished) { + return; + } runOnJS(setSelectedItem)(null); scale.value = 1; translateX.value = 0; translateY.value = 0; optionsScale.value = INITIAL_OPTIONS_SCALE; - callback && runOnJS(callback)(); + if (callback) { + runOnJS(callback)(); + } }); return; @@ -133,9 +165,15 @@ export const LongPressProvider: React.FC = ({ children }) => duration: DURATION, easing: Easing.inOut(Easing.ease), }, - () => { + finished => { + 'worklet'; + if (!finished) { + return; + } runOnJS(setSelectedItem)(null); - callback && runOnJS(callback)(); + if (callback) { + runOnJS(callback)(); + } }, ); @@ -170,7 +208,7 @@ export const LongPressProvider: React.FC = ({ children }) => return ( { + if (Platform.OS === 'ios') { + return ; + } + return ; +}); + export const LongPressOverlay = () => { const { selectedItem, onPressOut, animatedStyle, options, overlayStyle, animatedOptionsStyle, styles: itemStyles } = useLongPress(); const { colors } = useTheme(); + useAndroidBackButton(() => { if (selectedItem) { onPressOut(); @@ -29,9 +37,9 @@ export const LongPressOverlay = () => { [onPressOut], ); - const handlePressOut = () => { + const handlePressOut = useCallback(() => { onPressOut(); - }; + }, [onPressOut]); const renderOptions = useCallback( () => ( @@ -44,27 +52,26 @@ export const LongPressOverlay = () => { [animatedOptionsStyle, onItemPress, options], ); - if (!selectedItem) { - return null; - } + const isActive = selectedItem !== null && selectedItem !== undefined; + const hasRealContent = isActive && typeof selectedItem !== 'boolean'; return ( - - {Platform.OS === 'ios' ? ( - - ) : ( - + + {isActive && ( + <> + + + + + + {hasRealContent ? {selectedItem} : } + + + {renderOptions()} + + + )} - - - - - {selectedItem} - - - {renderOptions()} - - ); }; @@ -81,6 +88,11 @@ const styles = StyleSheet.create({ padding: 12, margin: -12, }, + placeholder: { + width: 100, + height: 100, + borderRadius: 16, + }, options: { marginTop: 18, width: '80%', diff --git a/src/components/LongPress/LongPressable.tsx b/src/components/LongPress/LongPressable.tsx index c36768fb..fd9c042f 100644 --- a/src/components/LongPress/LongPressable.tsx +++ b/src/components/LongPress/LongPressable.tsx @@ -26,19 +26,26 @@ export const LongPressable = ({ children, style, withXPosition, options, onLongP const handleLongPress = useCallback(() => { if (elRef.current) { + hapticFeedback.impactHeavy(); + elRef.current.measure((_x, _y, _width, _height, pageX, pageY) => { - hapticFeedback.impactHeavy(); - setStyles(style ?? {}); - setOptions(options); onLongPress(children, withXPosition ? pageX : 0, pageY, onLongPressEnd); - onLongPressStart?.(); + + requestAnimationFrame(() => { + setStyles(style ?? {}); + setOptions(options); + onLongPressStart?.(); + }); }); } }, [children, onLongPress, onLongPressEnd, onLongPressStart, options, setOptions, setStyles, style, withXPosition]); const longPress = Gesture.LongPress() .minDuration(200) - .onStart(() => runOnJS(handleLongPress)()); + .onStart(() => { + 'worklet'; + runOnJS(handleLongPress)(); + }); return ( diff --git a/src/components/Menu/Menu.tsx b/src/components/Menu/Menu.tsx index bedbfa3b..f2ff3341 100644 --- a/src/components/Menu/Menu.tsx +++ b/src/components/Menu/Menu.tsx @@ -37,7 +37,7 @@ export function Menu({ ...props }: MenuComponentProps) { const menu = useMenu(); - const layout = useRef(); + const layout = useRef(undefined); const isCurrentMenuShown = useRef(false); const showMenu = ({ nativeEvent }: GestureResponderEvent) => { diff --git a/src/components/Menu/MenuOverlay.tsx b/src/components/Menu/MenuOverlay.tsx index 417341c2..2d32e313 100644 --- a/src/components/Menu/MenuOverlay.tsx +++ b/src/components/Menu/MenuOverlay.tsx @@ -161,12 +161,11 @@ export const MenuOverlay: React.FC> = ({ origin, menuWidth )} {props.type === 'context' && ( - <> + - - - - + + + )} diff --git a/src/components/ScrollerWithRefreshControl/hooks/useRefreshControlGesture.ts b/src/components/ScrollerWithRefreshControl/hooks/useRefreshControlGesture.ts index de0f39ec..47d62e48 100644 --- a/src/components/ScrollerWithRefreshControl/hooks/useRefreshControlGesture.ts +++ b/src/components/ScrollerWithRefreshControl/hooks/useRefreshControlGesture.ts @@ -48,6 +48,7 @@ export const useRefreshControlGesture = (onRefresh: () => void, onScrollEvent?: .minDistance(5) .failOffsetY(-1) .onChange(e => { + 'worklet'; const newValue = panValue.value + e.changeY; const progress = 1 / (newValue / stiffness); const interpolationFactor = Math.max(0, Math.min(progress, 1)); @@ -58,6 +59,7 @@ export const useRefreshControlGesture = (onRefresh: () => void, onScrollEvent?: } }) .onEnd(() => { + 'worklet'; panValue.value = withSpring(0, { overshootClamping: true }); hasTriggered.value = false; }), diff --git a/src/components/SeedDisplay/SeedDisplay.tsx b/src/components/SeedDisplay/SeedDisplay.tsx index 6e522dbe..10e80c1a 100644 --- a/src/components/SeedDisplay/SeedDisplay.tsx +++ b/src/components/SeedDisplay/SeedDisplay.tsx @@ -78,6 +78,7 @@ export const SeedDisplay = ({ {!isSeedVisible && ( { + 'worklet'; runOnJS(hapticFeedback.impactLight)(); runOnJS(onSeedReveal)(); })}> diff --git a/src/components/Sheets/ExpandableSheet.stories.tsx b/src/components/Sheets/ExpandableSheet.stories.tsx index 1101b03c..1262d43f 100644 --- a/src/components/Sheets/ExpandableSheet.stories.tsx +++ b/src/components/Sheets/ExpandableSheet.stories.tsx @@ -77,7 +77,7 @@ export const Modal: StoryObj = {