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.
Files changed (292) hide show
  1. package/QuickCrypto.podspec +9 -2
  2. package/README.md +13 -9
  3. package/android/CMakeLists.txt +13 -0
  4. package/cpp/argon2/HybridArgon2.cpp +103 -0
  5. package/cpp/argon2/HybridArgon2.hpp +32 -0
  6. package/cpp/certificate/HybridCertificate.cpp +42 -0
  7. package/cpp/certificate/HybridCertificate.hpp +16 -0
  8. package/cpp/cipher/HybridCipher.cpp +58 -0
  9. package/cpp/cipher/HybridCipher.hpp +4 -0
  10. package/cpp/cipher/HybridCipherFactory.hpp +15 -1
  11. package/cpp/cipher/OCBCipher.cpp +4 -4
  12. package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +161 -0
  13. package/cpp/cipher/XChaCha20Poly1305Cipher.hpp +43 -0
  14. package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +145 -0
  15. package/cpp/cipher/XSalsa20Poly1305Cipher.hpp +42 -0
  16. package/cpp/dh/HybridDhKeyPair.cpp +179 -0
  17. package/cpp/dh/HybridDhKeyPair.hpp +37 -0
  18. package/cpp/dh/HybridDiffieHellman.cpp +10 -0
  19. package/cpp/dh/HybridDiffieHellman.hpp +1 -0
  20. package/cpp/dsa/HybridDsaKeyPair.cpp +128 -0
  21. package/cpp/dsa/HybridDsaKeyPair.hpp +32 -0
  22. package/cpp/ec/HybridEcKeyPair.cpp +21 -0
  23. package/cpp/ec/HybridEcKeyPair.hpp +1 -0
  24. package/cpp/ecdh/HybridECDH.cpp +35 -0
  25. package/cpp/ecdh/HybridECDH.hpp +1 -0
  26. package/cpp/hash/HybridHash.cpp +1 -1
  27. package/cpp/hash/HybridHash.hpp +1 -1
  28. package/cpp/hmac/HybridHmac.cpp +1 -1
  29. package/cpp/hmac/HybridHmac.hpp +1 -1
  30. package/cpp/keys/HybridKeyObjectHandle.cpp +131 -1
  31. package/cpp/keys/HybridKeyObjectHandle.hpp +5 -1
  32. package/cpp/prime/HybridPrime.cpp +81 -0
  33. package/cpp/prime/HybridPrime.hpp +20 -0
  34. package/deps/ncrypto/.bazelrc +0 -1
  35. package/deps/ncrypto/.bazelversion +1 -1
  36. package/deps/ncrypto/.github/workflows/commitlint.yml +16 -0
  37. package/deps/ncrypto/.github/workflows/linter.yml +2 -2
  38. package/deps/ncrypto/.github/workflows/release-please.yml +16 -0
  39. package/deps/ncrypto/.github/workflows/ubuntu.yml +82 -0
  40. package/deps/ncrypto/.release-please-manifest.json +3 -0
  41. package/deps/ncrypto/BUILD.bazel +9 -1
  42. package/deps/ncrypto/CHANGELOG.md +37 -0
  43. package/deps/ncrypto/CMakeLists.txt +35 -11
  44. package/deps/ncrypto/MODULE.bazel +16 -1
  45. package/deps/ncrypto/MODULE.bazel.lock +299 -118
  46. package/deps/ncrypto/cmake/ncrypto-flags.cmake +1 -0
  47. package/deps/ncrypto/include/ncrypto/aead.h +137 -0
  48. package/deps/ncrypto/include/ncrypto/version.h +14 -0
  49. package/deps/ncrypto/include/ncrypto.h +85 -230
  50. package/deps/ncrypto/ncrypto.pc.in +10 -0
  51. package/deps/ncrypto/release-please-config.json +11 -0
  52. package/deps/ncrypto/src/CMakeLists.txt +31 -6
  53. package/deps/ncrypto/src/aead.cpp +302 -0
  54. package/deps/ncrypto/src/ncrypto.cpp +274 -556
  55. package/deps/ncrypto/tests/BUILD.bazel +2 -0
  56. package/deps/ncrypto/tests/basic.cpp +772 -2
  57. package/deps/ncrypto/tools/run-clang-format.sh +5 -5
  58. package/lib/commonjs/argon2.js +39 -0
  59. package/lib/commonjs/argon2.js.map +1 -0
  60. package/lib/commonjs/certificate.js +35 -0
  61. package/lib/commonjs/certificate.js.map +1 -0
  62. package/lib/commonjs/cipher.js +8 -0
  63. package/lib/commonjs/cipher.js.map +1 -1
  64. package/lib/commonjs/dhKeyPair.js +109 -0
  65. package/lib/commonjs/dhKeyPair.js.map +1 -0
  66. package/lib/commonjs/diffie-hellman.js +4 -1
  67. package/lib/commonjs/diffie-hellman.js.map +1 -1
  68. package/lib/commonjs/dsa.js +92 -0
  69. package/lib/commonjs/dsa.js.map +1 -0
  70. package/lib/commonjs/ec.js +20 -25
  71. package/lib/commonjs/ec.js.map +1 -1
  72. package/lib/commonjs/ecdh.js +37 -0
  73. package/lib/commonjs/ecdh.js.map +1 -1
  74. package/lib/commonjs/ed.js +1 -2
  75. package/lib/commonjs/ed.js.map +1 -1
  76. package/lib/commonjs/hash.js +7 -0
  77. package/lib/commonjs/hash.js.map +1 -1
  78. package/lib/commonjs/index.js +46 -1
  79. package/lib/commonjs/index.js.map +1 -1
  80. package/lib/commonjs/keys/classes.js +18 -12
  81. package/lib/commonjs/keys/classes.js.map +1 -1
  82. package/lib/commonjs/keys/generateKeyPair.js +11 -0
  83. package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
  84. package/lib/commonjs/prime.js +84 -0
  85. package/lib/commonjs/prime.js.map +1 -0
  86. package/lib/commonjs/specs/argon2.nitro.js +6 -0
  87. package/lib/commonjs/specs/argon2.nitro.js.map +1 -0
  88. package/lib/commonjs/specs/certificate.nitro.js +6 -0
  89. package/lib/commonjs/specs/certificate.nitro.js.map +1 -0
  90. package/lib/commonjs/specs/dhKeyPair.nitro.js +6 -0
  91. package/lib/commonjs/specs/dhKeyPair.nitro.js.map +1 -0
  92. package/lib/commonjs/specs/dsaKeyPair.nitro.js +6 -0
  93. package/lib/commonjs/specs/dsaKeyPair.nitro.js.map +1 -0
  94. package/lib/commonjs/specs/prime.nitro.js +6 -0
  95. package/lib/commonjs/specs/prime.nitro.js.map +1 -0
  96. package/lib/commonjs/subtle.js +181 -39
  97. package/lib/commonjs/subtle.js.map +1 -1
  98. package/lib/commonjs/utils/types.js.map +1 -1
  99. package/lib/module/argon2.js +34 -0
  100. package/lib/module/argon2.js.map +1 -0
  101. package/lib/module/certificate.js +30 -0
  102. package/lib/module/certificate.js.map +1 -0
  103. package/lib/module/cipher.js +7 -0
  104. package/lib/module/cipher.js.map +1 -1
  105. package/lib/module/dhKeyPair.js +102 -0
  106. package/lib/module/dhKeyPair.js.map +1 -0
  107. package/lib/module/diffie-hellman.js +4 -0
  108. package/lib/module/diffie-hellman.js.map +1 -1
  109. package/lib/module/dsa.js +85 -0
  110. package/lib/module/dsa.js.map +1 -0
  111. package/lib/module/ec.js +19 -25
  112. package/lib/module/ec.js.map +1 -1
  113. package/lib/module/ecdh.js +37 -0
  114. package/lib/module/ecdh.js.map +1 -1
  115. package/lib/module/ed.js +1 -2
  116. package/lib/module/ed.js.map +1 -1
  117. package/lib/module/hash.js +6 -0
  118. package/lib/module/hash.js.map +1 -1
  119. package/lib/module/index.js +12 -0
  120. package/lib/module/index.js.map +1 -1
  121. package/lib/module/keys/classes.js +18 -12
  122. package/lib/module/keys/classes.js.map +1 -1
  123. package/lib/module/keys/generateKeyPair.js +11 -0
  124. package/lib/module/keys/generateKeyPair.js.map +1 -1
  125. package/lib/module/prime.js +77 -0
  126. package/lib/module/prime.js.map +1 -0
  127. package/lib/module/specs/argon2.nitro.js +4 -0
  128. package/lib/module/specs/argon2.nitro.js.map +1 -0
  129. package/lib/module/specs/certificate.nitro.js +4 -0
  130. package/lib/module/specs/certificate.nitro.js.map +1 -0
  131. package/lib/module/specs/dhKeyPair.nitro.js +4 -0
  132. package/lib/module/specs/dhKeyPair.nitro.js.map +1 -0
  133. package/lib/module/specs/dsaKeyPair.nitro.js +4 -0
  134. package/lib/module/specs/dsaKeyPair.nitro.js.map +1 -0
  135. package/lib/module/specs/prime.nitro.js +4 -0
  136. package/lib/module/specs/prime.nitro.js.map +1 -0
  137. package/lib/module/subtle.js +183 -42
  138. package/lib/module/subtle.js.map +1 -1
  139. package/lib/module/utils/types.js.map +1 -1
  140. package/lib/tsconfig.tsbuildinfo +1 -1
  141. package/lib/typescript/argon2.d.ts +16 -0
  142. package/lib/typescript/argon2.d.ts.map +1 -0
  143. package/lib/typescript/certificate.d.ts +8 -0
  144. package/lib/typescript/certificate.d.ts.map +1 -0
  145. package/lib/typescript/cipher.d.ts +12 -0
  146. package/lib/typescript/cipher.d.ts.map +1 -1
  147. package/lib/typescript/dhKeyPair.d.ts +19 -0
  148. package/lib/typescript/dhKeyPair.d.ts.map +1 -0
  149. package/lib/typescript/diffie-hellman.d.ts +2 -0
  150. package/lib/typescript/diffie-hellman.d.ts.map +1 -1
  151. package/lib/typescript/dsa.d.ts +19 -0
  152. package/lib/typescript/dsa.d.ts.map +1 -0
  153. package/lib/typescript/ec.d.ts +1 -0
  154. package/lib/typescript/ec.d.ts.map +1 -1
  155. package/lib/typescript/ecdh.d.ts +3 -0
  156. package/lib/typescript/ecdh.d.ts.map +1 -1
  157. package/lib/typescript/ed.d.ts.map +1 -1
  158. package/lib/typescript/hash.d.ts +2 -0
  159. package/lib/typescript/hash.d.ts.map +1 -1
  160. package/lib/typescript/index.d.ts +22 -0
  161. package/lib/typescript/index.d.ts.map +1 -1
  162. package/lib/typescript/keys/classes.d.ts +4 -0
  163. package/lib/typescript/keys/classes.d.ts.map +1 -1
  164. package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
  165. package/lib/typescript/prime.d.ts +19 -0
  166. package/lib/typescript/prime.d.ts.map +1 -0
  167. package/lib/typescript/specs/argon2.nitro.d.ts +9 -0
  168. package/lib/typescript/specs/argon2.nitro.d.ts.map +1 -0
  169. package/lib/typescript/specs/certificate.nitro.d.ts +10 -0
  170. package/lib/typescript/specs/certificate.nitro.d.ts.map +1 -0
  171. package/lib/typescript/specs/cipher.nitro.d.ts +9 -0
  172. package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -1
  173. package/lib/typescript/specs/dhKeyPair.nitro.d.ts +14 -0
  174. package/lib/typescript/specs/dhKeyPair.nitro.d.ts.map +1 -0
  175. package/lib/typescript/specs/diffie-hellman.nitro.d.ts +1 -0
  176. package/lib/typescript/specs/diffie-hellman.nitro.d.ts.map +1 -1
  177. package/lib/typescript/specs/dsaKeyPair.nitro.d.ts +13 -0
  178. package/lib/typescript/specs/dsaKeyPair.nitro.d.ts.map +1 -0
  179. package/lib/typescript/specs/ecKeyPair.nitro.d.ts +1 -0
  180. package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -1
  181. package/lib/typescript/specs/ecdh.nitro.d.ts +1 -0
  182. package/lib/typescript/specs/ecdh.nitro.d.ts.map +1 -1
  183. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +2 -0
  184. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
  185. package/lib/typescript/specs/prime.nitro.d.ts +11 -0
  186. package/lib/typescript/specs/prime.nitro.d.ts.map +1 -0
  187. package/lib/typescript/subtle.d.ts +2 -0
  188. package/lib/typescript/subtle.d.ts.map +1 -1
  189. package/lib/typescript/utils/types.d.ts +24 -7
  190. package/lib/typescript/utils/types.d.ts.map +1 -1
  191. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +13 -5
  192. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
  193. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +104 -54
  194. package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
  195. package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +1 -1
  196. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +2 -2
  197. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
  198. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
  199. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +1 -1
  200. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +104 -54
  201. package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +5 -1
  202. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +1 -1
  203. package/nitrogen/generated/shared/c++/CipherArgs.hpp +34 -19
  204. package/nitrogen/generated/shared/c++/CipherInfo.hpp +104 -0
  205. package/nitrogen/generated/shared/c++/HybridArgon2Spec.cpp +22 -0
  206. package/nitrogen/generated/shared/c++/HybridArgon2Spec.hpp +66 -0
  207. package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +1 -1
  208. package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +1 -3
  209. package/nitrogen/generated/shared/c++/HybridCertificateSpec.cpp +23 -0
  210. package/nitrogen/generated/shared/c++/HybridCertificateSpec.hpp +64 -0
  211. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +1 -1
  212. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +1 -1
  213. package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +2 -1
  214. package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +5 -3
  215. package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.cpp +27 -0
  216. package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.hpp +69 -0
  217. package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.cpp +2 -1
  218. package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.hpp +3 -3
  219. package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.cpp +26 -0
  220. package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.hpp +68 -0
  221. package/nitrogen/generated/shared/c++/HybridECDHSpec.cpp +2 -1
  222. package/nitrogen/generated/shared/c++/HybridECDHSpec.hpp +3 -3
  223. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +2 -1
  224. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +2 -3
  225. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +1 -1
  226. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +2 -3
  227. package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +1 -1
  228. package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +2 -4
  229. package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +1 -1
  230. package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +2 -3
  231. package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +1 -1
  232. package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +3 -4
  233. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +3 -1
  234. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -4
  235. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +1 -1
  236. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +2 -3
  237. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
  238. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +2 -3
  239. package/nitrogen/generated/shared/c++/HybridPrimeSpec.cpp +24 -0
  240. package/nitrogen/generated/shared/c++/HybridPrimeSpec.hpp +67 -0
  241. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
  242. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +2 -3
  243. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +1 -1
  244. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +1 -3
  245. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +1 -1
  246. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +1 -3
  247. package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +1 -1
  248. package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +2 -3
  249. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +1 -1
  250. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +1 -3
  251. package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +1 -1
  252. package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +2 -3
  253. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +1 -1
  254. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +1 -3
  255. package/nitrogen/generated/shared/c++/JWK.hpp +84 -68
  256. package/nitrogen/generated/shared/c++/JWKkty.hpp +5 -1
  257. package/nitrogen/generated/shared/c++/JWKuse.hpp +1 -1
  258. package/nitrogen/generated/shared/c++/KFormatType.hpp +1 -1
  259. package/nitrogen/generated/shared/c++/KeyDetail.hpp +39 -23
  260. package/nitrogen/generated/shared/c++/KeyEncoding.hpp +1 -1
  261. package/nitrogen/generated/shared/c++/KeyObject.hpp +21 -5
  262. package/nitrogen/generated/shared/c++/KeyType.hpp +1 -1
  263. package/nitrogen/generated/shared/c++/KeyUsage.hpp +1 -1
  264. package/nitrogen/generated/shared/c++/NamedCurve.hpp +1 -1
  265. package/package.json +1 -1
  266. package/src/argon2.ts +83 -0
  267. package/src/certificate.ts +41 -0
  268. package/src/cipher.ts +24 -0
  269. package/src/dhKeyPair.ts +156 -0
  270. package/src/diffie-hellman.ts +6 -0
  271. package/src/dsa.ts +129 -0
  272. package/src/ec.ts +23 -19
  273. package/src/ecdh.ts +59 -0
  274. package/src/ed.ts +1 -2
  275. package/src/hash.ts +11 -0
  276. package/src/index.ts +12 -0
  277. package/src/keys/classes.ts +26 -8
  278. package/src/keys/generateKeyPair.ts +14 -0
  279. package/src/prime.ts +134 -0
  280. package/src/specs/argon2.nitro.ts +29 -0
  281. package/src/specs/certificate.nitro.ts +8 -0
  282. package/src/specs/cipher.nitro.ts +14 -0
  283. package/src/specs/dhKeyPair.nitro.ts +14 -0
  284. package/src/specs/diffie-hellman.nitro.ts +1 -0
  285. package/src/specs/dsaKeyPair.nitro.ts +13 -0
  286. package/src/specs/ecKeyPair.nitro.ts +2 -0
  287. package/src/specs/ecdh.nitro.ts +1 -0
  288. package/src/specs/keyObjectHandle.nitro.ts +2 -0
  289. package/src/specs/prime.nitro.ts +18 -0
  290. package/src/subtle.ts +400 -42
  291. package/src/utils/types.ts +39 -5
  292. package/deps/ncrypto/WORKSPACE +0 -15
@@ -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");
@@ -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;
@@ -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::string, std::shared_ptr<ArrayBuffer>>& data) {
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
  }
@@ -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::string, std::shared_ptr<ArrayBuffer>>& data) override;
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;
@@ -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::string, std::shared_ptr<ArrayBuffer>>& data) {
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
  }
@@ -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::string, std::shared_ptr<ArrayBuffer>>& data) override;
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::string, std::shared_ptr<ArrayBuffer>>& key,
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::string, std::shared_ptr<ArrayBuffer>>& key, std::optional<KFormatType> format,
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
@@ -1,2 +1 @@
1
- common --enable_workspace
2
1
  build --cxxopt="-std=c++20"
@@ -1 +1 @@
1
- 8.0.0
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@c74383674bf5f7c69f60ce562019c1c94bc1421a # v4.13.0
30
+ uses: jidicula/clang-format-action@6cd220de46c89139a0365edae93eee8eb30ca8fe # v4.16.0
31
31
  with:
32
- clang-format-version: '17'
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
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.1.3"
3
+ }
@@ -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))