react-native-quick-crypto 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/QuickCrypto.podspec +21 -7
  2. package/android/CMakeLists.txt +1 -0
  3. package/cpp/cipher/HybridRsaCipher.cpp +111 -25
  4. package/cpp/cipher/HybridRsaCipher.hpp +5 -1
  5. package/cpp/hash/HybridHash.cpp +11 -4
  6. package/cpp/hash/HybridHash.hpp +1 -1
  7. package/cpp/hmac/HybridHmac.cpp +13 -4
  8. package/cpp/hmac/HybridHmac.hpp +2 -1
  9. package/cpp/utils/HybridUtils.cpp +19 -0
  10. package/cpp/utils/HybridUtils.hpp +15 -0
  11. package/lib/commonjs/hash.js +7 -1
  12. package/lib/commonjs/hash.js.map +1 -1
  13. package/lib/commonjs/hmac.js +7 -1
  14. package/lib/commonjs/hmac.js.map +1 -1
  15. package/lib/commonjs/keys/publicCipher.js +30 -18
  16. package/lib/commonjs/keys/publicCipher.js.map +1 -1
  17. package/lib/commonjs/specs/utils.nitro.js +6 -0
  18. package/lib/commonjs/specs/utils.nitro.js.map +1 -0
  19. package/lib/commonjs/utils/index.js +11 -0
  20. package/lib/commonjs/utils/index.js.map +1 -1
  21. package/lib/commonjs/utils/timingSafeEqual.js +24 -0
  22. package/lib/commonjs/utils/timingSafeEqual.js.map +1 -0
  23. package/lib/module/hash.js +7 -1
  24. package/lib/module/hash.js.map +1 -1
  25. package/lib/module/hmac.js +7 -1
  26. package/lib/module/hmac.js.map +1 -1
  27. package/lib/module/keys/publicCipher.js +30 -18
  28. package/lib/module/keys/publicCipher.js.map +1 -1
  29. package/lib/module/specs/utils.nitro.js +4 -0
  30. package/lib/module/specs/utils.nitro.js.map +1 -0
  31. package/lib/module/utils/index.js +1 -0
  32. package/lib/module/utils/index.js.map +1 -1
  33. package/lib/module/utils/timingSafeEqual.js +20 -0
  34. package/lib/module/utils/timingSafeEqual.js.map +1 -0
  35. package/lib/tsconfig.tsbuildinfo +1 -1
  36. package/lib/typescript/hash.d.ts.map +1 -1
  37. package/lib/typescript/hmac.d.ts.map +1 -1
  38. package/lib/typescript/index.d.ts +1 -0
  39. package/lib/typescript/index.d.ts.map +1 -1
  40. package/lib/typescript/keys/publicCipher.d.ts +2 -0
  41. package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
  42. package/lib/typescript/specs/hash.nitro.d.ts +1 -1
  43. package/lib/typescript/specs/hash.nitro.d.ts.map +1 -1
  44. package/lib/typescript/specs/hmac.nitro.d.ts +1 -1
  45. package/lib/typescript/specs/hmac.nitro.d.ts.map +1 -1
  46. package/lib/typescript/specs/rsaCipher.nitro.d.ts +14 -4
  47. package/lib/typescript/specs/rsaCipher.nitro.d.ts.map +1 -1
  48. package/lib/typescript/specs/utils.nitro.d.ts +8 -0
  49. package/lib/typescript/specs/utils.nitro.d.ts.map +1 -0
  50. package/lib/typescript/utils/index.d.ts +1 -0
  51. package/lib/typescript/utils/index.d.ts.map +1 -1
  52. package/lib/typescript/utils/timingSafeEqual.d.ts +3 -0
  53. package/lib/typescript/utils/timingSafeEqual.d.ts.map +1 -0
  54. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +1 -0
  55. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +10 -0
  56. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +10 -0
  57. package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +2 -1
  58. package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +2 -1
  59. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +1 -0
  60. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +2 -1
  61. package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +21 -0
  62. package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +63 -0
  63. package/package.json +2 -2
  64. package/src/hash.ts +6 -1
  65. package/src/hmac.ts +6 -1
  66. package/src/keys/publicCipher.ts +46 -26
  67. package/src/specs/hash.nitro.ts +1 -1
  68. package/src/specs/hmac.nitro.ts +1 -1
  69. package/src/specs/rsaCipher.nitro.ts +20 -3
  70. package/src/specs/utils.nitro.ts +5 -0
  71. package/src/utils/index.ts +1 -0
  72. package/src/utils/timingSafeEqual.ts +23 -0
  73. package/react-native.config.js +0 -19
  74. package/scripts/embed_openssl_framework.sh +0 -18
@@ -22,11 +22,22 @@ Pod::Spec.new do |s|
22
22
  sodium_enabled = ENV['SODIUM_ENABLED'] == '1'
23
23
  Pod::UI.puts("[QuickCrypto] 🧂 has libsodium #{sodium_enabled ? "enabled" : "disabled"}!")
24
24
 
25
+ # OpenSSL 3.6+ vendored xcframework (not yet on CocoaPods trunk)
26
+ openssl_version = "3.6.0000"
27
+ openssl_url = "https://github.com/krzyzanowskim/OpenSSL/releases/download/#{openssl_version}/OpenSSL.xcframework.zip"
28
+
25
29
  if sodium_enabled
26
30
  # Build libsodium from source for XSalsa20 cipher support
27
31
  # CocoaPods packages are outdated (1.0.12) and SPM causes module conflicts
28
32
  s.prepare_command = <<-CMD
29
33
  set -e
34
+ # Download OpenSSL.xcframework
35
+ if [ ! -d "OpenSSL.xcframework" ]; then
36
+ curl -L -o OpenSSL.xcframework.zip #{openssl_url}
37
+ unzip -o OpenSSL.xcframework.zip
38
+ rm -f OpenSSL.xcframework.zip
39
+ fi
40
+ # Build libsodium
30
41
  mkdir -p ios
31
42
  curl -L -o ios/libsodium.tar.gz https://download.libsodium.org/libsodium/releases/libsodium-1.0.20-stable.tar.gz
32
43
  tar -xzf ios/libsodium.tar.gz -C ios
@@ -38,11 +49,21 @@ Pod::Spec.new do |s|
38
49
  CMD
39
50
  else
40
51
  s.prepare_command = <<-CMD
52
+ set -e
53
+ # Download OpenSSL.xcframework
54
+ if [ ! -d "OpenSSL.xcframework" ]; then
55
+ curl -L -o OpenSSL.xcframework.zip #{openssl_url}
56
+ unzip -o OpenSSL.xcframework.zip
57
+ rm -f OpenSSL.xcframework.zip
58
+ fi
59
+ # Clean up libsodium if previously built
41
60
  rm -rf ios/libsodium-stable
42
61
  rm -f ios/libsodium.tar.gz
43
62
  CMD
44
63
  end
45
64
 
65
+ s.vendored_frameworks = "OpenSSL.xcframework"
66
+
46
67
  base_source_files = [
47
68
  # implementation (Swift)
48
69
  "ios/**/*.{swift}",
@@ -137,12 +158,5 @@ Pod::Spec.new do |s|
137
158
  s.dependency "React-jsi"
138
159
  s.dependency "React-callinvoker"
139
160
 
140
- # OpenSSL 3.6+ via SPM for ML-DSA (post-quantum cryptography) support
141
- spm_dependency(s,
142
- url: 'https://github.com/krzyzanowskim/OpenSSL.git',
143
- requirement: {kind: 'upToNextMajorVersion', minimumVersion: '3.6.0'},
144
- products: ['OpenSSL']
145
- )
146
-
147
161
  install_modules_dependencies(s)
148
162
  end
@@ -48,6 +48,7 @@ add_library(
48
48
  ../cpp/scrypt/HybridScrypt.cpp
49
49
  ../cpp/sign/HybridSignHandle.cpp
50
50
  ../cpp/sign/HybridVerifyHandle.cpp
51
+ ../cpp/utils/HybridUtils.cpp
51
52
  ${BLAKE3_SOURCES}
52
53
  ../deps/fastpbkdf2/fastpbkdf2.c
53
54
  ../deps/ncrypto/src/ncrypto.cpp
@@ -218,6 +218,79 @@ std::shared_ptr<ArrayBuffer> HybridRsaCipher::decrypt(const std::shared_ptr<Hybr
218
218
  return std::make_shared<NativeArrayBuffer>(out_buf.release(), outlen, [raw_ptr]() { delete[] raw_ptr; });
219
219
  }
220
220
 
221
+ std::shared_ptr<ArrayBuffer> HybridRsaCipher::publicDecrypt(const std::shared_ptr<HybridKeyObjectHandleSpec>& keyHandle,
222
+ const std::shared_ptr<ArrayBuffer>& data, double padding) {
223
+ auto keyHandleImpl = std::static_pointer_cast<HybridKeyObjectHandle>(keyHandle);
224
+ EVP_PKEY* pkey = keyHandleImpl->getKeyObjectData().GetAsymmetricKey().get();
225
+
226
+ if (!pkey) {
227
+ throw std::runtime_error("Invalid key for RSA public decryption");
228
+ }
229
+
230
+ EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new(pkey, nullptr);
231
+ if (!ctx) {
232
+ throw std::runtime_error("Failed to create EVP_PKEY_CTX");
233
+ }
234
+
235
+ if (EVP_PKEY_verify_recover_init(ctx) <= 0) {
236
+ EVP_PKEY_CTX_free(ctx);
237
+ unsigned long err = ERR_get_error();
238
+ char err_buf[256];
239
+ ERR_error_string_n(err, err_buf, sizeof(err_buf));
240
+ throw std::runtime_error("Failed to initialize verify recover: " + std::string(err_buf));
241
+ }
242
+
243
+ int paddingInt = static_cast<int>(padding);
244
+ int opensslPadding = toOpenSSLPadding(paddingInt);
245
+
246
+ if (EVP_PKEY_CTX_set_rsa_padding(ctx, opensslPadding) <= 0) {
247
+ EVP_PKEY_CTX_free(ctx);
248
+ throw std::runtime_error("Failed to set RSA padding");
249
+ }
250
+
251
+ auto native_data = ToNativeArrayBuffer(data);
252
+ const unsigned char* in = native_data->data();
253
+ size_t inlen = native_data->size();
254
+
255
+ size_t outlen;
256
+ if (EVP_PKEY_verify_recover(ctx, nullptr, &outlen, in, inlen) <= 0) {
257
+ EVP_PKEY_CTX_free(ctx);
258
+ unsigned long err = ERR_get_error();
259
+ char err_buf[256];
260
+ ERR_error_string_n(err, err_buf, sizeof(err_buf));
261
+ throw std::runtime_error("Failed to determine output length: " + std::string(err_buf));
262
+ }
263
+
264
+ if (outlen == 0) {
265
+ EVP_PKEY_CTX_free(ctx);
266
+ uint8_t* empty_buf = new uint8_t[1];
267
+ return std::make_shared<NativeArrayBuffer>(empty_buf, 0, [empty_buf]() { delete[] empty_buf; });
268
+ }
269
+
270
+ auto out_buf = std::make_unique<uint8_t[]>(outlen);
271
+
272
+ if (EVP_PKEY_verify_recover(ctx, out_buf.get(), &outlen, in, inlen) <= 0) {
273
+ unsigned long err = ERR_get_error();
274
+ char err_buf[256];
275
+ ERR_error_string_n(err, err_buf, sizeof(err_buf));
276
+
277
+ if ((err & 0xFFFFFFF) == 0x1C880004 || (err & 0xFF) == 0x04) {
278
+ ERR_clear_error();
279
+ EVP_PKEY_CTX_free(ctx);
280
+ uint8_t* empty_buf = new uint8_t[1];
281
+ return std::make_shared<NativeArrayBuffer>(empty_buf, 0, [empty_buf]() { delete[] empty_buf; });
282
+ }
283
+
284
+ EVP_PKEY_CTX_free(ctx);
285
+ throw std::runtime_error("Public decryption failed: " + std::string(err_buf));
286
+ }
287
+
288
+ EVP_PKEY_CTX_free(ctx);
289
+
290
+ uint8_t* raw_ptr = out_buf.get();
291
+ return std::make_shared<NativeArrayBuffer>(out_buf.release(), outlen, [raw_ptr]() { delete[] raw_ptr; });
292
+ }
293
+
221
294
  std::shared_ptr<ArrayBuffer> HybridRsaCipher::privateEncrypt(const std::shared_ptr<HybridKeyObjectHandleSpec>& keyHandle,
222
295
  const std::shared_ptr<ArrayBuffer>& data, double padding) {
223
296
  auto keyHandleImpl = std::static_pointer_cast<HybridKeyObjectHandle>(keyHandle);
@@ -278,7 +351,9 @@ std::shared_ptr<ArrayBuffer> HybridRsaCipher::privateEncrypt(const std::shared_p
278
351
  }
279
352
 
280
353
  std::shared_ptr<ArrayBuffer> HybridRsaCipher::privateDecrypt(const std::shared_ptr<HybridKeyObjectHandleSpec>& keyHandle,
281
- const std::shared_ptr<ArrayBuffer>& data, double padding) {
354
+ const std::shared_ptr<ArrayBuffer>& data, double padding,
355
+ const std::string& hashAlgorithm,
356
+ const std::optional<std::shared_ptr<ArrayBuffer>>& label) {
282
357
  auto keyHandleImpl = std::static_pointer_cast<HybridKeyObjectHandle>(keyHandle);
283
358
  EVP_PKEY* pkey = keyHandleImpl->getKeyObjectData().GetAsymmetricKey().get();
284
359
 
@@ -291,12 +366,12 @@ std::shared_ptr<ArrayBuffer> HybridRsaCipher::privateDecrypt(const std::shared_p
291
366
  throw std::runtime_error("Failed to create EVP_PKEY_CTX");
292
367
  }
293
368
 
294
- if (EVP_PKEY_verify_recover_init(ctx) <= 0) {
369
+ if (EVP_PKEY_decrypt_init(ctx) <= 0) {
295
370
  EVP_PKEY_CTX_free(ctx);
296
371
  unsigned long err = ERR_get_error();
297
372
  char err_buf[256];
298
373
  ERR_error_string_n(err, err_buf, sizeof(err_buf));
299
- throw std::runtime_error("Failed to initialize verify recover: " + std::string(err_buf));
374
+ throw std::runtime_error("Failed to initialize decryption: " + std::string(err_buf));
300
375
  }
301
376
 
302
377
  int paddingInt = static_cast<int>(padding);
@@ -307,12 +382,41 @@ std::shared_ptr<ArrayBuffer> HybridRsaCipher::privateDecrypt(const std::shared_p
307
382
  throw std::runtime_error("Failed to set RSA padding");
308
383
  }
309
384
 
385
+ if (paddingInt == kRsaOaepPadding) {
386
+ const EVP_MD* md = getDigestByName(hashAlgorithm);
387
+ if (EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) <= 0) {
388
+ EVP_PKEY_CTX_free(ctx);
389
+ throw std::runtime_error("Failed to set OAEP hash algorithm");
390
+ }
391
+
392
+ if (EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) <= 0) {
393
+ EVP_PKEY_CTX_free(ctx);
394
+ throw std::runtime_error("Failed to set MGF1 hash algorithm");
395
+ }
396
+
397
+ if (label.has_value() && label.value()->size() > 0) {
398
+ auto native_label = ToNativeArrayBuffer(label.value());
399
+ unsigned char* label_copy = (unsigned char*)OPENSSL_malloc(native_label->size());
400
+ if (!label_copy) {
401
+ EVP_PKEY_CTX_free(ctx);
402
+ throw std::runtime_error("Failed to allocate memory for label");
403
+ }
404
+ std::memcpy(label_copy, native_label->data(), native_label->size());
405
+
406
+ if (EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, label_copy, native_label->size()) <= 0) {
407
+ OPENSSL_free(label_copy);
408
+ EVP_PKEY_CTX_free(ctx);
409
+ throw std::runtime_error("Failed to set OAEP label");
410
+ }
411
+ }
412
+ }
413
+
310
414
  auto native_data = ToNativeArrayBuffer(data);
311
415
  const unsigned char* in = native_data->data();
312
416
  size_t inlen = native_data->size();
313
417
 
314
418
  size_t outlen;
315
- if (EVP_PKEY_verify_recover(ctx, nullptr, &outlen, in, inlen) <= 0) {
419
+ if (EVP_PKEY_decrypt(ctx, nullptr, &outlen, in, inlen) <= 0) {
316
420
  EVP_PKEY_CTX_free(ctx);
317
421
  unsigned long err = ERR_get_error();
318
422
  char err_buf[256];
@@ -320,32 +424,13 @@ std::shared_ptr<ArrayBuffer> HybridRsaCipher::privateDecrypt(const std::shared_p
320
424
  throw std::runtime_error("Failed to determine output length: " + std::string(err_buf));
321
425
  }
322
426
 
323
- if (outlen == 0) {
324
- EVP_PKEY_CTX_free(ctx);
325
- uint8_t* empty_buf = new uint8_t[1];
326
- return std::make_shared<NativeArrayBuffer>(empty_buf, 0, [empty_buf]() { delete[] empty_buf; });
327
- }
328
-
329
427
  auto out_buf = std::make_unique<uint8_t[]>(outlen);
330
428
 
331
- if (EVP_PKEY_verify_recover(ctx, out_buf.get(), &outlen, in, inlen) <= 0) {
332
- // OpenSSL 3.x may return failure when recovering empty plaintext
333
- // In this case outlen is not updated from the initial buffer size
334
- // Check the error and attempt to handle the empty data case
429
+ if (EVP_PKEY_decrypt(ctx, out_buf.get(), &outlen, in, inlen) <= 0) {
430
+ EVP_PKEY_CTX_free(ctx);
335
431
  unsigned long err = ERR_get_error();
336
432
  char err_buf[256];
337
433
  ERR_error_string_n(err, err_buf, sizeof(err_buf));
338
-
339
- // Check if this is an RSA library error that might indicate empty recovered data
340
- // Error code 0x1C880004 is "RSA lib" error from OpenSSL 3.x provider
341
- if ((err & 0xFFFFFFF) == 0x1C880004 || (err & 0xFF) == 0x04) {
342
- ERR_clear_error();
343
- EVP_PKEY_CTX_free(ctx);
344
- uint8_t* empty_buf = new uint8_t[1];
345
- return std::make_shared<NativeArrayBuffer>(empty_buf, 0, [empty_buf]() { delete[] empty_buf; });
346
- }
347
-
348
- EVP_PKEY_CTX_free(ctx);
349
434
  throw std::runtime_error("Private decryption failed: " + std::string(err_buf));
350
435
  }
351
436
 
@@ -359,6 +444,7 @@ void HybridRsaCipher::loadHybridMethods() {
359
444
  registerHybrids(this, [](Prototype& prototype) {
360
445
  prototype.registerHybridMethod("encrypt", &HybridRsaCipher::encrypt);
361
446
  prototype.registerHybridMethod("decrypt", &HybridRsaCipher::decrypt);
447
+ prototype.registerHybridMethod("publicDecrypt", &HybridRsaCipher::publicDecrypt);
362
448
  prototype.registerHybridMethod("privateEncrypt", &HybridRsaCipher::privateEncrypt);
363
449
  prototype.registerHybridMethod("privateDecrypt", &HybridRsaCipher::privateDecrypt);
364
450
  });
@@ -17,11 +17,15 @@ class HybridRsaCipher : public HybridRsaCipherSpec {
17
17
  const std::shared_ptr<ArrayBuffer>& data, double padding, const std::string& hashAlgorithm,
18
18
  const std::optional<std::shared_ptr<ArrayBuffer>>& label) override;
19
19
 
20
+ std::shared_ptr<ArrayBuffer> publicDecrypt(const std::shared_ptr<HybridKeyObjectHandleSpec>& keyHandle,
21
+ const std::shared_ptr<ArrayBuffer>& data, double padding) override;
22
+
20
23
  std::shared_ptr<ArrayBuffer> privateEncrypt(const std::shared_ptr<HybridKeyObjectHandleSpec>& keyHandle,
21
24
  const std::shared_ptr<ArrayBuffer>& data, double padding) override;
22
25
 
23
26
  std::shared_ptr<ArrayBuffer> privateDecrypt(const std::shared_ptr<HybridKeyObjectHandleSpec>& keyHandle,
24
- const std::shared_ptr<ArrayBuffer>& data, double padding) override;
27
+ const std::shared_ptr<ArrayBuffer>& data, double padding, const std::string& hashAlgorithm,
28
+ const std::optional<std::shared_ptr<ArrayBuffer>>& label) override;
25
29
 
26
30
  void loadHybridMethods() override;
27
31
  };
@@ -68,14 +68,21 @@ void HybridHash::createHash(const std::string& hashAlgorithmArg, const std::opti
68
68
  }
69
69
  }
70
70
 
71
- void HybridHash::update(const std::shared_ptr<ArrayBuffer>& data) {
71
+ void HybridHash::update(const std::variant<std::string, std::shared_ptr<ArrayBuffer>>& data) {
72
72
  if (!ctx) {
73
73
  throw std::runtime_error("Hash context not initialized");
74
74
  }
75
75
 
76
- // Update the digest with the data
77
- if (EVP_DigestUpdate(ctx, reinterpret_cast<const uint8_t*>(data->data()), data->size()) != 1) {
78
- throw std::runtime_error("Failed to update hash digest: " + std::to_string(ERR_get_error()));
76
+ if (std::holds_alternative<std::string>(data)) {
77
+ const std::string& str = std::get<std::string>(data);
78
+ if (EVP_DigestUpdate(ctx, reinterpret_cast<const uint8_t*>(str.data()), str.length()) != 1) {
79
+ throw std::runtime_error("Failed to update hash digest: " + std::to_string(ERR_get_error()));
80
+ }
81
+ } else {
82
+ const std::shared_ptr<ArrayBuffer>& buffer = std::get<std::shared_ptr<ArrayBuffer>>(data);
83
+ if (EVP_DigestUpdate(ctx, reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size()) != 1) {
84
+ throw std::runtime_error("Failed to update hash digest: " + std::to_string(ERR_get_error()));
85
+ }
79
86
  }
80
87
  }
81
88
 
@@ -21,7 +21,7 @@ class HybridHash : public HybridHashSpec {
21
21
  public:
22
22
  // Methods
23
23
  void createHash(const std::string& algorithm, const std::optional<double> outputLength) override;
24
- void update(const std::shared_ptr<ArrayBuffer>& data) override;
24
+ void update(const std::variant<std::string, std::shared_ptr<ArrayBuffer>>& data) override;
25
25
  std::shared_ptr<ArrayBuffer> digest(const std::optional<std::string>& encoding = std::nullopt) override;
26
26
  std::shared_ptr<margelo::nitro::crypto::HybridHashSpec> copy(const std::optional<double> outputLength) override;
27
27
  std::vector<std::string> getSupportedHashAlgorithms() override;
@@ -60,14 +60,23 @@ void HybridHmac::createHmac(const std::string& hmacAlgorithm, const std::shared_
60
60
  }
61
61
  }
62
62
 
63
- void HybridHmac::update(const std::shared_ptr<ArrayBuffer>& data) {
63
+ void HybridHmac::update(const std::variant<std::string, std::shared_ptr<ArrayBuffer>>& data) {
64
64
  if (!ctx) {
65
65
  throw std::runtime_error("HMAC context not initialized");
66
66
  }
67
67
 
68
- // Update HMAC with new data
69
- if (EVP_MAC_update(ctx, reinterpret_cast<const uint8_t*>(data->data()), data->size()) != 1) {
70
- throw std::runtime_error("Failed to update HMAC: " + std::to_string(ERR_get_error()));
68
+ if (std::holds_alternative<std::string>(data)) {
69
+ // Handle string: pass UTF-8 bytes directly to OpenSSL
70
+ const std::string& str = std::get<std::string>(data);
71
+ if (EVP_MAC_update(ctx, reinterpret_cast<const uint8_t*>(str.data()), str.length()) != 1) {
72
+ throw std::runtime_error("Failed to update HMAC: " + std::to_string(ERR_get_error()));
73
+ }
74
+ } else {
75
+ // Handle ArrayBuffer
76
+ const std::shared_ptr<ArrayBuffer>& buffer = std::get<std::shared_ptr<ArrayBuffer>>(data);
77
+ if (EVP_MAC_update(ctx, reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size()) != 1) {
78
+ throw std::runtime_error("Failed to update HMAC: " + std::to_string(ERR_get_error()));
79
+ }
71
80
  }
72
81
  }
73
82
 
@@ -3,6 +3,7 @@
3
3
  #include <openssl/evp.h>
4
4
  #include <optional>
5
5
  #include <string>
6
+ #include <variant>
6
7
  #include <vector>
7
8
 
8
9
  #include "HybridHmacSpec.hpp"
@@ -19,7 +20,7 @@ class HybridHmac : public HybridHmacSpec {
19
20
  public:
20
21
  // Methods
21
22
  void createHmac(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key) override;
22
- void update(const std::shared_ptr<ArrayBuffer>& data) override;
23
+ void update(const std::variant<std::string, std::shared_ptr<ArrayBuffer>>& data) override;
23
24
  std::shared_ptr<ArrayBuffer> digest() override;
24
25
 
25
26
  private:
@@ -0,0 +1,19 @@
1
+ #include "HybridUtils.hpp"
2
+
3
+ #include <openssl/crypto.h>
4
+ #include <stdexcept>
5
+
6
+ namespace margelo::nitro::crypto {
7
+
8
+ bool HybridUtils::timingSafeEqual(const std::shared_ptr<ArrayBuffer>& a, const std::shared_ptr<ArrayBuffer>& b) {
9
+ size_t aLen = a->size();
10
+ size_t bLen = b->size();
11
+
12
+ if (aLen != bLen) {
13
+ throw std::runtime_error("Input buffers must have the same byte length");
14
+ }
15
+
16
+ return CRYPTO_memcmp(a->data(), b->data(), aLen) == 0;
17
+ }
18
+
19
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,15 @@
1
+ #pragma once
2
+
3
+ #include "HybridUtilsSpec.hpp"
4
+
5
+ namespace margelo::nitro::crypto {
6
+
7
+ class HybridUtils : public HybridUtilsSpec {
8
+ public:
9
+ HybridUtils() : HybridObject(TAG) {}
10
+
11
+ public:
12
+ bool timingSafeEqual(const std::shared_ptr<ArrayBuffer>& a, const std::shared_ptr<ArrayBuffer>& b) override;
13
+ };
14
+
15
+ } // namespace margelo::nitro::crypto
@@ -59,7 +59,13 @@ class Hash extends _readableStream.Stream.Transform {
59
59
  update(data, inputEncoding) {
60
60
  const defaultEncoding = 'utf8';
61
61
  inputEncoding = inputEncoding ?? defaultEncoding;
62
- this.native.update((0, _utils.binaryLikeToArrayBuffer)(data, inputEncoding));
62
+
63
+ // OPTIMIZED PATH: Pass UTF-8 strings directly to native without conversion
64
+ if (typeof data === 'string' && inputEncoding === 'utf8') {
65
+ this.native.update(data);
66
+ } else {
67
+ this.native.update((0, _utils.binaryLikeToArrayBuffer)(data, inputEncoding));
68
+ }
63
69
  return this; // to support chaining syntax createHash().update().digest()
64
70
  }
65
71
 
@@ -1 +1 @@
1
- {"version":3,"names":["_readableStream","require","_reactNativeNitroModules","_utils","_validation","_errors","_hashnames","HashUtils","native","NitroModules","createHybridObject","getSupportedHashAlgorithms","getHashes","Hash","Stream","Transform","validate","args","algorithm","length","Error","options","outputLength","undefined","constructor","createHash","update","data","inputEncoding","defaultEncoding","binaryLikeToArrayBuffer","digest","encoding","nativeDigest","ab2str","Buffer","from","copy","newOptions","newNativeHash","hash","getOpenSSLVersion","_transform","chunk","callback","_flush","push","asyncDigest","validateMaxBufferLength","name","internalDigest","lazyDOMException","exports","normalizedHashName","normalizeHashName","bufferLikeToArrayBuffer","result","arrayBuffer","ArrayBuffer","view","Uint8Array","set","hashExports"],"sourceRoot":"../../src","sources":["hash.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_readableStream","require","_reactNativeNitroModules","_utils","_validation","_errors","_hashnames","HashUtils","native","NitroModules","createHybridObject","getSupportedHashAlgorithms","getHashes","Hash","Stream","Transform","validate","args","algorithm","length","Error","options","outputLength","undefined","constructor","createHash","update","data","inputEncoding","defaultEncoding","binaryLikeToArrayBuffer","digest","encoding","nativeDigest","ab2str","Buffer","from","copy","newOptions","newNativeHash","hash","getOpenSSLVersion","_transform","chunk","callback","_flush","push","asyncDigest","validateMaxBufferLength","name","internalDigest","lazyDOMException","exports","normalizedHashName","normalizeHashName","bufferLikeToArrayBuffer","result","arrayBuffer","ArrayBuffer","view","Uint8Array","set","hashExports"],"sourceRoot":"../../src","sources":["hash.ts"],"mappings":"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","ignoreList":[]}
@@ -40,7 +40,13 @@ class Hmac extends _readableStream.Stream.Transform {
40
40
  update(data, inputEncoding) {
41
41
  const defaultEncoding = 'utf8';
42
42
  inputEncoding = inputEncoding ?? defaultEncoding;
43
- this.native.update((0, _conversion.binaryLikeToArrayBuffer)(data, inputEncoding));
43
+
44
+ // Optimize: pass UTF-8 strings directly to C++ without conversion
45
+ if (typeof data === 'string' && inputEncoding === 'utf8') {
46
+ this.native.update(data);
47
+ } else {
48
+ this.native.update((0, _conversion.binaryLikeToArrayBuffer)(data, inputEncoding));
49
+ }
44
50
  return this; // to support chaining syntax createHmac().update().digest()
45
51
  }
46
52
 
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeBuffer","require","_readableStream","_reactNativeNitroModules","_conversion","Hmac","Stream","Transform","validate","args","algorithm","length","Error","key","undefined","constructor","options","native","NitroModules","createHybridObject","createHmac","binaryLikeToArrayBuffer","update","data","inputEncoding","defaultEncoding","digest","encoding","nativeDigest","ab2str","Buffer","from","_transform","chunk","callback","_flush","push","hmacExports","exports"],"sourceRoot":"../../src","sources":["hmac.ts"],"mappings":";;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,wBAAA,GAAAF,OAAA;AAIA,IAAAG,WAAA,GAAAH,OAAA;AAQA,MAAMI,IAAI,SAASC,sBAAM,CAACC,SAAS,CAAC;EAK1BC,QAAQA,CAACC,IAAc,EAAE;IAC/B,IAAI,OAAOA,IAAI,CAACC,SAAS,KAAK,QAAQ,IAAID,IAAI,CAACC,SAAS,CAACC,MAAM,KAAK,CAAC,EACnE,MAAM,IAAIC,KAAK,CAAC,sCAAsC,CAAC;IACzD,IAAIH,IAAI,CAACI,GAAG,KAAK,IAAI,IAAIJ,IAAI,CAACI,GAAG,KAAKC,SAAS,EAC7C,MAAM,IAAIF,KAAK,CAAC,mCAAmC,CAAC;EACxD;;EAEA;AACF;AACA;EACUG,WAAWA,CAACN,IAAc,EAAE;IAClC,KAAK,CAACA,IAAI,CAACO,OAAO,CAAC;IAEnB,IAAI,CAACR,QAAQ,CAACC,IAAI,CAAC;IAEnB,IAAI,CAACC,SAAS,GAAGD,IAAI,CAACC,SAAS;IAC/B,IAAI,CAACG,GAAG,GAAGJ,IAAI,CAACI,GAAG;IAEnB,IAAI,CAACI,MAAM,GAAGC,qCAAY,CAACC,kBAAkB,CAAa,MAAM,CAAC;IACjE,IAAI,CAACF,MAAM,CAACG,UAAU,CAAC,IAAI,CAACV,SAAS,EAAE,IAAAW,mCAAuB,EAAC,IAAI,CAACR,GAAG,CAAC,CAAC;EAC3E;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGES,MAAMA,CAACC,IAAgB,EAAEC,aAAwB,EAAQ;IACvD,MAAMC,eAAyB,GAAG,MAAM;IACxCD,aAAa,GAAGA,aAAa,IAAIC,eAAe;IAEhD,IAAI,CAACR,MAAM,CAACK,MAAM,CAAC,IAAAD,mCAAuB,EAACE,IAAI,EAAEC,aAAa,CAAC,CAAC;IAEhE,OAAO,IAAI,CAAC,CAAC;EACf;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGEE,MAAMA,CAACC,QAAmB,EAAmB;IAC3C,MAAMC,YAAY,GAAG,IAAI,CAACX,MAAM,CAACS,MAAM,CAAC,CAAC;IAEzC,IAAIC,QAAQ,IAAIA,QAAQ,KAAK,QAAQ,EAAE;MACrC,OAAO,IAAAE,kBAAM,EAACD,YAAY,EAAED,QAAQ,CAAC;IACvC;IAEA,OAAOG,yBAAM,CAACC,IAAI,CAACH,YAAY,CAAC;EAClC;;EAEA;EACAI,UAAUA,CACRC,KAAiB,EACjBN,QAAwB,EACxBO,QAAoB,EACpB;IACA,IAAI,CAACZ,MAAM,CAACW,KAAK,EAAEN,QAAoB,CAAC;IACxCO,QAAQ,CAAC,CAAC;EACZ;EACAC,MAAMA,CAACD,QAAoB,EAAE;IAC3B,IAAI,CAACE,IAAI,CAAC,IAAI,CAACV,MAAM,CAAC,CAAC,CAAC;IACxBQ,QAAQ,CAAC,CAAC;EACZ;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASd,UAAUA,CACxBV,SAAiB,EACjBG,GAAe,EACfG,OAA0B,EACpB;EACN;EACA,OAAO,IAAIX,IAAI,CAAC;IACdK,SAAS;IACTG,GAAG;IACHG;EACF,CAAC,CAAC;AACJ;AAEO,MAAMqB,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG;EACzBjB;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeBuffer","require","_readableStream","_reactNativeNitroModules","_conversion","Hmac","Stream","Transform","validate","args","algorithm","length","Error","key","undefined","constructor","options","native","NitroModules","createHybridObject","createHmac","binaryLikeToArrayBuffer","update","data","inputEncoding","defaultEncoding","digest","encoding","nativeDigest","ab2str","Buffer","from","_transform","chunk","callback","_flush","push","hmacExports","exports"],"sourceRoot":"../../src","sources":["hmac.ts"],"mappings":"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","ignoreList":[]}
@@ -21,18 +21,22 @@ function preparePublicCipherKey(key, isEncrypt) {
21
21
  if (isEncrypt && key.type !== 'public') {
22
22
  throw new Error('publicEncrypt requires a public key');
23
23
  }
24
- if (!isEncrypt && key.type !== 'private') {
25
- throw new Error('publicDecrypt requires a private key');
26
- }
24
+ // publicDecrypt accepts both public and private keys (Node.js behavior)
25
+ // A private key contains the public components needed for verify_recover
27
26
  keyObj = key;
28
27
  } else if ((0, _utils2.isCryptoKey)(key)) {
29
28
  const cryptoKey = key;
30
29
  keyObj = cryptoKey.keyObject;
31
30
  } else if ((0, _utils.isStringOrBuffer)(key)) {
32
31
  const data = (0, _utils.binaryLikeToArrayBuffer)(key);
33
- // Detect if it's PEM format (contains PEM headers) or DER binary
34
32
  const isPem = typeof key === 'string' && key.includes('-----BEGIN');
35
- keyObj = _classes.KeyObject.createKeyObject(isEncrypt ? 'public' : 'private', data, isPem ? _utils.KFormatType.PEM : _utils.KFormatType.DER, isEncrypt ? _utils.KeyEncoding.SPKI : _utils.KeyEncoding.PKCS8);
33
+ const isPrivatePem = typeof key === 'string' && key.includes('-----BEGIN PRIVATE');
34
+ // publicDecrypt accepts both public and private keys (Node.js behavior)
35
+ if (!isEncrypt && isPrivatePem) {
36
+ keyObj = _classes.KeyObject.createKeyObject('private', data, _utils.KFormatType.PEM, _utils.KeyEncoding.PKCS8);
37
+ } else {
38
+ keyObj = _classes.KeyObject.createKeyObject('public', data, isPem ? _utils.KFormatType.PEM : _utils.KFormatType.DER, _utils.KeyEncoding.SPKI);
39
+ }
36
40
  } else if (typeof key === 'object' && 'key' in key) {
37
41
  const options = key;
38
42
  const result = preparePublicCipherKey(options.key, isEncrypt);
@@ -73,16 +77,13 @@ function publicEncrypt(key, buffer) {
73
77
  function publicDecrypt(key, buffer) {
74
78
  const {
75
79
  keyHandle,
76
- padding,
77
- oaepHash,
78
- oaepLabel
80
+ padding
79
81
  } = preparePublicCipherKey(key, false);
80
82
  const rsaCipher = _reactNativeNitroModules.NitroModules.createHybridObject('RsaCipher');
81
83
  const data = (0, _utils.binaryLikeToArrayBuffer)(buffer);
82
- const paddingMode = padding ?? _constants.constants.RSA_PKCS1_OAEP_PADDING;
83
- const hashAlgorithm = oaepHash || 'SHA-256';
84
+ const paddingMode = padding ?? _constants.constants.RSA_PKCS1_PADDING;
84
85
  try {
85
- const decrypted = rsaCipher.decrypt(keyHandle.handle, data, paddingMode, hashAlgorithm, oaepLabel);
86
+ const decrypted = rsaCipher.publicDecrypt(keyHandle.handle, data, paddingMode);
86
87
  return Buffer.from(decrypted);
87
88
  } catch (error) {
88
89
  throw new Error(`publicDecrypt failed: ${error.message}`);
@@ -91,12 +92,14 @@ function publicDecrypt(key, buffer) {
91
92
  function preparePrivateCipherKey(key, isEncrypt) {
92
93
  let keyObj;
93
94
  let padding;
95
+ let oaepHash;
96
+ let oaepLabel;
94
97
  if (key instanceof _classes.KeyObject) {
95
98
  if (isEncrypt && key.type !== 'private') {
96
99
  throw new Error('privateEncrypt requires a private key');
97
100
  }
98
- if (!isEncrypt && key.type !== 'public') {
99
- throw new Error('privateDecrypt requires a public key');
101
+ if (!isEncrypt && key.type !== 'private') {
102
+ throw new Error('privateDecrypt requires a private key');
100
103
  }
101
104
  keyObj = key;
102
105
  } else if ((0, _utils2.isCryptoKey)(key)) {
@@ -105,18 +108,24 @@ function preparePrivateCipherKey(key, isEncrypt) {
105
108
  } else if ((0, _utils.isStringOrBuffer)(key)) {
106
109
  const data = (0, _utils.binaryLikeToArrayBuffer)(key);
107
110
  const isPem = typeof key === 'string' && key.includes('-----BEGIN');
108
- keyObj = _classes.KeyObject.createKeyObject(isEncrypt ? 'private' : 'public', data, isPem ? _utils.KFormatType.PEM : _utils.KFormatType.DER, isEncrypt ? _utils.KeyEncoding.PKCS8 : _utils.KeyEncoding.SPKI);
111
+ keyObj = _classes.KeyObject.createKeyObject('private', data, isPem ? _utils.KFormatType.PEM : _utils.KFormatType.DER, _utils.KeyEncoding.PKCS8);
109
112
  } else if (typeof key === 'object' && 'key' in key) {
110
113
  const options = key;
111
114
  const result = preparePrivateCipherKey(options.key, isEncrypt);
112
115
  keyObj = result.keyHandle;
113
116
  padding = options.padding;
117
+ oaepHash = options.oaepHash;
118
+ if (options.oaepLabel) {
119
+ oaepLabel = (0, _utils.binaryLikeToArrayBuffer)(options.oaepLabel);
120
+ }
114
121
  } else {
115
122
  throw new Error('Invalid key input');
116
123
  }
117
124
  return {
118
125
  keyHandle: keyObj,
119
- padding
126
+ padding,
127
+ oaepHash,
128
+ oaepLabel
120
129
  };
121
130
  }
122
131
  function privateEncrypt(key, buffer) {
@@ -137,13 +146,16 @@ function privateEncrypt(key, buffer) {
137
146
  function privateDecrypt(key, buffer) {
138
147
  const {
139
148
  keyHandle,
140
- padding
149
+ padding,
150
+ oaepHash,
151
+ oaepLabel
141
152
  } = preparePrivateCipherKey(key, false);
142
153
  const rsaCipher = _reactNativeNitroModules.NitroModules.createHybridObject('RsaCipher');
143
154
  const data = (0, _utils.binaryLikeToArrayBuffer)(buffer);
144
- const paddingMode = padding ?? _constants.constants.RSA_PKCS1_PADDING;
155
+ const paddingMode = padding ?? _constants.constants.RSA_PKCS1_OAEP_PADDING;
156
+ const hashAlgorithm = oaepHash || 'SHA-256';
145
157
  try {
146
- const decrypted = rsaCipher.privateDecrypt(keyHandle.handle, data, paddingMode);
158
+ const decrypted = rsaCipher.privateDecrypt(keyHandle.handle, data, paddingMode, hashAlgorithm, oaepLabel);
147
159
  return Buffer.from(decrypted);
148
160
  } catch (error) {
149
161
  throw new Error(`privateDecrypt failed: ${error.message}`);
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeNitroModules","require","_utils","_utils2","_classes","_constants","preparePublicCipherKey","key","isEncrypt","keyObj","padding","oaepHash","oaepLabel","KeyObject","type","Error","isCryptoKey","cryptoKey","keyObject","isStringOrBuffer","data","toAB","isPem","includes","createKeyObject","KFormatType","PEM","DER","KeyEncoding","SPKI","PKCS8","options","result","keyHandle","publicEncrypt","buffer","rsaCipher","NitroModules","createHybridObject","paddingMode","constants","RSA_PKCS1_OAEP_PADDING","hashAlgorithm","encrypted","encrypt","handle","Buffer","from","error","message","publicDecrypt","decrypted","decrypt","preparePrivateCipherKey","privateEncrypt","RSA_PKCS1_PADDING","privateDecrypt"],"sourceRoot":"../../../src","sources":["keys/publicCipher.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeNitroModules","require","_utils","_utils2","_classes","_constants","preparePublicCipherKey","key","isEncrypt","keyObj","padding","oaepHash","oaepLabel","KeyObject","type","Error","isCryptoKey","cryptoKey","keyObject","isStringOrBuffer","data","toAB","isPem","includes","isPrivatePem","createKeyObject","KFormatType","PEM","KeyEncoding","PKCS8","DER","SPKI","options","result","keyHandle","publicEncrypt","buffer","rsaCipher","NitroModules","createHybridObject","paddingMode","constants","RSA_PKCS1_OAEP_PADDING","hashAlgorithm","encrypted","encrypt","handle","Buffer","from","error","message","publicDecrypt","RSA_PKCS1_PADDING","decrypted","preparePrivateCipherKey","privateEncrypt","privateDecrypt"],"sourceRoot":"../../../src","sources":["keys/publicCipher.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=utils.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/utils.nitro.ts"],"mappings":"","ignoreList":[]}