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.
- package/QuickCrypto.podspec +6 -47
- package/README.md +1 -1
- package/android/CMakeLists.txt +4 -0
- package/cpp/cipher/HybridCipher.cpp +17 -1
- package/cpp/ed25519/HybridEdKeyPair.cpp +8 -2
- package/cpp/hkdf/HybridHkdf.cpp +96 -0
- package/cpp/hkdf/HybridHkdf.hpp +28 -0
- package/cpp/scrypt/HybridScrypt.cpp +62 -0
- package/cpp/scrypt/HybridScrypt.hpp +28 -0
- package/lib/commonjs/ed.js +68 -0
- package/lib/commonjs/ed.js.map +1 -1
- package/lib/commonjs/hkdf.js +81 -0
- package/lib/commonjs/hkdf.js.map +1 -0
- package/lib/commonjs/index.js +33 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/scrypt.js +98 -0
- package/lib/commonjs/scrypt.js.map +1 -0
- package/lib/commonjs/specs/hkdf.nitro.js +6 -0
- package/lib/commonjs/specs/hkdf.nitro.js.map +1 -0
- package/lib/commonjs/specs/scrypt.nitro.js +6 -0
- package/lib/commonjs/specs/scrypt.nitro.js.map +1 -0
- package/lib/commonjs/subtle.js +400 -7
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/module/ed.js +66 -0
- package/lib/module/ed.js.map +1 -1
- package/lib/module/hkdf.js +75 -0
- package/lib/module/hkdf.js.map +1 -0
- package/lib/module/index.js +13 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/scrypt.js +93 -0
- package/lib/module/scrypt.js.map +1 -0
- package/lib/module/specs/hkdf.nitro.js +4 -0
- package/lib/module/specs/hkdf.nitro.js.map +1 -0
- package/lib/module/specs/scrypt.nitro.js +4 -0
- package/lib/module/specs/scrypt.nitro.js.map +1 -0
- package/lib/module/subtle.js +401 -8
- package/lib/module/subtle.js.map +1 -1
- package/lib/module/utils/types.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/ed.d.ts +4 -1
- package/lib/typescript/ed.d.ts.map +1 -1
- package/lib/typescript/hkdf.d.ts +26 -0
- package/lib/typescript/hkdf.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +11 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/scrypt.d.ts +18 -0
- package/lib/typescript/scrypt.d.ts.map +1 -0
- package/lib/typescript/specs/hkdf.nitro.d.ts +9 -0
- package/lib/typescript/specs/hkdf.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/scrypt.nitro.d.ts +9 -0
- package/lib/typescript/specs/scrypt.nitro.d.ts.map +1 -0
- package/lib/typescript/subtle.d.ts +4 -1
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/types.d.ts +9 -3
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +2 -0
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +20 -0
- package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +20 -0
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +66 -0
- package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +65 -0
- package/package.json +1 -1
- package/src/ed.ts +102 -0
- package/src/hkdf.ts +152 -0
- package/src/index.ts +13 -1
- package/src/scrypt.ts +134 -0
- package/src/specs/hkdf.nitro.ts +19 -0
- package/src/specs/scrypt.nitro.ts +23 -0
- package/src/subtle.ts +564 -9
- package/src/utils/types.ts +16 -3
package/QuickCrypto.podspec
CHANGED
|
@@ -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
|
-
#
|
|
27
|
-
#
|
|
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
|
|
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.
|
|
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
|
|
package/android/CMakeLists.txt
CHANGED
|
@@ -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(
|
|
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(
|
|
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
|
package/lib/commonjs/ed.js
CHANGED
|
@@ -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
|
package/lib/commonjs/ed.js.map
CHANGED
|
@@ -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":"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","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":[]}
|