react-native-quick-crypto 1.0.0 → 1.0.1

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 (81) hide show
  1. package/QuickCrypto.podspec +14 -5
  2. package/android/CMakeLists.txt +4 -2
  3. package/android/build.gradle +1 -1
  4. package/cpp/cipher/HybridCipher.cpp +3 -2
  5. package/cpp/cipher/HybridRsaCipher.cpp +20 -1
  6. package/cpp/keys/HybridKeyObjectHandle.cpp +8 -0
  7. package/cpp/keys/KeyObjectData.hpp +1 -1
  8. package/cpp/mldsa/HybridMlDsaKeyPair.cpp +264 -0
  9. package/cpp/mldsa/HybridMlDsaKeyPair.hpp +47 -0
  10. package/cpp/sign/HybridSignHandle.cpp +97 -22
  11. package/cpp/sign/HybridVerifyHandle.cpp +90 -21
  12. package/deps/ncrypto/.bazelignore +4 -0
  13. package/deps/ncrypto/.bazelrc +2 -0
  14. package/deps/ncrypto/.bazelversion +1 -0
  15. package/deps/ncrypto/.clang-format +111 -0
  16. package/deps/ncrypto/.github/workflows/bazel.yml +58 -0
  17. package/deps/ncrypto/.github/workflows/linter.yml +38 -0
  18. package/deps/ncrypto/.github/workflows/macos.yml +43 -0
  19. package/deps/ncrypto/.github/workflows/ubuntu.yml +46 -0
  20. package/deps/ncrypto/.github/workflows/visual-studio.yml +49 -0
  21. package/deps/ncrypto/.python-version +1 -0
  22. package/deps/ncrypto/BUILD.bazel +36 -0
  23. package/deps/ncrypto/CMakeLists.txt +55 -0
  24. package/deps/ncrypto/LICENSE +21 -0
  25. package/deps/ncrypto/MODULE.bazel +1 -0
  26. package/deps/ncrypto/MODULE.bazel.lock +280 -0
  27. package/deps/ncrypto/README.md +18 -0
  28. package/deps/ncrypto/WORKSPACE +15 -0
  29. package/deps/ncrypto/cmake/CPM.cmake +1225 -0
  30. package/deps/ncrypto/cmake/ncrypto-flags.cmake +16 -0
  31. package/deps/ncrypto/include/dh-primes.h +67 -0
  32. package/deps/ncrypto/{ncrypto.h → include/ncrypto.h} +361 -89
  33. package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +28 -0
  34. package/deps/ncrypto/pyproject.toml +38 -0
  35. package/deps/ncrypto/src/CMakeLists.txt +15 -0
  36. package/deps/ncrypto/src/engine.cpp +93 -0
  37. package/deps/ncrypto/{ncrypto.cc → src/ncrypto.cpp} +1168 -234
  38. package/deps/ncrypto/tests/BUILD.bazel +9 -0
  39. package/deps/ncrypto/tests/CMakeLists.txt +7 -0
  40. package/deps/ncrypto/tests/basic.cpp +86 -0
  41. package/deps/ncrypto/tools/run-clang-format.sh +42 -0
  42. package/lib/commonjs/keys/classes.js +6 -0
  43. package/lib/commonjs/keys/classes.js.map +1 -1
  44. package/lib/commonjs/mldsa.js +69 -0
  45. package/lib/commonjs/mldsa.js.map +1 -0
  46. package/lib/commonjs/specs/mlDsaKeyPair.nitro.js +6 -0
  47. package/lib/commonjs/specs/mlDsaKeyPair.nitro.js.map +1 -0
  48. package/lib/commonjs/subtle.js +111 -6
  49. package/lib/commonjs/subtle.js.map +1 -1
  50. package/lib/commonjs/utils/types.js.map +1 -1
  51. package/lib/module/keys/classes.js +6 -0
  52. package/lib/module/keys/classes.js.map +1 -1
  53. package/lib/module/mldsa.js +63 -0
  54. package/lib/module/mldsa.js.map +1 -0
  55. package/lib/module/specs/mlDsaKeyPair.nitro.js +4 -0
  56. package/lib/module/specs/mlDsaKeyPair.nitro.js.map +1 -0
  57. package/lib/module/subtle.js +111 -6
  58. package/lib/module/subtle.js.map +1 -1
  59. package/lib/module/utils/types.js.map +1 -1
  60. package/lib/tsconfig.tsbuildinfo +1 -1
  61. package/lib/typescript/keys/classes.d.ts +2 -0
  62. package/lib/typescript/keys/classes.d.ts.map +1 -1
  63. package/lib/typescript/mldsa.d.ts +18 -0
  64. package/lib/typescript/mldsa.d.ts.map +1 -0
  65. package/lib/typescript/specs/mlDsaKeyPair.nitro.d.ts +16 -0
  66. package/lib/typescript/specs/mlDsaKeyPair.nitro.d.ts.map +1 -0
  67. package/lib/typescript/subtle.d.ts.map +1 -1
  68. package/lib/typescript/utils/types.d.ts +5 -3
  69. package/lib/typescript/utils/types.d.ts.map +1 -1
  70. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +1 -0
  71. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +10 -0
  72. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +10 -0
  73. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +12 -0
  74. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +29 -0
  75. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +73 -0
  76. package/package.json +7 -3
  77. package/src/keys/classes.ts +9 -0
  78. package/src/mldsa.ts +125 -0
  79. package/src/specs/mlDsaKeyPair.nitro.ts +29 -0
  80. package/src/subtle.ts +148 -8
  81. package/src/utils/types.ts +11 -3
@@ -0,0 +1,9 @@
1
+ cc_test(
2
+ name = "basic",
3
+ srcs = ["basic.cpp"],
4
+ deps = [
5
+ "//:ncrypto",
6
+ "@googletest//:gtest",
7
+ "@googletest//:gtest_main",
8
+ ],
9
+ )
@@ -0,0 +1,7 @@
1
+ include(GoogleTest)
2
+ add_executable(basic basic.cpp)
3
+ target_link_libraries(basic PRIVATE ncrypto GTest::gtest_main)
4
+ gtest_discover_tests(basic)
5
+ if(MSVC OR MINGW)
6
+ target_compile_definitions(basic PRIVATE _CRT_SECURE_NO_WARNINGS)
7
+ endif()
@@ -0,0 +1,86 @@
1
+ #include <ncrypto.h>
2
+
3
+ #include <gtest/gtest.h>
4
+ #include <string>
5
+
6
+ using namespace ncrypto;
7
+
8
+ // Convenience class for creating buffers in tests
9
+ struct TestBuf : public std::string {
10
+ TestBuf(const std::string& constStr)
11
+ : std::string(constStr),
12
+ buf{reinterpret_cast<unsigned char*>(data()), size()} {}
13
+ TestBuf(size_t n) : TestBuf(std::string(n, 0)) {}
14
+
15
+ operator Buffer<unsigned char>&() { return buf; }
16
+
17
+ Buffer<const unsigned char> asConst() const {
18
+ return Buffer<const unsigned char>{
19
+ .data = reinterpret_cast<const unsigned char*>(data()), .len = size()};
20
+ }
21
+
22
+ private:
23
+ Buffer<unsigned char> buf;
24
+ };
25
+
26
+ #include <string>
27
+ #include <unordered_set>
28
+
29
+ using namespace ncrypto;
30
+
31
+ TEST(basic, cipher_foreach) {
32
+ std::unordered_set<std::string> foundCiphers;
33
+
34
+ Cipher::ForEach([&](const char* name) { foundCiphers.insert(name); });
35
+
36
+ // When testing Cipher::ForEach, we cannot expect a particular list of ciphers
37
+ // as that depends on openssl vs boringssl, versions, configuration, etc.
38
+ // Instead, we look for a couple of very common ciphers that should always be
39
+ // present.
40
+ ASSERT_TRUE(foundCiphers.count("AES-128-CTR"));
41
+ ASSERT_TRUE(foundCiphers.count("AES-256-CBC"));
42
+ }
43
+
44
+ #ifdef OPENSSL_IS_BORINGSSL
45
+ TEST(basic, chacha20_poly1305) {
46
+ unsigned char key[] = {0xde, 0xad, 0xbe, 0xef, 0x00, 0x01, 0x02, 0x03,
47
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
48
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
49
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7};
50
+
51
+ auto aead = Aead::CHACHA20_POLY1305;
52
+ auto encryptCtx = AeadCtxPointer::New(aead, true, key, aead.getKeyLength());
53
+
54
+ TestBuf input("Hello world");
55
+ TestBuf tag(aead.getMaxTagLength());
56
+ TestBuf nonce(aead.getNonceLength());
57
+ TestBuf aad("I dunno man");
58
+ TestBuf encryptOutput(input.size());
59
+
60
+ auto encryptOk = encryptCtx.encrypt(
61
+ input.asConst(), encryptOutput, tag, nonce.asConst(), aad.asConst());
62
+ ASSERT_TRUE(encryptOk);
63
+ ASSERT_NE(input, encryptOutput);
64
+
65
+ auto decryptCtx = AeadCtxPointer::New(aead, false, key, aead.getKeyLength());
66
+
67
+ TestBuf decryptOutput(encryptOutput.size());
68
+
69
+ auto decryptOk = decryptCtx.decrypt(encryptOutput.asConst(),
70
+ decryptOutput,
71
+ tag.asConst(),
72
+ nonce.asConst(),
73
+ aad.asConst());
74
+ ASSERT_TRUE(decryptOk);
75
+ ASSERT_EQ(input, decryptOutput);
76
+ }
77
+
78
+ TEST(basic, aead_info) {
79
+ auto aead = Aead::FromName("aEs-256-gcM"); // spongebob does encryption
80
+ ASSERT_EQ(aead.getName(), "aes-256-gcm");
81
+ ASSERT_EQ(aead.getModeLabel(), "gcm");
82
+ ASSERT_EQ(aead.getBlockSize(), 1);
83
+ ASSERT_EQ(aead.getNonceLength(), 12);
84
+ ASSERT_EQ(aead.getMaxTagLength(), 16);
85
+ }
86
+ #endif
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Copyright 2023 Yagiz Nizipli and Daniel Lemire
4
+
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ # this software and associated documentation files (the "Software"), to deal in
7
+ # the Software without restriction, including without limitation the rights to
8
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ # the Software, and to permit persons to whom the Software is furnished to do so,
10
+ # subject to the following conditions:
11
+
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ set -e
23
+ COMMAND=$*
24
+ SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
25
+ MAINSOURCE=$SCRIPTPATH/..
26
+ ALL_FILES=$(cd $MAINSOURCE && git ls-tree --full-tree --name-only -r HEAD | grep -e ".*\.\(c\|h\|cc\|cpp\|hh\)\$")
27
+
28
+ if clang-format-17 --version 2>/dev/null | grep -qF 'version 17.'; then
29
+ cd $MAINSOURCE; clang-format-17 --style=file --verbose -i "$@" $ALL_FILES
30
+ exit 0
31
+ elif clang-format --version 2>/dev/null | grep -qF 'version 17.'; then
32
+ cd $MAINSOURCE; clang-format --style=file --verbose -i "$@" $ALL_FILES
33
+ exit 0
34
+ fi
35
+ echo "Trying to use docker"
36
+ command -v docker >/dev/null 2>&1 || { echo >&2 "Please install docker. E.g., go to https://www.docker.com/products/docker-desktop Type 'docker' to diagnose the problem."; exit 1; }
37
+ docker info >/dev/null 2>&1 || { echo >&2 "Docker server is not running? type 'docker info'."; exit 1; }
38
+
39
+ if [ -t 0 ]; then DOCKER_ARGS=-it; fi
40
+ docker pull kszonek/clang-format-17
41
+
42
+ docker run --rm $DOCKER_ARGS -v "$MAINSOURCE":"$MAINSOURCE":Z -w "$MAINSOURCE" -u "$(id -u $USER):$(id -g $USER)" kszonek/clang-format-17 --style=file --verbose -i "$@" $ALL_FILES
@@ -9,6 +9,9 @@ var _reactNativeNitroModules = require("react-native-nitro-modules");
9
9
  var _utils = require("../utils");
10
10
  var _utils2 = require("./utils");
11
11
  class CryptoKey {
12
+ get [Symbol.toStringTag]() {
13
+ return 'CryptoKey';
14
+ }
12
15
  constructor(keyObject, keyAlgorithm, keyUsages, keyExtractable) {
13
16
  this.keyObject = keyObject;
14
17
  this.keyAlgorithm = keyAlgorithm;
@@ -51,6 +54,9 @@ class CryptoKey {
51
54
  }
52
55
  exports.CryptoKey = CryptoKey;
53
56
  class KeyObject {
57
+ get [Symbol.toStringTag]() {
58
+ return 'KeyObject';
59
+ }
54
60
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
55
61
  export(_options) {
56
62
  // This is a placeholder and should be overridden by subclasses.
@@ -1 +1 @@
1
- {"version":3,"names":["_buffer","require","_reactNativeNitroModules","_utils","_utils2","CryptoKey","constructor","keyObject","keyAlgorithm","keyUsages","keyExtractable","inspect","_depth","_options","Error","type","extractable","algorithm","usages","exports","KeyObject","export","handleOrKey","ArrayBuffer","handle","NitroModules","createHybridObject","keyType","KeyType","PUBLIC","PRIVATE","SECRET","init","createKeyObject","key","format","encoding","undefined","getAsymmetricKeyType","PublicKeyObject","PrivateKeyObject","SecretKeyObject","getAsymmetricKeyDetails","options","exportKey","Buffer","from","AsymmetricKeyObject","asymmetricKeyType","_asymmetricKeyType","asymmetricKeyDetails","_asymmetricKeyDetails","keyDetail","namedCurve","parsePublicKeyEncoding","buffer","toString","passphrase","cipher","parsePrivateKeyEncoding"],"sourceRoot":"../../../src","sources":["keys/classes.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_buffer","require","_reactNativeNitroModules","_utils","_utils2","CryptoKey","Symbol","toStringTag","constructor","keyObject","keyAlgorithm","keyUsages","keyExtractable","inspect","_depth","_options","Error","type","extractable","algorithm","usages","exports","KeyObject","export","handleOrKey","ArrayBuffer","handle","NitroModules","createHybridObject","keyType","KeyType","PUBLIC","PRIVATE","SECRET","init","createKeyObject","key","format","encoding","undefined","getAsymmetricKeyType","PublicKeyObject","PrivateKeyObject","SecretKeyObject","getAsymmetricKeyDetails","options","exportKey","Buffer","from","AsymmetricKeyObject","asymmetricKeyType","_asymmetricKeyType","asymmetricKeyDetails","_asymmetricKeyDetails","keyDetail","namedCurve","parsePublicKeyEncoding","buffer","toString","passphrase","cipher","parsePrivateKeyEncoding"],"sourceRoot":"../../../src","sources":["keys/classes.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MlDsa = void 0;
7
+ exports.mldsa_generateKeyPairWebCrypto = mldsa_generateKeyPairWebCrypto;
8
+ var _reactNativeNitroModules = require("react-native-nitro-modules");
9
+ var _keys = require("./keys");
10
+ var _utils = require("./utils");
11
+ class MlDsa {
12
+ constructor(variant) {
13
+ this.variant = variant;
14
+ this.native = _reactNativeNitroModules.NitroModules.createHybridObject('MlDsaKeyPair');
15
+ this.native.setVariant(variant);
16
+ }
17
+ async generateKeyPair() {
18
+ await this.native.generateKeyPair(_utils.KFormatType.DER, _utils.KeyEncoding.SPKI, _utils.KFormatType.DER, _utils.KeyEncoding.PKCS8);
19
+ }
20
+ generateKeyPairSync() {
21
+ this.native.generateKeyPairSync(_utils.KFormatType.DER, _utils.KeyEncoding.SPKI, _utils.KFormatType.DER, _utils.KeyEncoding.PKCS8);
22
+ }
23
+ getPublicKey() {
24
+ return this.native.getPublicKey();
25
+ }
26
+ getPrivateKey() {
27
+ return this.native.getPrivateKey();
28
+ }
29
+ async sign(message) {
30
+ return this.native.sign(message);
31
+ }
32
+ signSync(message) {
33
+ return this.native.signSync(message);
34
+ }
35
+ async verify(signature, message) {
36
+ return this.native.verify(signature, message);
37
+ }
38
+ verifySync(signature, message) {
39
+ return this.native.verifySync(signature, message);
40
+ }
41
+ }
42
+ exports.MlDsa = MlDsa;
43
+ async function mldsa_generateKeyPairWebCrypto(variant, extractable, keyUsages) {
44
+ if ((0, _utils.hasAnyNotIn)(keyUsages, ['sign', 'verify'])) {
45
+ throw (0, _utils.lazyDOMException)(`Unsupported key usage for ${variant}`, 'SyntaxError');
46
+ }
47
+ const publicUsages = (0, _utils.getUsagesUnion)(keyUsages, 'verify');
48
+ const privateUsages = (0, _utils.getUsagesUnion)(keyUsages, 'sign');
49
+ if (privateUsages.length === 0) {
50
+ throw (0, _utils.lazyDOMException)('Usages cannot be empty', 'SyntaxError');
51
+ }
52
+ const mldsa = new MlDsa(variant);
53
+ await mldsa.generateKeyPair();
54
+ const publicKeyData = mldsa.getPublicKey();
55
+ const privateKeyData = mldsa.getPrivateKey();
56
+ const pub = _keys.KeyObject.createKeyObject('public', publicKeyData, _utils.KFormatType.DER, _utils.KeyEncoding.SPKI);
57
+ const publicKey = new _keys.CryptoKey(pub, {
58
+ name: variant
59
+ }, publicUsages, true);
60
+ const priv = _keys.KeyObject.createKeyObject('private', privateKeyData, _utils.KFormatType.DER, _utils.KeyEncoding.PKCS8);
61
+ const privateKey = new _keys.CryptoKey(priv, {
62
+ name: variant
63
+ }, privateUsages, extractable);
64
+ return {
65
+ publicKey,
66
+ privateKey
67
+ };
68
+ }
69
+ //# sourceMappingURL=mldsa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeNitroModules","require","_keys","_utils","MlDsa","constructor","variant","native","NitroModules","createHybridObject","setVariant","generateKeyPair","KFormatType","DER","KeyEncoding","SPKI","PKCS8","generateKeyPairSync","getPublicKey","getPrivateKey","sign","message","signSync","verify","signature","verifySync","exports","mldsa_generateKeyPairWebCrypto","extractable","keyUsages","hasAnyNotIn","lazyDOMException","publicUsages","getUsagesUnion","privateUsages","length","mldsa","publicKeyData","privateKeyData","pub","KeyObject","createKeyObject","publicKey","CryptoKey","name","priv","privateKey"],"sourceRoot":"../../src","sources":["mldsa.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=mlDsaKeyPair.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/mlDsaKeyPair.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -22,6 +22,7 @@ var _random = require("./random");
22
22
  var _hmac = require("./hmac");
23
23
  var _signVerify = require("./keys/signVerify");
24
24
  var _ed = require("./ed");
25
+ var _mldsa = require("./mldsa");
25
26
  /* eslint-disable @typescript-eslint/no-unused-vars */
26
27
  // import { pbkdf2DeriveBits } from './pbkdf2';
27
28
  // import { aesCipher, aesGenerateKey, aesImportKey, getAlgorithmName } from './aes';
@@ -350,10 +351,13 @@ async function hmacGenerateKey(algorithm, extractable, keyUsages) {
350
351
  // Create secret key
351
352
  const keyObject = (0, _keys.createSecretKey)(keyBytes);
352
353
 
353
- // Construct algorithm object
354
+ // Construct algorithm object with hash normalized to { name: string } format per WebCrypto spec
355
+ const webCryptoHashName = (0, _hashnames.normalizeHashName)(hash, _hashnames.HashContext.WebCrypto);
354
356
  const keyAlgorithm = {
355
357
  name: 'HMAC',
356
- hash: hashName,
358
+ hash: {
359
+ name: webCryptoHashName
360
+ },
357
361
  length
358
362
  };
359
363
  return new _keys.CryptoKey(keyObject, keyAlgorithm, keyUsages, extractable);
@@ -427,10 +431,17 @@ function rsaImportKey(format, data, algorithm, extractable, keyUsages) {
427
431
  }
428
432
  publicExponentBytes = new Uint8Array(bytes.length > 0 ? bytes : [0]);
429
433
  }
434
+
435
+ // Normalize hash to { name: string } format per WebCrypto spec
436
+ const hashName = (0, _hashnames.normalizeHashName)(algorithm.hash, _hashnames.HashContext.WebCrypto);
437
+ const normalizedHash = {
438
+ name: hashName
439
+ };
430
440
  const algorithmWithDetails = {
431
441
  ...algorithm,
432
442
  modulusLength: keyDetails?.modulusLength,
433
- publicExponent: publicExponentBytes
443
+ publicExponent: publicExponentBytes,
444
+ hash: normalizedHash
434
445
  };
435
446
  return new _keys.CryptoKey(keyObject, algorithmWithDetails, keyUsages, extractable);
436
447
  }
@@ -477,10 +488,17 @@ async function hmacImportKey(algorithm, format, data, extractable, keyUsages) {
477
488
  } else {
478
489
  throw new Error(`Unable to import HMAC key with format ${format}`);
479
490
  }
480
- return new _keys.CryptoKey(keyObject, {
491
+
492
+ // Normalize hash to { name: string } format per WebCrypto spec
493
+ const hashName = (0, _hashnames.normalizeHashName)(algorithm.hash, _hashnames.HashContext.WebCrypto);
494
+ const normalizedAlgorithm = {
481
495
  ...algorithm,
482
- name: 'HMAC'
483
- }, keyUsages, extractable);
496
+ name: 'HMAC',
497
+ hash: {
498
+ name: hashName
499
+ }
500
+ };
501
+ return new _keys.CryptoKey(keyObject, normalizedAlgorithm, keyUsages, extractable);
484
502
  }
485
503
  async function aesImportKey(algorithm, format, data, extractable, keyUsages) {
486
504
  const {
@@ -567,6 +585,31 @@ function edImportKey(format, data, algorithm, extractable, keyUsages) {
567
585
  name
568
586
  }, keyUsages, extractable);
569
587
  }
588
+ function mldsaImportKey(format, data, algorithm, extractable, keyUsages) {
589
+ const {
590
+ name
591
+ } = algorithm;
592
+
593
+ // Validate usages
594
+ if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {
595
+ throw (0, _errors.lazyDOMException)(`Unsupported key usage for ${name} key`, 'SyntaxError');
596
+ }
597
+ let keyObject;
598
+ if (format === 'spki') {
599
+ // Import public key
600
+ const keyData = (0, _conversion.bufferLikeToArrayBuffer)(data);
601
+ keyObject = _keys.KeyObject.createKeyObject('public', keyData, _utils.KFormatType.DER, _utils.KeyEncoding.SPKI);
602
+ } else if (format === 'pkcs8') {
603
+ // Import private key
604
+ const keyData = (0, _conversion.bufferLikeToArrayBuffer)(data);
605
+ keyObject = _keys.KeyObject.createKeyObject('private', keyData, _utils.KFormatType.DER, _utils.KeyEncoding.PKCS8);
606
+ } else {
607
+ throw (0, _errors.lazyDOMException)(`Unsupported format for ${name} import: ${format}`, 'NotSupportedError');
608
+ }
609
+ return new _keys.CryptoKey(keyObject, {
610
+ name
611
+ }, keyUsages, extractable);
612
+ }
570
613
  const exportKeySpki = async key => {
571
614
  switch (key.algorithm.name) {
572
615
  case 'RSASSA-PKCS1-v1_5':
@@ -593,6 +636,16 @@ const exportKeySpki = async key => {
593
636
  return (0, _conversion.bufferLikeToArrayBuffer)(key.keyObject.handle.exportKey(_utils.KFormatType.DER, _utils.KeyEncoding.SPKI));
594
637
  }
595
638
  break;
639
+ case 'ML-DSA-44':
640
+ // Fall through
641
+ case 'ML-DSA-65':
642
+ // Fall through
643
+ case 'ML-DSA-87':
644
+ if (key.type === 'public') {
645
+ // Export ML-DSA key in SPKI DER format
646
+ return (0, _conversion.bufferLikeToArrayBuffer)(key.keyObject.handle.exportKey(_utils.KFormatType.DER, _utils.KeyEncoding.SPKI));
647
+ }
648
+ break;
596
649
  }
597
650
  throw new Error(`Unable to export a spki ${key.algorithm.name} ${key.type} key`);
598
651
  };
@@ -622,6 +675,16 @@ const exportKeyPkcs8 = async key => {
622
675
  return (0, _conversion.bufferLikeToArrayBuffer)(key.keyObject.handle.exportKey(_utils.KFormatType.DER, _utils.KeyEncoding.PKCS8));
623
676
  }
624
677
  break;
678
+ case 'ML-DSA-44':
679
+ // Fall through
680
+ case 'ML-DSA-65':
681
+ // Fall through
682
+ case 'ML-DSA-87':
683
+ if (key.type === 'private') {
684
+ // Export ML-DSA key in PKCS8 DER format
685
+ return (0, _conversion.bufferLikeToArrayBuffer)(key.keyObject.handle.exportKey(_utils.KFormatType.DER, _utils.KeyEncoding.PKCS8));
686
+ }
687
+ break;
625
688
  }
626
689
  throw new Error(`Unable to export a pkcs8 ${key.algorithm.name} ${key.type} key`);
627
690
  };
@@ -816,6 +879,29 @@ function edSignVerify(key, data, signature) {
816
879
  return ed.verifySync(signatureBuffer, dataBuffer, rawKey);
817
880
  }
818
881
  }
882
+ function mldsaSignVerify(key, data, signature) {
883
+ const isSign = signature === undefined;
884
+ const expectedKeyType = isSign ? 'private' : 'public';
885
+ if (key.type !== expectedKeyType) {
886
+ throw (0, _errors.lazyDOMException)(`Key must be a ${expectedKeyType} key`, 'InvalidAccessError');
887
+ }
888
+ const dataBuffer = (0, _conversion.bufferLikeToArrayBuffer)(data);
889
+ if (isSign) {
890
+ const signer = (0, _signVerify.createSign)('');
891
+ signer.update(dataBuffer);
892
+ const sig = signer.sign({
893
+ key: key
894
+ });
895
+ return sig.buffer.slice(sig.byteOffset, sig.byteOffset + sig.byteLength);
896
+ } else {
897
+ const signatureBuffer = (0, _conversion.bufferLikeToArrayBuffer)(signature);
898
+ const verifier = (0, _signVerify.createVerify)('');
899
+ verifier.update(dataBuffer);
900
+ return verifier.verify({
901
+ key: key
902
+ }, signatureBuffer);
903
+ }
904
+ }
819
905
  const signVerify = (algorithm, key, data, signature) => {
820
906
  const usage = signature === undefined ? 'sign' : 'verify';
821
907
  algorithm = normalizeAlgorithm(algorithm, usage);
@@ -834,6 +920,10 @@ const signVerify = (algorithm, key, data, signature) => {
834
920
  case 'Ed25519':
835
921
  case 'Ed448':
836
922
  return edSignVerify(key, data, signature);
923
+ case 'ML-DSA-44':
924
+ case 'ML-DSA-65':
925
+ case 'ML-DSA-87':
926
+ return mldsaSignVerify(key, data, signature);
837
927
  }
838
928
  throw (0, _errors.lazyDOMException)(`Unrecognized algorithm name '${algorithm.name}' for '${usage}'`, 'NotSupportedError');
839
929
  };
@@ -925,6 +1015,14 @@ class Subtle {
925
1015
  result = await (0, _ed.ed_generateKeyPairWebCrypto)(algorithm.name.toLowerCase(), extractable, keyUsages);
926
1016
  checkCryptoKeyPairUsages(result);
927
1017
  break;
1018
+ case 'ML-DSA-44':
1019
+ // Fall through
1020
+ case 'ML-DSA-65':
1021
+ // Fall through
1022
+ case 'ML-DSA-87':
1023
+ result = await (0, _mldsa.mldsa_generateKeyPairWebCrypto)(algorithm.name, extractable, keyUsages);
1024
+ checkCryptoKeyPairUsages(result);
1025
+ break;
928
1026
  default:
929
1027
  throw new Error(`'subtle.generateKey()' is not implemented for ${algorithm.name}.
930
1028
  Unrecognized algorithm name`);
@@ -967,6 +1065,13 @@ class Subtle {
967
1065
  case 'Ed448':
968
1066
  result = edImportKey(format, data, normalizedAlgorithm, extractable, keyUsages);
969
1067
  break;
1068
+ case 'ML-DSA-44':
1069
+ // Fall through
1070
+ case 'ML-DSA-65':
1071
+ // Fall through
1072
+ case 'ML-DSA-87':
1073
+ result = mldsaImportKey(format, data, normalizedAlgorithm, extractable, keyUsages);
1074
+ break;
970
1075
  default:
971
1076
  throw new Error(`"subtle.importKey()" is not implemented for ${normalizedAlgorithm.name}`);
972
1077
  }