react-native-quick-crypto 1.0.2 → 1.0.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.
Files changed (58) hide show
  1. package/QuickCrypto.podspec +1 -0
  2. package/README.md +1 -1
  3. package/android/CMakeLists.txt +4 -0
  4. package/cpp/hkdf/HybridHkdf.cpp +96 -0
  5. package/cpp/hkdf/HybridHkdf.hpp +28 -0
  6. package/cpp/scrypt/HybridScrypt.cpp +62 -0
  7. package/cpp/scrypt/HybridScrypt.hpp +28 -0
  8. package/lib/commonjs/hkdf.js +81 -0
  9. package/lib/commonjs/hkdf.js.map +1 -0
  10. package/lib/commonjs/index.js +33 -1
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/scrypt.js +98 -0
  13. package/lib/commonjs/scrypt.js.map +1 -0
  14. package/lib/commonjs/specs/hkdf.nitro.js +6 -0
  15. package/lib/commonjs/specs/hkdf.nitro.js.map +1 -0
  16. package/lib/commonjs/specs/scrypt.nitro.js +6 -0
  17. package/lib/commonjs/specs/scrypt.nitro.js.map +1 -0
  18. package/lib/commonjs/subtle.js +28 -0
  19. package/lib/commonjs/subtle.js.map +1 -1
  20. package/lib/module/hkdf.js +75 -0
  21. package/lib/module/hkdf.js.map +1 -0
  22. package/lib/module/index.js +13 -1
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/module/scrypt.js +93 -0
  25. package/lib/module/scrypt.js.map +1 -0
  26. package/lib/module/specs/hkdf.nitro.js +4 -0
  27. package/lib/module/specs/hkdf.nitro.js.map +1 -0
  28. package/lib/module/specs/scrypt.nitro.js +4 -0
  29. package/lib/module/specs/scrypt.nitro.js.map +1 -0
  30. package/lib/module/subtle.js +28 -0
  31. package/lib/module/subtle.js.map +1 -1
  32. package/lib/tsconfig.tsbuildinfo +1 -1
  33. package/lib/typescript/hkdf.d.ts +26 -0
  34. package/lib/typescript/hkdf.d.ts.map +1 -0
  35. package/lib/typescript/index.d.ts +9 -0
  36. package/lib/typescript/index.d.ts.map +1 -1
  37. package/lib/typescript/scrypt.d.ts +18 -0
  38. package/lib/typescript/scrypt.d.ts.map +1 -0
  39. package/lib/typescript/specs/hkdf.nitro.d.ts +9 -0
  40. package/lib/typescript/specs/hkdf.nitro.d.ts.map +1 -0
  41. package/lib/typescript/specs/scrypt.nitro.d.ts +9 -0
  42. package/lib/typescript/specs/scrypt.nitro.d.ts.map +1 -0
  43. package/lib/typescript/subtle.d.ts.map +1 -1
  44. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +2 -0
  45. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +20 -0
  46. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +20 -0
  47. package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +22 -0
  48. package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +66 -0
  49. package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +22 -0
  50. package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +65 -0
  51. package/package.json +1 -1
  52. package/react-native.config.js +19 -0
  53. package/src/hkdf.ts +152 -0
  54. package/src/index.ts +13 -1
  55. package/src/scrypt.ts +134 -0
  56. package/src/specs/hkdf.nitro.ts +19 -0
  57. package/src/specs/scrypt.nitro.ts +23 -0
  58. package/src/subtle.ts +45 -0
@@ -108,6 +108,7 @@ Pod::Spec.new do |s|
108
108
  # Add cpp subdirectories to header search paths
109
109
  cpp_headers = [
110
110
  "\"$(PODS_TARGET_SRCROOT)/cpp/utils\"",
111
+ "\"$(PODS_TARGET_SRCROOT)/cpp/hkdf\"",
111
112
  "\"$(PODS_TARGET_SRCROOT)/deps/ncrypto/include\"",
112
113
  "\"$(PODS_TARGET_SRCROOT)/deps/blake3/c\"",
113
114
  "\"$(PODS_TARGET_SRCROOT)/deps/fastpbkdf2\""
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"
@@ -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
@@ -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":[]}
@@ -101,6 +101,18 @@ Object.keys(_hmac).forEach(function (key) {
101
101
  }
102
102
  });
103
103
  });
104
+ var hkdf = _interopRequireWildcard(require("./hkdf"));
105
+ Object.keys(hkdf).forEach(function (key) {
106
+ if (key === "default" || key === "__esModule") return;
107
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
108
+ if (key in exports && exports[key] === hkdf[key]) return;
109
+ Object.defineProperty(exports, key, {
110
+ enumerable: true,
111
+ get: function () {
112
+ return hkdf[key];
113
+ }
114
+ });
115
+ });
104
116
  var pbkdf2 = _interopRequireWildcard(require("./pbkdf2"));
105
117
  Object.keys(pbkdf2).forEach(function (key) {
106
118
  if (key === "default" || key === "__esModule") return;
@@ -113,6 +125,18 @@ Object.keys(pbkdf2).forEach(function (key) {
113
125
  }
114
126
  });
115
127
  });
128
+ var scrypt = _interopRequireWildcard(require("./scrypt"));
129
+ Object.keys(scrypt).forEach(function (key) {
130
+ if (key === "default" || key === "__esModule") return;
131
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
132
+ if (key in exports && exports[key] === scrypt[key]) return;
133
+ Object.defineProperty(exports, key, {
134
+ enumerable: true,
135
+ get: function () {
136
+ return scrypt[key];
137
+ }
138
+ });
139
+ });
116
140
  var random = _interopRequireWildcard(require("./random"));
117
141
  Object.keys(random).forEach(function (key) {
118
142
  if (key === "default" || key === "__esModule") return;
@@ -168,7 +192,9 @@ const QuickCrypto = {
168
192
  ...ed,
169
193
  ..._hash.hashExports,
170
194
  ..._hmac.hmacExports,
195
+ ...hkdf,
171
196
  ...pbkdf2,
197
+ ...scrypt,
172
198
  ...random,
173
199
  ...utils,
174
200
  ...subtle,
@@ -189,7 +215,13 @@ const install = () => {
189
215
 
190
216
  // random, cipher, hash use nextTick
191
217
  exports.install = install;
192
- global.process.nextTick = setImmediate;
218
+ if (global.process == null) {
219
+ // @ts-expect-error - process is not defined
220
+ global.process = {};
221
+ }
222
+ if (global.process.nextTick == null) {
223
+ global.process.nextTick = setImmediate;
224
+ }
193
225
 
194
226
  // exports
195
227
  var _default = exports.default = QuickCrypto;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeBuffer","require","keys","_interopRequireWildcard","Object","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","blake3","cipher","ed","_hash","_hmac","pbkdf2","random","_constants","utils","subtle","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","QuickCrypto","hash","hmac","constants","install","global","Buffer","crypto","process","nextTick","setImmediate","_default","module"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeBuffer","require","keys","_interopRequireWildcard","Object","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","blake3","cipher","ed","_hash","_hmac","hkdf","pbkdf2","scrypt","random","_constants","utils","subtle","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","QuickCrypto","hash","hmac","constants","install","global","Buffer","crypto","process","nextTick","setImmediate","_default","module"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.scrypt = scrypt;
7
+ exports.scryptSync = scryptSync;
8
+ var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
9
+ var _reactNativeNitroModules = require("react-native-nitro-modules");
10
+ var _utils = require("./utils");
11
+ // Lazy load native module
12
+ let native;
13
+ function getNative() {
14
+ if (native == null) {
15
+ native = _reactNativeNitroModules.NitroModules.createHybridObject('Scrypt');
16
+ }
17
+ return native;
18
+ }
19
+ const defaults = {
20
+ N: 16384,
21
+ r: 8,
22
+ p: 1,
23
+ maxmem: 32 * 1024 * 1024
24
+ };
25
+ function getScryptParams(options) {
26
+ const N = options?.N ?? options?.cost ?? defaults.N;
27
+ const r = options?.r ?? options?.blockSize ?? defaults.r;
28
+ const p = options?.p ?? options?.parallelization ?? defaults.p;
29
+ const maxmem = options?.maxmem ?? defaults.maxmem;
30
+ return {
31
+ N,
32
+ r,
33
+ p,
34
+ maxmem
35
+ };
36
+ }
37
+ function validateCallback(callback) {
38
+ if (callback === undefined || typeof callback !== 'function') {
39
+ throw new Error('No callback provided to scrypt');
40
+ }
41
+ }
42
+ function sanitizeInput(input, name) {
43
+ try {
44
+ return (0, _utils.binaryLikeToArrayBuffer)(input);
45
+ } catch {
46
+ throw new Error(`${name} must be a string, a Buffer, a typed array, or a DataView`);
47
+ }
48
+ }
49
+ function scrypt(password, salt, keylen, options, callback) {
50
+ let cb;
51
+ let opts;
52
+ if (typeof options === 'function') {
53
+ cb = options;
54
+ opts = undefined;
55
+ } else {
56
+ cb = callback;
57
+ opts = options;
58
+ }
59
+ validateCallback(cb);
60
+ try {
61
+ const {
62
+ N,
63
+ r,
64
+ p,
65
+ maxmem
66
+ } = getScryptParams(opts);
67
+ const sanitizedPassword = sanitizeInput(password, 'Password');
68
+ const sanitizedSalt = sanitizeInput(salt, 'Salt');
69
+ if (keylen < 0) {
70
+ throw new TypeError('Bad key length');
71
+ }
72
+ const nativeMod = getNative();
73
+ nativeMod.deriveKey(sanitizedPassword, sanitizedSalt, N, r, p, maxmem, keylen).then(res => {
74
+ cb(null, _reactNativeBuffer.Buffer.from(res));
75
+ }, err => {
76
+ cb(err);
77
+ });
78
+ } catch (err) {
79
+ cb(err);
80
+ }
81
+ }
82
+ function scryptSync(password, salt, keylen, options) {
83
+ const {
84
+ N,
85
+ r,
86
+ p,
87
+ maxmem
88
+ } = getScryptParams(options);
89
+ const sanitizedPassword = sanitizeInput(password, 'Password');
90
+ const sanitizedSalt = sanitizeInput(salt, 'Salt');
91
+ if (keylen < 0) {
92
+ throw new TypeError('Bad key length');
93
+ }
94
+ const nativeMod = getNative();
95
+ const result = nativeMod.deriveKeySync(sanitizedPassword, sanitizedSalt, N, r, p, maxmem, keylen);
96
+ return _reactNativeBuffer.Buffer.from(result);
97
+ }
98
+ //# sourceMappingURL=scrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeBuffer","require","_reactNativeNitroModules","_utils","native","getNative","NitroModules","createHybridObject","defaults","N","r","p","maxmem","getScryptParams","options","cost","blockSize","parallelization","validateCallback","callback","undefined","Error","sanitizeInput","input","name","binaryLikeToArrayBuffer","scrypt","password","salt","keylen","cb","opts","sanitizedPassword","sanitizedSalt","TypeError","nativeMod","deriveKey","then","res","Buffer","from","err","scryptSync","result","deriveKeySync"],"sourceRoot":"../../src","sources":["scrypt.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=hkdf.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/hkdf.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=scrypt.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/scrypt.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -23,6 +23,7 @@ var _hmac = require("./hmac");
23
23
  var _signVerify = require("./keys/signVerify");
24
24
  var _ed = require("./ed");
25
25
  var _mldsa = require("./mldsa");
26
+ var _hkdf = require("./hkdf");
26
27
  /* eslint-disable @typescript-eslint/no-unused-vars */
27
28
  // import { pbkdf2DeriveBits } from './pbkdf2';
28
29
  // import { aesCipher, aesGenerateKey, aesImportKey, getAlgorithmName } from './aes';
@@ -923,6 +924,25 @@ const importGenericSecretKey = async ({
923
924
  }
924
925
  throw new Error(`Unable to import ${name} key with format ${format}`);
925
926
  };
927
+ const hkdfImportKey = async (format, keyData, algorithm, extractable, keyUsages) => {
928
+ const {
929
+ name
930
+ } = algorithm;
931
+ if (hasAnyNotIn(keyUsages, ['deriveKey', 'deriveBits'])) {
932
+ throw new Error(`Unsupported key usage for a ${name} key`);
933
+ }
934
+ switch (format) {
935
+ case 'raw':
936
+ {
937
+ const keyObject = (0, _keys.createSecretKey)(keyData);
938
+ return new _keys.CryptoKey(keyObject, {
939
+ name
940
+ }, keyUsages, extractable);
941
+ }
942
+ default:
943
+ throw new Error(`Unable to import ${name} key with format ${format}`);
944
+ }
945
+ };
926
946
  const checkCryptoKeyPairUsages = pair => {
927
947
  if (pair.privateKey && pair.privateKey instanceof _keys.CryptoKey && pair.privateKey.keyUsages && pair.privateKey.keyUsages.length > 0) {
928
948
  return;
@@ -1110,6 +1130,8 @@ class Subtle {
1110
1130
  // Fall through
1111
1131
  case 'X448':
1112
1132
  return (0, _ed.xDeriveBits)(algorithm, baseKey, length);
1133
+ case 'HKDF':
1134
+ return (0, _hkdf.hkdfDeriveBits)(algorithm, baseKey, length);
1113
1135
  }
1114
1136
  throw new Error(`'subtle.deriveBits()' for ${algorithm.name} is not implemented.`);
1115
1137
  }
@@ -1134,6 +1156,9 @@ class Subtle {
1134
1156
  case 'X448':
1135
1157
  derivedBits = await (0, _ed.xDeriveBits)(algorithm, baseKey, length);
1136
1158
  break;
1159
+ case 'HKDF':
1160
+ derivedBits = (0, _hkdf.hkdfDeriveBits)(algorithm, baseKey, length);
1161
+ break;
1137
1162
  default:
1138
1163
  throw new Error(`'subtle.deriveKey()' for ${algorithm.name} is not implemented.`);
1139
1164
  }
@@ -1328,6 +1353,9 @@ class Subtle {
1328
1353
  case 'PBKDF2':
1329
1354
  result = await importGenericSecretKey(normalizedAlgorithm, format, data, extractable, keyUsages);
1330
1355
  break;
1356
+ case 'HKDF':
1357
+ result = await hkdfImportKey(format, data, normalizedAlgorithm, extractable, keyUsages);
1358
+ break;
1331
1359
  case 'X25519':
1332
1360
  // Fall through
1333
1361
  case 'X448':