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,29 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// QuickCrypto-Swift-Cxx-Umbrella.hpp
|
|
3
|
+
/// Tue Aug 13 2024
|
|
4
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
5
|
+
/// https://github.com/mrousavy/react-native-nitro
|
|
6
|
+
/// Copyright © 2024 Marc Rousavy @ Margelo
|
|
7
|
+
///
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
// Forward declarations of C++ defined types
|
|
12
|
+
// Forward declaration of `ArrayBuffer` to properly resolve imports.
|
|
13
|
+
namespace NitroModules { class ArrayBuffer; }
|
|
14
|
+
|
|
15
|
+
// Include C++ defined types
|
|
16
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
17
|
+
|
|
18
|
+
// C++ helpers for Swift
|
|
19
|
+
#include "QuickCrypto-Swift-Cxx-Bridge.hpp"
|
|
20
|
+
|
|
21
|
+
// Forward declarations of Swift defined types
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// Include Swift defined types
|
|
25
|
+
#if __has_include("QuickCrypto-Swift.h")
|
|
26
|
+
#include "QuickCrypto-Swift.h"
|
|
27
|
+
#else
|
|
28
|
+
#error QuickCrypto's autogenerated Swift header cannot be found! Make sure the Swift module's name is actually "QuickCrypto", and try building the app first.
|
|
29
|
+
#endif
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// HybridRandomSpec.cpp
|
|
3
|
+
/// Tue Aug 13 2024
|
|
4
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
5
|
+
/// https://github.com/mrousavy/react-native-nitro
|
|
6
|
+
/// Copyright © 2024 Marc Rousavy @ Margelo
|
|
7
|
+
///
|
|
8
|
+
|
|
9
|
+
#include "HybridRandomSpec.hpp"
|
|
10
|
+
|
|
11
|
+
namespace margelo::nitro::crypto {
|
|
12
|
+
|
|
13
|
+
void HybridRandomSpec::loadHybridMethods() {
|
|
14
|
+
// load base methods/properties
|
|
15
|
+
HybridObject::loadHybridMethods();
|
|
16
|
+
// load custom methods/properties
|
|
17
|
+
registerHybrids(this, [](Prototype& prototype) {
|
|
18
|
+
prototype.registerHybridMethod("randomFill", &HybridRandomSpec::randomFill);
|
|
19
|
+
prototype.registerHybridMethod("randomFillSync", &HybridRandomSpec::randomFillSync);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// HybridRandomSpec.hpp
|
|
3
|
+
/// Tue Aug 13 2024
|
|
4
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
5
|
+
/// https://github.com/mrousavy/react-native-nitro
|
|
6
|
+
/// Copyright © 2024 Marc Rousavy @ Margelo
|
|
7
|
+
///
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#if __has_include(<NitroModules/HybridObject.hpp>)
|
|
12
|
+
#include <NitroModules/HybridObject.hpp>
|
|
13
|
+
#else
|
|
14
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
// Forward declaration of `ArrayBuffer` to properly resolve imports.
|
|
18
|
+
namespace NitroModules { class ArrayBuffer; }
|
|
19
|
+
|
|
20
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
21
|
+
|
|
22
|
+
namespace margelo::nitro::crypto {
|
|
23
|
+
|
|
24
|
+
using namespace margelo::nitro;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* An abstract base class for `Random`
|
|
28
|
+
* Inherit this class to create instances of `HybridRandomSpec` in C++.
|
|
29
|
+
* @example
|
|
30
|
+
* ```cpp
|
|
31
|
+
* class HybridRandom: public HybridRandomSpec {
|
|
32
|
+
* // ...
|
|
33
|
+
* };
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
class HybridRandomSpec: public HybridObject {
|
|
37
|
+
public:
|
|
38
|
+
// Constructor
|
|
39
|
+
explicit HybridRandomSpec(): HybridObject(TAG) { }
|
|
40
|
+
|
|
41
|
+
// Destructor
|
|
42
|
+
~HybridRandomSpec() { }
|
|
43
|
+
|
|
44
|
+
public:
|
|
45
|
+
// Properties
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
public:
|
|
49
|
+
// Methods
|
|
50
|
+
virtual std::future<std::shared_ptr<ArrayBuffer>> randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double offset, double size) = 0;
|
|
51
|
+
virtual std::shared_ptr<ArrayBuffer> randomFillSync(const std::shared_ptr<ArrayBuffer>& buffer, double offset, double size) = 0;
|
|
52
|
+
|
|
53
|
+
protected:
|
|
54
|
+
// Hybrid Setup
|
|
55
|
+
void loadHybridMethods() override;
|
|
56
|
+
|
|
57
|
+
protected:
|
|
58
|
+
// Tag for logging
|
|
59
|
+
static constexpr auto TAG = "Random";
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
} // namespace margelo::nitro::crypto
|
package/package.json
CHANGED
|
@@ -1,40 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-quick-crypto",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-beta.2",
|
|
4
4
|
"description": "A fast implementation of Node's `crypto` module written in C/C++ JSI",
|
|
5
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
6
|
"main": "lib/commonjs/index",
|
|
7
7
|
"module": "lib/module/index",
|
|
8
8
|
"types": "lib/typescript/index.d.ts",
|
|
9
|
-
"react-native": "
|
|
9
|
+
"react-native": "src/index",
|
|
10
10
|
"source": "src/index",
|
|
11
11
|
"files": [
|
|
12
12
|
"src",
|
|
13
13
|
"lib",
|
|
14
|
-
"android/src",
|
|
15
14
|
"android/build.gradle",
|
|
16
15
|
"android/gradle.properties",
|
|
17
16
|
"android/CMakeLists.txt",
|
|
17
|
+
"android/src",
|
|
18
18
|
"ios",
|
|
19
19
|
"cpp",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
20
|
+
"nitrogen",
|
|
21
|
+
"react-native.config.js",
|
|
22
|
+
"app.plugin.js",
|
|
23
|
+
"*.podspec",
|
|
24
|
+
"README.md",
|
|
24
25
|
"!**/__tests__",
|
|
25
26
|
"!**/__fixtures__",
|
|
26
27
|
"!**/__mocks__"
|
|
27
28
|
],
|
|
28
29
|
"scripts": {
|
|
30
|
+
"clean": "del-cli lib",
|
|
29
31
|
"tsc": "tsc --noEmit",
|
|
30
32
|
"typescript": "tsc --noEmit",
|
|
31
33
|
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"test": "jest"
|
|
34
|
+
"lint-fix": "eslint \"**/*.{js,ts,tsx}\" --fix",
|
|
35
|
+
"prepare": "bun clean && bob build",
|
|
36
|
+
"release-it": "bun prepare && release-it",
|
|
37
|
+
"test": "jest",
|
|
38
|
+
"postinstall": "bun tsc"
|
|
38
39
|
},
|
|
39
40
|
"keywords": [
|
|
40
41
|
"react-native",
|
|
@@ -50,7 +51,10 @@
|
|
|
50
51
|
"type": "git",
|
|
51
52
|
"url": "git+https://github.com/margelo/react-native-quick-crypto.git"
|
|
52
53
|
},
|
|
53
|
-
"authors":
|
|
54
|
+
"authors": [
|
|
55
|
+
"Szymon Kapała <szymon20000@gmail.com>",
|
|
56
|
+
"Marc Rousavy <me@mrousavy.com> (https://github.com/mrousavy)"
|
|
57
|
+
],
|
|
54
58
|
"license": "MIT",
|
|
55
59
|
"bugs": {
|
|
56
60
|
"url": "https://github.com/margelo/react-native-quick-crypto/issues"
|
|
@@ -60,109 +64,48 @@
|
|
|
60
64
|
"registry": "https://registry.npmjs.org/"
|
|
61
65
|
},
|
|
62
66
|
"dependencies": {
|
|
63
|
-
"@craftzdog/react-native-buffer": "
|
|
64
|
-
"events": "
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
67
|
+
"@craftzdog/react-native-buffer": "6.0.5",
|
|
68
|
+
"events": "3.3.0",
|
|
69
|
+
"react-native-nitro-modules": "0.4.0",
|
|
70
|
+
"react-native-quick-base64": "2.1.2",
|
|
71
|
+
"readable-stream": "4.5.2",
|
|
72
|
+
"string_decoder": "1.3.0",
|
|
73
|
+
"util": "0.12.5"
|
|
68
74
|
},
|
|
69
75
|
"devDependencies": {
|
|
70
|
-
"@
|
|
71
|
-
"@
|
|
72
|
-
"@
|
|
73
|
-
"@
|
|
74
|
-
"@
|
|
75
|
-
"@types/
|
|
76
|
-
"@types/
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"eslint": "^
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"react": "
|
|
85
|
-
"react-native": "
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"typescript": "^5.1.6"
|
|
76
|
+
"@eslint/compat": "^1.1.1",
|
|
77
|
+
"@eslint/js": "10.0.0",
|
|
78
|
+
"@release-it/bumper": "6.0.1",
|
|
79
|
+
"@types/jest": "29.5.11",
|
|
80
|
+
"@types/node": "22.0.0",
|
|
81
|
+
"@types/react": "18.3.3",
|
|
82
|
+
"@types/readable-stream": "4.0.11",
|
|
83
|
+
"del-cli": "5.1.0",
|
|
84
|
+
"eslint": "9.9.0",
|
|
85
|
+
"eslint-plugin-react-native": "^4.1.0",
|
|
86
|
+
"jest": "29.7.0",
|
|
87
|
+
"nitro-codegen": "0.4.0",
|
|
88
|
+
"prettier": "3.2.5",
|
|
89
|
+
"react": "18.3.1",
|
|
90
|
+
"react-native": "0.74.5",
|
|
91
|
+
"react-native-builder-bob": "0.29.1",
|
|
92
|
+
"release-it": "17.6.0",
|
|
93
|
+
"typescript": "5.1.6",
|
|
94
|
+
"typescript-eslint": "^8.1.0"
|
|
90
95
|
},
|
|
91
96
|
"peerDependencies": {
|
|
92
97
|
"react": "*",
|
|
93
98
|
"react-native": "*"
|
|
94
99
|
},
|
|
95
100
|
"release-it": {
|
|
96
|
-
"git": {
|
|
97
|
-
"commitMessage": "chore: release ${version}",
|
|
98
|
-
"tagName": "v${version}"
|
|
99
|
-
},
|
|
100
101
|
"npm": {
|
|
101
102
|
"publish": true
|
|
102
103
|
},
|
|
104
|
+
"git": false,
|
|
103
105
|
"github": {
|
|
104
|
-
"release":
|
|
106
|
+
"release": false
|
|
105
107
|
},
|
|
106
|
-
"plugins": {
|
|
107
|
-
"@release-it/conventional-changelog": {
|
|
108
|
-
"preset": {
|
|
109
|
-
"name": "conventionalcommits",
|
|
110
|
-
"types": [
|
|
111
|
-
{
|
|
112
|
-
"type": "feat",
|
|
113
|
-
"section": "✨ Features"
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"type": "fix",
|
|
117
|
-
"section": "🐛 Bug Fixes"
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
"type": "perf",
|
|
121
|
-
"section": "💨 Performance Improvements"
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"type": "chore(deps)",
|
|
125
|
-
"section": "🛠️ Dependency Upgrades"
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
"type": "docs",
|
|
129
|
-
"section": "📚 Documentation"
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
"eslintConfig": {
|
|
137
|
-
"root": true,
|
|
138
|
-
"extends": [
|
|
139
|
-
"@react-native",
|
|
140
|
-
"prettier"
|
|
141
|
-
],
|
|
142
|
-
"rules": {
|
|
143
|
-
"no-dupe-class-members": "off",
|
|
144
|
-
"prettier/prettier": [
|
|
145
|
-
"error",
|
|
146
|
-
{
|
|
147
|
-
"quoteProps": "consistent",
|
|
148
|
-
"singleQuote": true,
|
|
149
|
-
"tabWidth": 2,
|
|
150
|
-
"trailingComma": "es5",
|
|
151
|
-
"useTabs": false
|
|
152
|
-
}
|
|
153
|
-
]
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
"eslintIgnore": [
|
|
157
|
-
"node_modules/",
|
|
158
|
-
"lib/"
|
|
159
|
-
],
|
|
160
|
-
"prettier": {
|
|
161
|
-
"quoteProps": "consistent",
|
|
162
|
-
"singleQuote": true,
|
|
163
|
-
"tabWidth": 2,
|
|
164
|
-
"trailingComma": "es5",
|
|
165
|
-
"useTabs": false
|
|
108
|
+
"plugins": {}
|
|
166
109
|
},
|
|
167
110
|
"react-native-builder-bob": {
|
|
168
111
|
"source": "src",
|
|
@@ -173,7 +116,8 @@
|
|
|
173
116
|
[
|
|
174
117
|
"typescript",
|
|
175
118
|
{
|
|
176
|
-
"project": "tsconfig.json"
|
|
119
|
+
"project": "tsconfig.json",
|
|
120
|
+
"tsc": "../../node_modules/.bin/tsc"
|
|
177
121
|
}
|
|
178
122
|
]
|
|
179
123
|
]
|
package/src/index.ts
CHANGED
|
@@ -1,58 +1,45 @@
|
|
|
1
|
+
// polyfill imports
|
|
1
2
|
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
2
|
-
|
|
3
|
+
|
|
4
|
+
// API imports
|
|
3
5
|
import * as random from './random';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
createDecipher,
|
|
8
|
-
createDecipheriv,
|
|
9
|
-
publicEncrypt,
|
|
10
|
-
publicDecrypt,
|
|
11
|
-
privateDecrypt,
|
|
12
|
-
generateKeyPair,
|
|
13
|
-
generateKeyPairSync,
|
|
14
|
-
} from './Cipher';
|
|
15
|
-
import { generateKey, generateKeySync } from './keygen';
|
|
16
|
-
import { createSign, createVerify } from './sig';
|
|
17
|
-
import { createHmac } from './Hmac';
|
|
18
|
-
import { createHash } from './Hash';
|
|
19
|
-
import { constants } from './constants';
|
|
20
|
-
import { subtle } from './subtle';
|
|
21
|
-
import { getCiphers, getHashes } from './Utils';
|
|
22
|
-
import webcrypto from './webcrypto';
|
|
23
|
-
import { createPrivateKey, createPublicKey, createSecretKey } from './keys';
|
|
6
|
+
|
|
7
|
+
// utils import
|
|
8
|
+
import { utils } from './utils';
|
|
24
9
|
|
|
25
10
|
/**
|
|
26
|
-
* Loosely matches Node.js {crypto} with some unimplemented functionality
|
|
11
|
+
* Loosely matches Node.js {crypto} with some unimplemented functionality.
|
|
12
|
+
* See `docs/implementation-coverage.md` for status.
|
|
27
13
|
*/
|
|
28
14
|
const QuickCrypto = {
|
|
29
|
-
createHmac,
|
|
30
|
-
Hmac: createHmac,
|
|
31
|
-
Hash: createHash,
|
|
32
|
-
createHash,
|
|
33
|
-
createCipher,
|
|
34
|
-
createCipheriv,
|
|
35
|
-
createDecipher,
|
|
36
|
-
createDecipheriv,
|
|
37
|
-
createPublicKey,
|
|
38
|
-
createPrivateKey,
|
|
39
|
-
createSecretKey,
|
|
40
|
-
publicEncrypt,
|
|
41
|
-
publicDecrypt,
|
|
42
|
-
privateDecrypt,
|
|
43
|
-
generateKey,
|
|
44
|
-
generateKeyPair,
|
|
45
|
-
generateKeyPairSync,
|
|
46
|
-
generateKeySync,
|
|
47
|
-
createSign,
|
|
48
|
-
createVerify,
|
|
49
|
-
subtle,
|
|
50
|
-
constants,
|
|
51
|
-
...pbkdf2,
|
|
15
|
+
// createHmac,
|
|
16
|
+
// Hmac: createHmac,
|
|
17
|
+
// Hash: createHash,
|
|
18
|
+
// createHash,
|
|
19
|
+
// createCipher,
|
|
20
|
+
// createCipheriv,
|
|
21
|
+
// createDecipher,
|
|
22
|
+
// createDecipheriv,
|
|
23
|
+
// createPublicKey,
|
|
24
|
+
// createPrivateKey,
|
|
25
|
+
// createSecretKey,
|
|
26
|
+
// publicEncrypt,
|
|
27
|
+
// publicDecrypt,
|
|
28
|
+
// privateDecrypt,
|
|
29
|
+
// generateKey,
|
|
30
|
+
// generateKeyPair,
|
|
31
|
+
// generateKeyPairSync,
|
|
32
|
+
// generateKeySync,
|
|
33
|
+
// createSign,
|
|
34
|
+
// createVerify,
|
|
35
|
+
// subtle,
|
|
36
|
+
// constants,
|
|
37
|
+
// ...pbkdf2,
|
|
52
38
|
...random,
|
|
53
|
-
getCiphers,
|
|
54
|
-
getHashes,
|
|
55
|
-
webcrypto,
|
|
39
|
+
// getCiphers,
|
|
40
|
+
// getHashes,
|
|
41
|
+
// webcrypto,
|
|
42
|
+
utils,
|
|
56
43
|
};
|
|
57
44
|
|
|
58
45
|
/**
|
|
@@ -66,6 +53,9 @@ export const install = () => {
|
|
|
66
53
|
global.crypto = QuickCrypto;
|
|
67
54
|
};
|
|
68
55
|
|
|
56
|
+
// random, cipher, hash use nextTick
|
|
57
|
+
global.process.nextTick = setImmediate;
|
|
58
|
+
|
|
69
59
|
export default QuickCrypto;
|
|
70
60
|
|
|
71
61
|
// Additional exports for CommonJS compatibility
|
package/src/random.ts
CHANGED
|
@@ -1,35 +1,43 @@
|
|
|
1
|
-
import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
|
|
2
1
|
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import type { ArrayBufferView, RandomCallback } from './utils/types';
|
|
3
|
+
import { abvToArrayBuffer } from './utils/conversion';
|
|
4
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
5
|
+
import type { Random } from './specs/random.nitro';
|
|
6
|
+
|
|
7
|
+
// to use native bits in sub-functions, use getNative(). don't call it at top-level!
|
|
8
|
+
let random: Random;
|
|
9
|
+
function getNative(): Random {
|
|
10
|
+
if (random == null) {
|
|
11
|
+
// lazy-load the Nitro HybridObject
|
|
12
|
+
random = NitroModules.createHybridObject<Random>('Random');
|
|
13
|
+
}
|
|
14
|
+
return random;
|
|
15
|
+
}
|
|
8
16
|
|
|
9
17
|
export function randomFill<T extends ArrayBufferView>(
|
|
10
18
|
buffer: T,
|
|
11
|
-
callback:
|
|
19
|
+
callback: RandomCallback<T>
|
|
12
20
|
): void;
|
|
13
21
|
|
|
14
22
|
export function randomFill<T extends ArrayBufferView>(
|
|
15
23
|
buffer: T,
|
|
16
24
|
offset: number,
|
|
17
|
-
callback:
|
|
25
|
+
callback: RandomCallback<T>
|
|
18
26
|
): void;
|
|
19
27
|
|
|
20
28
|
export function randomFill<T extends ArrayBufferView>(
|
|
21
29
|
buffer: T,
|
|
22
30
|
offset: number,
|
|
23
31
|
size: number,
|
|
24
|
-
callback:
|
|
32
|
+
callback: RandomCallback<T>
|
|
25
33
|
): void;
|
|
26
34
|
|
|
27
|
-
export function randomFill(buffer:
|
|
35
|
+
export function randomFill(buffer: ArrayBufferView, ...rest: unknown[]): void {
|
|
28
36
|
if (typeof rest[rest.length - 1] !== 'function') {
|
|
29
37
|
throw new Error('No callback provided to randomFill');
|
|
30
38
|
}
|
|
31
39
|
|
|
32
|
-
const callback = rest[rest.length - 1] as
|
|
40
|
+
const callback = rest[rest.length - 1] as unknown as (
|
|
33
41
|
err: Error | null,
|
|
34
42
|
buf?: ArrayBuffer
|
|
35
43
|
) => void;
|
|
@@ -38,32 +46,23 @@ export function randomFill(buffer: any, ...rest: any[]): void {
|
|
|
38
46
|
let size: number = buffer.byteLength;
|
|
39
47
|
|
|
40
48
|
if (typeof rest[2] === 'function') {
|
|
41
|
-
offset = rest[0];
|
|
42
|
-
size = rest[1];
|
|
49
|
+
offset = rest[0] as number;
|
|
50
|
+
size = rest[1] as number;
|
|
43
51
|
}
|
|
44
52
|
|
|
45
53
|
if (typeof rest[1] === 'function') {
|
|
46
|
-
offset = rest[0];
|
|
54
|
+
offset = rest[0] as number;
|
|
47
55
|
}
|
|
48
56
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
)
|
|
59
|
-
.then(
|
|
60
|
-
() => {
|
|
61
|
-
callback(null, buffer);
|
|
62
|
-
},
|
|
63
|
-
(e: Error) => {
|
|
64
|
-
callback(e);
|
|
65
|
-
}
|
|
66
|
-
);
|
|
57
|
+
getNative();
|
|
58
|
+
random.randomFill(abvToArrayBuffer(buffer), offset, size).then(
|
|
59
|
+
(res: ArrayBuffer) => {
|
|
60
|
+
callback(null, res);
|
|
61
|
+
},
|
|
62
|
+
(e: Error) => {
|
|
63
|
+
callback(e);
|
|
64
|
+
}
|
|
65
|
+
);
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
export function randomFillSync<T extends ArrayBufferView>(
|
|
@@ -72,12 +71,15 @@ export function randomFillSync<T extends ArrayBufferView>(
|
|
|
72
71
|
size?: number
|
|
73
72
|
): T;
|
|
74
73
|
|
|
75
|
-
export function randomFillSync(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
);
|
|
74
|
+
export function randomFillSync(
|
|
75
|
+
buffer: ArrayBufferView,
|
|
76
|
+
offset: number = 0,
|
|
77
|
+
size?: number
|
|
78
|
+
) {
|
|
79
|
+
getNative();
|
|
80
|
+
buffer = abvToArrayBuffer(buffer);
|
|
81
|
+
const res = random.randomFillSync(buffer, offset, size ?? buffer.byteLength);
|
|
82
|
+
buffer = res;
|
|
81
83
|
return buffer;
|
|
82
84
|
}
|
|
83
85
|
|
|
@@ -99,11 +101,11 @@ export function randomBytes(
|
|
|
99
101
|
return buf;
|
|
100
102
|
}
|
|
101
103
|
|
|
102
|
-
randomFill(buf.buffer, 0, size, (error: Error | null) => {
|
|
104
|
+
randomFill(buf.buffer, 0, size, (error: Error | null, res: ArrayBuffer) => {
|
|
103
105
|
if (error) {
|
|
104
106
|
callback(error);
|
|
105
107
|
}
|
|
106
|
-
callback(null,
|
|
108
|
+
callback(null, Buffer.from(res));
|
|
107
109
|
});
|
|
108
110
|
}
|
|
109
111
|
|
|
@@ -126,7 +128,7 @@ const RAND_MAX = 0xffffffffffff;
|
|
|
126
128
|
|
|
127
129
|
// Cache random data to use in randomInt. The cache size must be evenly
|
|
128
130
|
// divisible by 6 because each attempt to obtain a random int uses 6 bytes.
|
|
129
|
-
|
|
131
|
+
let randomCache = new Buffer(6 * 1024);
|
|
130
132
|
let randomCacheOffset = randomCache.length;
|
|
131
133
|
let asyncCacheFillInProgress = false;
|
|
132
134
|
const asyncCachePendingTasks: Task[] = [];
|
|
@@ -156,12 +158,12 @@ export function randomInt(
|
|
|
156
158
|
typeof arg2 === 'undefined' || typeof arg2 === 'function';
|
|
157
159
|
|
|
158
160
|
if (minNotSpecified) {
|
|
159
|
-
callback = arg2 as
|
|
161
|
+
callback = arg2 as undefined | RandomIntCallback;
|
|
160
162
|
max = arg1;
|
|
161
163
|
min = 0;
|
|
162
164
|
} else {
|
|
163
165
|
min = arg1;
|
|
164
|
-
max = arg2 as
|
|
166
|
+
max = arg2 as number;
|
|
165
167
|
}
|
|
166
168
|
if (typeof callback !== 'undefined' && typeof callback !== 'function') {
|
|
167
169
|
throw new TypeError('callback must be a function or undefined');
|
|
@@ -217,7 +219,7 @@ export function randomInt(
|
|
|
217
219
|
if (x < randLimit) {
|
|
218
220
|
const n = (x % range) + min;
|
|
219
221
|
if (isSync) return n;
|
|
220
|
-
process.nextTick(callback as
|
|
222
|
+
process.nextTick(callback as RandomIntCallback, undefined, n);
|
|
221
223
|
return;
|
|
222
224
|
}
|
|
223
225
|
}
|
|
@@ -237,12 +239,15 @@ function asyncRefillRandomIntCache() {
|
|
|
237
239
|
if (asyncCacheFillInProgress) return;
|
|
238
240
|
|
|
239
241
|
asyncCacheFillInProgress = true;
|
|
240
|
-
randomFill(randomCache, (err) => {
|
|
242
|
+
randomFill(randomCache, (err, res) => {
|
|
241
243
|
asyncCacheFillInProgress = false;
|
|
242
244
|
|
|
243
245
|
const tasks = asyncCachePendingTasks;
|
|
244
246
|
const errorReceiver = err && tasks.shift();
|
|
245
|
-
if (!err)
|
|
247
|
+
if (!err) {
|
|
248
|
+
randomCache = Buffer.from(res);
|
|
249
|
+
randomCacheOffset = 0;
|
|
250
|
+
}
|
|
246
251
|
|
|
247
252
|
// Restart all pending tasks. If an error occurred, we only notify a single
|
|
248
253
|
// callback (errorReceiver) about it. This way, every async call to
|
|
@@ -289,9 +294,7 @@ export function randomUUID() {
|
|
|
289
294
|
randomFillSync(buffer, 0, size);
|
|
290
295
|
|
|
291
296
|
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
292
|
-
// eslint-disable-next-line no-bitwise
|
|
293
297
|
buffer[6] = (buffer[6]! & 0x0f) | 0x40;
|
|
294
|
-
// eslint-disable-next-line no-bitwise
|
|
295
298
|
buffer[8] = (buffer[8]! & 0x3f) | 0x80;
|
|
296
299
|
|
|
297
300
|
return (
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
|
|
3
|
+
export interface Random extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
4
|
+
randomFill(
|
|
5
|
+
buffer: ArrayBuffer,
|
|
6
|
+
offset: number,
|
|
7
|
+
size: number
|
|
8
|
+
): Promise<ArrayBuffer>;
|
|
9
|
+
randomFillSync(
|
|
10
|
+
buffer: ArrayBuffer,
|
|
11
|
+
offset: number,
|
|
12
|
+
size: number
|
|
13
|
+
): ArrayBuffer;
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
2
|
+
import type { ArrayBufferView } from './types';
|
|
3
|
+
|
|
4
|
+
export const abvToArrayBuffer = (buffer: ArrayBufferView) => {
|
|
5
|
+
if (Buffer.isBuffer(buffer)) {
|
|
6
|
+
return buffer.buffer;
|
|
7
|
+
}
|
|
8
|
+
if (ArrayBuffer.isView(buffer)) {
|
|
9
|
+
return buffer.buffer;
|
|
10
|
+
}
|
|
11
|
+
return buffer;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export function ab2str(buf: ArrayBuffer, encoding: string = 'hex') {
|
|
15
|
+
return Buffer.from(buf).toString(encoding);
|
|
16
|
+
}
|