react-native-quick-crypto 1.1.2 → 1.1.4
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 +2 -2
- package/android/build.gradle +2 -2
- package/cpp/utils/HybridUtils.cpp +60 -10
- package/cpp/utils/HybridUtils.hpp +4 -0
- package/lib/commonjs/expo-plugin/withXCode.js +3 -3
- package/lib/commonjs/index.js +4 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/subtle.js +692 -12
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/conversion.js +8 -6
- package/lib/commonjs/utils/conversion.js.map +1 -1
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/module/expo-plugin/withXCode.js +3 -3
- package/lib/module/index.js +4 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/subtle.js +693 -13
- package/lib/module/subtle.js.map +1 -1
- package/lib/module/utils/conversion.js +8 -6
- package/lib/module/utils/conversion.js.map +1 -1
- package/lib/module/utils/types.js.map +1 -1
- package/lib/typescript/index.d.ts +6 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/conversion.d.ts +5 -3
- package/lib/typescript/utils/conversion.d.ts.map +1 -1
- package/lib/typescript/utils/types.d.ts +3 -1
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/expo-plugin/withXCode.ts +3 -3
- package/src/index.ts +16 -3
- package/src/subtle.ts +736 -26
- package/src/utils/conversion.ts +8 -6
- package/src/utils/types.ts +5 -0
package/QuickCrypto.podspec
CHANGED
|
@@ -25,7 +25,7 @@ Pod::Spec.new do |s|
|
|
|
25
25
|
# Ensure libsodium source is present during podspec evaluation when enabled.
|
|
26
26
|
# This is necessary because prepare_command is skipped for :path pods.
|
|
27
27
|
if sodium_enabled
|
|
28
|
-
sodium_version = "1.0.
|
|
28
|
+
sodium_version = "1.0.22"
|
|
29
29
|
sodium_dir = File.join(__dir__, "ios", "libsodium-stable")
|
|
30
30
|
sodium_header = File.join(sodium_dir, "src", "libsodium", "include", "sodium.h")
|
|
31
31
|
unless File.exist?(sodium_header)
|
|
@@ -52,7 +52,7 @@ Pod::Spec.new do |s|
|
|
|
52
52
|
rm -f OpenSSL.xcframework.zip
|
|
53
53
|
# Build libsodium
|
|
54
54
|
mkdir -p ios
|
|
55
|
-
curl -L -o ios/libsodium.tar.gz https://download.libsodium.org/libsodium/releases/libsodium-1.0.
|
|
55
|
+
curl -L -o ios/libsodium.tar.gz https://download.libsodium.org/libsodium/releases/libsodium-1.0.22-stable.tar.gz
|
|
56
56
|
tar -xzf ios/libsodium.tar.gz -C ios
|
|
57
57
|
cd ios/libsodium-stable
|
|
58
58
|
./configure --disable-shared --enable-static
|
package/android/build.gradle
CHANGED
|
@@ -150,11 +150,11 @@ dependencies {
|
|
|
150
150
|
implementation project(":react-native-nitro-modules")
|
|
151
151
|
|
|
152
152
|
// Add a dependency on OpenSSL
|
|
153
|
-
implementation 'io.github.ronickg:openssl:3.6.
|
|
153
|
+
implementation 'io.github.ronickg:openssl:3.6.2-1'
|
|
154
154
|
|
|
155
155
|
if (sodiumEnabled) {
|
|
156
156
|
// Add a dependency on libsodium
|
|
157
|
-
implementation 'io.github.ronickg:sodium:1.0.
|
|
157
|
+
implementation 'io.github.ronickg:sodium:1.0.22-1'
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
|
|
@@ -142,11 +142,12 @@ namespace {
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
size_t offset = result.size();
|
|
145
|
-
result.
|
|
145
|
+
result.reserve(offset + (num * 2)); // Allocate buffer conservatively
|
|
146
146
|
|
|
147
|
-
auto* dst = result.data() + offset;
|
|
148
147
|
if (isAscii) {
|
|
149
148
|
// Widen ASCII characters from char into char16_t
|
|
149
|
+
result.resize(offset + (num * 2)); // This fills the buffer with '\0'
|
|
150
|
+
auto* dst = result.data() + offset;
|
|
150
151
|
const auto* asciiSrc = reinterpret_cast<const char*>(data);
|
|
151
152
|
for (size_t i = 0; i < num; i++, dst += 2) {
|
|
152
153
|
*dst = asciiSrc[i];
|
|
@@ -155,13 +156,16 @@ namespace {
|
|
|
155
156
|
return;
|
|
156
157
|
}
|
|
157
158
|
|
|
158
|
-
const auto* utf16Src = reinterpret_cast<const char16_t*>(data);
|
|
159
159
|
if constexpr (kCanDirectCopyUtf16) {
|
|
160
160
|
// Fast&direct copy path
|
|
161
|
-
|
|
161
|
+
const auto* byteSrc = reinterpret_cast<const uint8_t*>(data);
|
|
162
|
+
result.insert(result.end(), byteSrc, byteSrc + num * 2);
|
|
162
163
|
return;
|
|
163
164
|
}
|
|
164
165
|
// Slow path for unexpected endianness/char16_t size
|
|
166
|
+
result.resize(offset + (num * 2));
|
|
167
|
+
const auto* utf16Src = reinterpret_cast<const char16_t*>(data);
|
|
168
|
+
auto* dst = result.data() + offset;
|
|
165
169
|
for (size_t i = 0; i < num; i++) {
|
|
166
170
|
const uint16_t codeUnit = static_cast<uint16_t>(utf16Src[i]);
|
|
167
171
|
dst[i * 2 + 0] = static_cast<uint8_t>(codeUnit & 0xFFu);
|
|
@@ -175,7 +179,7 @@ namespace {
|
|
|
175
179
|
throw std::runtime_error("Unsupported encoding: utf16le");
|
|
176
180
|
}
|
|
177
181
|
|
|
178
|
-
std::vector<uint8_t>
|
|
182
|
+
std::vector<uint8_t> decodeLatin1FromUtf8(const std::string& str) {
|
|
179
183
|
std::vector<uint8_t> result;
|
|
180
184
|
result.reserve(str.size());
|
|
181
185
|
size_t i = 0;
|
|
@@ -204,6 +208,43 @@ namespace {
|
|
|
204
208
|
return result;
|
|
205
209
|
}
|
|
206
210
|
|
|
211
|
+
template <typename JSIString = facebook::jsi::String>
|
|
212
|
+
std::vector<uint8_t> decodeLatin1(facebook::jsi::Runtime& runtime, bool isHermes, const JSIString& str) {
|
|
213
|
+
if constexpr (HasStringGetStringData<JSIString>) {
|
|
214
|
+
if (isHermes) {
|
|
215
|
+
std::vector<uint8_t> result;
|
|
216
|
+
auto chunkCallback = [&result](bool isAscii, const void* data, size_t num) {
|
|
217
|
+
if (num == 0) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
size_t offset = result.size();
|
|
222
|
+
result.reserve(offset + num); // Allocate buffer conservatively
|
|
223
|
+
|
|
224
|
+
if (isAscii) {
|
|
225
|
+
// Fast&direct copy path
|
|
226
|
+
const auto* asciiSrc = reinterpret_cast<const uint8_t*>(data);
|
|
227
|
+
result.insert(result.end(), asciiSrc, asciiSrc + num);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
result.resize(offset + num);
|
|
232
|
+
const auto* utf16Src = reinterpret_cast<const char16_t*>(data);
|
|
233
|
+
auto* dst = result.data() + offset;
|
|
234
|
+
for (size_t i = 0; i < num; i++) {
|
|
235
|
+
// Node.js-like behavior
|
|
236
|
+
dst[i] = static_cast<uint8_t>(utf16Src[i] & 0xFFu);
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
str.getStringData(runtime, chunkCallback);
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Slow path for non-Hermes runtime/old RN versions
|
|
245
|
+
return decodeLatin1FromUtf8(str.utf8(runtime));
|
|
246
|
+
}
|
|
247
|
+
|
|
207
248
|
std::string encodeLatin1(const uint8_t* data, size_t len) {
|
|
208
249
|
if (len == 0) {
|
|
209
250
|
return {};
|
|
@@ -231,6 +272,15 @@ bool HybridUtils::timingSafeEqual(const std::shared_ptr<ArrayBuffer>& a, const s
|
|
|
231
272
|
return CRYPTO_memcmp(a->data(), b->data(), aLen) == 0;
|
|
232
273
|
}
|
|
233
274
|
|
|
275
|
+
bool HybridUtils::isHermesRuntime(facebook::jsi::Runtime& runtime) {
|
|
276
|
+
// Cache assumes runtimes are long-lived and calls happen on the JS thread.
|
|
277
|
+
if (cachedRuntime_ != &runtime) [[unlikely]] {
|
|
278
|
+
cachedRuntime_ = &runtime;
|
|
279
|
+
cachedIsHermesRuntime_ = runtime.global().hasProperty(runtime, "HermesInternal");
|
|
280
|
+
}
|
|
281
|
+
return cachedIsHermesRuntime_;
|
|
282
|
+
}
|
|
283
|
+
|
|
234
284
|
facebook::jsi::Value HybridUtils::bufferToJsiString(facebook::jsi::Runtime& runtime, const facebook::jsi::Value&,
|
|
235
285
|
const facebook::jsi::Value* args, size_t argCount) {
|
|
236
286
|
// Runtime argument check from react-native-nitro-modules/cpp/core/HybridFunction.hpp
|
|
@@ -261,13 +311,13 @@ facebook::jsi::Value HybridUtils::bufferToJsiString(facebook::jsi::Runtime& runt
|
|
|
261
311
|
const auto* data = reinterpret_cast<const uint8_t*>(buffer->data() + offset);
|
|
262
312
|
|
|
263
313
|
if (encoding == "hex") {
|
|
264
|
-
return facebook::jsi::String::
|
|
314
|
+
return facebook::jsi::String::createFromAscii(runtime, encodeHex(data, length));
|
|
265
315
|
}
|
|
266
316
|
if (encoding == "base64") {
|
|
267
|
-
return facebook::jsi::String::
|
|
317
|
+
return facebook::jsi::String::createFromAscii(runtime, encodeBase64(data, length));
|
|
268
318
|
}
|
|
269
319
|
if (encoding == "base64url") {
|
|
270
|
-
return facebook::jsi::String::
|
|
320
|
+
return facebook::jsi::String::createFromAscii(runtime, encodeBase64Url(data, length));
|
|
271
321
|
}
|
|
272
322
|
if (encoding == "utf8" || encoding == "utf-8") {
|
|
273
323
|
return facebook::jsi::String::createFromUtf8(runtime, data, length);
|
|
@@ -280,7 +330,7 @@ facebook::jsi::Value HybridUtils::bufferToJsiString(facebook::jsi::Runtime& runt
|
|
|
280
330
|
for (auto& c : result) {
|
|
281
331
|
c &= 0x7F;
|
|
282
332
|
}
|
|
283
|
-
return facebook::jsi::String::
|
|
333
|
+
return facebook::jsi::String::createFromAscii(runtime, result);
|
|
284
334
|
}
|
|
285
335
|
if (encoding == "utf16le") {
|
|
286
336
|
return createUtf16LeString(runtime, data, length);
|
|
@@ -322,7 +372,7 @@ facebook::jsi::Value HybridUtils::jsiStringToBuffer(facebook::jsi::Runtime& runt
|
|
|
322
372
|
runtime, ArrayBuffer::copy(reinterpret_cast<const uint8_t*>(utf8Str.data()), utf8Str.size()));
|
|
323
373
|
}
|
|
324
374
|
if (encoding == "latin1" || encoding == "binary" || encoding == "ascii") {
|
|
325
|
-
auto decoded = decodeLatin1(
|
|
375
|
+
auto decoded = decodeLatin1(runtime, isHermesRuntime(runtime), str);
|
|
326
376
|
return JSIConverter<std::shared_ptr<ArrayBuffer>>::toJSI(runtime, ArrayBuffer::move(std::move(decoded)));
|
|
327
377
|
}
|
|
328
378
|
if (encoding == "utf16le") {
|
|
@@ -15,6 +15,10 @@ class HybridUtils : public HybridUtilsSpec {
|
|
|
15
15
|
void loadHybridMethods() override;
|
|
16
16
|
|
|
17
17
|
private:
|
|
18
|
+
facebook::jsi::Runtime* cachedRuntime_ = nullptr;
|
|
19
|
+
bool cachedIsHermesRuntime_ = false;
|
|
20
|
+
|
|
21
|
+
bool isHermesRuntime(facebook::jsi::Runtime& runtime);
|
|
18
22
|
facebook::jsi::Value bufferToJsiString(facebook::jsi::Runtime& runtime, const facebook::jsi::Value& thisArg,
|
|
19
23
|
const facebook::jsi::Value* args, size_t argCount);
|
|
20
24
|
facebook::jsi::Value jsiStringToBuffer(facebook::jsi::Runtime& runtime, const facebook::jsi::Value& thisArg,
|
|
@@ -18,10 +18,10 @@ const withXCode = config => {
|
|
|
18
18
|
// Use expo-build-properties to bump iOS deployment target
|
|
19
19
|
config = (0, _expoBuildProperties.withBuildProperties)(config, {
|
|
20
20
|
ios: {
|
|
21
|
-
deploymentTarget: '16.
|
|
21
|
+
deploymentTarget: '16.4'
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
-
// Patch the generated Podfile fallback to ensure platform is always 16.
|
|
24
|
+
// Patch the generated Podfile fallback to ensure platform is always 16.4
|
|
25
25
|
config = (0, _configPlugins.withDangerousMod)(config, ['ios', modConfig => {
|
|
26
26
|
const podfilePath = _path.default.join(modConfig.modRequest.platformProjectRoot, 'Podfile');
|
|
27
27
|
let contents = _fs.default.readFileSync(podfilePath, 'utf-8');
|
|
@@ -37,7 +37,7 @@ const withXCode = config => {
|
|
|
37
37
|
# https://github.com/mrousavy/nitro/issues/422#issuecomment-2545988256
|
|
38
38
|
installer.pods_project.targets.each do |target|
|
|
39
39
|
target.build_configurations.each do |config|
|
|
40
|
-
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.
|
|
40
|
+
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.4'
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
$2`);
|
package/lib/commonjs/index.js
CHANGED
|
@@ -58,6 +58,7 @@ Object.defineProperty(exports, "subtle", {
|
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
60
|
var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
|
|
61
|
+
var _reactNativeQuickBase = require("react-native-quick-base64");
|
|
61
62
|
var argon2Module = _interopRequireWildcard(require("./argon2"));
|
|
62
63
|
Object.keys(argon2Module).forEach(function (key) {
|
|
63
64
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -313,9 +314,9 @@ const install = () => {
|
|
|
313
314
|
// @ts-expect-error subtle isn't fully implemented and Cryptokey is missing
|
|
314
315
|
global.crypto = QuickCrypto;
|
|
315
316
|
|
|
316
|
-
//
|
|
317
|
-
|
|
318
|
-
|
|
317
|
+
// react-native-quick-base64 v3 no longer installs these globals on import.
|
|
318
|
+
global.base64ToArrayBuffer = (s, removeLinebreaks) => (0, _reactNativeQuickBase.toByteArray)(s, removeLinebreaks).buffer;
|
|
319
|
+
global.base64FromArrayBuffer = (b, urlSafe) => (0, _reactNativeQuickBase.fromByteArray)(new Uint8Array(b), urlSafe);
|
|
319
320
|
};
|
|
320
321
|
|
|
321
322
|
// random, cipher, hash use nextTick
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeBuffer","require","argon2Module","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","blake3","cipher","ed","_hash","_hmac","hkdf","pbkdf2","prime","scrypt","random","ecdh","dh","mlkem","_certificate","_x509certificate","_ec","_constants","utils","subtle","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","QuickCrypto","hash","hmac","Certificate","X509Certificate","getCurves","constants","Buffer","install","global","crypto","process","nextTick","setImmediate","_default","module"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,kBAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_reactNativeBuffer","require","_reactNativeQuickBase","argon2Module","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","blake3","cipher","ed","_hash","_hmac","hkdf","pbkdf2","prime","scrypt","random","ecdh","dh","mlkem","_certificate","_x509certificate","_ec","_constants","utils","subtle","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","QuickCrypto","hash","hmac","Certificate","X509Certificate","getCurves","constants","Buffer","install","global","crypto","base64ToArrayBuffer","s","removeLinebreaks","toByteArray","buffer","base64FromArrayBuffer","b","urlSafe","fromByteArray","Uint8Array","process","nextTick","setImmediate","_default","module"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|