react-native-quick-crypto 1.0.9 → 1.0.11
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 +9 -2
- package/README.md +13 -9
- package/android/CMakeLists.txt +13 -0
- package/cpp/argon2/HybridArgon2.cpp +103 -0
- package/cpp/argon2/HybridArgon2.hpp +32 -0
- package/cpp/certificate/HybridCertificate.cpp +42 -0
- package/cpp/certificate/HybridCertificate.hpp +16 -0
- package/cpp/cipher/HybridCipher.cpp +58 -0
- package/cpp/cipher/HybridCipher.hpp +4 -0
- package/cpp/cipher/HybridCipherFactory.hpp +15 -1
- package/cpp/cipher/OCBCipher.cpp +4 -4
- package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +161 -0
- package/cpp/cipher/XChaCha20Poly1305Cipher.hpp +43 -0
- package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +145 -0
- package/cpp/cipher/XSalsa20Poly1305Cipher.hpp +42 -0
- package/cpp/dh/HybridDhKeyPair.cpp +179 -0
- package/cpp/dh/HybridDhKeyPair.hpp +37 -0
- package/cpp/dh/HybridDiffieHellman.cpp +10 -0
- package/cpp/dh/HybridDiffieHellman.hpp +1 -0
- package/cpp/dsa/HybridDsaKeyPair.cpp +128 -0
- package/cpp/dsa/HybridDsaKeyPair.hpp +32 -0
- package/cpp/ec/HybridEcKeyPair.cpp +21 -0
- package/cpp/ec/HybridEcKeyPair.hpp +1 -0
- package/cpp/ecdh/HybridECDH.cpp +35 -0
- package/cpp/ecdh/HybridECDH.hpp +1 -0
- package/cpp/hash/HybridHash.cpp +1 -1
- package/cpp/hash/HybridHash.hpp +1 -1
- package/cpp/hmac/HybridHmac.cpp +1 -1
- package/cpp/hmac/HybridHmac.hpp +1 -1
- package/cpp/keys/HybridKeyObjectHandle.cpp +131 -1
- package/cpp/keys/HybridKeyObjectHandle.hpp +5 -1
- package/cpp/prime/HybridPrime.cpp +81 -0
- package/cpp/prime/HybridPrime.hpp +20 -0
- package/deps/ncrypto/.bazelrc +0 -1
- package/deps/ncrypto/.bazelversion +1 -1
- package/deps/ncrypto/.github/workflows/commitlint.yml +16 -0
- package/deps/ncrypto/.github/workflows/linter.yml +2 -2
- package/deps/ncrypto/.github/workflows/release-please.yml +16 -0
- package/deps/ncrypto/.github/workflows/ubuntu.yml +82 -0
- package/deps/ncrypto/.release-please-manifest.json +3 -0
- package/deps/ncrypto/BUILD.bazel +9 -1
- package/deps/ncrypto/CHANGELOG.md +37 -0
- package/deps/ncrypto/CMakeLists.txt +35 -11
- package/deps/ncrypto/MODULE.bazel +16 -1
- package/deps/ncrypto/MODULE.bazel.lock +299 -118
- package/deps/ncrypto/cmake/ncrypto-flags.cmake +1 -0
- package/deps/ncrypto/include/ncrypto/aead.h +137 -0
- package/deps/ncrypto/include/ncrypto/version.h +14 -0
- package/deps/ncrypto/include/ncrypto.h +85 -230
- package/deps/ncrypto/ncrypto.pc.in +10 -0
- package/deps/ncrypto/release-please-config.json +11 -0
- package/deps/ncrypto/src/CMakeLists.txt +31 -6
- package/deps/ncrypto/src/aead.cpp +302 -0
- package/deps/ncrypto/src/ncrypto.cpp +274 -556
- package/deps/ncrypto/tests/BUILD.bazel +2 -0
- package/deps/ncrypto/tests/basic.cpp +772 -2
- package/deps/ncrypto/tools/run-clang-format.sh +5 -5
- package/lib/commonjs/argon2.js +39 -0
- package/lib/commonjs/argon2.js.map +1 -0
- package/lib/commonjs/certificate.js +35 -0
- package/lib/commonjs/certificate.js.map +1 -0
- package/lib/commonjs/cipher.js +8 -0
- package/lib/commonjs/cipher.js.map +1 -1
- package/lib/commonjs/dhKeyPair.js +109 -0
- package/lib/commonjs/dhKeyPair.js.map +1 -0
- package/lib/commonjs/diffie-hellman.js +4 -1
- package/lib/commonjs/diffie-hellman.js.map +1 -1
- package/lib/commonjs/dsa.js +92 -0
- package/lib/commonjs/dsa.js.map +1 -0
- package/lib/commonjs/ec.js +20 -25
- package/lib/commonjs/ec.js.map +1 -1
- package/lib/commonjs/ecdh.js +37 -0
- package/lib/commonjs/ecdh.js.map +1 -1
- package/lib/commonjs/ed.js +1 -2
- package/lib/commonjs/ed.js.map +1 -1
- package/lib/commonjs/hash.js +7 -0
- package/lib/commonjs/hash.js.map +1 -1
- package/lib/commonjs/index.js +46 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/keys/classes.js +18 -12
- package/lib/commonjs/keys/classes.js.map +1 -1
- package/lib/commonjs/keys/generateKeyPair.js +11 -0
- package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
- package/lib/commonjs/prime.js +84 -0
- package/lib/commonjs/prime.js.map +1 -0
- package/lib/commonjs/specs/argon2.nitro.js +6 -0
- package/lib/commonjs/specs/argon2.nitro.js.map +1 -0
- package/lib/commonjs/specs/certificate.nitro.js +6 -0
- package/lib/commonjs/specs/certificate.nitro.js.map +1 -0
- package/lib/commonjs/specs/dhKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/dhKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/dsaKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/dsaKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/prime.nitro.js +6 -0
- package/lib/commonjs/specs/prime.nitro.js.map +1 -0
- package/lib/commonjs/subtle.js +181 -39
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/module/argon2.js +34 -0
- package/lib/module/argon2.js.map +1 -0
- package/lib/module/certificate.js +30 -0
- package/lib/module/certificate.js.map +1 -0
- package/lib/module/cipher.js +7 -0
- package/lib/module/cipher.js.map +1 -1
- package/lib/module/dhKeyPair.js +102 -0
- package/lib/module/dhKeyPair.js.map +1 -0
- package/lib/module/diffie-hellman.js +4 -0
- package/lib/module/diffie-hellman.js.map +1 -1
- package/lib/module/dsa.js +85 -0
- package/lib/module/dsa.js.map +1 -0
- package/lib/module/ec.js +19 -25
- package/lib/module/ec.js.map +1 -1
- package/lib/module/ecdh.js +37 -0
- package/lib/module/ecdh.js.map +1 -1
- package/lib/module/ed.js +1 -2
- package/lib/module/ed.js.map +1 -1
- package/lib/module/hash.js +6 -0
- package/lib/module/hash.js.map +1 -1
- package/lib/module/index.js +12 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/keys/classes.js +18 -12
- package/lib/module/keys/classes.js.map +1 -1
- package/lib/module/keys/generateKeyPair.js +11 -0
- package/lib/module/keys/generateKeyPair.js.map +1 -1
- package/lib/module/prime.js +77 -0
- package/lib/module/prime.js.map +1 -0
- package/lib/module/specs/argon2.nitro.js +4 -0
- package/lib/module/specs/argon2.nitro.js.map +1 -0
- package/lib/module/specs/certificate.nitro.js +4 -0
- package/lib/module/specs/certificate.nitro.js.map +1 -0
- package/lib/module/specs/dhKeyPair.nitro.js +4 -0
- package/lib/module/specs/dhKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/dsaKeyPair.nitro.js +4 -0
- package/lib/module/specs/dsaKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/prime.nitro.js +4 -0
- package/lib/module/specs/prime.nitro.js.map +1 -0
- package/lib/module/subtle.js +183 -42
- 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/argon2.d.ts +16 -0
- package/lib/typescript/argon2.d.ts.map +1 -0
- package/lib/typescript/certificate.d.ts +8 -0
- package/lib/typescript/certificate.d.ts.map +1 -0
- package/lib/typescript/cipher.d.ts +12 -0
- package/lib/typescript/cipher.d.ts.map +1 -1
- package/lib/typescript/dhKeyPair.d.ts +19 -0
- package/lib/typescript/dhKeyPair.d.ts.map +1 -0
- package/lib/typescript/diffie-hellman.d.ts +2 -0
- package/lib/typescript/diffie-hellman.d.ts.map +1 -1
- package/lib/typescript/dsa.d.ts +19 -0
- package/lib/typescript/dsa.d.ts.map +1 -0
- package/lib/typescript/ec.d.ts +1 -0
- package/lib/typescript/ec.d.ts.map +1 -1
- package/lib/typescript/ecdh.d.ts +3 -0
- package/lib/typescript/ecdh.d.ts.map +1 -1
- package/lib/typescript/ed.d.ts.map +1 -1
- package/lib/typescript/hash.d.ts +2 -0
- package/lib/typescript/hash.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +22 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/classes.d.ts +4 -0
- package/lib/typescript/keys/classes.d.ts.map +1 -1
- package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
- package/lib/typescript/prime.d.ts +19 -0
- package/lib/typescript/prime.d.ts.map +1 -0
- package/lib/typescript/specs/argon2.nitro.d.ts +9 -0
- package/lib/typescript/specs/argon2.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/certificate.nitro.d.ts +10 -0
- package/lib/typescript/specs/certificate.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/cipher.nitro.d.ts +9 -0
- package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/dhKeyPair.nitro.d.ts +14 -0
- package/lib/typescript/specs/dhKeyPair.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/diffie-hellman.nitro.d.ts +1 -0
- package/lib/typescript/specs/diffie-hellman.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/dsaKeyPair.nitro.d.ts +13 -0
- package/lib/typescript/specs/dsaKeyPair.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/ecKeyPair.nitro.d.ts +1 -0
- package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/ecdh.nitro.d.ts +1 -0
- package/lib/typescript/specs/ecdh.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +2 -0
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/prime.nitro.d.ts +11 -0
- package/lib/typescript/specs/prime.nitro.d.ts.map +1 -0
- package/lib/typescript/subtle.d.ts +2 -0
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/types.d.ts +24 -7
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +13 -5
- package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +104 -54
- package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +1 -1
- package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +2 -2
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +1 -1
- package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +104 -54
- package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +5 -1
- package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +1 -1
- package/nitrogen/generated/shared/c++/CipherArgs.hpp +34 -19
- package/nitrogen/generated/shared/c++/CipherInfo.hpp +104 -0
- package/nitrogen/generated/shared/c++/HybridArgon2Spec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridArgon2Spec.hpp +66 -0
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridCertificateSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridCertificateSpec.hpp +64 -0
- package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +5 -3
- package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.hpp +69 -0
- package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.hpp +3 -3
- package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.hpp +68 -0
- package/nitrogen/generated/shared/c++/HybridECDHSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridECDHSpec.hpp +3 -3
- package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +2 -4
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +3 -4
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +3 -1
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -4
- package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridPrimeSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridPrimeSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/JWK.hpp +84 -68
- package/nitrogen/generated/shared/c++/JWKkty.hpp +5 -1
- package/nitrogen/generated/shared/c++/JWKuse.hpp +1 -1
- package/nitrogen/generated/shared/c++/KFormatType.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyDetail.hpp +39 -23
- package/nitrogen/generated/shared/c++/KeyEncoding.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyObject.hpp +21 -5
- package/nitrogen/generated/shared/c++/KeyType.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyUsage.hpp +1 -1
- package/nitrogen/generated/shared/c++/NamedCurve.hpp +1 -1
- package/package.json +1 -1
- package/src/argon2.ts +83 -0
- package/src/certificate.ts +41 -0
- package/src/cipher.ts +24 -0
- package/src/dhKeyPair.ts +156 -0
- package/src/diffie-hellman.ts +6 -0
- package/src/dsa.ts +129 -0
- package/src/ec.ts +23 -19
- package/src/ecdh.ts +59 -0
- package/src/ed.ts +1 -2
- package/src/hash.ts +11 -0
- package/src/index.ts +12 -0
- package/src/keys/classes.ts +26 -8
- package/src/keys/generateKeyPair.ts +14 -0
- package/src/prime.ts +134 -0
- package/src/specs/argon2.nitro.ts +29 -0
- package/src/specs/certificate.nitro.ts +8 -0
- package/src/specs/cipher.nitro.ts +14 -0
- package/src/specs/dhKeyPair.nitro.ts +14 -0
- package/src/specs/diffie-hellman.nitro.ts +1 -0
- package/src/specs/dsaKeyPair.nitro.ts +13 -0
- package/src/specs/ecKeyPair.nitro.ts +2 -0
- package/src/specs/ecdh.nitro.ts +1 -0
- package/src/specs/keyObjectHandle.nitro.ts +2 -0
- package/src/specs/prime.nitro.ts +18 -0
- package/src/subtle.ts +400 -42
- package/src/utils/types.ts +39 -5
- package/deps/ncrypto/WORKSPACE +0 -15
package/cpp/ecdh/HybridECDH.cpp
CHANGED
|
@@ -284,6 +284,41 @@ void HybridECDH::setPublicKey(const std::shared_ptr<ArrayBuffer>& publicKey) {
|
|
|
284
284
|
_pkey = std::move(pkey);
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
+
std::shared_ptr<ArrayBuffer> HybridECDH::convertKey(const std::shared_ptr<ArrayBuffer>& key, const std::string& curve, double format) {
|
|
288
|
+
int nid = getCurveNid(curve);
|
|
289
|
+
if (nid == NID_undef) {
|
|
290
|
+
throw std::runtime_error("ECDH: unknown curve: " + curve);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
EC_GROUP_ptr group(EC_GROUP_new_by_curve_name(nid), EC_GROUP_free);
|
|
294
|
+
if (!group) {
|
|
295
|
+
throw std::runtime_error("ECDH: failed to create EC group for curve: " + curve);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
EC_POINT_ptr point(EC_POINT_new(group.get()), EC_POINT_free);
|
|
299
|
+
if (!point) {
|
|
300
|
+
throw std::runtime_error("ECDH: failed to create EC point");
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (EC_POINT_oct2point(group.get(), point.get(), key->data(), key->size(), nullptr) != 1) {
|
|
304
|
+
throw std::runtime_error("ECDH: failed to decode public key");
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
auto form = static_cast<point_conversion_form_t>(static_cast<int>(format));
|
|
308
|
+
|
|
309
|
+
size_t len = EC_POINT_point2oct(group.get(), point.get(), form, nullptr, 0, nullptr);
|
|
310
|
+
if (len == 0) {
|
|
311
|
+
throw std::runtime_error("ECDH: failed to get converted key length");
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
std::vector<uint8_t> buf(len);
|
|
315
|
+
if (EC_POINT_point2oct(group.get(), point.get(), form, buf.data(), len, nullptr) == 0) {
|
|
316
|
+
throw std::runtime_error("ECDH: failed to convert key");
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
return ToNativeArrayBuffer(buf);
|
|
320
|
+
}
|
|
321
|
+
|
|
287
322
|
void HybridECDH::ensureInitialized() const {
|
|
288
323
|
if (_curveNid == 0 || !_group) {
|
|
289
324
|
throw std::runtime_error("ECDH: not initialized");
|
package/cpp/ecdh/HybridECDH.hpp
CHANGED
|
@@ -28,6 +28,7 @@ class HybridECDH : public HybridECDHSpec {
|
|
|
28
28
|
void setPrivateKey(const std::shared_ptr<ArrayBuffer>& privateKey) override;
|
|
29
29
|
std::shared_ptr<ArrayBuffer> getPublicKey() override;
|
|
30
30
|
void setPublicKey(const std::shared_ptr<ArrayBuffer>& publicKey) override;
|
|
31
|
+
std::shared_ptr<ArrayBuffer> convertKey(const std::shared_ptr<ArrayBuffer>& key, const std::string& curve, double format) override;
|
|
31
32
|
|
|
32
33
|
private:
|
|
33
34
|
EVP_PKEY_ptr _pkey;
|
package/cpp/hash/HybridHash.cpp
CHANGED
|
@@ -68,7 +68,7 @@ void HybridHash::createHash(const std::string& hashAlgorithmArg, const std::opti
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
void HybridHash::update(const std::variant<std::
|
|
71
|
+
void HybridHash::update(const std::variant<std::shared_ptr<ArrayBuffer>, std::string>& data) {
|
|
72
72
|
if (!ctx) {
|
|
73
73
|
throw std::runtime_error("Hash context not initialized");
|
|
74
74
|
}
|
package/cpp/hash/HybridHash.hpp
CHANGED
|
@@ -21,7 +21,7 @@ class HybridHash : public HybridHashSpec {
|
|
|
21
21
|
public:
|
|
22
22
|
// Methods
|
|
23
23
|
void createHash(const std::string& algorithm, const std::optional<double> outputLength) override;
|
|
24
|
-
void update(const std::variant<std::
|
|
24
|
+
void update(const std::variant<std::shared_ptr<ArrayBuffer>, std::string>& data) override;
|
|
25
25
|
std::shared_ptr<ArrayBuffer> digest(const std::optional<std::string>& encoding = std::nullopt) override;
|
|
26
26
|
std::shared_ptr<margelo::nitro::crypto::HybridHashSpec> copy(const std::optional<double> outputLength) override;
|
|
27
27
|
std::vector<std::string> getSupportedHashAlgorithms() override;
|
package/cpp/hmac/HybridHmac.cpp
CHANGED
|
@@ -60,7 +60,7 @@ void HybridHmac::createHmac(const std::string& hmacAlgorithm, const std::shared_
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
void HybridHmac::update(const std::variant<std::
|
|
63
|
+
void HybridHmac::update(const std::variant<std::shared_ptr<ArrayBuffer>, std::string>& data) {
|
|
64
64
|
if (!ctx) {
|
|
65
65
|
throw std::runtime_error("HMAC context not initialized");
|
|
66
66
|
}
|
package/cpp/hmac/HybridHmac.hpp
CHANGED
|
@@ -20,7 +20,7 @@ class HybridHmac : public HybridHmacSpec {
|
|
|
20
20
|
public:
|
|
21
21
|
// Methods
|
|
22
22
|
void createHmac(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key) override;
|
|
23
|
-
void update(const std::variant<std::
|
|
23
|
+
void update(const std::variant<std::shared_ptr<ArrayBuffer>, std::string>& data) override;
|
|
24
24
|
std::shared_ptr<ArrayBuffer> digest() override;
|
|
25
25
|
|
|
26
26
|
private:
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#include "HybridKeyObjectHandle.hpp"
|
|
6
6
|
#include "QuickCryptoUtils.hpp"
|
|
7
7
|
#include <openssl/bn.h>
|
|
8
|
+
#include <openssl/crypto.h>
|
|
8
9
|
#include <openssl/ec.h>
|
|
9
10
|
#include <openssl/evp.h>
|
|
10
11
|
#include <openssl/obj_mac.h>
|
|
@@ -124,6 +125,25 @@ std::shared_ptr<ArrayBuffer> HybridKeyObjectHandle::exportKey(std::optional<KFor
|
|
|
124
125
|
}
|
|
125
126
|
}
|
|
126
127
|
|
|
128
|
+
// For EC keys, handle raw format (uncompressed point)
|
|
129
|
+
if (!format.has_value() && !type.has_value() && keyId == EVP_PKEY_EC && keyType == KeyType::PUBLIC) {
|
|
130
|
+
const EC_KEY* ec_key = EVP_PKEY_get0_EC_KEY(pkey.get());
|
|
131
|
+
if (!ec_key)
|
|
132
|
+
throw std::runtime_error("Failed to get EC key");
|
|
133
|
+
const EC_GROUP* group = EC_KEY_get0_group(ec_key);
|
|
134
|
+
const EC_POINT* point = EC_KEY_get0_public_key(ec_key);
|
|
135
|
+
if (!group || !point)
|
|
136
|
+
throw std::runtime_error("Failed to get EC public key");
|
|
137
|
+
size_t len = EC_POINT_point2oct(group, point, POINT_CONVERSION_UNCOMPRESSED, nullptr, 0, nullptr);
|
|
138
|
+
if (len == 0)
|
|
139
|
+
throw std::runtime_error("Failed to get EC point size");
|
|
140
|
+
std::vector<uint8_t> buf(len);
|
|
141
|
+
if (EC_POINT_point2oct(group, point, POINT_CONVERSION_UNCOMPRESSED, buf.data(), len, nullptr) == 0) {
|
|
142
|
+
throw std::runtime_error("Failed to encode EC public key");
|
|
143
|
+
}
|
|
144
|
+
return ToNativeArrayBuffer(std::string(reinterpret_cast<const char*>(buf.data()), buf.size()));
|
|
145
|
+
}
|
|
146
|
+
|
|
127
147
|
// Set default format and type if not provided
|
|
128
148
|
auto exportFormat = format.value_or(KFormatType::DER);
|
|
129
149
|
auto exportType = type.value_or(keyType == KeyType::PUBLIC ? KeyEncoding::SPKI : KeyEncoding::PKCS8);
|
|
@@ -292,6 +312,44 @@ JWK HybridKeyObjectHandle::exportJwk(const JWK& key, bool handleRsaPss) {
|
|
|
292
312
|
return result;
|
|
293
313
|
}
|
|
294
314
|
|
|
315
|
+
// Export OKP keys (Ed25519, Ed448, X25519, X448) per RFC 8037
|
|
316
|
+
if (keyId == EVP_PKEY_ED25519 || keyId == EVP_PKEY_ED448 || keyId == EVP_PKEY_X25519 || keyId == EVP_PKEY_X448) {
|
|
317
|
+
result.kty = JWKkty::OKP;
|
|
318
|
+
|
|
319
|
+
switch (keyId) {
|
|
320
|
+
case EVP_PKEY_ED25519:
|
|
321
|
+
result.crv = "Ed25519";
|
|
322
|
+
break;
|
|
323
|
+
case EVP_PKEY_ED448:
|
|
324
|
+
result.crv = "Ed448";
|
|
325
|
+
break;
|
|
326
|
+
case EVP_PKEY_X25519:
|
|
327
|
+
result.crv = "X25519";
|
|
328
|
+
break;
|
|
329
|
+
case EVP_PKEY_X448:
|
|
330
|
+
result.crv = "X448";
|
|
331
|
+
break;
|
|
332
|
+
default:
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
auto pubKey = pkey.rawPublicKey();
|
|
337
|
+
if (!pubKey) {
|
|
338
|
+
throw std::runtime_error("Failed to get raw public key for OKP JWK export");
|
|
339
|
+
}
|
|
340
|
+
result.x = base64url_encode(reinterpret_cast<const unsigned char*>(pubKey.get()), pubKey.size());
|
|
341
|
+
|
|
342
|
+
if (keyType == KeyType::PRIVATE) {
|
|
343
|
+
auto privKey = pkey.rawPrivateKey();
|
|
344
|
+
if (!privKey) {
|
|
345
|
+
throw std::runtime_error("Failed to get raw private key for OKP JWK export");
|
|
346
|
+
}
|
|
347
|
+
result.d = base64url_encode(reinterpret_cast<const unsigned char*>(privKey.get()), privKey.size());
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
return result;
|
|
351
|
+
}
|
|
352
|
+
|
|
295
353
|
throw std::runtime_error("Unsupported key type for JWK export");
|
|
296
354
|
}
|
|
297
355
|
|
|
@@ -335,7 +393,7 @@ AsymmetricKeyType HybridKeyObjectHandle::getAsymmetricKeyType() {
|
|
|
335
393
|
}
|
|
336
394
|
}
|
|
337
395
|
|
|
338
|
-
bool HybridKeyObjectHandle::init(KeyType keyType, const std::variant<std::
|
|
396
|
+
bool HybridKeyObjectHandle::init(KeyType keyType, const std::variant<std::shared_ptr<ArrayBuffer>, std::string>& key,
|
|
339
397
|
std::optional<KFormatType> format, std::optional<KeyEncoding> type,
|
|
340
398
|
const std::optional<std::shared_ptr<ArrayBuffer>>& passphrase) {
|
|
341
399
|
// Reset any existing data to prevent state leakage
|
|
@@ -597,6 +655,50 @@ std::optional<KeyType> HybridKeyObjectHandle::initJwk(const JWK& keyData, std::o
|
|
|
597
655
|
return type;
|
|
598
656
|
}
|
|
599
657
|
|
|
658
|
+
// Handle OKP keys (Ed25519, Ed448, X25519, X448) per RFC 8037
|
|
659
|
+
if (kty == JWKkty::OKP) {
|
|
660
|
+
bool isPrivate = keyData.d.has_value();
|
|
661
|
+
|
|
662
|
+
if (!keyData.crv.has_value() || !keyData.x.has_value()) {
|
|
663
|
+
throw std::runtime_error("JWK OKP key missing required fields (crv, x)");
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
std::string crv = keyData.crv.value();
|
|
667
|
+
|
|
668
|
+
int evpType;
|
|
669
|
+
if (crv == "Ed25519") {
|
|
670
|
+
evpType = EVP_PKEY_ED25519;
|
|
671
|
+
} else if (crv == "Ed448") {
|
|
672
|
+
evpType = EVP_PKEY_ED448;
|
|
673
|
+
} else if (crv == "X25519") {
|
|
674
|
+
evpType = EVP_PKEY_X25519;
|
|
675
|
+
} else if (crv == "X448") {
|
|
676
|
+
evpType = EVP_PKEY_X448;
|
|
677
|
+
} else {
|
|
678
|
+
throw std::runtime_error("Unsupported OKP curve: " + crv);
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
if (isPrivate) {
|
|
682
|
+
std::string privBytes = base64url_decode(keyData.d.value());
|
|
683
|
+
EVP_PKEY* pkey =
|
|
684
|
+
EVP_PKEY_new_raw_private_key(evpType, nullptr, reinterpret_cast<const unsigned char*>(privBytes.data()), privBytes.size());
|
|
685
|
+
if (!pkey) {
|
|
686
|
+
throw std::runtime_error("Failed to create OKP private key from JWK");
|
|
687
|
+
}
|
|
688
|
+
data_ = KeyObjectData::CreateAsymmetric(KeyType::PRIVATE, ncrypto::EVPKeyPointer(pkey));
|
|
689
|
+
return KeyType::PRIVATE;
|
|
690
|
+
} else {
|
|
691
|
+
std::string pubBytes = base64url_decode(keyData.x.value());
|
|
692
|
+
EVP_PKEY* pkey =
|
|
693
|
+
EVP_PKEY_new_raw_public_key(evpType, nullptr, reinterpret_cast<const unsigned char*>(pubBytes.data()), pubBytes.size());
|
|
694
|
+
if (!pkey) {
|
|
695
|
+
throw std::runtime_error("Failed to create OKP public key from JWK");
|
|
696
|
+
}
|
|
697
|
+
data_ = KeyObjectData::CreateAsymmetric(KeyType::PUBLIC, ncrypto::EVPKeyPointer(pkey));
|
|
698
|
+
return KeyType::PUBLIC;
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
|
|
600
702
|
throw std::runtime_error("Unsupported JWK key type");
|
|
601
703
|
}
|
|
602
704
|
|
|
@@ -754,4 +856,32 @@ bool HybridKeyObjectHandle::initECRaw(const std::string& namedCurve, const std::
|
|
|
754
856
|
return true;
|
|
755
857
|
}
|
|
756
858
|
|
|
859
|
+
bool HybridKeyObjectHandle::keyEquals(const std::shared_ptr<HybridKeyObjectHandleSpec>& other) {
|
|
860
|
+
auto otherHandle = std::dynamic_pointer_cast<HybridKeyObjectHandle>(other);
|
|
861
|
+
if (!otherHandle)
|
|
862
|
+
return false;
|
|
863
|
+
|
|
864
|
+
const auto& otherData = otherHandle->getKeyObjectData();
|
|
865
|
+
if (data_.GetKeyType() != otherData.GetKeyType())
|
|
866
|
+
return false;
|
|
867
|
+
|
|
868
|
+
if (data_.GetKeyType() == KeyType::SECRET) {
|
|
869
|
+
auto thisKey = data_.GetSymmetricKey();
|
|
870
|
+
auto otherKey = otherData.GetSymmetricKey();
|
|
871
|
+
if (thisKey->size() != otherKey->size())
|
|
872
|
+
return false;
|
|
873
|
+
return CRYPTO_memcmp(thisKey->data(), otherKey->data(), thisKey->size()) == 0;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
const auto& thisPkey = data_.GetAsymmetricKey();
|
|
877
|
+
const auto& otherPkey = otherData.GetAsymmetricKey();
|
|
878
|
+
if (!thisPkey || !otherPkey)
|
|
879
|
+
return false;
|
|
880
|
+
return EVP_PKEY_eq(thisPkey.get(), otherPkey.get()) == 1;
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
double HybridKeyObjectHandle::getSymmetricKeySize() {
|
|
884
|
+
return static_cast<double>(data_.GetSymmetricKeySize());
|
|
885
|
+
}
|
|
886
|
+
|
|
757
887
|
} // namespace margelo::nitro::crypto
|
|
@@ -26,7 +26,7 @@ class HybridKeyObjectHandle : public HybridKeyObjectHandleSpec {
|
|
|
26
26
|
|
|
27
27
|
AsymmetricKeyType getAsymmetricKeyType() override;
|
|
28
28
|
|
|
29
|
-
bool init(KeyType keyType, const std::variant<std::
|
|
29
|
+
bool init(KeyType keyType, const std::variant<std::shared_ptr<ArrayBuffer>, std::string>& key, std::optional<KFormatType> format,
|
|
30
30
|
std::optional<KeyEncoding> type, const std::optional<std::shared_ptr<ArrayBuffer>>& passphrase) override;
|
|
31
31
|
|
|
32
32
|
bool initECRaw(const std::string& namedCurve, const std::shared_ptr<ArrayBuffer>& keyData) override;
|
|
@@ -35,6 +35,10 @@ class HybridKeyObjectHandle : public HybridKeyObjectHandleSpec {
|
|
|
35
35
|
|
|
36
36
|
KeyDetail keyDetail() override;
|
|
37
37
|
|
|
38
|
+
bool keyEquals(const std::shared_ptr<HybridKeyObjectHandleSpec>& other) override;
|
|
39
|
+
|
|
40
|
+
double getSymmetricKeySize() override;
|
|
41
|
+
|
|
38
42
|
KeyObjectData& getKeyObjectData() {
|
|
39
43
|
return data_;
|
|
40
44
|
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#include "HybridPrime.hpp"
|
|
2
|
+
#include "QuickCryptoUtils.hpp"
|
|
3
|
+
#include <ncrypto.h>
|
|
4
|
+
|
|
5
|
+
namespace margelo::nitro::crypto {
|
|
6
|
+
|
|
7
|
+
using namespace ncrypto;
|
|
8
|
+
|
|
9
|
+
static BignumPointer toBignum(const std::optional<std::shared_ptr<ArrayBuffer>>& buf) {
|
|
10
|
+
if (!buf.has_value() || buf.value()->size() == 0) {
|
|
11
|
+
return BignumPointer();
|
|
12
|
+
}
|
|
13
|
+
return BignumPointer(buf.value()->data(), buf.value()->size());
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
static std::shared_ptr<ArrayBuffer> generatePrimeImpl(double size, bool safe, const std::optional<std::shared_ptr<ArrayBuffer>>& add,
|
|
17
|
+
const std::optional<std::shared_ptr<ArrayBuffer>>& rem) {
|
|
18
|
+
int bits = static_cast<int>(size);
|
|
19
|
+
|
|
20
|
+
auto addBn = toBignum(add);
|
|
21
|
+
auto remBn = toBignum(rem);
|
|
22
|
+
|
|
23
|
+
BignumPointer::PrimeConfig config{bits, safe, addBn, remBn};
|
|
24
|
+
auto prime = BignumPointer::NewPrime(config);
|
|
25
|
+
if (!prime) {
|
|
26
|
+
throw std::runtime_error("Failed to generate prime");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
auto encoded = prime.encode();
|
|
30
|
+
if (!encoded) {
|
|
31
|
+
throw std::runtime_error("Failed to encode prime");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return ToNativeArrayBuffer(encoded.get<uint8_t>(), encoded.size());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridPrime::generatePrime(double size, bool safe,
|
|
38
|
+
const std::optional<std::shared_ptr<ArrayBuffer>>& add,
|
|
39
|
+
const std::optional<std::shared_ptr<ArrayBuffer>>& rem) {
|
|
40
|
+
auto addCopy = add.has_value() ? std::make_optional(ToNativeArrayBuffer(add.value())) : std::nullopt;
|
|
41
|
+
auto remCopy = rem.has_value() ? std::make_optional(ToNativeArrayBuffer(rem.value())) : std::nullopt;
|
|
42
|
+
|
|
43
|
+
return Promise<std::shared_ptr<ArrayBuffer>>::async([size, safe, addCopy = std::move(addCopy), remCopy = std::move(remCopy)]() {
|
|
44
|
+
return generatePrimeImpl(size, safe, addCopy, remCopy);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
std::shared_ptr<ArrayBuffer> HybridPrime::generatePrimeSync(double size, bool safe, const std::optional<std::shared_ptr<ArrayBuffer>>& add,
|
|
49
|
+
const std::optional<std::shared_ptr<ArrayBuffer>>& rem) {
|
|
50
|
+
return generatePrimeImpl(size, safe, add, rem);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
bool HybridPrime::checkPrimeSync(const std::shared_ptr<ArrayBuffer>& candidate, double checks) {
|
|
54
|
+
BignumPointer bn(candidate->data(), candidate->size());
|
|
55
|
+
if (!bn) {
|
|
56
|
+
throw std::runtime_error("Invalid candidate");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
int result = bn.isPrime(static_cast<int>(checks));
|
|
60
|
+
if (result == -1) {
|
|
61
|
+
throw std::runtime_error("Prime check failed");
|
|
62
|
+
}
|
|
63
|
+
return result == 1;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
std::shared_ptr<Promise<bool>> HybridPrime::checkPrime(const std::shared_ptr<ArrayBuffer>& candidate, double checks) {
|
|
67
|
+
auto candidateCopy = ToNativeArrayBuffer(candidate);
|
|
68
|
+
return Promise<bool>::async([candidateCopy, checks]() {
|
|
69
|
+
BignumPointer bn(candidateCopy->data(), candidateCopy->size());
|
|
70
|
+
if (!bn) {
|
|
71
|
+
throw std::runtime_error("Invalid candidate");
|
|
72
|
+
}
|
|
73
|
+
int result = bn.isPrime(static_cast<int>(checks));
|
|
74
|
+
if (result == -1) {
|
|
75
|
+
throw std::runtime_error("Prime check failed");
|
|
76
|
+
}
|
|
77
|
+
return result == 1;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "HybridPrimeSpec.hpp"
|
|
4
|
+
|
|
5
|
+
namespace margelo::nitro::crypto {
|
|
6
|
+
|
|
7
|
+
class HybridPrime : public HybridPrimeSpec {
|
|
8
|
+
public:
|
|
9
|
+
HybridPrime() : HybridObject(TAG) {}
|
|
10
|
+
|
|
11
|
+
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> generatePrime(double size, bool safe,
|
|
12
|
+
const std::optional<std::shared_ptr<ArrayBuffer>>& add,
|
|
13
|
+
const std::optional<std::shared_ptr<ArrayBuffer>>& rem) override;
|
|
14
|
+
std::shared_ptr<ArrayBuffer> generatePrimeSync(double size, bool safe, const std::optional<std::shared_ptr<ArrayBuffer>>& add,
|
|
15
|
+
const std::optional<std::shared_ptr<ArrayBuffer>>& rem) override;
|
|
16
|
+
std::shared_ptr<Promise<bool>> checkPrime(const std::shared_ptr<ArrayBuffer>& candidate, double checks) override;
|
|
17
|
+
bool checkPrimeSync(const std::shared_ptr<ArrayBuffer>& candidate, double checks) override;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
} // namespace margelo::nitro::crypto
|
package/deps/ncrypto/.bazelrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
9.0.0
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: Conventional Commit Linter
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
commitlint:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
14
|
+
with:
|
|
15
|
+
fetch-depth: 100
|
|
16
|
+
- uses: wagoid/commitlint-github-action@b948419dd99f3fd78a6548d48f94e3df7f6bf3ed # v6.2.1
|
|
@@ -27,9 +27,9 @@ jobs:
|
|
|
27
27
|
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
|
28
28
|
|
|
29
29
|
- name: Run clang-format
|
|
30
|
-
uses: jidicula/clang-format-action@
|
|
30
|
+
uses: jidicula/clang-format-action@6cd220de46c89139a0365edae93eee8eb30ca8fe # v4.16.0
|
|
31
31
|
with:
|
|
32
|
-
clang-format-version: '
|
|
32
|
+
clang-format-version: '21'
|
|
33
33
|
fallback-style: 'Google'
|
|
34
34
|
|
|
35
35
|
- uses: chartboost/ruff-action@e18ae971ccee1b2d7bbef113930f00c670b78da4 # v1.0.0
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: Release Please
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release-please:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: googleapis/release-please-action@16a9c90856f42705d54a6fda1823352bdc62cf38 # v4.4.0
|
|
@@ -44,3 +44,85 @@ jobs:
|
|
|
44
44
|
run: cmake --build build -j=4
|
|
45
45
|
- name: Test
|
|
46
46
|
run: ctest --output-on-failure --test-dir build
|
|
47
|
+
|
|
48
|
+
# Test with OpenSSL 3.2+ to cover Argon2 code path
|
|
49
|
+
openssl:
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
env:
|
|
52
|
+
OPENSSL_VERSION: "3.4.1"
|
|
53
|
+
OPENSSL_DIR: "${{ github.workspace }}/openssl-install"
|
|
54
|
+
steps:
|
|
55
|
+
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
56
|
+
- name: Cache OpenSSL
|
|
57
|
+
id: cache-openssl
|
|
58
|
+
uses: actions/cache@v4
|
|
59
|
+
with:
|
|
60
|
+
path: ${{ env.OPENSSL_DIR }}
|
|
61
|
+
key: openssl-${{ env.OPENSSL_VERSION }}-${{ runner.os }}
|
|
62
|
+
- name: Build OpenSSL
|
|
63
|
+
if: steps.cache-openssl.outputs.cache-hit != 'true'
|
|
64
|
+
run: |
|
|
65
|
+
curl -LO https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz
|
|
66
|
+
tar xzf openssl-${OPENSSL_VERSION}.tar.gz
|
|
67
|
+
cd openssl-${OPENSSL_VERSION}
|
|
68
|
+
./Configure --prefix=${OPENSSL_DIR} --openssldir=${OPENSSL_DIR}/ssl
|
|
69
|
+
make -j$(nproc)
|
|
70
|
+
make install_sw
|
|
71
|
+
- name: ccache
|
|
72
|
+
uses: hendrikmuhs/ccache-action@v1.2
|
|
73
|
+
with:
|
|
74
|
+
key: ${{github.job}}-openssl
|
|
75
|
+
- name: Setup dependencies
|
|
76
|
+
run: sudo apt-get update && sudo apt-get install -y ninja-build libgtest-dev
|
|
77
|
+
- name: Prepare
|
|
78
|
+
run: |
|
|
79
|
+
cmake -DNCRYPTO_SHARED_LIBS=ON -G Ninja -B build \
|
|
80
|
+
-DOPENSSL_ROOT_DIR=${OPENSSL_DIR} \
|
|
81
|
+
-DCMAKE_PREFIX_PATH=${OPENSSL_DIR}
|
|
82
|
+
- name: Build
|
|
83
|
+
run: cmake --build build -j=4
|
|
84
|
+
- name: Test
|
|
85
|
+
run: ctest --output-on-failure --test-dir build
|
|
86
|
+
env:
|
|
87
|
+
LD_LIBRARY_PATH: ${{ env.OPENSSL_DIR }}/lib64:${{ env.OPENSSL_DIR }}/lib
|
|
88
|
+
|
|
89
|
+
# Test with OPENSSL_NO_ARGON2 defined (Argon2 tests excluded)
|
|
90
|
+
openssl-no-argon2:
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
env:
|
|
93
|
+
OPENSSL_VERSION: "3.4.1"
|
|
94
|
+
OPENSSL_DIR: "${{ github.workspace }}/openssl-install"
|
|
95
|
+
steps:
|
|
96
|
+
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
97
|
+
- name: Cache OpenSSL
|
|
98
|
+
id: cache-openssl
|
|
99
|
+
uses: actions/cache@v4
|
|
100
|
+
with:
|
|
101
|
+
path: ${{ env.OPENSSL_DIR }}
|
|
102
|
+
key: openssl-${{ env.OPENSSL_VERSION }}-${{ runner.os }}
|
|
103
|
+
- name: Build OpenSSL
|
|
104
|
+
if: steps.cache-openssl.outputs.cache-hit != 'true'
|
|
105
|
+
run: |
|
|
106
|
+
curl -LO https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz
|
|
107
|
+
tar xzf openssl-${OPENSSL_VERSION}.tar.gz
|
|
108
|
+
cd openssl-${OPENSSL_VERSION}
|
|
109
|
+
./Configure --prefix=${OPENSSL_DIR} --openssldir=${OPENSSL_DIR}/ssl
|
|
110
|
+
make -j$(nproc)
|
|
111
|
+
make install_sw
|
|
112
|
+
- name: ccache
|
|
113
|
+
uses: hendrikmuhs/ccache-action@v1.2
|
|
114
|
+
with:
|
|
115
|
+
key: ${{github.job}}-openssl-no-argon2
|
|
116
|
+
- name: Setup dependencies
|
|
117
|
+
run: sudo apt-get update && sudo apt-get install -y ninja-build libgtest-dev
|
|
118
|
+
- name: Prepare
|
|
119
|
+
run: |
|
|
120
|
+
cmake -DNCRYPTO_SHARED_LIBS=ON -DCMAKE_CXX_FLAGS="-DOPENSSL_NO_ARGON2" -G Ninja -B build \
|
|
121
|
+
-DOPENSSL_ROOT_DIR=${OPENSSL_DIR} \
|
|
122
|
+
-DCMAKE_PREFIX_PATH=${OPENSSL_DIR}
|
|
123
|
+
- name: Build
|
|
124
|
+
run: cmake --build build -j=4
|
|
125
|
+
- name: Test
|
|
126
|
+
run: ctest --output-on-failure --test-dir build
|
|
127
|
+
env:
|
|
128
|
+
LD_LIBRARY_PATH: ${{ env.OPENSSL_DIR }}/lib64:${{ env.OPENSSL_DIR }}/lib
|
package/deps/ncrypto/BUILD.bazel
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
|
|
2
|
+
load("@rules_cc//cc:cc_library.bzl", "cc_library")
|
|
2
3
|
|
|
3
4
|
bool_flag(
|
|
4
5
|
name = "bssl_libdecrepit_missing",
|
|
@@ -15,7 +16,14 @@ config_setting(
|
|
|
15
16
|
cc_library(
|
|
16
17
|
name = "ncrypto",
|
|
17
18
|
srcs = glob(["src/*.cpp"]),
|
|
18
|
-
hdrs = glob(["include/*.h"]),
|
|
19
|
+
hdrs = glob(["include/*.h", "include/ncrypto/*.h"]),
|
|
20
|
+
copts = [
|
|
21
|
+
"-Werror",
|
|
22
|
+
"-Wextra",
|
|
23
|
+
"-Wno-unused-parameter",
|
|
24
|
+
"-Wimplicit-fallthrough",
|
|
25
|
+
"-Wno-deprecated-declarations", # OpenSSL 3.0 deprecates many APIs we intentionally use
|
|
26
|
+
],
|
|
19
27
|
includes = ["include"],
|
|
20
28
|
local_defines = {
|
|
21
29
|
"NCRYPTO_BSSL_LIBDECREPIT_MISSING": select(
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.1.3](https://github.com/nodejs/ncrypto/compare/v1.1.2...v1.1.3) (2026-02-04)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* unconditionally include vector ([ba39e40](https://github.com/nodejs/ncrypto/commit/ba39e40ed1c1231902a676f53906cdd2f6119648))
|
|
9
|
+
* use more strict compiler flags ([fc401e3](https://github.com/nodejs/ncrypto/commit/fc401e387491005bfbe6c48b7296862d07ea85d7))
|
|
10
|
+
|
|
11
|
+
## [1.1.2](https://github.com/nodejs/ncrypto/compare/v1.1.1...v1.1.2) (2026-02-02)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* handle edge cases and CI builds ([57cae0f](https://github.com/nodejs/ncrypto/commit/57cae0f055ba7c2d060f0ed4e49431e9e56a0a2d))
|
|
17
|
+
|
|
18
|
+
## [1.1.1](https://github.com/nodejs/ncrypto/compare/v1.1.0...v1.1.1) (2026-02-02)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* re-add more functions that are moved ([2ceab38](https://github.com/nodejs/ncrypto/commit/2ceab38e9caafd49b2f0a722ad76ae68f68fe7b5))
|
|
24
|
+
* re-add removed BignumPointer::bitLength() ([0ba85e3](https://github.com/nodejs/ncrypto/commit/0ba85e3c3a3cdd8abcab066b046bbb11c9136bc8))
|
|
25
|
+
|
|
26
|
+
## [1.1.0](https://github.com/nodejs/ncrypto/compare/1.0.1...v1.1.0) (2026-01-31)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### Features
|
|
30
|
+
|
|
31
|
+
* sync source code with nodejs/node ([#17](https://github.com/nodejs/ncrypto/issues/17)) ([47c21db](https://github.com/nodejs/ncrypto/commit/47c21db34df5f00eab945e2cd4e3ca6d9d57c793))
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
* add missing header files during install ([#27](https://github.com/nodejs/ncrypto/issues/27)) ([d714e74](https://github.com/nodejs/ncrypto/commit/d714e745cd54b5f06686e2def826da101ebb2205))
|
|
37
|
+
* use BN_GENCB_get_arg accessor for OpenSSL 3.x compatibility ([#16](https://github.com/nodejs/ncrypto/issues/16)) ([afc7e12](https://github.com/nodejs/ncrypto/commit/afc7e12c3f862165d7cfdc10bd971d7115d4fdb5))
|