@novastera-oss/nitro-metamask 0.4.5 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NitroMetamask.podspec +1 -1
- package/README.md +16 -0
- package/android/CMakeLists.txt +3 -0
- package/android/build.gradle +14 -4
- package/android/cargo-ecies.gradle +54 -0
- package/android/gradle.properties +1 -1
- package/android/src/main/java/io/metamask/ecies/Ecies.kt +44 -0
- package/package.json +14 -5
- package/rust/ecies-jni/Cargo.lock +782 -0
- package/rust/ecies-jni/Cargo.toml +16 -0
- package/rust/ecies-jni/src/lib.rs +127 -0
- package/scripts/verify-16k-page-alignment.py +117 -0
- package/scripts/verify-16k-page-alignment.sh +5 -0
package/NitroMetamask.podspec
CHANGED
|
@@ -11,7 +11,7 @@ Pod::Spec.new do |s|
|
|
|
11
11
|
s.authors = package["author"]
|
|
12
12
|
|
|
13
13
|
s.platforms = { :ios => min_ios_version_supported, :visionos => 1.0 }
|
|
14
|
-
s.source = { :git => "https://github.com/
|
|
14
|
+
s.source = { :git => "https://github.com/novastera/nitro-metamask.git", :tag => "#{s.version}" }
|
|
15
15
|
|
|
16
16
|
s.source_files = [
|
|
17
17
|
# Implementation (Swift)
|
package/README.md
CHANGED
|
@@ -49,6 +49,22 @@ Add this inside your `MainActivity` `<activity>` tag:
|
|
|
49
49
|
- Ensure `android:launchMode="singleTask"` is set on your MainActivity (recommended for deep linking)
|
|
50
50
|
- This allows MetaMask to return to your app after the user approves the connection or signature
|
|
51
51
|
|
|
52
|
+
### Android 16 KB Compatibility
|
|
53
|
+
|
|
54
|
+
No extra Android configuration is required for consumers of this package.
|
|
55
|
+
|
|
56
|
+
- `@novastera-oss/nitro-metamask` excludes the legacy `io.metamask.ecies:ecies` native library from transitive dependencies.
|
|
57
|
+
- The package builds and ships its own `libecies.so` from `rust/ecies-jni` with linker flag `-Wl,-z,max-page-size=16384`.
|
|
58
|
+
- CI verifies 16 KB ELF LOAD alignment for release native libraries before publish.
|
|
59
|
+
|
|
60
|
+
For app developers, the expected upgrade path is:
|
|
61
|
+
|
|
62
|
+
1. Update to the new npm version.
|
|
63
|
+
2. Clean install + clean Android build.
|
|
64
|
+
3. Rebuild release AAB/APK.
|
|
65
|
+
|
|
66
|
+
No manual Gradle dependency override should be needed in the consuming app.
|
|
67
|
+
|
|
52
68
|
### iOS Configuration
|
|
53
69
|
|
|
54
70
|
**For Expo projects:** The package includes an Expo config plugin that automatically adds the required AppDelegate code. Just add the plugin to your `app.json` or `app.config.js`:
|
package/android/CMakeLists.txt
CHANGED
|
@@ -24,6 +24,9 @@ include_directories(
|
|
|
24
24
|
|
|
25
25
|
find_library(LOG_LIB log)
|
|
26
26
|
|
|
27
|
+
# 16 KB max page size (complements ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES in Gradle)
|
|
28
|
+
target_link_options(${PACKAGE_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
|
|
29
|
+
|
|
27
30
|
# Link all libraries together
|
|
28
31
|
target_link_libraries(
|
|
29
32
|
${PACKAGE_NAME}
|
package/android/build.gradle
CHANGED
|
@@ -117,6 +117,7 @@ android {
|
|
|
117
117
|
|
|
118
118
|
sourceSets {
|
|
119
119
|
main {
|
|
120
|
+
jniLibs.srcDirs += ["${buildDir}/intermediates/rust-ecies-jni"]
|
|
120
121
|
if (isNewArchitectureEnabled()) {
|
|
121
122
|
java.srcDirs += [
|
|
122
123
|
// React Codegen files
|
|
@@ -132,6 +133,12 @@ repositories {
|
|
|
132
133
|
google()
|
|
133
134
|
}
|
|
134
135
|
|
|
136
|
+
// Hard block old prebuilt ECIES .so from any transitive edge.
|
|
137
|
+
// NitroMetamask always provides libecies.so from rust/ecies-jni (16 KB page-size compatible).
|
|
138
|
+
configurations.configureEach {
|
|
139
|
+
exclude group: "io.metamask.ecies", module: "ecies"
|
|
140
|
+
}
|
|
141
|
+
|
|
135
142
|
|
|
136
143
|
dependencies {
|
|
137
144
|
// For < 0.71, this will be from the local maven repo
|
|
@@ -146,12 +153,15 @@ dependencies {
|
|
|
146
153
|
// Required for Promise.async with coroutines in Nitro modules
|
|
147
154
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2"
|
|
148
155
|
|
|
149
|
-
// MetaMask Android SDK
|
|
150
|
-
// See: https://github.com/MetaMask/metamask-android-sdk
|
|
151
|
-
|
|
152
|
-
|
|
156
|
+
// MetaMask Android SDK — exclude prebuilt io.metamask.ecies (4 KB ELF); we ship io.metamask.ecies.Ecies + libecies.so from rust/ecies-jni
|
|
157
|
+
// See: https://github.com/MetaMask/metamask-android-sdk/issues/157
|
|
158
|
+
implementation("io.metamask.androidsdk:metamask-android-sdk:0.6.6") {
|
|
159
|
+
exclude group: "io.metamask.ecies", module: "ecies"
|
|
160
|
+
}
|
|
153
161
|
}
|
|
154
162
|
|
|
163
|
+
apply from: "./cargo-ecies.gradle"
|
|
164
|
+
|
|
155
165
|
if (isNewArchitectureEnabled()) {
|
|
156
166
|
react {
|
|
157
167
|
jsRootDir = file("../src/")
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
def eciesRustDir = file("${projectDir}/../rust/ecies-jni")
|
|
2
|
+
def eciesCargoToml = file("${projectDir}/../rust/ecies-jni/Cargo.toml")
|
|
3
|
+
def eciesJniOut = file("${buildDir}/intermediates/rust-ecies-jni")
|
|
4
|
+
|
|
5
|
+
def reactNativeArchitectures() {
|
|
6
|
+
def value = rootProject.getProperties().get("reactNativeArchitectures")
|
|
7
|
+
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
tasks.register("cargoNdkBuildEcies", Exec) {
|
|
11
|
+
group = "build"
|
|
12
|
+
description = "Build libecies.so via Rust (cargo-ndk), 16 KB max page size"
|
|
13
|
+
onlyIf {
|
|
14
|
+
eciesRustDir.isDirectory() && eciesCargoToml.isFile()
|
|
15
|
+
}
|
|
16
|
+
workingDir eciesRustDir
|
|
17
|
+
standardOutput System.out
|
|
18
|
+
errorOutput System.err
|
|
19
|
+
outputs.dir(eciesJniOut)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Resolve NDK + ABIs at configuration time (afterEvaluate). Task actions must NOT touch
|
|
23
|
+
// Task.project — configuration cache forbids it (see Gradle 9 config cache requirements).
|
|
24
|
+
afterEvaluate {
|
|
25
|
+
def ndkProp = project.android.ndkDirectory
|
|
26
|
+
def ndkDir = (ndkProp instanceof File) ? ndkProp : ndkProp.get().asFile
|
|
27
|
+
def ndkPath = ndkDir.absolutePath
|
|
28
|
+
def ndkVer = project.android.ndkVersion
|
|
29
|
+
def abis = reactNativeArchitectures()
|
|
30
|
+
def outPath = eciesJniOut.absolutePath
|
|
31
|
+
|
|
32
|
+
tasks.named("cargoNdkBuildEcies", Exec).configure {
|
|
33
|
+
doFirst {
|
|
34
|
+
eciesJniOut.mkdirs()
|
|
35
|
+
if (!ndkDir.exists()) {
|
|
36
|
+
throw new GradleException("ANDROID NDK not found; ndkVersion is ${ndkVer}")
|
|
37
|
+
}
|
|
38
|
+
environment "ANDROID_NDK_HOME", ndkPath
|
|
39
|
+
environment "ANDROID_NDK_ROOT", ndkPath
|
|
40
|
+
environment "RUSTFLAGS", "-C link-arg=-Wl,-z,max-page-size=16384"
|
|
41
|
+
def args = ["cargo", "ndk"]
|
|
42
|
+
abis.each { abi ->
|
|
43
|
+
args.add("-t")
|
|
44
|
+
args.add(abi)
|
|
45
|
+
}
|
|
46
|
+
args.addAll(["-o", outPath, "build", "--release"])
|
|
47
|
+
commandLine args
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
tasks.matching { it.name.startsWith("preBuild") }.configureEach {
|
|
52
|
+
dependsOn("cargoNdkBuildEcies")
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
package io.metamask.ecies
|
|
2
|
+
|
|
3
|
+
import android.util.Log
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* ECIES helpers used by [io.metamask.androidsdk.Crypto].
|
|
7
|
+
* Source: MetaMask metamask-android-sdk `ecies` module (API-compatible).
|
|
8
|
+
* Native [libecies.so] is built from [rust/ecies-jni] (16 KB page–aligned) instead of Maven `io.metamask.ecies:ecies`.
|
|
9
|
+
*/
|
|
10
|
+
public class Ecies {
|
|
11
|
+
companion object {
|
|
12
|
+
const val TAG = "ECIES"
|
|
13
|
+
|
|
14
|
+
init {
|
|
15
|
+
try {
|
|
16
|
+
System.loadLibrary("ecies")
|
|
17
|
+
Log.d(TAG, "Ecies loaded successfully!")
|
|
18
|
+
} catch (e: UnsatisfiedLinkError) {
|
|
19
|
+
Log.d(TAG, "Ecies could not be loaded: ${e.message}")
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@JvmStatic external fun generateSecretKey(): String
|
|
24
|
+
@JvmStatic external fun derivePublicKeyFrom(secret: String): String
|
|
25
|
+
@JvmStatic external fun encryptMessage(public: String, message: String): String
|
|
26
|
+
@JvmStatic external fun decryptMessage(secret: String, message: String): String
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public fun privateKey(): String {
|
|
30
|
+
return generateSecretKey()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public fun publicKeyFrom(secretKey: String): String {
|
|
34
|
+
return derivePublicKeyFrom(secretKey)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public fun encrypt(publicKey: String, message: String): String {
|
|
38
|
+
return encryptMessage(publicKey, message)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public fun decrypt(secretKey: String, message: String): String {
|
|
42
|
+
return decryptMessage(secretKey, message)
|
|
43
|
+
}
|
|
44
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@novastera-oss/nitro-metamask",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.6",
|
|
4
4
|
"description": "Native mobile MetaMask wallet integration for React Native. Part of Novastera CRM/ERP platform ecosystem. Provides secure authentication and message signing for Web3 mobile applications.",
|
|
5
5
|
"main": "./lib/commonjs/index.js",
|
|
6
6
|
"module": "./lib/module/index.js",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"cpp",
|
|
42
42
|
"nitro.json",
|
|
43
43
|
"android/build.gradle",
|
|
44
|
+
"android/cargo-ecies.gradle",
|
|
44
45
|
"android/fix-prefab.gradle",
|
|
45
46
|
"android/gradle.properties",
|
|
46
47
|
"android/CMakeLists.txt",
|
|
@@ -53,16 +54,24 @@
|
|
|
53
54
|
"ios/**/*.swift",
|
|
54
55
|
"app.plugin.js",
|
|
55
56
|
"*.podspec",
|
|
56
|
-
"README.md"
|
|
57
|
+
"README.md",
|
|
58
|
+
"rust/ecies-jni/Cargo.toml",
|
|
59
|
+
"rust/ecies-jni/src",
|
|
60
|
+
"rust/ecies-jni/Cargo.lock",
|
|
61
|
+
"scripts/verify-16k-page-alignment.sh",
|
|
62
|
+
"scripts/verify-16k-page-alignment.py"
|
|
57
63
|
],
|
|
58
64
|
"workspaces": [
|
|
59
65
|
"example"
|
|
60
66
|
],
|
|
61
|
-
"repository":
|
|
67
|
+
"repository": {
|
|
68
|
+
"type": "git",
|
|
69
|
+
"url": "https://github.com/novastera/nitro-metamask.git"
|
|
70
|
+
},
|
|
62
71
|
"author": "DarkSorrow",
|
|
63
72
|
"license": "MIT",
|
|
64
|
-
"bugs": "https://github.com/
|
|
65
|
-
"homepage": "https://github.com/
|
|
73
|
+
"bugs": "https://github.com/novastera/nitro-metamask/issues",
|
|
74
|
+
"homepage": "https://github.com/novastera/nitro-metamask#readme",
|
|
66
75
|
"publishConfig": {
|
|
67
76
|
"access": "public",
|
|
68
77
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -0,0 +1,782 @@
|
|
|
1
|
+
# This file is automatically @generated by Cargo.
|
|
2
|
+
# It is not intended for manual editing.
|
|
3
|
+
version = 4
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "aead"
|
|
7
|
+
version = "0.5.2"
|
|
8
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
+
checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"crypto-common",
|
|
12
|
+
"generic-array",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
[[package]]
|
|
16
|
+
name = "aes"
|
|
17
|
+
version = "0.8.4"
|
|
18
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
19
|
+
checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
|
|
20
|
+
dependencies = [
|
|
21
|
+
"cfg-if",
|
|
22
|
+
"cipher",
|
|
23
|
+
"cpufeatures",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
[[package]]
|
|
27
|
+
name = "aes-gcm"
|
|
28
|
+
version = "0.10.3"
|
|
29
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
30
|
+
checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1"
|
|
31
|
+
dependencies = [
|
|
32
|
+
"aead",
|
|
33
|
+
"aes",
|
|
34
|
+
"cipher",
|
|
35
|
+
"ctr",
|
|
36
|
+
"ghash",
|
|
37
|
+
"subtle",
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
[[package]]
|
|
41
|
+
name = "arrayref"
|
|
42
|
+
version = "0.3.9"
|
|
43
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
44
|
+
checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
|
|
45
|
+
|
|
46
|
+
[[package]]
|
|
47
|
+
name = "autocfg"
|
|
48
|
+
version = "1.5.0"
|
|
49
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
50
|
+
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
|
51
|
+
|
|
52
|
+
[[package]]
|
|
53
|
+
name = "base64"
|
|
54
|
+
version = "0.22.1"
|
|
55
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
56
|
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
|
57
|
+
|
|
58
|
+
[[package]]
|
|
59
|
+
name = "bitflags"
|
|
60
|
+
version = "2.11.1"
|
|
61
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
62
|
+
checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
|
|
63
|
+
|
|
64
|
+
[[package]]
|
|
65
|
+
name = "block-buffer"
|
|
66
|
+
version = "0.10.4"
|
|
67
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
68
|
+
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
|
69
|
+
dependencies = [
|
|
70
|
+
"generic-array",
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
[[package]]
|
|
74
|
+
name = "bumpalo"
|
|
75
|
+
version = "3.20.2"
|
|
76
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
77
|
+
checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
|
|
78
|
+
|
|
79
|
+
[[package]]
|
|
80
|
+
name = "bytes"
|
|
81
|
+
version = "1.11.1"
|
|
82
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
83
|
+
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
|
|
84
|
+
|
|
85
|
+
[[package]]
|
|
86
|
+
name = "cesu8"
|
|
87
|
+
version = "1.1.0"
|
|
88
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
89
|
+
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
|
|
90
|
+
|
|
91
|
+
[[package]]
|
|
92
|
+
name = "cfg-if"
|
|
93
|
+
version = "1.0.4"
|
|
94
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
95
|
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
|
96
|
+
|
|
97
|
+
[[package]]
|
|
98
|
+
name = "cipher"
|
|
99
|
+
version = "0.4.4"
|
|
100
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
101
|
+
checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
|
|
102
|
+
dependencies = [
|
|
103
|
+
"crypto-common",
|
|
104
|
+
"inout",
|
|
105
|
+
]
|
|
106
|
+
|
|
107
|
+
[[package]]
|
|
108
|
+
name = "combine"
|
|
109
|
+
version = "4.6.7"
|
|
110
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
111
|
+
checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
|
|
112
|
+
dependencies = [
|
|
113
|
+
"bytes",
|
|
114
|
+
"memchr",
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
[[package]]
|
|
118
|
+
name = "cpufeatures"
|
|
119
|
+
version = "0.2.17"
|
|
120
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
121
|
+
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
|
|
122
|
+
dependencies = [
|
|
123
|
+
"libc",
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
[[package]]
|
|
127
|
+
name = "critical-section"
|
|
128
|
+
version = "1.2.0"
|
|
129
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
130
|
+
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
|
|
131
|
+
|
|
132
|
+
[[package]]
|
|
133
|
+
name = "crunchy"
|
|
134
|
+
version = "0.2.4"
|
|
135
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
136
|
+
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
|
|
137
|
+
|
|
138
|
+
[[package]]
|
|
139
|
+
name = "crypto-common"
|
|
140
|
+
version = "0.1.7"
|
|
141
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
142
|
+
checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
|
|
143
|
+
dependencies = [
|
|
144
|
+
"generic-array",
|
|
145
|
+
"typenum",
|
|
146
|
+
]
|
|
147
|
+
|
|
148
|
+
[[package]]
|
|
149
|
+
name = "ctr"
|
|
150
|
+
version = "0.9.2"
|
|
151
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
152
|
+
checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
|
|
153
|
+
dependencies = [
|
|
154
|
+
"cipher",
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
[[package]]
|
|
158
|
+
name = "digest"
|
|
159
|
+
version = "0.9.0"
|
|
160
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
161
|
+
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
|
162
|
+
dependencies = [
|
|
163
|
+
"generic-array",
|
|
164
|
+
]
|
|
165
|
+
|
|
166
|
+
[[package]]
|
|
167
|
+
name = "digest"
|
|
168
|
+
version = "0.10.7"
|
|
169
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
170
|
+
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
|
|
171
|
+
dependencies = [
|
|
172
|
+
"block-buffer",
|
|
173
|
+
"crypto-common",
|
|
174
|
+
"subtle",
|
|
175
|
+
]
|
|
176
|
+
|
|
177
|
+
[[package]]
|
|
178
|
+
name = "ecies"
|
|
179
|
+
version = "0.2.10"
|
|
180
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
181
|
+
checksum = "0cd378cd438dcec2698ce6fd6cdbb323c671552d8be5af853690dc8320bc676d"
|
|
182
|
+
dependencies = [
|
|
183
|
+
"aes-gcm",
|
|
184
|
+
"getrandom",
|
|
185
|
+
"hkdf",
|
|
186
|
+
"libsecp256k1",
|
|
187
|
+
"lock_api",
|
|
188
|
+
"once_cell",
|
|
189
|
+
"parking_lot",
|
|
190
|
+
"rand_core",
|
|
191
|
+
"sha2",
|
|
192
|
+
"typenum",
|
|
193
|
+
"wasm-bindgen",
|
|
194
|
+
]
|
|
195
|
+
|
|
196
|
+
[[package]]
|
|
197
|
+
name = "ecies-jni"
|
|
198
|
+
version = "0.1.0"
|
|
199
|
+
dependencies = [
|
|
200
|
+
"ecies",
|
|
201
|
+
"hex",
|
|
202
|
+
"jni",
|
|
203
|
+
]
|
|
204
|
+
|
|
205
|
+
[[package]]
|
|
206
|
+
name = "generic-array"
|
|
207
|
+
version = "0.14.7"
|
|
208
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
209
|
+
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
|
210
|
+
dependencies = [
|
|
211
|
+
"typenum",
|
|
212
|
+
"version_check",
|
|
213
|
+
]
|
|
214
|
+
|
|
215
|
+
[[package]]
|
|
216
|
+
name = "getrandom"
|
|
217
|
+
version = "0.2.17"
|
|
218
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
219
|
+
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
|
220
|
+
dependencies = [
|
|
221
|
+
"cfg-if",
|
|
222
|
+
"js-sys",
|
|
223
|
+
"libc",
|
|
224
|
+
"wasi",
|
|
225
|
+
"wasm-bindgen",
|
|
226
|
+
]
|
|
227
|
+
|
|
228
|
+
[[package]]
|
|
229
|
+
name = "ghash"
|
|
230
|
+
version = "0.5.1"
|
|
231
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
232
|
+
checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1"
|
|
233
|
+
dependencies = [
|
|
234
|
+
"opaque-debug",
|
|
235
|
+
"polyval",
|
|
236
|
+
]
|
|
237
|
+
|
|
238
|
+
[[package]]
|
|
239
|
+
name = "hex"
|
|
240
|
+
version = "0.4.3"
|
|
241
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
242
|
+
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
|
243
|
+
|
|
244
|
+
[[package]]
|
|
245
|
+
name = "hkdf"
|
|
246
|
+
version = "0.12.4"
|
|
247
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
248
|
+
checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
|
|
249
|
+
dependencies = [
|
|
250
|
+
"hmac",
|
|
251
|
+
]
|
|
252
|
+
|
|
253
|
+
[[package]]
|
|
254
|
+
name = "hmac"
|
|
255
|
+
version = "0.12.1"
|
|
256
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
257
|
+
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
|
|
258
|
+
dependencies = [
|
|
259
|
+
"digest 0.10.7",
|
|
260
|
+
]
|
|
261
|
+
|
|
262
|
+
[[package]]
|
|
263
|
+
name = "inout"
|
|
264
|
+
version = "0.1.4"
|
|
265
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
266
|
+
checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
|
|
267
|
+
dependencies = [
|
|
268
|
+
"generic-array",
|
|
269
|
+
]
|
|
270
|
+
|
|
271
|
+
[[package]]
|
|
272
|
+
name = "jni"
|
|
273
|
+
version = "0.21.1"
|
|
274
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
275
|
+
checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
|
|
276
|
+
dependencies = [
|
|
277
|
+
"cesu8",
|
|
278
|
+
"cfg-if",
|
|
279
|
+
"combine",
|
|
280
|
+
"jni-sys 0.3.1",
|
|
281
|
+
"log",
|
|
282
|
+
"thiserror",
|
|
283
|
+
"walkdir",
|
|
284
|
+
"windows-sys 0.45.0",
|
|
285
|
+
]
|
|
286
|
+
|
|
287
|
+
[[package]]
|
|
288
|
+
name = "jni-sys"
|
|
289
|
+
version = "0.3.1"
|
|
290
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
291
|
+
checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
|
|
292
|
+
dependencies = [
|
|
293
|
+
"jni-sys 0.4.1",
|
|
294
|
+
]
|
|
295
|
+
|
|
296
|
+
[[package]]
|
|
297
|
+
name = "jni-sys"
|
|
298
|
+
version = "0.4.1"
|
|
299
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
300
|
+
checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
|
|
301
|
+
dependencies = [
|
|
302
|
+
"jni-sys-macros",
|
|
303
|
+
]
|
|
304
|
+
|
|
305
|
+
[[package]]
|
|
306
|
+
name = "jni-sys-macros"
|
|
307
|
+
version = "0.4.1"
|
|
308
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
309
|
+
checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
|
|
310
|
+
dependencies = [
|
|
311
|
+
"quote",
|
|
312
|
+
"syn",
|
|
313
|
+
]
|
|
314
|
+
|
|
315
|
+
[[package]]
|
|
316
|
+
name = "js-sys"
|
|
317
|
+
version = "0.3.95"
|
|
318
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
319
|
+
checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
|
|
320
|
+
dependencies = [
|
|
321
|
+
"once_cell",
|
|
322
|
+
"wasm-bindgen",
|
|
323
|
+
]
|
|
324
|
+
|
|
325
|
+
[[package]]
|
|
326
|
+
name = "libc"
|
|
327
|
+
version = "0.2.185"
|
|
328
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
329
|
+
checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
|
|
330
|
+
|
|
331
|
+
[[package]]
|
|
332
|
+
name = "libsecp256k1"
|
|
333
|
+
version = "0.7.2"
|
|
334
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
335
|
+
checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139"
|
|
336
|
+
dependencies = [
|
|
337
|
+
"arrayref",
|
|
338
|
+
"base64",
|
|
339
|
+
"digest 0.9.0",
|
|
340
|
+
"libsecp256k1-core",
|
|
341
|
+
"libsecp256k1-gen-ecmult",
|
|
342
|
+
"libsecp256k1-gen-genmult",
|
|
343
|
+
"rand",
|
|
344
|
+
"serde",
|
|
345
|
+
]
|
|
346
|
+
|
|
347
|
+
[[package]]
|
|
348
|
+
name = "libsecp256k1-core"
|
|
349
|
+
version = "0.3.0"
|
|
350
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
351
|
+
checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451"
|
|
352
|
+
dependencies = [
|
|
353
|
+
"crunchy",
|
|
354
|
+
"digest 0.9.0",
|
|
355
|
+
"subtle",
|
|
356
|
+
]
|
|
357
|
+
|
|
358
|
+
[[package]]
|
|
359
|
+
name = "libsecp256k1-gen-ecmult"
|
|
360
|
+
version = "0.3.0"
|
|
361
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
362
|
+
checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809"
|
|
363
|
+
dependencies = [
|
|
364
|
+
"libsecp256k1-core",
|
|
365
|
+
]
|
|
366
|
+
|
|
367
|
+
[[package]]
|
|
368
|
+
name = "libsecp256k1-gen-genmult"
|
|
369
|
+
version = "0.3.0"
|
|
370
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
371
|
+
checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c"
|
|
372
|
+
dependencies = [
|
|
373
|
+
"libsecp256k1-core",
|
|
374
|
+
]
|
|
375
|
+
|
|
376
|
+
[[package]]
|
|
377
|
+
name = "lock_api"
|
|
378
|
+
version = "0.4.13"
|
|
379
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
380
|
+
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
|
|
381
|
+
dependencies = [
|
|
382
|
+
"autocfg",
|
|
383
|
+
"scopeguard",
|
|
384
|
+
]
|
|
385
|
+
|
|
386
|
+
[[package]]
|
|
387
|
+
name = "log"
|
|
388
|
+
version = "0.4.29"
|
|
389
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
390
|
+
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
|
391
|
+
|
|
392
|
+
[[package]]
|
|
393
|
+
name = "memchr"
|
|
394
|
+
version = "2.8.0"
|
|
395
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
396
|
+
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
|
|
397
|
+
|
|
398
|
+
[[package]]
|
|
399
|
+
name = "once_cell"
|
|
400
|
+
version = "1.21.4"
|
|
401
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
402
|
+
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
403
|
+
dependencies = [
|
|
404
|
+
"critical-section",
|
|
405
|
+
"portable-atomic",
|
|
406
|
+
]
|
|
407
|
+
|
|
408
|
+
[[package]]
|
|
409
|
+
name = "opaque-debug"
|
|
410
|
+
version = "0.3.1"
|
|
411
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
412
|
+
checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
|
|
413
|
+
|
|
414
|
+
[[package]]
|
|
415
|
+
name = "parking_lot"
|
|
416
|
+
version = "0.12.4"
|
|
417
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
418
|
+
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
|
|
419
|
+
dependencies = [
|
|
420
|
+
"lock_api",
|
|
421
|
+
"parking_lot_core",
|
|
422
|
+
]
|
|
423
|
+
|
|
424
|
+
[[package]]
|
|
425
|
+
name = "parking_lot_core"
|
|
426
|
+
version = "0.9.12"
|
|
427
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
428
|
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
|
|
429
|
+
dependencies = [
|
|
430
|
+
"cfg-if",
|
|
431
|
+
"libc",
|
|
432
|
+
"redox_syscall",
|
|
433
|
+
"smallvec",
|
|
434
|
+
"windows-link",
|
|
435
|
+
]
|
|
436
|
+
|
|
437
|
+
[[package]]
|
|
438
|
+
name = "polyval"
|
|
439
|
+
version = "0.6.2"
|
|
440
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
441
|
+
checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25"
|
|
442
|
+
dependencies = [
|
|
443
|
+
"cfg-if",
|
|
444
|
+
"cpufeatures",
|
|
445
|
+
"opaque-debug",
|
|
446
|
+
"universal-hash",
|
|
447
|
+
]
|
|
448
|
+
|
|
449
|
+
[[package]]
|
|
450
|
+
name = "portable-atomic"
|
|
451
|
+
version = "1.13.1"
|
|
452
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
453
|
+
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
|
|
454
|
+
|
|
455
|
+
[[package]]
|
|
456
|
+
name = "proc-macro2"
|
|
457
|
+
version = "1.0.106"
|
|
458
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
459
|
+
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
|
460
|
+
dependencies = [
|
|
461
|
+
"unicode-ident",
|
|
462
|
+
]
|
|
463
|
+
|
|
464
|
+
[[package]]
|
|
465
|
+
name = "quote"
|
|
466
|
+
version = "1.0.45"
|
|
467
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
468
|
+
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
|
469
|
+
dependencies = [
|
|
470
|
+
"proc-macro2",
|
|
471
|
+
]
|
|
472
|
+
|
|
473
|
+
[[package]]
|
|
474
|
+
name = "rand"
|
|
475
|
+
version = "0.8.6"
|
|
476
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
477
|
+
checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
|
|
478
|
+
dependencies = [
|
|
479
|
+
"rand_core",
|
|
480
|
+
]
|
|
481
|
+
|
|
482
|
+
[[package]]
|
|
483
|
+
name = "rand_core"
|
|
484
|
+
version = "0.6.4"
|
|
485
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
486
|
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
|
487
|
+
dependencies = [
|
|
488
|
+
"getrandom",
|
|
489
|
+
]
|
|
490
|
+
|
|
491
|
+
[[package]]
|
|
492
|
+
name = "redox_syscall"
|
|
493
|
+
version = "0.5.18"
|
|
494
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
495
|
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
|
|
496
|
+
dependencies = [
|
|
497
|
+
"bitflags",
|
|
498
|
+
]
|
|
499
|
+
|
|
500
|
+
[[package]]
|
|
501
|
+
name = "rustversion"
|
|
502
|
+
version = "1.0.22"
|
|
503
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
504
|
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
|
505
|
+
|
|
506
|
+
[[package]]
|
|
507
|
+
name = "same-file"
|
|
508
|
+
version = "1.0.6"
|
|
509
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
510
|
+
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
|
|
511
|
+
dependencies = [
|
|
512
|
+
"winapi-util",
|
|
513
|
+
]
|
|
514
|
+
|
|
515
|
+
[[package]]
|
|
516
|
+
name = "scopeguard"
|
|
517
|
+
version = "1.2.0"
|
|
518
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
519
|
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
|
520
|
+
|
|
521
|
+
[[package]]
|
|
522
|
+
name = "serde"
|
|
523
|
+
version = "1.0.228"
|
|
524
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
525
|
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
|
526
|
+
dependencies = [
|
|
527
|
+
"serde_core",
|
|
528
|
+
"serde_derive",
|
|
529
|
+
]
|
|
530
|
+
|
|
531
|
+
[[package]]
|
|
532
|
+
name = "serde_core"
|
|
533
|
+
version = "1.0.228"
|
|
534
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
535
|
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
|
536
|
+
dependencies = [
|
|
537
|
+
"serde_derive",
|
|
538
|
+
]
|
|
539
|
+
|
|
540
|
+
[[package]]
|
|
541
|
+
name = "serde_derive"
|
|
542
|
+
version = "1.0.228"
|
|
543
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
544
|
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
|
545
|
+
dependencies = [
|
|
546
|
+
"proc-macro2",
|
|
547
|
+
"quote",
|
|
548
|
+
"syn",
|
|
549
|
+
]
|
|
550
|
+
|
|
551
|
+
[[package]]
|
|
552
|
+
name = "sha2"
|
|
553
|
+
version = "0.10.9"
|
|
554
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
555
|
+
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
|
|
556
|
+
dependencies = [
|
|
557
|
+
"cfg-if",
|
|
558
|
+
"cpufeatures",
|
|
559
|
+
"digest 0.10.7",
|
|
560
|
+
]
|
|
561
|
+
|
|
562
|
+
[[package]]
|
|
563
|
+
name = "smallvec"
|
|
564
|
+
version = "1.15.1"
|
|
565
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
566
|
+
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
|
567
|
+
|
|
568
|
+
[[package]]
|
|
569
|
+
name = "subtle"
|
|
570
|
+
version = "2.6.1"
|
|
571
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
572
|
+
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
|
573
|
+
|
|
574
|
+
[[package]]
|
|
575
|
+
name = "syn"
|
|
576
|
+
version = "2.0.117"
|
|
577
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
578
|
+
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
|
579
|
+
dependencies = [
|
|
580
|
+
"proc-macro2",
|
|
581
|
+
"quote",
|
|
582
|
+
"unicode-ident",
|
|
583
|
+
]
|
|
584
|
+
|
|
585
|
+
[[package]]
|
|
586
|
+
name = "thiserror"
|
|
587
|
+
version = "1.0.69"
|
|
588
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
589
|
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
|
590
|
+
dependencies = [
|
|
591
|
+
"thiserror-impl",
|
|
592
|
+
]
|
|
593
|
+
|
|
594
|
+
[[package]]
|
|
595
|
+
name = "thiserror-impl"
|
|
596
|
+
version = "1.0.69"
|
|
597
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
598
|
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
|
599
|
+
dependencies = [
|
|
600
|
+
"proc-macro2",
|
|
601
|
+
"quote",
|
|
602
|
+
"syn",
|
|
603
|
+
]
|
|
604
|
+
|
|
605
|
+
[[package]]
|
|
606
|
+
name = "typenum"
|
|
607
|
+
version = "1.19.0"
|
|
608
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
609
|
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
|
|
610
|
+
|
|
611
|
+
[[package]]
|
|
612
|
+
name = "unicode-ident"
|
|
613
|
+
version = "1.0.24"
|
|
614
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
615
|
+
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
|
616
|
+
|
|
617
|
+
[[package]]
|
|
618
|
+
name = "universal-hash"
|
|
619
|
+
version = "0.5.1"
|
|
620
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
621
|
+
checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
|
|
622
|
+
dependencies = [
|
|
623
|
+
"crypto-common",
|
|
624
|
+
"subtle",
|
|
625
|
+
]
|
|
626
|
+
|
|
627
|
+
[[package]]
|
|
628
|
+
name = "version_check"
|
|
629
|
+
version = "0.9.5"
|
|
630
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
631
|
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
|
632
|
+
|
|
633
|
+
[[package]]
|
|
634
|
+
name = "walkdir"
|
|
635
|
+
version = "2.5.0"
|
|
636
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
637
|
+
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
|
|
638
|
+
dependencies = [
|
|
639
|
+
"same-file",
|
|
640
|
+
"winapi-util",
|
|
641
|
+
]
|
|
642
|
+
|
|
643
|
+
[[package]]
|
|
644
|
+
name = "wasi"
|
|
645
|
+
version = "0.11.1+wasi-snapshot-preview1"
|
|
646
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
647
|
+
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
|
648
|
+
|
|
649
|
+
[[package]]
|
|
650
|
+
name = "wasm-bindgen"
|
|
651
|
+
version = "0.2.118"
|
|
652
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
653
|
+
checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89"
|
|
654
|
+
dependencies = [
|
|
655
|
+
"cfg-if",
|
|
656
|
+
"once_cell",
|
|
657
|
+
"rustversion",
|
|
658
|
+
"wasm-bindgen-macro",
|
|
659
|
+
"wasm-bindgen-shared",
|
|
660
|
+
]
|
|
661
|
+
|
|
662
|
+
[[package]]
|
|
663
|
+
name = "wasm-bindgen-macro"
|
|
664
|
+
version = "0.2.118"
|
|
665
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
666
|
+
checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed"
|
|
667
|
+
dependencies = [
|
|
668
|
+
"quote",
|
|
669
|
+
"wasm-bindgen-macro-support",
|
|
670
|
+
]
|
|
671
|
+
|
|
672
|
+
[[package]]
|
|
673
|
+
name = "wasm-bindgen-macro-support"
|
|
674
|
+
version = "0.2.118"
|
|
675
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
676
|
+
checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904"
|
|
677
|
+
dependencies = [
|
|
678
|
+
"bumpalo",
|
|
679
|
+
"proc-macro2",
|
|
680
|
+
"quote",
|
|
681
|
+
"syn",
|
|
682
|
+
"wasm-bindgen-shared",
|
|
683
|
+
]
|
|
684
|
+
|
|
685
|
+
[[package]]
|
|
686
|
+
name = "wasm-bindgen-shared"
|
|
687
|
+
version = "0.2.118"
|
|
688
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
689
|
+
checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129"
|
|
690
|
+
dependencies = [
|
|
691
|
+
"unicode-ident",
|
|
692
|
+
]
|
|
693
|
+
|
|
694
|
+
[[package]]
|
|
695
|
+
name = "winapi-util"
|
|
696
|
+
version = "0.1.11"
|
|
697
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
698
|
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
|
699
|
+
dependencies = [
|
|
700
|
+
"windows-sys 0.61.2",
|
|
701
|
+
]
|
|
702
|
+
|
|
703
|
+
[[package]]
|
|
704
|
+
name = "windows-link"
|
|
705
|
+
version = "0.2.1"
|
|
706
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
707
|
+
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
|
708
|
+
|
|
709
|
+
[[package]]
|
|
710
|
+
name = "windows-sys"
|
|
711
|
+
version = "0.45.0"
|
|
712
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
713
|
+
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
|
|
714
|
+
dependencies = [
|
|
715
|
+
"windows-targets",
|
|
716
|
+
]
|
|
717
|
+
|
|
718
|
+
[[package]]
|
|
719
|
+
name = "windows-sys"
|
|
720
|
+
version = "0.61.2"
|
|
721
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
722
|
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
|
723
|
+
dependencies = [
|
|
724
|
+
"windows-link",
|
|
725
|
+
]
|
|
726
|
+
|
|
727
|
+
[[package]]
|
|
728
|
+
name = "windows-targets"
|
|
729
|
+
version = "0.42.2"
|
|
730
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
731
|
+
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
|
|
732
|
+
dependencies = [
|
|
733
|
+
"windows_aarch64_gnullvm",
|
|
734
|
+
"windows_aarch64_msvc",
|
|
735
|
+
"windows_i686_gnu",
|
|
736
|
+
"windows_i686_msvc",
|
|
737
|
+
"windows_x86_64_gnu",
|
|
738
|
+
"windows_x86_64_gnullvm",
|
|
739
|
+
"windows_x86_64_msvc",
|
|
740
|
+
]
|
|
741
|
+
|
|
742
|
+
[[package]]
|
|
743
|
+
name = "windows_aarch64_gnullvm"
|
|
744
|
+
version = "0.42.2"
|
|
745
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
746
|
+
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
|
|
747
|
+
|
|
748
|
+
[[package]]
|
|
749
|
+
name = "windows_aarch64_msvc"
|
|
750
|
+
version = "0.42.2"
|
|
751
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
752
|
+
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
|
|
753
|
+
|
|
754
|
+
[[package]]
|
|
755
|
+
name = "windows_i686_gnu"
|
|
756
|
+
version = "0.42.2"
|
|
757
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
758
|
+
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
|
|
759
|
+
|
|
760
|
+
[[package]]
|
|
761
|
+
name = "windows_i686_msvc"
|
|
762
|
+
version = "0.42.2"
|
|
763
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
764
|
+
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
|
|
765
|
+
|
|
766
|
+
[[package]]
|
|
767
|
+
name = "windows_x86_64_gnu"
|
|
768
|
+
version = "0.42.2"
|
|
769
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
770
|
+
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
|
|
771
|
+
|
|
772
|
+
[[package]]
|
|
773
|
+
name = "windows_x86_64_gnullvm"
|
|
774
|
+
version = "0.42.2"
|
|
775
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
776
|
+
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
|
|
777
|
+
|
|
778
|
+
[[package]]
|
|
779
|
+
name = "windows_x86_64_msvc"
|
|
780
|
+
version = "0.42.2"
|
|
781
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
782
|
+
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "ecies-jni"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
edition = "2021"
|
|
5
|
+
publish = false
|
|
6
|
+
|
|
7
|
+
# Android loads libecies.so (cdylib file name = libecies.so)
|
|
8
|
+
[lib]
|
|
9
|
+
crate-type = ["cdylib"]
|
|
10
|
+
name = "ecies"
|
|
11
|
+
|
|
12
|
+
[dependencies]
|
|
13
|
+
jni = "0.21"
|
|
14
|
+
# Match ecies.org / MetaMask stack (secp256k1, AES-256-GCM); pure Rust AES for simpler Android linking
|
|
15
|
+
ecies = { version = "0.2.10", default-features = false, features = ["std", "aes-rust"] }
|
|
16
|
+
hex = "0.4"
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
//! JNI bridge for `io.metamask.ecies.Ecies` (MetaMask Android SDK).
|
|
2
|
+
//! Rebuilt with NDK r28+ / 16 KB page-size compatible linking (see Gradle + cargo-ndk).
|
|
3
|
+
|
|
4
|
+
use ecies::{decrypt, encrypt, utils::generate_keypair};
|
|
5
|
+
use jni::objects::JString;
|
|
6
|
+
use jni::sys::jstring;
|
|
7
|
+
use jni::JNIEnv;
|
|
8
|
+
|
|
9
|
+
fn empty_jstring(env: &mut JNIEnv) -> jstring {
|
|
10
|
+
env.new_string("")
|
|
11
|
+
.expect("empty jstring")
|
|
12
|
+
.into_raw()
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
fn jstring_to_string(env: &mut JNIEnv, j: JString) -> Result<String, jni::errors::Error> {
|
|
16
|
+
Ok(env.get_string(&j)?.into())
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/// Kotlin: `Ecies.companion.generateSecretKey`
|
|
20
|
+
#[no_mangle]
|
|
21
|
+
pub extern "system" fn Java_io_metamask_ecies_Ecies_00024Companion_generateSecretKey(
|
|
22
|
+
mut env: JNIEnv,
|
|
23
|
+
_class: jni::objects::JClass,
|
|
24
|
+
) -> jstring {
|
|
25
|
+
let (sk, _pk) = generate_keypair();
|
|
26
|
+
let hex = hex::encode(sk.serialize());
|
|
27
|
+
match env.new_string(hex) {
|
|
28
|
+
Ok(s) => s.into_raw(),
|
|
29
|
+
Err(_) => empty_jstring(&mut env),
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// Kotlin: `Ecies.companion.derivePublicKeyFrom`
|
|
34
|
+
#[no_mangle]
|
|
35
|
+
pub extern "system" fn Java_io_metamask_ecies_Ecies_00024Companion_derivePublicKeyFrom(
|
|
36
|
+
mut env: JNIEnv,
|
|
37
|
+
_class: jni::objects::JClass,
|
|
38
|
+
secret: JString,
|
|
39
|
+
) -> jstring {
|
|
40
|
+
let secret_str = match jstring_to_string(&mut env, secret) {
|
|
41
|
+
Ok(s) => s,
|
|
42
|
+
Err(_) => return empty_jstring(&mut env),
|
|
43
|
+
};
|
|
44
|
+
let sk_bytes = match hex::decode(secret_str.trim()) {
|
|
45
|
+
Ok(b) => b,
|
|
46
|
+
Err(_) => return empty_jstring(&mut env),
|
|
47
|
+
};
|
|
48
|
+
let sk = match ecies::SecretKey::parse_slice(&sk_bytes) {
|
|
49
|
+
Ok(k) => k,
|
|
50
|
+
Err(_) => return empty_jstring(&mut env),
|
|
51
|
+
};
|
|
52
|
+
let pk = ecies::PublicKey::from_secret_key(&sk);
|
|
53
|
+
let hex = hex::encode(pk.serialize());
|
|
54
|
+
match env.new_string(hex) {
|
|
55
|
+
Ok(s) => s.into_raw(),
|
|
56
|
+
Err(_) => empty_jstring(&mut env),
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// Kotlin: `Ecies.companion.encryptMessage`
|
|
61
|
+
#[no_mangle]
|
|
62
|
+
pub extern "system" fn Java_io_metamask_ecies_Ecies_00024Companion_encryptMessage(
|
|
63
|
+
mut env: JNIEnv,
|
|
64
|
+
_class: jni::objects::JClass,
|
|
65
|
+
public: JString,
|
|
66
|
+
message: JString,
|
|
67
|
+
) -> jstring {
|
|
68
|
+
let pub_hex = match jstring_to_string(&mut env, public) {
|
|
69
|
+
Ok(s) => s,
|
|
70
|
+
Err(_) => return empty_jstring(&mut env),
|
|
71
|
+
};
|
|
72
|
+
let msg_str = match jstring_to_string(&mut env, message) {
|
|
73
|
+
Ok(s) => s,
|
|
74
|
+
Err(_) => return empty_jstring(&mut env),
|
|
75
|
+
};
|
|
76
|
+
let pk_bytes = match hex::decode(pub_hex.trim()) {
|
|
77
|
+
Ok(b) => b,
|
|
78
|
+
Err(_) => return empty_jstring(&mut env),
|
|
79
|
+
};
|
|
80
|
+
let ct = match encrypt(&pk_bytes, msg_str.as_bytes()) {
|
|
81
|
+
Ok(c) => c,
|
|
82
|
+
Err(_) => return empty_jstring(&mut env),
|
|
83
|
+
};
|
|
84
|
+
let hex = hex::encode(ct);
|
|
85
|
+
match env.new_string(hex) {
|
|
86
|
+
Ok(s) => s.into_raw(),
|
|
87
|
+
Err(_) => empty_jstring(&mut env),
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/// Kotlin: `Ecies.companion.decryptMessage`
|
|
92
|
+
#[no_mangle]
|
|
93
|
+
pub extern "system" fn Java_io_metamask_ecies_Ecies_00024Companion_decryptMessage(
|
|
94
|
+
mut env: JNIEnv,
|
|
95
|
+
_class: jni::objects::JClass,
|
|
96
|
+
secret: JString,
|
|
97
|
+
message: JString,
|
|
98
|
+
) -> jstring {
|
|
99
|
+
let sec_hex = match jstring_to_string(&mut env, secret) {
|
|
100
|
+
Ok(s) => s,
|
|
101
|
+
Err(_) => return empty_jstring(&mut env),
|
|
102
|
+
};
|
|
103
|
+
let ct_hex = match jstring_to_string(&mut env, message) {
|
|
104
|
+
Ok(s) => s,
|
|
105
|
+
Err(_) => return empty_jstring(&mut env),
|
|
106
|
+
};
|
|
107
|
+
let sk_bytes = match hex::decode(sec_hex.trim()) {
|
|
108
|
+
Ok(b) => b,
|
|
109
|
+
Err(_) => return empty_jstring(&mut env),
|
|
110
|
+
};
|
|
111
|
+
let ct_bytes = match hex::decode(ct_hex.trim()) {
|
|
112
|
+
Ok(b) => b,
|
|
113
|
+
Err(_) => return empty_jstring(&mut env),
|
|
114
|
+
};
|
|
115
|
+
let plain = match decrypt(&sk_bytes, &ct_bytes) {
|
|
116
|
+
Ok(p) => p,
|
|
117
|
+
Err(_) => return empty_jstring(&mut env),
|
|
118
|
+
};
|
|
119
|
+
let text = match String::from_utf8(plain) {
|
|
120
|
+
Ok(t) => t,
|
|
121
|
+
Err(_) => return empty_jstring(&mut env),
|
|
122
|
+
};
|
|
123
|
+
match env.new_string(text) {
|
|
124
|
+
Ok(s) => s.into_raw(),
|
|
125
|
+
Err(_) => empty_jstring(&mut env),
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Verify 16 KB ELF program-header alignment for Google Play (PT_LOAD p_align).
|
|
4
|
+
|
|
5
|
+
Uses NDK llvm-readobj (reliable). readelf(1) column positions vary by version;
|
|
6
|
+
do not parse readelf -l by $NF.
|
|
7
|
+
"""
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import re
|
|
12
|
+
import shutil
|
|
13
|
+
import subprocess
|
|
14
|
+
import sys
|
|
15
|
+
|
|
16
|
+
MIN_ALIGN = 16 * 1024
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def find_llvm_readobj() -> str | None:
|
|
20
|
+
env = os.environ.get("ANDROID_NDK_HOME") or os.environ.get("ANDROID_NDK_ROOT")
|
|
21
|
+
if env:
|
|
22
|
+
prebuilt = os.path.join(env, "toolchains", "llvm", "prebuilt")
|
|
23
|
+
if os.path.isdir(prebuilt):
|
|
24
|
+
for host in (
|
|
25
|
+
"linux-x86_64",
|
|
26
|
+
"darwin-x86_64",
|
|
27
|
+
"darwin-arm64",
|
|
28
|
+
"windows-x86_64",
|
|
29
|
+
):
|
|
30
|
+
cand = os.path.join(prebuilt, host, "bin", "llvm-readobj")
|
|
31
|
+
if os.path.isfile(cand):
|
|
32
|
+
return cand
|
|
33
|
+
sdk = os.environ.get("ANDROID_SDK_ROOT") or os.environ.get("ANDROID_HOME")
|
|
34
|
+
if sdk:
|
|
35
|
+
for ver in ("28.2.13676358",):
|
|
36
|
+
for host in ("linux-x86_64", "windows-x86_64", "darwin-x86_64"):
|
|
37
|
+
cand = os.path.join(
|
|
38
|
+
sdk, "ndk", ver, "toolchains", "llvm", "prebuilt", host, "bin", "llvm-readobj"
|
|
39
|
+
)
|
|
40
|
+
if os.path.isfile(cand):
|
|
41
|
+
return cand
|
|
42
|
+
return shutil.which("llvm-readobj")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def verify_so(llvm_readobj: str, path: str) -> bool:
|
|
46
|
+
try:
|
|
47
|
+
out = subprocess.check_output(
|
|
48
|
+
[llvm_readobj, "--program-headers", path],
|
|
49
|
+
text=True,
|
|
50
|
+
stderr=subprocess.DEVNULL,
|
|
51
|
+
)
|
|
52
|
+
except (subprocess.CalledProcessError, FileNotFoundError) as e:
|
|
53
|
+
print(f"ERROR: llvm-readobj failed for {path}: {e}", file=sys.stderr)
|
|
54
|
+
return False
|
|
55
|
+
|
|
56
|
+
saw_nonzero = False
|
|
57
|
+
# Each "ProgramHeader {" block: match PT_LOAD and its Alignment (not readelf columns).
|
|
58
|
+
for block in out.split("ProgramHeader {")[1:]:
|
|
59
|
+
if "Type: PT_LOAD" not in block:
|
|
60
|
+
continue
|
|
61
|
+
m = re.search(r"Alignment:\s*(\d+)", block)
|
|
62
|
+
if not m:
|
|
63
|
+
continue
|
|
64
|
+
a = int(m.group(1))
|
|
65
|
+
if a == 0:
|
|
66
|
+
# p_align 0 = default; other LOADs carry explicit alignment on 16K builds
|
|
67
|
+
continue
|
|
68
|
+
saw_nonzero = True
|
|
69
|
+
if a < MIN_ALIGN:
|
|
70
|
+
print(
|
|
71
|
+
f"FAIL {path}: PT_LOAD Alignment {a} < {MIN_ALIGN}",
|
|
72
|
+
file=sys.stderr,
|
|
73
|
+
)
|
|
74
|
+
return False
|
|
75
|
+
|
|
76
|
+
if not saw_nonzero:
|
|
77
|
+
print(
|
|
78
|
+
f"FAIL {path}: no PT_LOAD with non-zero Alignment (unexpected for .so)",
|
|
79
|
+
file=sys.stderr,
|
|
80
|
+
)
|
|
81
|
+
return False
|
|
82
|
+
return True
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def main() -> int:
|
|
86
|
+
if len(sys.argv) < 2:
|
|
87
|
+
print("Usage: verify-16k-page-alignment.py <shared-object> [...]", file=sys.stderr)
|
|
88
|
+
return 2
|
|
89
|
+
|
|
90
|
+
lr = find_llvm_readobj()
|
|
91
|
+
if not lr:
|
|
92
|
+
print(
|
|
93
|
+
"ERROR: llvm-readobj not found. Set ANDROID_NDK_HOME or install Android NDK.",
|
|
94
|
+
file=sys.stderr,
|
|
95
|
+
)
|
|
96
|
+
return 2
|
|
97
|
+
|
|
98
|
+
ok = True
|
|
99
|
+
for path in sys.argv[1:]:
|
|
100
|
+
if not os.path.isfile(path):
|
|
101
|
+
print(f"ERROR: not a file: {path}", file=sys.stderr)
|
|
102
|
+
return 1
|
|
103
|
+
print(f"Checking: {path}")
|
|
104
|
+
if not verify_so(lr, path):
|
|
105
|
+
ok = False
|
|
106
|
+
else:
|
|
107
|
+
print(f" OK (llvm-readobj PT_LOAD Alignment >= {MIN_ALIGN} where specified)")
|
|
108
|
+
|
|
109
|
+
if not ok:
|
|
110
|
+
print("verify-16k-page-alignment: FAILED", file=sys.stderr)
|
|
111
|
+
return 1
|
|
112
|
+
print("verify-16k-page-alignment: all checks passed")
|
|
113
|
+
return 0
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
if __name__ == "__main__":
|
|
117
|
+
sys.exit(main())
|