react-native-quick-crypto 0.7.3 → 1.0.0-beta.2
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/QuickCrypto.podspec +34 -0
- package/README.md +13 -46
- package/android/CMakeLists.txt +32 -64
- package/android/build.gradle +52 -125
- package/android/gradle.properties +4 -4
- package/android/src/main/cpp/cpp-adapter.cpp +9 -54
- package/android/src/main/java/com/margelo/nitro/quickcrypto/QuickCryptoPackage.java +38 -0
- package/cpp/random/HybridRandom.cpp +34 -0
- package/cpp/random/HybridRandom.hpp +44 -0
- package/cpp/utils/Utils.hpp +9 -0
- package/ios/QuickCryptoOnLoad.mm +19 -0
- package/lib/commonjs/index.js +39 -39
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/random.js +26 -12
- package/lib/commonjs/random.js.map +1 -1
- package/lib/commonjs/{NativeQuickCrypto/rsa.js → specs/random.nitro.js} +1 -1
- package/lib/commonjs/{NativeQuickCrypto/aes.js.map → specs/random.nitro.js.map} +1 -1
- package/lib/commonjs/utils/conversion.js +22 -0
- package/lib/commonjs/utils/conversion.js.map +1 -0
- package/lib/commonjs/utils/index.js +12 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/commonjs/utils/types.js +2 -0
- package/lib/{module/NativeQuickCrypto/aes.js.map → commonjs/utils/types.js.map} +1 -1
- package/lib/module/index.js +38 -38
- package/lib/module/index.js.map +1 -1
- package/lib/module/random.js +26 -12
- package/lib/module/random.js.map +1 -1
- package/lib/module/specs/random.nitro.js +4 -0
- package/lib/module/{NativeQuickCrypto/rsa.js.map → specs/random.nitro.js.map} +1 -1
- package/lib/module/utils/conversion.js +16 -0
- package/lib/module/utils/conversion.js.map +1 -0
- package/lib/module/utils/index.js +8 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/module/utils/types.js +2 -0
- package/lib/{commonjs/NativeQuickCrypto/rsa.js.map → module/utils/types.js.map} +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/typescript/index.d.ts +10 -141
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/random.d.ts +4 -5
- package/lib/typescript/random.d.ts.map +1 -1
- package/lib/typescript/specs/random.nitro.d.ts +9 -0
- package/lib/typescript/specs/random.nitro.d.ts.map +1 -0
- package/lib/typescript/utils/conversion.d.ts +4 -0
- package/lib/typescript/utils/conversion.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +6 -0
- package/lib/typescript/utils/index.d.ts.map +1 -0
- package/lib/typescript/utils/types.d.ts +5 -0
- package/lib/typescript/utils/types.d.ts.map +1 -0
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +45 -0
- package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +26 -0
- package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +57 -0
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +9 -0
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +25 -0
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +29 -0
- package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +62 -0
- package/package.json +50 -106
- package/src/index.ts +38 -48
- package/src/random.ts +51 -48
- package/src/specs/random.nitro.ts +14 -0
- package/src/utils/conversion.ts +16 -0
- package/src/utils/index.ts +6 -0
- package/src/utils/types.ts +15 -0
- package/LICENSE +0 -27
- package/android/src/main/java/com/margelo/quickcrypto/QuickCryptoModule.java +0 -70
- package/android/src/main/java/com/margelo/quickcrypto/QuickCryptoPackage.java +0 -25
- package/cpp/Cipher/MGLCipherHostObject.cpp +0 -663
- package/cpp/Cipher/MGLCipherHostObject.h +0 -90
- package/cpp/Cipher/MGLCreateCipherInstaller.cpp +0 -75
- package/cpp/Cipher/MGLCreateCipherInstaller.h +0 -22
- package/cpp/Cipher/MGLCreateDecipherInstaller.cpp +0 -77
- package/cpp/Cipher/MGLCreateDecipherInstaller.h +0 -17
- package/cpp/Cipher/MGLGenerateKeyPairInstaller.cpp +0 -134
- package/cpp/Cipher/MGLGenerateKeyPairInstaller.h +0 -35
- package/cpp/Cipher/MGLGenerateKeyPairSyncInstaller.cpp +0 -63
- package/cpp/Cipher/MGLGenerateKeyPairSyncInstaller.h +0 -37
- package/cpp/Cipher/MGLPublicCipher.h +0 -124
- package/cpp/Cipher/MGLPublicCipherInstaller.h +0 -107
- package/cpp/Cipher/MGLRsa.cpp +0 -573
- package/cpp/Cipher/MGLRsa.h +0 -109
- package/cpp/HMAC/MGLHmacHostObject.cpp +0 -95
- package/cpp/HMAC/MGLHmacHostObject.h +0 -39
- package/cpp/HMAC/MGLHmacInstaller.cpp +0 -43
- package/cpp/HMAC/MGLHmacInstaller.h +0 -20
- package/cpp/Hash/MGLHashHostObject.cpp +0 -147
- package/cpp/Hash/MGLHashHostObject.h +0 -53
- package/cpp/Hash/MGLHashInstaller.cpp +0 -44
- package/cpp/Hash/MGLHashInstaller.h +0 -20
- package/cpp/JSIUtils/MGLJSIMacros.h +0 -110
- package/cpp/JSIUtils/MGLJSIUtils.h +0 -41
- package/cpp/JSIUtils/MGLSmartHostObject.cpp +0 -43
- package/cpp/JSIUtils/MGLSmartHostObject.h +0 -46
- package/cpp/JSIUtils/MGLThreadAwareHostObject.cpp +0 -24
- package/cpp/JSIUtils/MGLThreadAwareHostObject.h +0 -43
- package/cpp/JSIUtils/MGLTypedArray.cpp +0 -325
- package/cpp/JSIUtils/MGLTypedArray.h +0 -160
- package/cpp/MGLKeys.cpp +0 -1426
- package/cpp/MGLKeys.h +0 -203
- package/cpp/MGLQuickCryptoHostObject.cpp +0 -127
- package/cpp/MGLQuickCryptoHostObject.h +0 -30
- package/cpp/Random/MGLRandomHostObject.cpp +0 -96
- package/cpp/Random/MGLRandomHostObject.h +0 -27
- package/cpp/Sig/MGLSignHostObjects.cpp +0 -757
- package/cpp/Sig/MGLSignHostObjects.h +0 -128
- package/cpp/Sig/MGLSignInstaller.cpp +0 -24
- package/cpp/Sig/MGLSignInstaller.h +0 -29
- package/cpp/Sig/MGLVerifyInstaller.cpp +0 -24
- package/cpp/Sig/MGLVerifyInstaller.h +0 -22
- package/cpp/Utils/MGLDispatchQueue.cpp +0 -75
- package/cpp/Utils/MGLDispatchQueue.h +0 -55
- package/cpp/Utils/MGLUtils.cpp +0 -295
- package/cpp/Utils/MGLUtils.h +0 -358
- package/cpp/Utils/base64.h +0 -320
- package/cpp/Utils/logs.h +0 -38
- package/cpp/Utils/node.h +0 -13
- package/cpp/fastpbkdf2/MGLPbkdf2HostObject.cpp +0 -164
- package/cpp/fastpbkdf2/MGLPbkdf2HostObject.h +0 -29
- package/cpp/fastpbkdf2/fastpbkdf2.c +0 -352
- package/cpp/fastpbkdf2/fastpbkdf2.h +0 -68
- package/cpp/webcrypto/MGLWebCrypto.cpp +0 -125
- package/cpp/webcrypto/MGLWebCrypto.h +0 -32
- package/cpp/webcrypto/crypto_aes.cpp +0 -516
- package/cpp/webcrypto/crypto_aes.h +0 -79
- package/cpp/webcrypto/crypto_ec.cpp +0 -424
- package/cpp/webcrypto/crypto_ec.h +0 -78
- package/cpp/webcrypto/crypto_keygen.cpp +0 -86
- package/cpp/webcrypto/crypto_keygen.h +0 -38
- package/ios/QuickCrypto.xcodeproj/project.pbxproj +0 -274
- package/ios/QuickCryptoModule.h +0 -5
- package/ios/QuickCryptoModule.mm +0 -42
- package/lib/commonjs/Cipher.js +0 -502
- package/lib/commonjs/Cipher.js.map +0 -1
- package/lib/commonjs/Hash.js +0 -99
- package/lib/commonjs/Hash.js.map +0 -1
- package/lib/commonjs/Hashnames.js +0 -87
- package/lib/commonjs/Hashnames.js.map +0 -1
- package/lib/commonjs/Hmac.js +0 -79
- package/lib/commonjs/Hmac.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/Cipher.js +0 -30
- package/lib/commonjs/NativeQuickCrypto/Cipher.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/NativeQuickCrypto.js +0 -52
- package/lib/commonjs/NativeQuickCrypto/NativeQuickCrypto.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/aes.js +0 -6
- package/lib/commonjs/NativeQuickCrypto/hash.js +0 -2
- package/lib/commonjs/NativeQuickCrypto/hash.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/hmac.js +0 -2
- package/lib/commonjs/NativeQuickCrypto/hmac.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/keygen.js +0 -6
- package/lib/commonjs/NativeQuickCrypto/keygen.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/pbkdf2.js +0 -2
- package/lib/commonjs/NativeQuickCrypto/pbkdf2.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/random.js +0 -2
- package/lib/commonjs/NativeQuickCrypto/random.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/sig.js +0 -19
- package/lib/commonjs/NativeQuickCrypto/sig.js.map +0 -1
- package/lib/commonjs/NativeQuickCrypto/webcrypto.js +0 -6
- package/lib/commonjs/NativeQuickCrypto/webcrypto.js.map +0 -1
- package/lib/commonjs/Utils.js +0 -608
- package/lib/commonjs/Utils.js.map +0 -1
- package/lib/commonjs/aes.js +0 -281
- package/lib/commonjs/aes.js.map +0 -1
- package/lib/commonjs/constants.js +0 -85
- package/lib/commonjs/constants.js.map +0 -1
- package/lib/commonjs/ec.js +0 -276
- package/lib/commonjs/ec.js.map +0 -1
- package/lib/commonjs/keygen.js +0 -56
- package/lib/commonjs/keygen.js.map +0 -1
- package/lib/commonjs/keys.js +0 -492
- package/lib/commonjs/keys.js.map +0 -1
- package/lib/commonjs/pbkdf2.js +0 -90
- package/lib/commonjs/pbkdf2.js.map +0 -1
- package/lib/commonjs/rsa.js +0 -248
- package/lib/commonjs/rsa.js.map +0 -1
- package/lib/commonjs/sig.js +0 -129
- package/lib/commonjs/sig.js.map +0 -1
- package/lib/commonjs/subtle.js +0 -448
- package/lib/commonjs/subtle.js.map +0 -1
- package/lib/commonjs/webcrypto.js +0 -14
- package/lib/commonjs/webcrypto.js.map +0 -1
- package/lib/module/Cipher.js +0 -491
- package/lib/module/Cipher.js.map +0 -1
- package/lib/module/Hash.js +0 -93
- package/lib/module/Hash.js.map +0 -1
- package/lib/module/Hashnames.js +0 -85
- package/lib/module/Hashnames.js.map +0 -1
- package/lib/module/Hmac.js +0 -74
- package/lib/module/Hmac.js.map +0 -1
- package/lib/module/NativeQuickCrypto/Cipher.js +0 -26
- package/lib/module/NativeQuickCrypto/Cipher.js.map +0 -1
- package/lib/module/NativeQuickCrypto/NativeQuickCrypto.js +0 -49
- package/lib/module/NativeQuickCrypto/NativeQuickCrypto.js.map +0 -1
- package/lib/module/NativeQuickCrypto/aes.js +0 -4
- package/lib/module/NativeQuickCrypto/hash.js +0 -2
- package/lib/module/NativeQuickCrypto/hash.js.map +0 -1
- package/lib/module/NativeQuickCrypto/hmac.js +0 -2
- package/lib/module/NativeQuickCrypto/hmac.js.map +0 -1
- package/lib/module/NativeQuickCrypto/keygen.js +0 -4
- package/lib/module/NativeQuickCrypto/keygen.js.map +0 -1
- package/lib/module/NativeQuickCrypto/pbkdf2.js +0 -2
- package/lib/module/NativeQuickCrypto/pbkdf2.js.map +0 -1
- package/lib/module/NativeQuickCrypto/random.js +0 -2
- package/lib/module/NativeQuickCrypto/random.js.map +0 -1
- package/lib/module/NativeQuickCrypto/rsa.js +0 -4
- package/lib/module/NativeQuickCrypto/sig.js +0 -17
- package/lib/module/NativeQuickCrypto/sig.js.map +0 -1
- package/lib/module/NativeQuickCrypto/webcrypto.js +0 -4
- package/lib/module/NativeQuickCrypto/webcrypto.js.map +0 -1
- package/lib/module/Utils.js +0 -539
- package/lib/module/Utils.js.map +0 -1
- package/lib/module/aes.js +0 -274
- package/lib/module/aes.js.map +0 -1
- package/lib/module/constants.js +0 -81
- package/lib/module/constants.js.map +0 -1
- package/lib/module/ec.js +0 -267
- package/lib/module/ec.js.map +0 -1
- package/lib/module/keygen.js +0 -49
- package/lib/module/keygen.js.map +0 -1
- package/lib/module/keys.js +0 -477
- package/lib/module/keys.js.map +0 -1
- package/lib/module/pbkdf2.js +0 -84
- package/lib/module/pbkdf2.js.map +0 -1
- package/lib/module/rsa.js +0 -242
- package/lib/module/rsa.js.map +0 -1
- package/lib/module/sig.js +0 -124
- package/lib/module/sig.js.map +0 -1
- package/lib/module/subtle.js +0 -443
- package/lib/module/subtle.js.map +0 -1
- package/lib/module/webcrypto.js +0 -10
- package/lib/module/webcrypto.js.map +0 -1
- package/lib/typescript/Cipher.d.ts +0 -81
- package/lib/typescript/Cipher.d.ts.map +0 -1
- package/lib/typescript/Hash.d.ts +0 -44
- package/lib/typescript/Hash.d.ts.map +0 -1
- package/lib/typescript/Hashnames.d.ts +0 -11
- package/lib/typescript/Hashnames.d.ts.map +0 -1
- package/lib/typescript/Hmac.d.ts +0 -37
- package/lib/typescript/Hmac.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/Cipher.d.ts +0 -44
- package/lib/typescript/NativeQuickCrypto/Cipher.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/NativeQuickCrypto.d.ts +0 -33
- package/lib/typescript/NativeQuickCrypto/NativeQuickCrypto.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/aes.d.ts +0 -5
- package/lib/typescript/NativeQuickCrypto/aes.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/hash.d.ts +0 -7
- package/lib/typescript/NativeQuickCrypto/hash.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/hmac.d.ts +0 -6
- package/lib/typescript/NativeQuickCrypto/hmac.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/keygen.d.ts +0 -4
- package/lib/typescript/NativeQuickCrypto/keygen.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/pbkdf2.d.ts +0 -5
- package/lib/typescript/NativeQuickCrypto/pbkdf2.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/random.d.ts +0 -5
- package/lib/typescript/NativeQuickCrypto/random.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/rsa.d.ts +0 -5
- package/lib/typescript/NativeQuickCrypto/rsa.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/sig.d.ts +0 -23
- package/lib/typescript/NativeQuickCrypto/sig.d.ts.map +0 -1
- package/lib/typescript/NativeQuickCrypto/webcrypto.d.ts +0 -39
- package/lib/typescript/NativeQuickCrypto/webcrypto.d.ts.map +0 -1
- package/lib/typescript/Utils.d.ts +0 -48
- package/lib/typescript/Utils.d.ts.map +0 -1
- package/lib/typescript/aes.d.ts +0 -22
- package/lib/typescript/aes.d.ts.map +0 -1
- package/lib/typescript/constants.d.ts +0 -76
- package/lib/typescript/constants.d.ts.map +0 -1
- package/lib/typescript/ec.d.ts +0 -7
- package/lib/typescript/ec.d.ts.map +0 -1
- package/lib/typescript/keygen.d.ts +0 -6
- package/lib/typescript/keygen.d.ts.map +0 -1
- package/lib/typescript/keys.d.ts +0 -206
- package/lib/typescript/keys.d.ts.map +0 -1
- package/lib/typescript/pbkdf2.d.ts +0 -12
- package/lib/typescript/pbkdf2.d.ts.map +0 -1
- package/lib/typescript/rsa.d.ts +0 -12
- package/lib/typescript/rsa.d.ts.map +0 -1
- package/lib/typescript/sig.d.ts +0 -21
- package/lib/typescript/sig.d.ts.map +0 -1
- package/lib/typescript/subtle.d.ts +0 -15
- package/lib/typescript/subtle.d.ts.map +0 -1
- package/lib/typescript/webcrypto.d.ts +0 -9
- package/lib/typescript/webcrypto.d.ts.map +0 -1
- package/react-native-quick-crypto.podspec +0 -40
- package/src/Cipher.ts +0 -832
- package/src/Hash.ts +0 -132
- package/src/Hashnames.ts +0 -93
- package/src/Hmac.ts +0 -106
- package/src/NativeQuickCrypto/Cipher.ts +0 -102
- package/src/NativeQuickCrypto/NativeQuickCrypto.ts +0 -102
- package/src/NativeQuickCrypto/aes.ts +0 -14
- package/src/NativeQuickCrypto/hash.ts +0 -10
- package/src/NativeQuickCrypto/hmac.ts +0 -9
- package/src/NativeQuickCrypto/keygen.ts +0 -7
- package/src/NativeQuickCrypto/pbkdf2.ts +0 -16
- package/src/NativeQuickCrypto/random.ts +0 -12
- package/src/NativeQuickCrypto/rsa.ts +0 -12
- package/src/NativeQuickCrypto/sig.ts +0 -44
- package/src/NativeQuickCrypto/webcrypto.ts +0 -72
- package/src/Utils.ts +0 -777
- package/src/aes.ts +0 -402
- package/src/constants.ts +0 -79
- package/src/ec.ts +0 -375
- package/src/keygen.ts +0 -80
- package/src/keys.ts +0 -787
- package/src/pbkdf2.ts +0 -169
- package/src/rsa.ts +0 -370
- package/src/sig.ts +0 -164
- package/src/subtle.ts +0 -639
- package/src/webcrypto.ts +0 -8
- /package/android/src/main/{AndroidManifestNew.xml → AndroidManifest.xml} +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
+
|
|
5
|
+
Pod::UI.puts "[QuickCrypto] crypto just got quicker 💨"
|
|
6
|
+
|
|
7
|
+
Pod::Spec.new do |s|
|
|
8
|
+
s.name = "QuickCrypto"
|
|
9
|
+
s.version = package["version"]
|
|
10
|
+
s.summary = package["description"]
|
|
11
|
+
s.homepage = package["homepage"]
|
|
12
|
+
s.license = package["license"]
|
|
13
|
+
s.authors = package["authors"]
|
|
14
|
+
|
|
15
|
+
s.platforms = { :ios => min_ios_version_supported }
|
|
16
|
+
s.source = { :git => "https://github.com/margelo/react-native-quick-crypto.git", :tag => "#{s.version}" }
|
|
17
|
+
|
|
18
|
+
s.source_files = [
|
|
19
|
+
# implementation (Swift)
|
|
20
|
+
"ios/**/*.{swift}",
|
|
21
|
+
# ios (Objective-C++)
|
|
22
|
+
"ios/**/*.{h,m,mm}",
|
|
23
|
+
# implementation (C++)
|
|
24
|
+
"cpp/**/*.{hpp,cpp}",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
# Add all files generated by Nitrogen
|
|
28
|
+
load 'nitrogen/generated/ios/QuickCrypto+autolinking.rb'
|
|
29
|
+
add_nitrogen_files(s)
|
|
30
|
+
|
|
31
|
+
install_modules_dependencies(s)
|
|
32
|
+
s.dependency "OpenSSL-Universal"
|
|
33
|
+
|
|
34
|
+
end
|
package/README.md
CHANGED
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
|
|
7
7
|
A fast implementation of Node's `crypto` module.
|
|
8
8
|
|
|
9
|
+
> Note: This version `1.x` is undergoing a major refactor, porting to New Architecture, Bridgeless, and [`Nitro Modules`](https://github.com/mrousavy/react-native-nitro) and is incomplete compared to the `0.x` version. Status, as always, will be represented in [implementation-coverage.md](../blob/main/docs/implementation-coverage.md).
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
9
13
|
Unlike any other current JS-based polyfills, react-native-quick-crypto is written in C/C++ JSI and provides much greater performance - especially on mobile devices.
|
|
10
14
|
QuickCrypto can be used as a drop-in replacement for your Web3/Crypto apps to speed up common cryptography functions.
|
|
11
15
|
|
|
@@ -16,6 +20,15 @@ QuickCrypto can be used as a drop-in replacement for your Web3/Crypto apps to sp
|
|
|
16
20
|
- 🔢 Secure native compiled cryptography
|
|
17
21
|
- 🔁 Easy drop-in replacement for [crypto-browserify](https://github.com/browserify/crypto-browserify) or [react-native-crypto](https://github.com/tradle/react-native-crypto)
|
|
18
22
|
|
|
23
|
+
## Versions
|
|
24
|
+
|
|
25
|
+
| Version | RN Architecture | Modules |
|
|
26
|
+
| ------- | ------ | ------- |
|
|
27
|
+
| `1.x` | new [->](https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md) | Nitro Modules [->](https://github.com/margelo/react-native-nitro) |
|
|
28
|
+
| `0.x` | old | Bridge & JSI |
|
|
29
|
+
|
|
30
|
+
## Benchmarks
|
|
31
|
+
|
|
19
32
|
For example, creating a Wallet using ethers.js uses complex algorithms to generate a private-key/mnemonic-phrase pair:
|
|
20
33
|
|
|
21
34
|
```ts
|
|
@@ -133,52 +146,6 @@ const hashed = QuickCrypto.createHash('sha256')
|
|
|
133
146
|
.digest('hex');
|
|
134
147
|
```
|
|
135
148
|
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Sponsors
|
|
139
|
-
|
|
140
|
-
<!-- Onin -->
|
|
141
|
-
<div align="center">
|
|
142
|
-
<img height="50" src="./docs/img/sponsors/onin.svg" align="center"><br/>
|
|
143
|
-
<a href="https://onin.co"><b>Onin</b></a> - This library is supported by Onin. Plan events without leaving the chat: <a href="https://onin.co">onin.co</a>
|
|
144
|
-
</div>
|
|
145
|
-
<br/>
|
|
146
|
-
<br/>
|
|
147
|
-
|
|
148
|
-
<!-- Steakwallet -->
|
|
149
|
-
<div align="center">
|
|
150
|
-
<img height="37" src="./docs/img/sponsors/omni.png" align="center"><br/>
|
|
151
|
-
<a href="https://steakwallet.fi"><b>Omni</b></a> - Web3 for all. Access all of Web3 in one easy to use wallet. Omni supports more blockchains so you get more tokens, more yields, more NFTs, and more fun!
|
|
152
|
-
</div>
|
|
153
|
-
<br/>
|
|
154
|
-
<br/>
|
|
155
|
-
|
|
156
|
-
<!-- Litentry -->
|
|
157
|
-
<div align="center">
|
|
158
|
-
<img height="70" src="./docs/img/sponsors/litentry.png" align="center"><br/>
|
|
159
|
-
<a href="https://litentry.com"><b>Litentry</b></a> - A decentralized identity aggregator, providing the structure and tools to empower you and your identity.
|
|
160
|
-
</div>
|
|
161
|
-
<br/>
|
|
162
|
-
<br/>
|
|
163
|
-
|
|
164
|
-
<!-- WalletConnect -->
|
|
165
|
-
<div align="center">
|
|
166
|
-
<img height="35" src="./docs/img/sponsors/walletconnect.png" align="center"><br/>
|
|
167
|
-
<a href="https://walletconnect.com"><b>WalletConnect</b></a> - The communications protocol for web3, WalletConnect brings the ecosystem together by enabling wallets and apps to securely connect and interact.
|
|
168
|
-
</div>
|
|
169
|
-
<br/>
|
|
170
|
-
<br/>
|
|
171
|
-
|
|
172
|
-
<!-- WalletConnect -->
|
|
173
|
-
|
|
174
|
-
<!-- THORSwap -->
|
|
175
|
-
<div align="center">
|
|
176
|
-
<img height="40" src="./docs/img/sponsors/thorswap.png" align="center"><br/>
|
|
177
|
-
<a href="https://thorswap.finance"><b>THORSwap</b></a> - THORSwap is a cross-chain DEX aggregator that enables users to swap native assets across chains, provide liquidity to earn yield, and more. THORSwap is fully permissionless and non-custodial. No account signup, your wallet, your keys, your coins.
|
|
178
|
-
</div>
|
|
179
|
-
<br/>
|
|
180
|
-
<br/>
|
|
181
|
-
|
|
182
149
|
## Limitations
|
|
183
150
|
|
|
184
151
|
As the library uses JSI for synchronous native methods access, remote debugging (e.g. with Chrome) is no longer possible. Instead, you should use [Flipper](https://fbflipper.com).
|
package/android/CMakeLists.txt
CHANGED
|
@@ -1,76 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
cmake_minimum_required(VERSION 3.10.2)
|
|
1
|
+
cmake_minimum_required(VERSION 3.9.0)
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
set(
|
|
6
|
-
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
7
|
-
set(CMAKE_CXX_STANDARD 17)
|
|
8
|
-
|
|
9
|
-
# set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
|
|
10
|
-
# set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
|
|
3
|
+
project(QuickCrypto)
|
|
4
|
+
set(PACKAGE_NAME QuickCrypto)
|
|
11
5
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
find_package(ReactAndroid REQUIRED CONFIG)
|
|
15
|
-
find_package(openssl REQUIRED CONFIG)
|
|
16
|
-
find_library(LOG_LIB log)
|
|
6
|
+
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
7
|
+
set(CMAKE_CXX_STANDARD 20)
|
|
17
8
|
|
|
9
|
+
# Define C++ library and add all sources
|
|
18
10
|
add_library(
|
|
19
|
-
${PACKAGE_NAME}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"../cpp/MGLQuickCryptoHostObject.cpp"
|
|
23
|
-
"../cpp/JSIUtils/MGLTypedArray.cpp"
|
|
24
|
-
"../cpp/Utils/MGLDispatchQueue.cpp"
|
|
25
|
-
"../cpp/JSIUtils/MGLThreadAwareHostObject.cpp"
|
|
26
|
-
"../cpp/JSIUtils/MGLSmartHostObject.cpp"
|
|
27
|
-
"../cpp/HMAC/MGLHmacInstaller.cpp"
|
|
28
|
-
"../cpp/HMAC/MGLHmacHostObject.cpp"
|
|
29
|
-
"../cpp/fastpbkdf2/MGLPbkdf2HostObject.cpp"
|
|
30
|
-
"../cpp/fastpbkdf2/fastpbkdf2.c"
|
|
31
|
-
"../cpp/Random/MGLRandomHostObject.cpp"
|
|
32
|
-
"../cpp/Hash/MGLHashInstaller.cpp"
|
|
33
|
-
"../cpp/Hash/MGLHashHostObject.cpp"
|
|
34
|
-
"../cpp/Cipher/MGLCipherHostObject.cpp"
|
|
35
|
-
"../cpp/Cipher/MGLCreateCipherInstaller.cpp"
|
|
36
|
-
"../cpp/Cipher/MGLCreateDecipherInstaller.cpp"
|
|
37
|
-
"../cpp/MGLKeys.cpp"
|
|
38
|
-
"../cpp/Utils/MGLUtils.cpp"
|
|
39
|
-
"../cpp/Cipher/MGLRsa.cpp"
|
|
40
|
-
"../cpp/Cipher/MGLGenerateKeyPairInstaller.cpp"
|
|
41
|
-
"../cpp/Cipher/MGLGenerateKeyPairSyncInstaller.cpp"
|
|
42
|
-
"../cpp/Sig/MGLSignInstaller.cpp"
|
|
43
|
-
"../cpp/Sig/MGLVerifyInstaller.cpp"
|
|
44
|
-
"../cpp/Sig/MGLSignHostObjects.cpp"
|
|
45
|
-
"../cpp/webcrypto/MGLWebCrypto.cpp"
|
|
46
|
-
"../cpp/webcrypto/crypto_aes.cpp"
|
|
47
|
-
"../cpp/webcrypto/crypto_ec.cpp"
|
|
48
|
-
"../cpp/webcrypto/crypto_keygen.cpp"
|
|
11
|
+
${PACKAGE_NAME} SHARED
|
|
12
|
+
src/main/cpp/cpp-adapter.cpp
|
|
13
|
+
../cpp/random/HybridRandom.cpp
|
|
49
14
|
)
|
|
50
15
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
PRIVATE
|
|
54
|
-
"../cpp"
|
|
55
|
-
"src/main/cpp"
|
|
56
|
-
"${NODE_MODULES_DIR}/react-native/ReactCommon"
|
|
57
|
-
"${NODE_MODULES_DIR}/react-native/ReactCommon/callinvoker"
|
|
58
|
-
"${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni/react/turbomodule"
|
|
59
|
-
"${NODE_MODULES_DIR}/react-native/ReactCommon/jsi"
|
|
60
|
-
"${NODE_MODULES_DIR}/react-native/ReactCommon/turbomodule/core"
|
|
61
|
-
"${NODE_MODULES_DIR}/react-native/ReactCommon/react/nativemodule/core"
|
|
62
|
-
)
|
|
16
|
+
include_directories(../cpp)
|
|
17
|
+
include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/QuickCrypto+autolinking.cmake)
|
|
63
18
|
|
|
64
|
-
#
|
|
19
|
+
# Third party libraries (Prefabs)
|
|
20
|
+
find_library(LOG_LIB log)
|
|
21
|
+
|
|
22
|
+
find_package(ReactAndroid REQUIRED CONFIG)
|
|
23
|
+
find_package(fbjni REQUIRED CONFIG)
|
|
24
|
+
find_package(openssl REQUIRED CONFIG)
|
|
65
25
|
|
|
26
|
+
# Link all libraries together
|
|
66
27
|
target_link_libraries(
|
|
67
28
|
${PACKAGE_NAME}
|
|
68
|
-
ReactAndroid::turbomodulejsijni
|
|
69
|
-
fbjni::fbjni # <-- fbjni
|
|
70
29
|
${LOG_LIB} # <-- Logcat logger
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
ReactAndroid::react_nativemodule_core # <-- RN: React Native native module core
|
|
74
|
-
android # <-- Android JNI core
|
|
30
|
+
android # <-- Android core
|
|
31
|
+
fbjni::fbjni # <-- Facebook C++ JNI helpers
|
|
75
32
|
openssl::crypto # <-- OpenSSL (Crypto)
|
|
76
|
-
|
|
33
|
+
ReactAndroid::jsi
|
|
34
|
+
ReactAndroid::turbomodulejsijni
|
|
35
|
+
ReactAndroid::react_nativemodule_core
|
|
36
|
+
ReactAndroid::react_render_core
|
|
37
|
+
ReactAndroid::runtimeexecutor
|
|
38
|
+
ReactAndroid::fabricjni
|
|
39
|
+
ReactAndroid::react_debug
|
|
40
|
+
ReactAndroid::react_render_core
|
|
41
|
+
ReactAndroid::react_render_componentregistry
|
|
42
|
+
ReactAndroid::rrc_view
|
|
43
|
+
ReactAndroid::folly_runtime
|
|
44
|
+
)
|
package/android/build.gradle
CHANGED
|
@@ -1,118 +1,56 @@
|
|
|
1
|
-
import java.nio.file.Paths
|
|
2
|
-
import com.android.Version
|
|
3
|
-
|
|
4
|
-
def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION
|
|
5
|
-
def agpVersionMajor = agpVersion.tokenize('.')[0].toInteger()
|
|
6
|
-
def agpVersionMinor = agpVersion.tokenize('.')[1].toInteger()
|
|
7
|
-
|
|
8
1
|
buildscript {
|
|
2
|
+
ext.kotlinVersion = '1.9.25'
|
|
3
|
+
|
|
9
4
|
repositories {
|
|
10
|
-
maven {
|
|
11
|
-
url "https://plugins.gradle.org/m2/"
|
|
12
|
-
}
|
|
13
|
-
mavenCentral()
|
|
14
5
|
google()
|
|
6
|
+
mavenCentral()
|
|
15
7
|
}
|
|
16
8
|
|
|
17
9
|
dependencies {
|
|
18
|
-
classpath
|
|
10
|
+
classpath "com.android.tools.build:gradle:8.2.2"
|
|
11
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
|
|
19
12
|
}
|
|
20
13
|
}
|
|
21
14
|
|
|
22
|
-
def
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// - Invoke gradle with `-newArchEnabled=true`
|
|
26
|
-
// - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
|
|
27
|
-
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
|
|
15
|
+
def reactNativeArchitectures() {
|
|
16
|
+
def value = rootProject.getProperties().get("reactNativeArchitectures")
|
|
17
|
+
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
|
28
18
|
}
|
|
29
19
|
|
|
30
|
-
def
|
|
31
|
-
|
|
32
|
-
String tskReqStr = gradle.getStartParameter().getTaskRequests()['args'].toString()
|
|
33
|
-
|
|
34
|
-
return tskReqStr.contains('Release') ? 'release' : 'debug'
|
|
20
|
+
def isNewArchitectureEnabled() {
|
|
21
|
+
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
|
|
35
22
|
}
|
|
36
23
|
|
|
24
|
+
apply plugin: "com.android.library"
|
|
25
|
+
apply plugin: "org.jetbrains.kotlin.android"
|
|
26
|
+
apply from: "../nitrogen/generated/android/QuickCrypto+autolinking.gradle"
|
|
27
|
+
|
|
37
28
|
if (isNewArchitectureEnabled()) {
|
|
38
29
|
apply plugin: "com.facebook.react"
|
|
39
30
|
}
|
|
40
|
-
apply plugin: 'com.android.library'
|
|
41
|
-
|
|
42
|
-
def safeExtGet(prop, fallback) {
|
|
43
|
-
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
|
44
|
-
}
|
|
45
31
|
|
|
46
|
-
def
|
|
47
|
-
|
|
48
|
-
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
|
32
|
+
def getExtOrDefault(name) {
|
|
33
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["QuickCrypto_" + name]
|
|
49
34
|
}
|
|
50
35
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// Node's module resolution algorithm searches up to the root directory,
|
|
54
|
-
// after which the base path will be null
|
|
55
|
-
while (basePath) {
|
|
56
|
-
def nodeModulesPath = Paths.get(basePath.toString(), "node_modules")
|
|
57
|
-
def reactNativePath = Paths.get(nodeModulesPath.toString(), "react-native")
|
|
58
|
-
if (nodeModulesPath.toFile().exists() && reactNativePath.toFile().exists()) {
|
|
59
|
-
return nodeModulesPath.toString()
|
|
60
|
-
}
|
|
61
|
-
basePath = basePath.getParent()
|
|
62
|
-
}
|
|
63
|
-
throw new GradleException("react-native-quick-crypto: Failed to find node_modules/ path!")
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
def nodeModules = findNodeModules(projectDir)
|
|
67
|
-
|
|
68
|
-
repositories {
|
|
69
|
-
google()
|
|
70
|
-
mavenCentral()
|
|
36
|
+
def getExtOrIntegerDefault(name) {
|
|
37
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["QuickCrypto_" + name]).toInteger()
|
|
71
38
|
}
|
|
72
39
|
|
|
73
40
|
android {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
// Namespace support was added in 7.3.0
|
|
78
|
-
namespace "com.margelo.quickcrypto"
|
|
79
|
-
|
|
80
|
-
sourceSets {
|
|
81
|
-
main {
|
|
82
|
-
manifest.srcFile "src/main/AndroidManifestNew.xml"
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (agpVersionMajor >= 8) {
|
|
88
|
-
buildFeatures {
|
|
89
|
-
buildConfig = true
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Used to override the NDK path/version on internal CI or by allowing
|
|
94
|
-
// users to customize the NDK path/version from their root project (e.g. for M1 support)
|
|
95
|
-
if (rootProject.hasProperty("ndkPath")) {
|
|
96
|
-
ndkPath rootProject.ext.ndkPath
|
|
97
|
-
}
|
|
98
|
-
if (rootProject.hasProperty("ndkVersion")) {
|
|
99
|
-
ndkVersion rootProject.ext.ndkVersion
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
buildFeatures {
|
|
103
|
-
prefab true
|
|
104
|
-
}
|
|
41
|
+
namespace "com.margelo.nitro.quickcrypto"
|
|
42
|
+
ndkVersion getExtOrDefault("ndkVersion")
|
|
43
|
+
compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
|
|
105
44
|
|
|
106
45
|
defaultConfig {
|
|
107
|
-
minSdkVersion
|
|
108
|
-
targetSdkVersion
|
|
109
|
-
versionCode 1
|
|
110
|
-
versionName "1.0"
|
|
46
|
+
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
|
|
47
|
+
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
|
|
111
48
|
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
49
|
+
|
|
112
50
|
externalNativeBuild {
|
|
113
51
|
cmake {
|
|
114
|
-
cppFlags "-O2 -frtti -fexceptions -Wall -
|
|
115
|
-
arguments "-DANDROID_STL=c++_shared"
|
|
52
|
+
cppFlags "-O2 -frtti -fexceptions -Wall -fstack-protector-all"
|
|
53
|
+
arguments "-DANDROID_STL=c++_shared"
|
|
116
54
|
abiFilters (*reactNativeArchitectures())
|
|
117
55
|
}
|
|
118
56
|
}
|
|
@@ -124,42 +62,36 @@ android {
|
|
|
124
62
|
}
|
|
125
63
|
}
|
|
126
64
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
"**/libc++_shared.so",
|
|
131
|
-
"**/libfbjni.so",
|
|
132
|
-
"**/libreactnativejni.so",
|
|
133
|
-
"**/libjsi.so",
|
|
134
|
-
"**/libreact_nativemodule_core.so",
|
|
135
|
-
"**/libturbomodulejsijni.so",
|
|
136
|
-
"**/MANIFEST.MF",
|
|
137
|
-
]
|
|
65
|
+
buildFeatures {
|
|
66
|
+
buildConfig true
|
|
67
|
+
prefab true
|
|
138
68
|
}
|
|
139
69
|
|
|
140
70
|
buildTypes {
|
|
141
71
|
release {
|
|
142
72
|
minifyEnabled false
|
|
143
73
|
}
|
|
144
|
-
debug {
|
|
145
|
-
packagingOptions {
|
|
146
|
-
doNotStrip '**/*.so'
|
|
147
|
-
}
|
|
148
|
-
minifyEnabled false
|
|
149
|
-
debuggable true
|
|
150
|
-
jniDebuggable true
|
|
151
|
-
renderscriptDebuggable true
|
|
152
|
-
}
|
|
153
74
|
}
|
|
154
75
|
|
|
155
76
|
lintOptions {
|
|
156
|
-
disable
|
|
77
|
+
disable "GradleCompatible"
|
|
157
78
|
}
|
|
79
|
+
|
|
158
80
|
compileOptions {
|
|
159
81
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
160
82
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
161
83
|
}
|
|
162
84
|
|
|
85
|
+
sourceSets {
|
|
86
|
+
main {
|
|
87
|
+
if (isNewArchitectureEnabled()) {
|
|
88
|
+
java.srcDirs += [
|
|
89
|
+
// React Codegen files
|
|
90
|
+
"${project.buildDir}/generated/source/codegen/java"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
163
95
|
}
|
|
164
96
|
|
|
165
97
|
repositories {
|
|
@@ -167,24 +99,19 @@ repositories {
|
|
|
167
99
|
google()
|
|
168
100
|
}
|
|
169
101
|
|
|
102
|
+
|
|
170
103
|
dependencies {
|
|
171
104
|
//noinspection GradleDynamicVersion
|
|
172
|
-
implementation "com.facebook.react:react-
|
|
173
|
-
|
|
174
|
-
implementation
|
|
105
|
+
implementation "com.facebook.react:react-native:+"
|
|
106
|
+
|
|
107
|
+
implementation project(":react-native-nitro-modules")
|
|
108
|
+
implementation "com.android.ndk.thirdparty:openssl:1.1.1q-beta-1"
|
|
175
109
|
}
|
|
176
110
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
// We want to add a dependency for both configureCMakeRelease and configureCMakeRelWithDebInfo
|
|
185
|
-
if (task.name.contains("configureCMakeRel")) {
|
|
186
|
-
rootProject.getTasksByName("packageReactNdkReleaseLibs", true).forEach {
|
|
187
|
-
task.dependsOn(it)
|
|
188
|
-
}
|
|
111
|
+
if (isNewArchitectureEnabled()) {
|
|
112
|
+
react {
|
|
113
|
+
jsRootDir = file("../src/")
|
|
114
|
+
libraryName = "QuickCrypto"
|
|
115
|
+
codegenJavaPackageName = "com.margelo.nitro.quickcrypto"
|
|
189
116
|
}
|
|
190
|
-
}
|
|
117
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
QuickCrypto_compileSdkVersion=
|
|
2
|
-
QuickCrypto_targetSdkVersion=
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
QuickCrypto_compileSdkVersion=34
|
|
2
|
+
QuickCrypto_targetSdkVersion=34
|
|
3
|
+
QuickCrypto_minSdkVersion=23
|
|
4
|
+
QuickCrypto_ndkVersion=21.4.7075529
|
|
5
5
|
|
|
6
6
|
android.useAndroidX=true
|
|
@@ -1,60 +1,15 @@
|
|
|
1
|
-
#include <ReactCommon/CallInvokerHolder.h>
|
|
2
|
-
#include <fbjni/fbjni.h>
|
|
3
1
|
#include <jni.h>
|
|
4
|
-
#include <jsi/jsi.h>
|
|
5
2
|
|
|
6
|
-
#include "
|
|
3
|
+
#include "random/HybridRandom.hpp"
|
|
4
|
+
#include <NitroModules/HybridObjectRegistry.hpp>
|
|
7
5
|
|
|
8
|
-
using namespace
|
|
6
|
+
using namespace margelo::nitro::crypto;
|
|
7
|
+
using namespace margelo::crypto;
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
|
|
10
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
11
|
+
"Random", []() -> std::shared_ptr<HybridObject> { return std::make_shared<HybridRandom>();
|
|
12
|
+
});
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
initHybrid(jni::alias_ref<jhybridobject> jThis) {
|
|
17
|
-
return makeCxxInstance();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
CryptoCppAdapter() {}
|
|
21
|
-
|
|
22
|
-
void install(jsi::Runtime &runtime,
|
|
23
|
-
std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker) {
|
|
24
|
-
auto workerQueue = std::make_shared<margelo::DispatchQueue::dispatch_queue>(
|
|
25
|
-
"margelo crypto worker thread");
|
|
26
|
-
auto hostObject = std::make_shared<margelo::MGLQuickCryptoHostObject>(
|
|
27
|
-
jsCallInvoker, workerQueue);
|
|
28
|
-
auto object = jsi::Object::createFromHostObject(runtime, hostObject);
|
|
29
|
-
runtime.global().setProperty(runtime, "__QuickCryptoProxy",
|
|
30
|
-
std::move(object));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
void nativeInstall(
|
|
34
|
-
jlong jsiPtr,
|
|
35
|
-
jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
|
|
36
|
-
jsCallInvokerHolder) {
|
|
37
|
-
auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker();
|
|
38
|
-
auto runtime = reinterpret_cast<jsi::Runtime *>(jsiPtr);
|
|
39
|
-
if (runtime) {
|
|
40
|
-
install(*runtime, jsCallInvoker);
|
|
41
|
-
}
|
|
42
|
-
// if runtime was nullptr, QuickCrypto will not be installed. This should
|
|
43
|
-
// only happen while Remote Debugging (Chrome), but will be weird either
|
|
44
|
-
// way.
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
static void registerNatives() {
|
|
48
|
-
registerHybrid(
|
|
49
|
-
{makeNativeMethod("initHybrid", CryptoCppAdapter::initHybrid),
|
|
50
|
-
makeNativeMethod("nativeInstall", CryptoCppAdapter::nativeInstall)});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
private:
|
|
54
|
-
friend HybridBase;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
|
|
58
|
-
return facebook::jni::initialize(vm,
|
|
59
|
-
[] { CryptoCppAdapter::registerNatives(); });
|
|
14
|
+
return JNI_VERSION_1_2;
|
|
60
15
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package com.margelo.nitro.quickcrypto;
|
|
2
|
+
|
|
3
|
+
import android.util.Log;
|
|
4
|
+
import androidx.annotation.Nullable;
|
|
5
|
+
|
|
6
|
+
import com.facebook.react.bridge.NativeModule;
|
|
7
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
8
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
|
9
|
+
import com.facebook.react.TurboReactPackage;
|
|
10
|
+
|
|
11
|
+
import java.util.HashMap;
|
|
12
|
+
|
|
13
|
+
public class QuickCryptoPackage extends TurboReactPackage {
|
|
14
|
+
private static final String TAG = "QuickCrypto";
|
|
15
|
+
static {
|
|
16
|
+
try {
|
|
17
|
+
Log.i(TAG, "Loading C++ library...");
|
|
18
|
+
System.loadLibrary(TAG);
|
|
19
|
+
Log.i(TAG, "Successfully loaded C++ library!");
|
|
20
|
+
} catch (Throwable e) {
|
|
21
|
+
Log.e(TAG, "Failed to load C++ library! Is it properly installed and linked?", e);
|
|
22
|
+
throw e;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@Nullable
|
|
27
|
+
@Override
|
|
28
|
+
public NativeModule getModule(String name, ReactApplicationContext reactContext) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@Override
|
|
33
|
+
public ReactModuleInfoProvider getReactModuleInfoProvider() {
|
|
34
|
+
return () -> {
|
|
35
|
+
return new HashMap<>();
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#include "HybridRandom.hpp"
|
|
2
|
+
|
|
3
|
+
#include <openssl/err.h>
|
|
4
|
+
#include <openssl/rand.h>
|
|
5
|
+
|
|
6
|
+
namespace margelo::crypto {
|
|
7
|
+
|
|
8
|
+
using namespace margelo::nitro;
|
|
9
|
+
using namespace margelo::nitro::crypto;
|
|
10
|
+
|
|
11
|
+
std::future<std::shared_ptr<ArrayBuffer>> HybridRandom::randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset,
|
|
12
|
+
double dSize) {
|
|
13
|
+
size_t size = checkSize(dSize);
|
|
14
|
+
// copy the JSArrayBuffer that we do not own into a NativeArrayBuffer that we do own, before passing to sync function
|
|
15
|
+
uint8_t* data = new uint8_t[size];
|
|
16
|
+
memcpy(data, buffer.get()->data(), size);
|
|
17
|
+
std::shared_ptr<ArrayBuffer> nativeBuffer = std::make_shared<NativeArrayBuffer>(data, size, false);
|
|
18
|
+
|
|
19
|
+
return std::async(std::launch::async,
|
|
20
|
+
[this, nativeBuffer, dOffset, dSize]() { return this->randomFillSync(nativeBuffer, dOffset, dSize); });
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
std::shared_ptr<ArrayBuffer> HybridRandom::randomFillSync(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset, double dSize) {
|
|
24
|
+
size_t size = checkSize(dSize);
|
|
25
|
+
size_t offset = checkOffset(dSize, dOffset);
|
|
26
|
+
uint8_t* data = buffer.get()->data();
|
|
27
|
+
|
|
28
|
+
if (RAND_bytes(data + offset, (int)size) != 1) {
|
|
29
|
+
throw std::runtime_error("error calling RAND_bytes" + std::to_string(ERR_get_error()));
|
|
30
|
+
}
|
|
31
|
+
return std::make_shared<NativeArrayBuffer>(data, size, false);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
} // namespace margelo::crypto
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
2
|
+
#include <cmath>
|
|
3
|
+
#include <future>
|
|
4
|
+
|
|
5
|
+
#include "HybridRandomSpec.hpp"
|
|
6
|
+
|
|
7
|
+
#ifdef ANDROID
|
|
8
|
+
#include "utils/Utils.hpp"
|
|
9
|
+
#else
|
|
10
|
+
#include "Utils.hpp"
|
|
11
|
+
#endif
|
|
12
|
+
|
|
13
|
+
namespace margelo::crypto {
|
|
14
|
+
|
|
15
|
+
using namespace margelo::nitro;
|
|
16
|
+
using namespace margelo::nitro::crypto;
|
|
17
|
+
|
|
18
|
+
class HybridRandom : public HybridRandomSpec {
|
|
19
|
+
public:
|
|
20
|
+
std::future<std::shared_ptr<ArrayBuffer>> randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset, double dSize) override;
|
|
21
|
+
std::shared_ptr<ArrayBuffer> randomFillSync(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset, double dSize) override;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
inline size_t checkSize(double size) {
|
|
25
|
+
if (!CheckIsUint32(size)) {
|
|
26
|
+
throw std::runtime_error("size must be uint32");
|
|
27
|
+
}
|
|
28
|
+
if (static_cast<uint32_t>(size) > pow(2, 31) - 1) {
|
|
29
|
+
throw std::runtime_error("size must be less than 2^31 - 1");
|
|
30
|
+
}
|
|
31
|
+
return static_cast<size_t>(size);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
inline size_t checkOffset(double size, double offset) {
|
|
35
|
+
if (!CheckIsUint32(offset)) {
|
|
36
|
+
throw std::runtime_error("offset must be uint32");
|
|
37
|
+
}
|
|
38
|
+
if (offset > size) {
|
|
39
|
+
throw std::runtime_error("offset must be less than size");
|
|
40
|
+
}
|
|
41
|
+
return static_cast<size_t>(offset);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
} // namespace margelo::crypto
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#include <limits>
|
|
2
|
+
|
|
3
|
+
inline bool CheckIsUint32(double value) {
|
|
4
|
+
return (value >= std::numeric_limits<uint32_t>::lowest() && value <= std::numeric_limits<uint32_t>::max());
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
inline bool CheckIsInt32(double value) {
|
|
8
|
+
return (value >= std::numeric_limits<int32_t>::lowest() && value <= std::numeric_limits<int32_t>::max());
|
|
9
|
+
}
|