react-native-quick-crypto 1.0.1 → 1.0.3

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 (72) hide show
  1. package/QuickCrypto.podspec +6 -47
  2. package/README.md +1 -1
  3. package/android/CMakeLists.txt +4 -0
  4. package/cpp/cipher/HybridCipher.cpp +17 -1
  5. package/cpp/ed25519/HybridEdKeyPair.cpp +8 -2
  6. package/cpp/hkdf/HybridHkdf.cpp +96 -0
  7. package/cpp/hkdf/HybridHkdf.hpp +28 -0
  8. package/cpp/scrypt/HybridScrypt.cpp +62 -0
  9. package/cpp/scrypt/HybridScrypt.hpp +28 -0
  10. package/lib/commonjs/ed.js +68 -0
  11. package/lib/commonjs/ed.js.map +1 -1
  12. package/lib/commonjs/hkdf.js +81 -0
  13. package/lib/commonjs/hkdf.js.map +1 -0
  14. package/lib/commonjs/index.js +33 -1
  15. package/lib/commonjs/index.js.map +1 -1
  16. package/lib/commonjs/scrypt.js +98 -0
  17. package/lib/commonjs/scrypt.js.map +1 -0
  18. package/lib/commonjs/specs/hkdf.nitro.js +6 -0
  19. package/lib/commonjs/specs/hkdf.nitro.js.map +1 -0
  20. package/lib/commonjs/specs/scrypt.nitro.js +6 -0
  21. package/lib/commonjs/specs/scrypt.nitro.js.map +1 -0
  22. package/lib/commonjs/subtle.js +400 -7
  23. package/lib/commonjs/subtle.js.map +1 -1
  24. package/lib/commonjs/utils/types.js.map +1 -1
  25. package/lib/module/ed.js +66 -0
  26. package/lib/module/ed.js.map +1 -1
  27. package/lib/module/hkdf.js +75 -0
  28. package/lib/module/hkdf.js.map +1 -0
  29. package/lib/module/index.js +13 -1
  30. package/lib/module/index.js.map +1 -1
  31. package/lib/module/scrypt.js +93 -0
  32. package/lib/module/scrypt.js.map +1 -0
  33. package/lib/module/specs/hkdf.nitro.js +4 -0
  34. package/lib/module/specs/hkdf.nitro.js.map +1 -0
  35. package/lib/module/specs/scrypt.nitro.js +4 -0
  36. package/lib/module/specs/scrypt.nitro.js.map +1 -0
  37. package/lib/module/subtle.js +401 -8
  38. package/lib/module/subtle.js.map +1 -1
  39. package/lib/module/utils/types.js.map +1 -1
  40. package/lib/tsconfig.tsbuildinfo +1 -1
  41. package/lib/typescript/ed.d.ts +4 -1
  42. package/lib/typescript/ed.d.ts.map +1 -1
  43. package/lib/typescript/hkdf.d.ts +26 -0
  44. package/lib/typescript/hkdf.d.ts.map +1 -0
  45. package/lib/typescript/index.d.ts +11 -0
  46. package/lib/typescript/index.d.ts.map +1 -1
  47. package/lib/typescript/scrypt.d.ts +18 -0
  48. package/lib/typescript/scrypt.d.ts.map +1 -0
  49. package/lib/typescript/specs/hkdf.nitro.d.ts +9 -0
  50. package/lib/typescript/specs/hkdf.nitro.d.ts.map +1 -0
  51. package/lib/typescript/specs/scrypt.nitro.d.ts +9 -0
  52. package/lib/typescript/specs/scrypt.nitro.d.ts.map +1 -0
  53. package/lib/typescript/subtle.d.ts +4 -1
  54. package/lib/typescript/subtle.d.ts.map +1 -1
  55. package/lib/typescript/utils/types.d.ts +9 -3
  56. package/lib/typescript/utils/types.d.ts.map +1 -1
  57. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +2 -0
  58. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +20 -0
  59. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +20 -0
  60. package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +22 -0
  61. package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +66 -0
  62. package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +22 -0
  63. package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +65 -0
  64. package/package.json +1 -1
  65. package/src/ed.ts +102 -0
  66. package/src/hkdf.ts +152 -0
  67. package/src/index.ts +13 -1
  68. package/src/scrypt.ts +134 -0
  69. package/src/specs/hkdf.nitro.ts +19 -0
  70. package/src/specs/scrypt.nitro.ts +23 -0
  71. package/src/subtle.ts +564 -9
  72. package/src/utils/types.ts +16 -3
@@ -23,63 +23,21 @@ Pod::Spec.new do |s|
23
23
  Pod::UI.puts("[QuickCrypto] 🧂 has libsodium #{sodium_enabled ? "enabled" : "disabled"}!")
24
24
 
25
25
  if sodium_enabled
26
- # cocoapod for Sodium has not been updated for a while, so we need to build it ourselves
27
- # https://github.com/jedisct1/swift-sodium/issues/264#issuecomment-2864963850
26
+ # Build libsodium from source for XSalsa20 cipher support
27
+ # CocoaPods packages are outdated (1.0.12) and SPM causes module conflicts
28
28
  s.prepare_command = <<-CMD
29
- set -e # Exit on any error
30
- set -x # Print commands as they execute
31
-
32
- # Create ios directory if it doesn't exist
29
+ set -e
33
30
  mkdir -p ios
34
-
35
- # Download libsodium with verbose output
36
- echo "Downloading libsodium..."
37
- curl -L -v -o ios/libsodium.tar.gz https://download.libsodium.org/libsodium/releases/libsodium-1.0.20-stable.tar.gz
38
-
39
- # Verify download
40
- if [ ! -f ios/libsodium.tar.gz ]; then
41
- echo "ERROR: Failed to download libsodium.tar.gz"
42
- exit 1
43
- fi
44
-
45
- echo "Download size: $(wc -c < ios/libsodium.tar.gz) bytes"
46
-
47
- # Clean previous extraction
48
- rm -rf ios/libsodium-stable
49
-
50
- # Extract the full tarball
51
- echo "Extracting libsodium..."
31
+ curl -L -o ios/libsodium.tar.gz https://download.libsodium.org/libsodium/releases/libsodium-1.0.20-stable.tar.gz
52
32
  tar -xzf ios/libsodium.tar.gz -C ios
53
-
54
- # Verify extraction
55
- if [ ! -d ios/libsodium-stable ]; then
56
- echo "ERROR: Failed to extract libsodium"
57
- exit 1
58
- fi
59
-
60
- # Run configure and make to generate all headers including private ones
61
- echo "Configuring libsodium..."
62
33
  cd ios/libsodium-stable
63
34
  ./configure --disable-shared --enable-static
64
-
65
- echo "Building libsodium..."
66
35
  make -j$(sysctl -n hw.ncpu)
67
-
68
- # Verify build success
69
- if [ ! -f src/libsodium/.libs/libsodium.a ]; then
70
- echo "ERROR: libsodium build failed - static library not found"
71
- exit 1
72
- fi
73
-
74
- echo "libsodium build completed successfully"
75
-
76
- # Cleanup
77
36
  cd ../../
78
37
  rm -f ios/libsodium.tar.gz
79
38
  CMD
80
39
  else
81
40
  s.prepare_command = <<-CMD
82
- # Clean up libsodium files if they exist
83
41
  rm -rf ios/libsodium-stable
84
42
  rm -f ios/libsodium.tar.gz
85
43
  CMD
@@ -150,6 +108,7 @@ Pod::Spec.new do |s|
150
108
  # Add cpp subdirectories to header search paths
151
109
  cpp_headers = [
152
110
  "\"$(PODS_TARGET_SRCROOT)/cpp/utils\"",
111
+ "\"$(PODS_TARGET_SRCROOT)/cpp/hkdf\"",
153
112
  "\"$(PODS_TARGET_SRCROOT)/deps/ncrypto/include\"",
154
113
  "\"$(PODS_TARGET_SRCROOT)/deps/blake3/c\"",
155
114
  "\"$(PODS_TARGET_SRCROOT)/deps/fastpbkdf2\""
@@ -164,7 +123,7 @@ Pod::Spec.new do |s|
164
123
  "\"$(PODS_ROOT)/../../packages/react-native-quick-crypto/ios/libsodium-stable/src/libsodium/include/sodium\""
165
124
  ]
166
125
  xcconfig["HEADER_SEARCH_PATHS"] = (cpp_headers + sodium_headers).join(' ')
167
- xcconfig["GCC_PREPROCESSOR_DEFINITIONS"] = "$(inherited) BLSALLOC_SODIUM=1"
126
+ xcconfig["GCC_PREPROCESSOR_DEFINITIONS"] = "$(inherited) FOLLY_NO_CONFIG FOLLY_CFG_NO_COROUTINES BLSALLOC_SODIUM=1"
168
127
  else
169
128
  xcconfig["HEADER_SEARCH_PATHS"] = cpp_headers.join(' ')
170
129
  end
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  A fast implementation of Node's `crypto` module.
12
12
 
13
- > Note: This version `1.x` completed a major refactor, porting to OpenSSL 3.3+, New Architecture, Bridgeless, and [`Nitro Modules`](https://github.com/mrousavy/react-native-nitro). It should be at or above feature-parity compared to the `0.x` version. Status, as always, will be represented in [implementation-coverage.md](../main/docs/implementation-coverage.md).
13
+ > Note: This version `1.x` completed a major refactor, porting to OpenSSL 3.6+, New Architecture, Bridgeless, and [`Nitro Modules`](https://github.com/mrousavy/react-native-nitro). It should be at or above feature-parity compared to the `0.x` version. Status, as always, will be represented in [implementation-coverage.md](../main/docs/implementation-coverage.md).
14
14
 
15
15
  > Note: Minimum supported version of React Native is `0.75`. If you need to use earlier versions, please use `0.x` versions of this library.
16
16
 
@@ -38,12 +38,14 @@ add_library(
38
38
  ../cpp/ed25519/HybridEdKeyPair.cpp
39
39
  ../cpp/hash/HybridHash.cpp
40
40
  ../cpp/hmac/HybridHmac.cpp
41
+ ../cpp/hkdf/HybridHkdf.cpp
41
42
  ../cpp/keys/HybridKeyObjectHandle.cpp
42
43
  ../cpp/keys/KeyObjectData.cpp
43
44
  ../cpp/mldsa/HybridMlDsaKeyPair.cpp
44
45
  ../cpp/pbkdf2/HybridPbkdf2.cpp
45
46
  ../cpp/random/HybridRandom.cpp
46
47
  ../cpp/rsa/HybridRsaKeyPair.cpp
48
+ ../cpp/scrypt/HybridScrypt.cpp
47
49
  ../cpp/sign/HybridSignHandle.cpp
48
50
  ../cpp/sign/HybridVerifyHandle.cpp
49
51
  ${BLAKE3_SOURCES}
@@ -62,6 +64,7 @@ include_directories(
62
64
  "../cpp/ec"
63
65
  "../cpp/ed25519"
64
66
  "../cpp/hash"
67
+ "../cpp/hkdf"
65
68
  "../cpp/hmac"
66
69
  "../cpp/keys"
67
70
  "../cpp/mldsa"
@@ -69,6 +72,7 @@ include_directories(
69
72
  "../cpp/random"
70
73
  "../cpp/rsa"
71
74
  "../cpp/sign"
75
+ "../cpp/scrypt"
72
76
  "../cpp/utils"
73
77
  "../deps/blake3/c"
74
78
  "../deps/fastpbkdf2"
@@ -86,6 +86,14 @@ void HybridCipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const std
86
86
  ctx = nullptr;
87
87
  throw std::runtime_error("HybridCipher: Failed to set key/IV: " + std::string(err_buf));
88
88
  }
89
+
90
+ // For AES-KW (wrap ciphers), set the WRAP_ALLOW flag and disable padding
91
+ std::string cipher_name(cipher_type);
92
+ if (cipher_name.find("-wrap") != std::string::npos) {
93
+ // This flag is required for AES-KW in OpenSSL 3.x
94
+ EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
95
+ EVP_CIPHER_CTX_set_padding(ctx, 0);
96
+ }
89
97
  }
90
98
 
91
99
  std::shared_ptr<ArrayBuffer> HybridCipher::update(const std::shared_ptr<ArrayBuffer>& data) {
@@ -100,7 +108,15 @@ std::shared_ptr<ArrayBuffer> HybridCipher::update(const std::shared_ptr<ArrayBuf
100
108
  uint8_t* out = new uint8_t[out_len];
101
109
  // Perform the cipher update operation. The real size of the output is
102
110
  // returned in out_len
103
- EVP_CipherUpdate(ctx, out, &out_len, native_data->data(), in_len);
111
+ int ret = EVP_CipherUpdate(ctx, out, &out_len, native_data->data(), in_len);
112
+
113
+ if (!ret) {
114
+ unsigned long err = ERR_get_error();
115
+ char err_buf[256];
116
+ ERR_error_string_n(err, err_buf, sizeof(err_buf));
117
+ delete[] out;
118
+ throw std::runtime_error("Cipher update failed: " + std::string(err_buf));
119
+ }
104
120
 
105
121
  // Create and return a new buffer of exact size needed
106
122
  return std::make_shared<NativeArrayBuffer>(out, out_len, [=]() { delete[] out; });
@@ -14,14 +14,20 @@ std::shared_ptr<ArrayBuffer> HybridEdKeyPair::diffieHellman(const std::shared_pt
14
14
  using EVP_PKEY_ptr = std::unique_ptr<EVP_PKEY, decltype(&EVP_PKEY_free)>;
15
15
  using EVP_PKEY_CTX_ptr = std::unique_ptr<EVP_PKEY_CTX, decltype(&EVP_PKEY_CTX_free)>;
16
16
 
17
+ // Determine key type from curve name
18
+ int keyType = EVP_PKEY_X25519;
19
+ if (this->curve == "x448" || this->curve == "X448") {
20
+ keyType = EVP_PKEY_X448;
21
+ }
22
+
17
23
  // 1. Create EVP_PKEY for private key (our key)
18
- EVP_PKEY_ptr pkey_priv(EVP_PKEY_new_raw_private_key(EVP_PKEY_X25519, NULL, privateKey->data(), privateKey->size()), EVP_PKEY_free);
24
+ EVP_PKEY_ptr pkey_priv(EVP_PKEY_new_raw_private_key(keyType, NULL, privateKey->data(), privateKey->size()), EVP_PKEY_free);
19
25
  if (!pkey_priv) {
20
26
  throw std::runtime_error("Failed to create private key: " + getOpenSSLError());
21
27
  }
22
28
 
23
29
  // 2. Create EVP_PKEY for public key (peer's key)
24
- EVP_PKEY_ptr pkey_pub(EVP_PKEY_new_raw_public_key(EVP_PKEY_X25519, NULL, publicKey->data(), publicKey->size()), EVP_PKEY_free);
30
+ EVP_PKEY_ptr pkey_pub(EVP_PKEY_new_raw_public_key(keyType, NULL, publicKey->data(), publicKey->size()), EVP_PKEY_free);
25
31
  if (!pkey_pub) {
26
32
  throw std::runtime_error("Failed to create public key: " + getOpenSSLError());
27
33
  }
@@ -0,0 +1,96 @@
1
+ #include <NitroModules/ArrayBuffer.hpp>
2
+ #include <memory>
3
+ #include <openssl/core_names.h>
4
+ #include <openssl/err.h>
5
+ #include <openssl/evp.h>
6
+ #include <openssl/kdf.h>
7
+ #include <string>
8
+ #include <vector>
9
+
10
+ #include "HybridHkdf.hpp"
11
+ #include "Utils.hpp"
12
+
13
+ namespace margelo::nitro::crypto {
14
+
15
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridHkdf::deriveKey(const std::string& algorithm,
16
+ const std::shared_ptr<ArrayBuffer>& key,
17
+ const std::shared_ptr<ArrayBuffer>& salt,
18
+ const std::shared_ptr<ArrayBuffer>& info, double length) {
19
+ // get owned NativeArrayBuffers before passing to sync function
20
+ auto nativeKey = ToNativeArrayBuffer(key);
21
+ auto nativeSalt = ToNativeArrayBuffer(salt);
22
+ auto nativeInfo = ToNativeArrayBuffer(info);
23
+
24
+ return Promise<std::shared_ptr<ArrayBuffer>>::async([this, algorithm, nativeKey, nativeSalt, nativeInfo, length]() {
25
+ return this->deriveKeySync(algorithm, nativeKey, nativeSalt, nativeInfo, length);
26
+ });
27
+ }
28
+
29
+ std::shared_ptr<ArrayBuffer> HybridHkdf::deriveKeySync(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& baseKey,
30
+ const std::shared_ptr<ArrayBuffer>& salt, const std::shared_ptr<ArrayBuffer>& info,
31
+ double length) {
32
+ EVP_KDF* kdf = EVP_KDF_fetch(nullptr, "HKDF", nullptr);
33
+ if (kdf == nullptr) {
34
+ throw std::runtime_error("Failed to fetch HKDF implementation: " + std::to_string(ERR_get_error()));
35
+ }
36
+
37
+ EVP_KDF_CTX* ctx = EVP_KDF_CTX_new(kdf);
38
+ EVP_KDF_free(kdf);
39
+ if (ctx == nullptr) {
40
+ throw std::runtime_error("Failed to create HKDF context: " + std::to_string(ERR_get_error()));
41
+ }
42
+
43
+ // Set up parameters
44
+ OSSL_PARAM params[5];
45
+ size_t paramIndex = 0;
46
+
47
+ params[paramIndex++] = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST, const_cast<char*>(algorithm.c_str()), 0);
48
+
49
+ // Key (Input Keying Material)
50
+ if (baseKey && baseKey->size() > 0) {
51
+ params[paramIndex++] = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, baseKey->data(), baseKey->size());
52
+ } else {
53
+ // Empty key is allowed in HKDF (defaults to zero string of hashLen) but explicit param usually expected if not null
54
+ // If we want empty, we can pass generic empty buffer or handle it.
55
+ // Node.js crypto allows buffer.
56
+ // Assuming key is effectively required or can be empty.
57
+ params[paramIndex++] = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, nullptr, 0);
58
+ }
59
+
60
+ // Salt
61
+ if (salt && salt->size() > 0) {
62
+ params[paramIndex++] = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, salt->data(), salt->size());
63
+ } else {
64
+ // If salt is not provided, it is set to a string of HashLen zeros.
65
+ // OpenSSL handles missing salt as default? Or do we need to pass empty?
66
+ // Usually standard optional.
67
+ }
68
+
69
+ // Info
70
+ if (info && info->size() > 0) {
71
+ params[paramIndex++] = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO, info->data(), info->size());
72
+ }
73
+
74
+ params[paramIndex++] = OSSL_PARAM_construct_end();
75
+
76
+ // Output buffer
77
+ size_t outLen = static_cast<size_t>(length);
78
+ if (outLen == 0) {
79
+ EVP_KDF_CTX_free(ctx);
80
+ throw std::runtime_error("HKDF length cannot be zero");
81
+ }
82
+
83
+ uint8_t* outBuf = new uint8_t[outLen];
84
+
85
+ if (EVP_KDF_derive(ctx, outBuf, outLen, params) <= 0) {
86
+ EVP_KDF_CTX_free(ctx);
87
+ delete[] outBuf;
88
+ throw std::runtime_error("HKDF derivation failed: " + std::to_string(ERR_get_error()));
89
+ }
90
+
91
+ EVP_KDF_CTX_free(ctx);
92
+
93
+ return std::make_shared<NativeArrayBuffer>(outBuf, outLen, [=]() { delete[] outBuf; });
94
+ }
95
+
96
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,28 @@
1
+ #pragma once
2
+
3
+ #include <NitroModules/ArrayBuffer.hpp>
4
+ #include <memory>
5
+ #include <openssl/evp.h>
6
+ #include <string>
7
+
8
+ #include "HybridHkdfSpec.hpp"
9
+
10
+ namespace margelo::nitro::crypto {
11
+
12
+ using namespace facebook;
13
+
14
+ class HybridHkdf : public HybridHkdfSpec {
15
+ public:
16
+ HybridHkdf() : HybridObject(TAG) {}
17
+
18
+ public:
19
+ // Methods
20
+ std::shared_ptr<ArrayBuffer> deriveKeySync(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key,
21
+ const std::shared_ptr<ArrayBuffer>& salt, const std::shared_ptr<ArrayBuffer>& info,
22
+ double length) override;
23
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> deriveKey(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key,
24
+ const std::shared_ptr<ArrayBuffer>& salt,
25
+ const std::shared_ptr<ArrayBuffer>& info, double length) override;
26
+ };
27
+
28
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,62 @@
1
+ #include <NitroModules/ArrayBuffer.hpp>
2
+ #include <memory>
3
+ #include <openssl/err.h>
4
+ #include <openssl/evp.h>
5
+ #include <string>
6
+ #include <vector>
7
+
8
+ #include "HybridScrypt.hpp"
9
+ #include "Utils.hpp"
10
+
11
+ namespace margelo::nitro::crypto {
12
+
13
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridScrypt::deriveKey(const std::shared_ptr<ArrayBuffer>& password,
14
+ const std::shared_ptr<ArrayBuffer>& salt, double N, double r,
15
+ double p, double maxmem, double keylen) {
16
+ // get owned NativeArrayBuffers before passing to sync function
17
+ auto nativePassword = ToNativeArrayBuffer(password);
18
+ auto nativeSalt = ToNativeArrayBuffer(salt);
19
+
20
+ return Promise<std::shared_ptr<ArrayBuffer>>::async([this, nativePassword, nativeSalt, N, r, p, maxmem, keylen]() {
21
+ return this->deriveKeySync(nativePassword, nativeSalt, N, r, p, maxmem, keylen);
22
+ });
23
+ }
24
+
25
+ std::shared_ptr<ArrayBuffer> HybridScrypt::deriveKeySync(const std::shared_ptr<ArrayBuffer>& password,
26
+ const std::shared_ptr<ArrayBuffer>& salt, double N, double r, double p,
27
+ double maxmem, double keylen) {
28
+ // Use EVP_PBE_scrypt to match Node.js implementation exactly
29
+ // All parameters are uint64_t for this API (unlike EVP_KDF which uses uint32_t for r/p)
30
+ uint64_t n_val = static_cast<uint64_t>(N);
31
+ uint64_t r_val = static_cast<uint64_t>(r);
32
+ uint64_t p_val = static_cast<uint64_t>(p);
33
+ uint64_t maxmem_val = static_cast<uint64_t>(maxmem);
34
+ size_t outLen = static_cast<size_t>(keylen);
35
+
36
+ if (outLen == 0) {
37
+ throw std::runtime_error("SCRYPT length cannot be zero");
38
+ }
39
+
40
+ // Prepare password and salt pointers
41
+ const char* pass_data = password && password->size() > 0 ? reinterpret_cast<const char*>(password->data()) : "";
42
+ size_t pass_len = password ? password->size() : 0;
43
+
44
+ const unsigned char* salt_data =
45
+ salt && salt->size() > 0 ? reinterpret_cast<const unsigned char*>(salt->data()) : reinterpret_cast<const unsigned char*>("");
46
+ size_t salt_len = salt ? salt->size() : 0;
47
+
48
+ // Allocate output buffer
49
+ uint8_t* outBuf = new uint8_t[outLen];
50
+
51
+ // Use EVP_PBE_scrypt - the same API Node.js uses
52
+ int result = EVP_PBE_scrypt(pass_data, pass_len, salt_data, salt_len, n_val, r_val, p_val, maxmem_val, outBuf, outLen);
53
+
54
+ if (result != 1) {
55
+ delete[] outBuf;
56
+ throw std::runtime_error("SCRYPT derivation failed: " + getOpenSSLError());
57
+ }
58
+
59
+ return std::make_shared<NativeArrayBuffer>(outBuf, outLen, [=]() { delete[] outBuf; });
60
+ }
61
+
62
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,28 @@
1
+ #pragma once
2
+
3
+ #include <NitroModules/ArrayBuffer.hpp>
4
+ #include <NitroModules/Promise.hpp>
5
+ #include <memory>
6
+ #include <openssl/evp.h>
7
+ #include <string>
8
+
9
+ #include "HybridScryptSpec.hpp"
10
+
11
+ namespace margelo::nitro::crypto {
12
+
13
+ using namespace facebook;
14
+
15
+ class HybridScrypt : public HybridScryptSpec {
16
+ public:
17
+ HybridScrypt() : HybridObject(TAG) {}
18
+
19
+ public:
20
+ // Methods
21
+ std::shared_ptr<ArrayBuffer> deriveKeySync(const std::shared_ptr<ArrayBuffer>& password, const std::shared_ptr<ArrayBuffer>& salt,
22
+ double N, double r, double p, double maxmem, double keylen) override;
23
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> deriveKey(const std::shared_ptr<ArrayBuffer>& password,
24
+ const std::shared_ptr<ArrayBuffer>& salt, double N, double r, double p,
25
+ double maxmem, double keylen) override;
26
+ };
27
+
28
+ } // namespace margelo::nitro::crypto
@@ -7,6 +7,8 @@ exports.Ed = void 0;
7
7
  exports.diffieHellman = diffieHellman;
8
8
  exports.ed_generateKeyPair = ed_generateKeyPair;
9
9
  exports.ed_generateKeyPairWebCrypto = ed_generateKeyPairWebCrypto;
10
+ exports.xDeriveBits = xDeriveBits;
11
+ exports.x_generateKeyPairWebCrypto = x_generateKeyPairWebCrypto;
10
12
  var _reactNativeNitroModules = require("react-native-nitro-modules");
11
13
  var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
12
14
  var _keys = require("./keys");
@@ -251,4 +253,70 @@ async function ed_generateKeyPairWebCrypto(type, extractable, keyUsages) {
251
253
  privateKey
252
254
  };
253
255
  }
256
+ async function x_generateKeyPairWebCrypto(type, extractable, keyUsages) {
257
+ if ((0, _utils.hasAnyNotIn)(keyUsages, ['deriveKey', 'deriveBits'])) {
258
+ throw (0, _utils.lazyDOMException)(`Unsupported key usage for ${type}`, 'SyntaxError');
259
+ }
260
+ const publicUsages = (0, _utils.getUsagesUnion)(keyUsages);
261
+ const privateUsages = (0, _utils.getUsagesUnion)(keyUsages, 'deriveKey', 'deriveBits');
262
+ if (privateUsages.length === 0) {
263
+ throw (0, _utils.lazyDOMException)('Usages cannot be empty', 'SyntaxError');
264
+ }
265
+
266
+ // Request DER-encoded SPKI for public key, PKCS8 for private key
267
+ const config = {
268
+ publicFormat: _utils.KFormatType.DER,
269
+ publicType: _utils.KeyEncoding.SPKI,
270
+ privateFormat: _utils.KFormatType.DER,
271
+ privateType: _utils.KeyEncoding.PKCS8
272
+ };
273
+ const ed = new Ed(type, config);
274
+ await ed.generateKeyPair();
275
+ const algorithmName = type === 'x25519' ? 'X25519' : 'X448';
276
+ const publicKeyData = ed.getPublicKey();
277
+ const privateKeyData = ed.getPrivateKey();
278
+ const pub = _keys.KeyObject.createKeyObject('public', publicKeyData, _utils.KFormatType.DER, _utils.KeyEncoding.SPKI);
279
+ const publicKey = new _keys.CryptoKey(pub, {
280
+ name: algorithmName
281
+ }, publicUsages, true);
282
+ const priv = _keys.KeyObject.createKeyObject('private', privateKeyData, _utils.KFormatType.DER, _utils.KeyEncoding.PKCS8);
283
+ const privateKey = new _keys.CryptoKey(priv, {
284
+ name: algorithmName
285
+ }, privateUsages, extractable);
286
+ return {
287
+ publicKey,
288
+ privateKey
289
+ };
290
+ }
291
+ function xDeriveBits(algorithm, baseKey, length) {
292
+ const publicParams = algorithm;
293
+ const publicKey = publicParams.public;
294
+ if (!publicKey) {
295
+ throw new Error('Public key is required for X25519/X448 derivation');
296
+ }
297
+ if (baseKey.algorithm.name !== publicKey.algorithm.name) {
298
+ throw new Error('Keys must be of the same algorithm');
299
+ }
300
+ const type = baseKey.algorithm.name.toLowerCase();
301
+ const ed = new Ed(type, {});
302
+
303
+ // Export raw keys
304
+ const privateKeyBytes = baseKey.keyObject.handle.exportKey();
305
+ const publicKeyBytes = publicKey.keyObject.handle.exportKey();
306
+ const privateKeyTyped = new Uint8Array(privateKeyBytes);
307
+ const publicKeyTyped = new Uint8Array(publicKeyBytes);
308
+ const secret = ed.getSharedSecret(privateKeyTyped, publicKeyTyped);
309
+
310
+ // If length is null, return the full secret
311
+ if (length === null) {
312
+ return secret;
313
+ }
314
+
315
+ // If length is specified, truncate
316
+ const byteLength = Math.ceil(length / 8);
317
+ if (secret.byteLength >= byteLength) {
318
+ return secret.slice(0, byteLength);
319
+ }
320
+ throw new Error('Derived key is shorter than requested length');
321
+ }
254
322
  //# sourceMappingURL=ed.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeNitroModules","require","_reactNativeBuffer","_keys","_utils","Ed","constructor","type","config","native","NitroModules","createHybridObject","setCurve","diffieHellman","options","callback","checkDiffieHellmanOptions","keyType","privateKey","asymmetricKeyType","Error","toAB","publicKey","ret","Buffer","from","e","err","undefined","generateKeyPair","publicFormat","publicType","privateFormat","privateType","cipher","passphrase","generateKeyPairSync","getPublicKey","getPrivateKey","getSharedSecret","sign","message","key","signSync","verify","signature","verifySync","exports","ed","ed_generateKeyPair","isAsync","encoding","formatKeys","publicKeyRaw","privateKeyRaw","isPemPublic","KFormatType","PEM","isPemPrivate","arrayBufferToString","ab","Uint8Array","toString","then","catch","String","privateKeyAsym","publicKeyAsym","ed_generateKeyPairWebCrypto","extractable","keyUsages","hasAnyNotIn","lazyDOMException","publicUsages","getUsagesUnion","privateUsages","length","DER","KeyEncoding","SPKI","PKCS8","algorithmName","publicKeyData","privateKeyData","pub","KeyObject","createKeyObject","CryptoKey","name","priv"],"sourceRoot":"../../src","sources":["ed.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeNitroModules","require","_reactNativeBuffer","_keys","_utils","Ed","constructor","type","config","native","NitroModules","createHybridObject","setCurve","diffieHellman","options","callback","checkDiffieHellmanOptions","keyType","privateKey","asymmetricKeyType","Error","toAB","publicKey","ret","Buffer","from","e","err","undefined","generateKeyPair","publicFormat","publicType","privateFormat","privateType","cipher","passphrase","generateKeyPairSync","getPublicKey","getPrivateKey","getSharedSecret","sign","message","key","signSync","verify","signature","verifySync","exports","ed","ed_generateKeyPair","isAsync","encoding","formatKeys","publicKeyRaw","privateKeyRaw","isPemPublic","KFormatType","PEM","isPemPrivate","arrayBufferToString","ab","Uint8Array","toString","then","catch","String","privateKeyAsym","publicKeyAsym","ed_generateKeyPairWebCrypto","extractable","keyUsages","hasAnyNotIn","lazyDOMException","publicUsages","getUsagesUnion","privateUsages","length","DER","KeyEncoding","SPKI","PKCS8","algorithmName","publicKeyData","privateKeyData","pub","KeyObject","createKeyObject","CryptoKey","name","priv","x_generateKeyPairWebCrypto","xDeriveBits","algorithm","baseKey","publicParams","public","toLowerCase","privateKeyBytes","keyObject","handle","exportKey","publicKeyBytes","privateKeyTyped","publicKeyTyped","secret","byteLength","Math","ceil","slice"],"sourceRoot":"../../src","sources":["ed.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AAEA,IAAAE,KAAA,GAAAF,OAAA;AAoBA,IAAAG,MAAA,GAAAH,OAAA;AASO,MAAMI,EAAE,CAAC;EAKdC,WAAWA,CAACC,IAAqB,EAAEC,MAAwB,EAAE;IAC3D,IAAI,CAACD,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,MAAM,GAAGC,qCAAY,CAACC,kBAAkB,CAAY,WAAW,CAAC;IACrE,IAAI,CAACF,MAAM,CAACG,QAAQ,CAACL,IAAI,CAAC;EAC5B;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEM,aAAaA,CACXC,OAA6B,EAC7BC,QAAgC,EACjB;IACfC,yBAAyB,CAACF,OAAO,CAAC;;IAElC;IACA,MAAMG,OAAO,GAAIH,OAAO,CAACI,UAAU,CAChCC,iBAAiB;IACpB,QAAQF,OAAO;MACb,KAAK,QAAQ;MACb,KAAK,MAAM;QACT;MACF;QACE,MAAM,IAAIG,KAAK,CAAC,4CAA4CH,OAAO,EAAE,CAAC;IAC1E;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAAG,8BAAI,EAACP,OAAO,CAACI,UAAU,CAAC;IAC3C,MAAMI,SAAS,GAAG,IAAAD,8BAAI,EAACP,OAAO,CAACQ,SAAS,CAAC;IAEzC,IAAI;MACF,MAAMC,GAAG,GAAG,IAAI,CAACd,MAAM,CAACI,aAAa,CAACK,UAAU,EAAEI,SAAS,CAAC;MAC5D,IAAI,CAACC,GAAG,EAAE;QACR,MAAM,IAAIH,KAAK,CAAC,WAAW,CAAC;MAC9B;MACA,IAAIL,QAAQ,EAAE;QACZA,QAAQ,CAAC,IAAI,EAAES,yBAAM,CAACC,IAAI,CAACF,GAAG,CAAC,CAAC;MAClC,CAAC,MAAM;QACL,OAAOC,yBAAM,CAACC,IAAI,CAACF,GAAG,CAAC;MACzB;IACF,CAAC,CAAC,OAAOG,CAAU,EAAE;MACnB,MAAMC,GAAG,GAAGD,CAAU;MACtB,IAAIX,QAAQ,EAAE;QACZA,QAAQ,CAACY,GAAG,EAAEC,SAAS,CAAC;MAC1B,CAAC,MAAM;QACL,MAAMD,GAAG;MACX;IACF;EACF;EAEA,MAAME,eAAeA,CAAA,EAAkB;IACrC,MAAM,IAAI,CAACpB,MAAM,CAACoB,eAAe,CAC/B,IAAI,CAACrB,MAAM,CAACsB,YAAY,IAAI,CAAC,CAAC,EAC9B,IAAI,CAACtB,MAAM,CAACuB,UAAU,IAAI,CAAC,CAAC,EAC5B,IAAI,CAACvB,MAAM,CAACwB,aAAa,IAAI,CAAC,CAAC,EAC/B,IAAI,CAACxB,MAAM,CAACyB,WAAW,IAAI,CAAC,CAAC,EAC7B,IAAI,CAACzB,MAAM,CAAC0B,MAAM,EAClB,IAAI,CAAC1B,MAAM,CAAC2B,UACd,CAAC;EACH;EAEAC,mBAAmBA,CAAA,EAAS;IAC1B,IAAI,CAAC3B,MAAM,CAAC2B,mBAAmB,CAC7B,IAAI,CAAC5B,MAAM,CAACsB,YAAY,IAAI,CAAC,CAAC,EAC9B,IAAI,CAACtB,MAAM,CAACuB,UAAU,IAAI,CAAC,CAAC,EAC5B,IAAI,CAACvB,MAAM,CAACwB,aAAa,IAAI,CAAC,CAAC,EAC/B,IAAI,CAACxB,MAAM,CAACyB,WAAW,IAAI,CAAC,CAAC,EAC7B,IAAI,CAACzB,MAAM,CAAC0B,MAAM,EAClB,IAAI,CAAC1B,MAAM,CAAC2B,UACd,CAAC;EACH;EAEAE,YAAYA,CAAA,EAAgB;IAC1B,OAAO,IAAI,CAAC5B,MAAM,CAAC4B,YAAY,CAAC,CAAC;EACnC;EAEAC,aAAaA,CAAA,EAAgB;IAC3B,OAAO,IAAI,CAAC7B,MAAM,CAAC6B,aAAa,CAAC,CAAC;EACpC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,eAAeA,CAACrB,UAAe,EAAEI,SAAc,EAAe;IAC5D,OAAO,IAAI,CAACb,MAAM,CAACI,aAAa,CAAC,IAAAQ,8BAAI,EAACH,UAAU,CAAC,EAAE,IAAAG,8BAAI,EAACC,SAAS,CAAC,CAAC;EACrE;EAEA,MAAMkB,IAAIA,CAACC,OAAmB,EAAEC,GAAgB,EAAwB;IACtE,OAAOA,GAAG,GACN,IAAI,CAACjC,MAAM,CAAC+B,IAAI,CAAC,IAAAnB,8BAAI,EAACoB,OAAO,CAAC,EAAE,IAAApB,8BAAI,EAACqB,GAAG,CAAC,CAAC,GAC1C,IAAI,CAACjC,MAAM,CAAC+B,IAAI,CAAC,IAAAnB,8BAAI,EAACoB,OAAO,CAAC,CAAC;EACrC;EAEAE,QAAQA,CAACF,OAAmB,EAAEC,GAAgB,EAAe;IAC3D,OAAOA,GAAG,GACN,IAAI,CAACjC,MAAM,CAACkC,QAAQ,CAAC,IAAAtB,8BAAI,EAACoB,OAAO,CAAC,EAAE,IAAApB,8BAAI,EAACqB,GAAG,CAAC,CAAC,GAC9C,IAAI,CAACjC,MAAM,CAACkC,QAAQ,CAAC,IAAAtB,8BAAI,EAACoB,OAAO,CAAC,CAAC;EACzC;EAEA,MAAMG,MAAMA,CACVC,SAAqB,EACrBJ,OAAmB,EACnBC,GAAgB,EACE;IAClB,OAAOA,GAAG,GACN,IAAI,CAACjC,MAAM,CAACmC,MAAM,CAAC,IAAAvB,8BAAI,EAACwB,SAAS,CAAC,EAAE,IAAAxB,8BAAI,EAACoB,OAAO,CAAC,EAAE,IAAApB,8BAAI,EAACqB,GAAG,CAAC,CAAC,GAC7D,IAAI,CAACjC,MAAM,CAACmC,MAAM,CAAC,IAAAvB,8BAAI,EAACwB,SAAS,CAAC,EAAE,IAAAxB,8BAAI,EAACoB,OAAO,CAAC,CAAC;EACxD;EAEAK,UAAUA,CACRD,SAAqB,EACrBJ,OAAmB,EACnBC,GAAgB,EACP;IACT,OAAOA,GAAG,GACN,IAAI,CAACjC,MAAM,CAACqC,UAAU,CAAC,IAAAzB,8BAAI,EAACwB,SAAS,CAAC,EAAE,IAAAxB,8BAAI,EAACoB,OAAO,CAAC,EAAE,IAAApB,8BAAI,EAACqB,GAAG,CAAC,CAAC,GACjE,IAAI,CAACjC,MAAM,CAACqC,UAAU,CAAC,IAAAzB,8BAAI,EAACwB,SAAS,CAAC,EAAE,IAAAxB,8BAAI,EAACoB,OAAO,CAAC,CAAC;EAC5D;AACF;;AAEA;AAAAM,OAAA,CAAA1C,EAAA,GAAAA,EAAA;AACO,SAASQ,aAAaA,CAC3BC,OAA6B,EAC7BC,QAAgC,EACjB;EACf,MAAMG,UAAU,GAAGJ,OAAO,CAACI,UAA8B;EACzD,MAAMX,IAAI,GAAGW,UAAU,CAACC,iBAAoC;EAC5D,MAAM6B,EAAE,GAAG,IAAI3C,EAAE,CAACE,IAAI,EAAE,CAAC,CAAC,CAAC;EAC3B,OAAOyC,EAAE,CAACnC,aAAa,CAACC,OAAO,EAAEC,QAAQ,CAAC;AAC5C;;AAEA;AACO,SAASkC,kBAAkBA,CAChCC,OAAgB,EAChB3C,IAAqB,EACrB4C,QAA0B,EAC1BpC,QAA6C,EACf;EAC9B,MAAMiC,EAAE,GAAG,IAAI3C,EAAE,CAACE,IAAI,EAAE4C,QAAQ,CAAC;;EAEjC;EACA,MAAMC,UAAU,GAAGA,CAAA,KAGd;IACH,MAAMC,YAAY,GAAGL,EAAE,CAACX,YAAY,CAAC,CAAC;IACtC,MAAMiB,aAAa,GAAGN,EAAE,CAACV,aAAa,CAAC,CAAC;;IAExC;IACA,MAAMiB,WAAW,GAAGJ,QAAQ,CAACrB,YAAY,KAAK0B,kBAAW,CAACC,GAAG;IAC7D,MAAMC,YAAY,GAAGP,QAAQ,CAACnB,aAAa,KAAKwB,kBAAW,CAACC,GAAG;;IAE/D;IACA,MAAME,mBAAmB,GAAIC,EAAe,IAAa;MACvD,OAAOpC,yBAAM,CAACC,IAAI,CAAC,IAAIoC,UAAU,CAACD,EAAE,CAAC,CAAC,CAACE,QAAQ,CAAC,OAAO,CAAC;IAC1D,CAAC;IAED,MAAMxC,SAAS,GAAGiC,WAAW,GACzBI,mBAAmB,CAACN,YAAY,CAAC,GACjCA,YAAY;IAChB,MAAMnC,UAAU,GAAGwC,YAAY,GAC3BC,mBAAmB,CAACL,aAAa,CAAC,GAClCA,aAAa;IAEjB,OAAO;MAAEhC,SAAS;MAAEJ;IAAW,CAAC;EAClC,CAAC;;EAED;EACA,IAAIgC,OAAO,EAAE;IACX,IAAI,CAACnC,QAAQ,EAAE;MACb;MACA,MAAM,IAAIK,KAAK,CAAC,kDAAkD,CAAC;IACrE;IACA4B,EAAE,CAACnB,eAAe,CAAC,CAAC,CACjBkC,IAAI,CAAC,MAAM;MACV,MAAM;QAAEzC,SAAS;QAAEJ;MAAW,CAAC,GAAGkC,UAAU,CAAC,CAAC;MAC9CrC,QAAQ,CAACa,SAAS,EAAEN,SAAS,EAAEJ,UAAU,CAAC;IAC5C,CAAC,CAAC,CACD8C,KAAK,CAACrC,GAAG,IAAI;MACZZ,QAAQ,CAACY,GAAG,EAAEC,SAAS,EAAEA,SAAS,CAAC;IACrC,CAAC,CAAC;IACJ;EACF;;EAEA;EACA,IAAID,GAAsB;EAC1B,IAAI;IACFqB,EAAE,CAACZ,mBAAmB,CAAC,CAAC;EAC1B,CAAC,CAAC,OAAOV,CAAC,EAAE;IACVC,GAAG,GAAGD,CAAC,YAAYN,KAAK,GAAGM,CAAC,GAAG,IAAIN,KAAK,CAAC6C,MAAM,CAACvC,CAAC,CAAC,CAAC;EACrD;EAEA,MAAM;IAAEJ,SAAS;IAAEJ;EAAW,CAAC,GAAGS,GAAG,GACjC;IAAEL,SAAS,EAAEM,SAAS;IAAEV,UAAU,EAAEU;EAAU,CAAC,GAC/CwB,UAAU,CAAC,CAAC;EAEhB,IAAIrC,QAAQ,EAAE;IACZA,QAAQ,CAACY,GAAG,EAAEL,SAAS,EAAEJ,UAAU,CAAC;IACpC;EACF;EACA,OAAO,CAACS,GAAG,EAAEL,SAAS,EAAEJ,UAAU,CAAC;AACrC;AAEA,SAASF,yBAAyBA,CAACF,OAA6B,EAAQ;EACtE,MAAM;IAAEI,UAAU;IAAEI;EAAU,CAAC,GAAGR,OAAO;;EAEzC;EACA,IACE,CAACI,UAAU,IACX,OAAOA,UAAU,KAAK,QAAQ,IAC9B,EAAE,MAAM,IAAIA,UAAU,CAAC,EACvB;IACA,MAAM,IAAIE,KAAK,CAAC,gCAAgC,CAAC;EACnD;EACA,IAAI,CAACE,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,IAAI,EAAE,MAAM,IAAIA,SAAS,CAAC,EAAE;IACzE,MAAM,IAAIF,KAAK,CAAC,+BAA+B,CAAC;EAClD;;EAEA;EACA,IAAIF,UAAU,CAACX,IAAI,KAAK,SAAS,EAAE;IACjC,MAAM,IAAIa,KAAK,CAAC,wCAAwC,CAAC;EAC3D;EACA,IAAIE,SAAS,CAACf,IAAI,KAAK,QAAQ,EAAE;IAC/B,MAAM,IAAIa,KAAK,CAAC,sCAAsC,CAAC;EACzD;;EAEA;EACA,MAAM8C,cAAc,GAAGhD,UAAiC;EACxD,MAAMiD,aAAa,GAAG7C,SAAgC;;EAEtD;EACA,IACE4C,cAAc,CAAC/C,iBAAiB,IAChCgD,aAAa,CAAChD,iBAAiB,IAC/B+C,cAAc,CAAC/C,iBAAiB,KAAKgD,aAAa,CAAChD,iBAAiB,EACpE;IACA,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;EACvE;EAEA,QAAQ8C,cAAc,CAAC/C,iBAAiB;IACtC;IACA,KAAK,QAAQ;IACb,KAAK,MAAM;MACT;IACF;MACE,MAAM,IAAIC,KAAK,CACb,uBAAuB8C,cAAc,CAAC/C,iBAAiB,EACzD,CAAC;EACL;AACF;AAEO,eAAeiD,2BAA2BA,CAC/C7D,IAAyB,EACzB8D,WAAoB,EACpBC,SAAqB,EACG;EACxB,IAAI,IAAAC,kBAAW,EAACD,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE;IAC9C,MAAM,IAAAE,uBAAgB,EAAC,6BAA6BjE,IAAI,EAAE,EAAE,aAAa,CAAC;EAC5E;EAEA,MAAMkE,YAAY,GAAG,IAAAC,qBAAc,EAACJ,SAAS,EAAE,QAAQ,CAAC;EACxD,MAAMK,aAAa,GAAG,IAAAD,qBAAc,EAACJ,SAAS,EAAE,MAAM,CAAC;EAEvD,IAAIK,aAAa,CAACC,MAAM,KAAK,CAAC,EAAE;IAC9B,MAAM,IAAAJ,uBAAgB,EAAC,wBAAwB,EAAE,aAAa,CAAC;EACjE;;EAEA;EACA,MAAMhE,MAAM,GAAG;IACbsB,YAAY,EAAE0B,kBAAW,CAACqB,GAAG;IAC7B9C,UAAU,EAAE+C,kBAAW,CAACC,IAAI;IAC5B/C,aAAa,EAAEwB,kBAAW,CAACqB,GAAG;IAC9B5C,WAAW,EAAE6C,kBAAW,CAACE;EAC3B,CAAC;EACD,MAAMhC,EAAE,GAAG,IAAI3C,EAAE,CAACE,IAAI,EAAEC,MAAM,CAAC;EAC/B,MAAMwC,EAAE,CAACnB,eAAe,CAAC,CAAC;EAE1B,MAAMoD,aAAa,GAAG1E,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,OAAO;EAE9D,MAAM2E,aAAa,GAAGlC,EAAE,CAACX,YAAY,CAAC,CAAC;EACvC,MAAM8C,cAAc,GAAGnC,EAAE,CAACV,aAAa,CAAC,CAAC;EAEzC,MAAM8C,GAAG,GAAGC,eAAS,CAACC,eAAe,CACnC,QAAQ,EACRJ,aAAa,EACb1B,kBAAW,CAACqB,GAAG,EACfC,kBAAW,CAACC,IACd,CAAoB;EACpB,MAAMzD,SAAS,GAAG,IAAIiE,eAAS,CAC7BH,GAAG,EACH;IAAEI,IAAI,EAAEP;EAAc,CAAC,EACvBR,YAAY,EACZ,IACF,CAAC;EAED,MAAMgB,IAAI,GAAGJ,eAAS,CAACC,eAAe,CACpC,SAAS,EACTH,cAAc,EACd3B,kBAAW,CAACqB,GAAG,EACfC,kBAAW,CAACE,KACd,CAA0B;EAC1B,MAAM9D,UAAU,GAAG,IAAIqE,eAAS,CAC9BE,IAAI,EACJ;IAAED,IAAI,EAAEP;EAAc,CAAC,EACvBN,aAAa,EACbN,WACF,CAAC;EAED,OAAO;IAAE/C,SAAS;IAAEJ;EAAW,CAAC;AAClC;AAEO,eAAewE,0BAA0BA,CAC9CnF,IAAuB,EACvB8D,WAAoB,EACpBC,SAAqB,EACG;EACxB,IAAI,IAAAC,kBAAW,EAACD,SAAS,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,EAAE;IACvD,MAAM,IAAAE,uBAAgB,EAAC,6BAA6BjE,IAAI,EAAE,EAAE,aAAa,CAAC;EAC5E;EAEA,MAAMkE,YAAY,GAAG,IAAAC,qBAAc,EAACJ,SAAS,CAAC;EAC9C,MAAMK,aAAa,GAAG,IAAAD,qBAAc,EAACJ,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC;EAE1E,IAAIK,aAAa,CAACC,MAAM,KAAK,CAAC,EAAE;IAC9B,MAAM,IAAAJ,uBAAgB,EAAC,wBAAwB,EAAE,aAAa,CAAC;EACjE;;EAEA;EACA,MAAMhE,MAAM,GAAG;IACbsB,YAAY,EAAE0B,kBAAW,CAACqB,GAAG;IAC7B9C,UAAU,EAAE+C,kBAAW,CAACC,IAAI;IAC5B/C,aAAa,EAAEwB,kBAAW,CAACqB,GAAG;IAC9B5C,WAAW,EAAE6C,kBAAW,CAACE;EAC3B,CAAC;EACD,MAAMhC,EAAE,GAAG,IAAI3C,EAAE,CAACE,IAAI,EAAEC,MAAM,CAAC;EAC/B,MAAMwC,EAAE,CAACnB,eAAe,CAAC,CAAC;EAE1B,MAAMoD,aAAa,GAAG1E,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,MAAM;EAE3D,MAAM2E,aAAa,GAAGlC,EAAE,CAACX,YAAY,CAAC,CAAC;EACvC,MAAM8C,cAAc,GAAGnC,EAAE,CAACV,aAAa,CAAC,CAAC;EAEzC,MAAM8C,GAAG,GAAGC,eAAS,CAACC,eAAe,CACnC,QAAQ,EACRJ,aAAa,EACb1B,kBAAW,CAACqB,GAAG,EACfC,kBAAW,CAACC,IACd,CAAoB;EACpB,MAAMzD,SAAS,GAAG,IAAIiE,eAAS,CAC7BH,GAAG,EACH;IAAEI,IAAI,EAAEP;EAAc,CAAC,EACvBR,YAAY,EACZ,IACF,CAAC;EAED,MAAMgB,IAAI,GAAGJ,eAAS,CAACC,eAAe,CACpC,SAAS,EACTH,cAAc,EACd3B,kBAAW,CAACqB,GAAG,EACfC,kBAAW,CAACE,KACd,CAA0B;EAC1B,MAAM9D,UAAU,GAAG,IAAIqE,eAAS,CAC9BE,IAAI,EACJ;IAAED,IAAI,EAAEP;EAAc,CAAC,EACvBN,aAAa,EACbN,WACF,CAAC;EAED,OAAO;IAAE/C,SAAS;IAAEJ;EAAW,CAAC;AAClC;AAEO,SAASyE,WAAWA,CACzBC,SAA0B,EAC1BC,OAAkB,EAClBjB,MAAqB,EACR;EACb,MAAMkB,YAAY,GAAGF,SAAqD;EAC1E,MAAMtE,SAAS,GAAGwE,YAAY,CAACC,MAAM;EAErC,IAAI,CAACzE,SAAS,EAAE;IACd,MAAM,IAAIF,KAAK,CAAC,mDAAmD,CAAC;EACtE;EAEA,IAAIyE,OAAO,CAACD,SAAS,CAACJ,IAAI,KAAKlE,SAAS,CAACsE,SAAS,CAACJ,IAAI,EAAE;IACvD,MAAM,IAAIpE,KAAK,CAAC,oCAAoC,CAAC;EACvD;EAEA,MAAMb,IAAI,GAAGsF,OAAO,CAACD,SAAS,CAACJ,IAAI,CAACQ,WAAW,CAAC,CAAsB;EACtE,MAAMhD,EAAE,GAAG,IAAI3C,EAAE,CAACE,IAAI,EAAE,CAAC,CAAC,CAAC;;EAE3B;EACA,MAAM0F,eAAe,GAAGJ,OAAO,CAACK,SAAS,CAACC,MAAM,CAACC,SAAS,CAAC,CAAC;EAC5D,MAAMC,cAAc,GAAG/E,SAAS,CAAC4E,SAAS,CAACC,MAAM,CAACC,SAAS,CAAC,CAAC;EAE7D,MAAME,eAAe,GAAG,IAAIzC,UAAU,CAACoC,eAAe,CAAC;EACvD,MAAMM,cAAc,GAAG,IAAI1C,UAAU,CAACwC,cAAc,CAAC;EAErD,MAAMG,MAAM,GAAGxD,EAAE,CAACT,eAAe,CAAC+D,eAAe,EAAEC,cAAc,CAAC;;EAElE;EACA,IAAI3B,MAAM,KAAK,IAAI,EAAE;IACnB,OAAO4B,MAAM;EACf;;EAEA;EACA,MAAMC,UAAU,GAAGC,IAAI,CAACC,IAAI,CAAC/B,MAAM,GAAG,CAAC,CAAC;EACxC,IAAI4B,MAAM,CAACC,UAAU,IAAIA,UAAU,EAAE;IACnC,OAAOD,MAAM,CAACI,KAAK,CAAC,CAAC,EAAEH,UAAU,CAAC;EACpC;EAEA,MAAM,IAAIrF,KAAK,CAAC,8CAA8C,CAAC;AACjE","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hkdf = hkdf;
7
+ exports.hkdfDeriveBits = hkdfDeriveBits;
8
+ exports.hkdfSync = hkdfSync;
9
+ var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
10
+ var _reactNativeNitroModules = require("react-native-nitro-modules");
11
+ var _utils = require("./utils");
12
+ // Lazy load native module
13
+ let native;
14
+ function getNative() {
15
+ if (native == null) {
16
+ native = _reactNativeNitroModules.NitroModules.createHybridObject('Hkdf');
17
+ }
18
+ return native;
19
+ }
20
+ function validateCallback(callback) {
21
+ if (callback === undefined || typeof callback !== 'function') {
22
+ throw new Error('No callback provided to hkdf');
23
+ }
24
+ }
25
+ function sanitizeInput(input, name) {
26
+ try {
27
+ return (0, _utils.binaryLikeToArrayBuffer)(input);
28
+ } catch {
29
+ throw new Error(`${name} must be a string, a Buffer, a typed array, or a DataView`);
30
+ }
31
+ }
32
+ function hkdf(digest, key, salt, info, keylen, callback) {
33
+ validateCallback(callback);
34
+ try {
35
+ const normalizedDigest = (0, _utils.normalizeHashName)(digest);
36
+ const sanitizedKey = sanitizeInput(key, 'Key');
37
+ const sanitizedSalt = sanitizeInput(salt, 'Salt');
38
+ const sanitizedInfo = sanitizeInput(info, 'Info');
39
+ if (keylen < 0) {
40
+ throw new TypeError('Bad key length');
41
+ }
42
+ const nativeMod = getNative();
43
+ nativeMod.deriveKey(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen).then(res => {
44
+ callback(null, _reactNativeBuffer.Buffer.from(res));
45
+ }, err => {
46
+ callback(err);
47
+ });
48
+ } catch (err) {
49
+ callback(err);
50
+ }
51
+ }
52
+ function hkdfSync(digest, key, salt, info, keylen) {
53
+ const normalizedDigest = (0, _utils.normalizeHashName)(digest);
54
+ const sanitizedKey = sanitizeInput(key, 'Key');
55
+ const sanitizedSalt = sanitizeInput(salt, 'Salt');
56
+ const sanitizedInfo = sanitizeInput(info, 'Info');
57
+ if (keylen < 0) {
58
+ throw new TypeError('Bad key length');
59
+ }
60
+ const nativeMod = getNative();
61
+ const result = nativeMod.deriveKeySync(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen);
62
+ return _reactNativeBuffer.Buffer.from(result);
63
+ }
64
+ function hkdfDeriveBits(algorithm, baseKey, length) {
65
+ const hash = algorithm.hash;
66
+ const salt = algorithm.salt;
67
+ const info = algorithm.info;
68
+
69
+ // Check if key is extractable or we can access its handle/buffer
70
+ // For raw keys, we can export.
71
+ const keyBuffer = baseKey.keyObject.export();
72
+
73
+ // length is in bits, native expects bytes
74
+ const keylen = Math.ceil(length / 8);
75
+ const hashName = typeof hash === 'string' ? hash : hash.name;
76
+ const normalizedDigest = (0, _utils.normalizeHashName)(hashName);
77
+ const nativeMod = getNative();
78
+ const result = nativeMod.deriveKeySync(normalizedDigest, (0, _utils.binaryLikeToArrayBuffer)(keyBuffer), (0, _utils.binaryLikeToArrayBuffer)(salt), (0, _utils.binaryLikeToArrayBuffer)(info), keylen);
79
+ return result;
80
+ }
81
+ //# sourceMappingURL=hkdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeBuffer","require","_reactNativeNitroModules","_utils","native","getNative","NitroModules","createHybridObject","validateCallback","callback","undefined","Error","sanitizeInput","input","name","binaryLikeToArrayBuffer","hkdf","digest","key","salt","info","keylen","normalizedDigest","normalizeHashName","sanitizedKey","sanitizedSalt","sanitizedInfo","TypeError","nativeMod","deriveKey","then","res","Buffer","from","err","hkdfSync","result","deriveKeySync","hkdfDeriveBits","algorithm","baseKey","length","hash","keyBuffer","keyObject","export","Math","ceil","hashName"],"sourceRoot":"../../src","sources":["hkdf.ts"],"mappings":"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","ignoreList":[]}