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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/certificate.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/dhKeyPair.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/dsaKeyPair.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/prime.nitro.ts"],"mappings":"","ignoreList":[]}
|
package/lib/commonjs/subtle.js
CHANGED
|
@@ -10,6 +10,7 @@ var _safeBuffer = require("safe-buffer");
|
|
|
10
10
|
var _utils = require("./utils");
|
|
11
11
|
var _keys = require("./keys");
|
|
12
12
|
var _conversion = require("./utils/conversion");
|
|
13
|
+
var _argon = require("./argon2");
|
|
13
14
|
var _errors = require("./utils/errors");
|
|
14
15
|
var _hashnames = require("./utils/hashnames");
|
|
15
16
|
var _validation = require("./utils/validation");
|
|
@@ -25,11 +26,6 @@ var _ed = require("./ed");
|
|
|
25
26
|
var _mldsa = require("./mldsa");
|
|
26
27
|
var _hkdf = require("./hkdf");
|
|
27
28
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
28
|
-
// import { pbkdf2DeriveBits } from './pbkdf2';
|
|
29
|
-
// import { aesCipher, aesGenerateKey, aesImportKey, getAlgorithmName } from './aes';
|
|
30
|
-
// import { rsaCipher, rsaExportKey, rsaImportKey, rsaKeyGenerate } from './rsa';
|
|
31
|
-
// import { normalizeAlgorithm, type Operation } from './algorithms';
|
|
32
|
-
// import { hmacImportKey } from './mac';
|
|
33
29
|
// Temporary enums that need to be defined
|
|
34
30
|
var KWebCryptoKeyFormat = /*#__PURE__*/function (KWebCryptoKeyFormat) {
|
|
35
31
|
KWebCryptoKeyFormat[KWebCryptoKeyFormat["kWebCryptoKeyFormatRaw"] = 0] = "kWebCryptoKeyFormatRaw";
|
|
@@ -54,21 +50,36 @@ function normalizeAlgorithm(algorithm, _operation) {
|
|
|
54
50
|
return algorithm;
|
|
55
51
|
}
|
|
56
52
|
function getAlgorithmName(name, length) {
|
|
57
|
-
|
|
53
|
+
switch (name) {
|
|
54
|
+
case 'AES-CBC':
|
|
55
|
+
return `A${length}CBC`;
|
|
56
|
+
case 'AES-CTR':
|
|
57
|
+
return `A${length}CTR`;
|
|
58
|
+
case 'AES-GCM':
|
|
59
|
+
return `A${length}GCM`;
|
|
60
|
+
case 'AES-KW':
|
|
61
|
+
return `A${length}KW`;
|
|
62
|
+
case 'AES-OCB':
|
|
63
|
+
return `A${length}OCB`;
|
|
64
|
+
case 'ChaCha20-Poly1305':
|
|
65
|
+
return 'C20P';
|
|
66
|
+
default:
|
|
67
|
+
return `${name}${length}`;
|
|
68
|
+
}
|
|
58
69
|
}
|
|
59
70
|
|
|
60
71
|
// Placeholder implementations for missing functions
|
|
61
72
|
function ecExportKey(key, format) {
|
|
62
73
|
const keyObject = key.keyObject;
|
|
63
|
-
if (format === KWebCryptoKeyFormat.
|
|
64
|
-
|
|
74
|
+
if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatRaw) {
|
|
75
|
+
return (0, _conversion.bufferLikeToArrayBuffer)(keyObject.handle.exportKey());
|
|
76
|
+
} else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatSPKI) {
|
|
65
77
|
const exported = keyObject.export({
|
|
66
78
|
format: 'der',
|
|
67
79
|
type: 'spki'
|
|
68
80
|
});
|
|
69
81
|
return (0, _conversion.bufferLikeToArrayBuffer)(exported);
|
|
70
82
|
} else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatPKCS8) {
|
|
71
|
-
// Export private key in PKCS8 format
|
|
72
83
|
const exported = keyObject.export({
|
|
73
84
|
format: 'der',
|
|
74
85
|
type: 'pkcs8'
|
|
@@ -137,6 +148,8 @@ async function aesCipher(mode, key, data, algorithm) {
|
|
|
137
148
|
return aesCbcCipher(mode, key, data, algorithm);
|
|
138
149
|
case 'AES-GCM':
|
|
139
150
|
return aesGcmCipher(mode, key, data, algorithm);
|
|
151
|
+
case 'AES-OCB':
|
|
152
|
+
return aesOcbCipher(mode, key, data, algorithm);
|
|
140
153
|
default:
|
|
141
154
|
throw (0, _errors.lazyDOMException)(`Unsupported AES algorithm: ${name}`, 'NotSupportedError');
|
|
142
155
|
}
|
|
@@ -203,61 +216,40 @@ async function aesCbcCipher(mode, key, data, algorithm) {
|
|
|
203
216
|
result.set(new Uint8Array(final), updated.byteLength);
|
|
204
217
|
return result.buffer;
|
|
205
218
|
}
|
|
206
|
-
async function
|
|
207
|
-
|
|
208
|
-
tagLength
|
|
209
|
-
} = algorithm;
|
|
210
|
-
|
|
211
|
-
// Validate tag length
|
|
212
|
-
const validTagLengths = [32, 64, 96, 104, 112, 120, 128];
|
|
213
|
-
if (!validTagLengths.includes(tagLength)) {
|
|
214
|
-
throw (0, _errors.lazyDOMException)(`${tagLength} is not a valid AES-GCM tag length`, 'OperationError');
|
|
219
|
+
async function aesAeadCipher(mode, key, data, config, additionalData, tagLength = 128) {
|
|
220
|
+
if (!config.validTagLengths.includes(tagLength)) {
|
|
221
|
+
throw (0, _errors.lazyDOMException)(`${tagLength} is not a valid ${config.algorithmName} tag length`, 'OperationError');
|
|
215
222
|
}
|
|
216
223
|
const tagByteLength = tagLength / 8;
|
|
217
|
-
|
|
218
|
-
// Get cipher type based on key length
|
|
219
224
|
const keyLength = key.algorithm.length;
|
|
220
|
-
const cipherType = `aes-${keyLength}
|
|
221
|
-
|
|
222
|
-
// Create cipher
|
|
225
|
+
const cipherType = `aes-${keyLength}-${config.cipherSuffix}`;
|
|
223
226
|
const factory = _reactNativeNitroModules.NitroModules.createHybridObject('CipherFactory');
|
|
224
227
|
const cipher = factory.createCipher({
|
|
225
228
|
isCipher: mode === CipherOrWrapMode.kWebCryptoCipherEncrypt,
|
|
226
229
|
cipherType,
|
|
227
230
|
cipherKey: (0, _conversion.bufferLikeToArrayBuffer)(key.keyObject.export()),
|
|
228
|
-
iv:
|
|
231
|
+
iv: config.iv,
|
|
229
232
|
authTagLen: tagByteLength
|
|
230
233
|
});
|
|
231
234
|
let processData;
|
|
232
|
-
let authTag;
|
|
233
235
|
if (mode === CipherOrWrapMode.kWebCryptoCipherDecrypt) {
|
|
234
|
-
// For decryption, extract auth tag from end of data
|
|
235
236
|
const dataView = new Uint8Array(data);
|
|
236
237
|
if (dataView.byteLength < tagByteLength) {
|
|
237
238
|
throw (0, _errors.lazyDOMException)('The provided data is too small.', 'OperationError');
|
|
238
239
|
}
|
|
239
|
-
|
|
240
|
-
// Split data and tag
|
|
241
240
|
const ciphertextLength = dataView.byteLength - tagByteLength;
|
|
242
241
|
processData = dataView.slice(0, ciphertextLength).buffer;
|
|
243
|
-
authTag = dataView.slice(ciphertextLength).buffer;
|
|
244
|
-
|
|
245
|
-
// Set auth tag for verification
|
|
242
|
+
const authTag = dataView.slice(ciphertextLength).buffer;
|
|
246
243
|
cipher.setAuthTag(authTag);
|
|
247
244
|
} else {
|
|
248
245
|
processData = data;
|
|
249
246
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
if (algorithm.additionalData) {
|
|
253
|
-
cipher.setAAD((0, _conversion.bufferLikeToArrayBuffer)(algorithm.additionalData));
|
|
247
|
+
if (additionalData) {
|
|
248
|
+
cipher.setAAD((0, _conversion.bufferLikeToArrayBuffer)(additionalData));
|
|
254
249
|
}
|
|
255
|
-
|
|
256
|
-
// Process data
|
|
257
250
|
const updated = cipher.update(processData);
|
|
258
251
|
const final = cipher.final();
|
|
259
252
|
if (mode === CipherOrWrapMode.kWebCryptoCipherEncrypt) {
|
|
260
|
-
// For encryption, append auth tag to result
|
|
261
253
|
const tag = cipher.getAuthTag();
|
|
262
254
|
const result = new Uint8Array(updated.byteLength + final.byteLength + tag.byteLength);
|
|
263
255
|
result.set(new Uint8Array(updated), 0);
|
|
@@ -265,13 +257,32 @@ async function aesGcmCipher(mode, key, data, algorithm) {
|
|
|
265
257
|
result.set(new Uint8Array(tag), updated.byteLength + final.byteLength);
|
|
266
258
|
return result.buffer;
|
|
267
259
|
} else {
|
|
268
|
-
// For decryption, just concatenate plaintext
|
|
269
260
|
const result = new Uint8Array(updated.byteLength + final.byteLength);
|
|
270
261
|
result.set(new Uint8Array(updated), 0);
|
|
271
262
|
result.set(new Uint8Array(final), updated.byteLength);
|
|
272
263
|
return result.buffer;
|
|
273
264
|
}
|
|
274
265
|
}
|
|
266
|
+
async function aesGcmCipher(mode, key, data, algorithm) {
|
|
267
|
+
return aesAeadCipher(mode, key, data, {
|
|
268
|
+
algorithmName: 'AES-GCM',
|
|
269
|
+
validTagLengths: [32, 64, 96, 104, 112, 120, 128],
|
|
270
|
+
cipherSuffix: 'gcm',
|
|
271
|
+
iv: (0, _conversion.bufferLikeToArrayBuffer)(algorithm.iv)
|
|
272
|
+
}, algorithm.additionalData, algorithm.tagLength);
|
|
273
|
+
}
|
|
274
|
+
async function aesOcbCipher(mode, key, data, algorithm) {
|
|
275
|
+
const ivBuffer = (0, _conversion.bufferLikeToArrayBuffer)(algorithm.iv);
|
|
276
|
+
if (ivBuffer.byteLength < 1 || ivBuffer.byteLength > 15) {
|
|
277
|
+
throw (0, _errors.lazyDOMException)('AES-OCB algorithm.iv must be between 1 and 15 bytes', 'OperationError');
|
|
278
|
+
}
|
|
279
|
+
return aesAeadCipher(mode, key, data, {
|
|
280
|
+
algorithmName: 'AES-OCB',
|
|
281
|
+
validTagLengths: [64, 96, 128],
|
|
282
|
+
cipherSuffix: 'ocb',
|
|
283
|
+
iv: ivBuffer
|
|
284
|
+
}, algorithm.additionalData, algorithm.tagLength);
|
|
285
|
+
}
|
|
275
286
|
async function aesKwCipher(mode, key, data) {
|
|
276
287
|
const isWrap = mode === CipherOrWrapMode.kWebCryptoCipherEncrypt;
|
|
277
288
|
|
|
@@ -695,6 +706,18 @@ function edImportKey(format, data, algorithm, extractable, keyUsages) {
|
|
|
695
706
|
// Raw public keys are just the key bytes
|
|
696
707
|
handle.init(1, keyData); // 1 = public key type
|
|
697
708
|
keyObject = new _keys.PublicKeyObject(handle);
|
|
709
|
+
} else if (format === 'jwk') {
|
|
710
|
+
const jwkData = data;
|
|
711
|
+
const handle = _reactNativeNitroModules.NitroModules.createHybridObject('KeyObjectHandle');
|
|
712
|
+
const keyType = handle.initJwk(jwkData);
|
|
713
|
+
if (keyType === undefined) {
|
|
714
|
+
throw (0, _errors.lazyDOMException)('Invalid JWK data', 'DataError');
|
|
715
|
+
}
|
|
716
|
+
if (keyType === _utils.KeyType.PRIVATE) {
|
|
717
|
+
keyObject = new _keys.PrivateKeyObject(handle);
|
|
718
|
+
} else {
|
|
719
|
+
keyObject = new _keys.PublicKeyObject(handle);
|
|
720
|
+
}
|
|
698
721
|
} else {
|
|
699
722
|
throw (0, _errors.lazyDOMException)(`Unsupported format for ${name} import: ${format}`, 'NotSupportedError');
|
|
700
723
|
}
|
|
@@ -843,6 +866,8 @@ const exportKeyRaw = key => {
|
|
|
843
866
|
// Fall through
|
|
844
867
|
case 'AES-KW':
|
|
845
868
|
// Fall through
|
|
869
|
+
case 'AES-OCB':
|
|
870
|
+
// Fall through
|
|
846
871
|
case 'ChaCha20-Poly1305':
|
|
847
872
|
// Fall through
|
|
848
873
|
case 'HMAC':
|
|
@@ -877,6 +902,14 @@ const exportKeyJWK = key => {
|
|
|
877
902
|
case 'ECDH':
|
|
878
903
|
jwk.crv ||= key.algorithm.namedCurve;
|
|
879
904
|
return jwk;
|
|
905
|
+
case 'Ed25519':
|
|
906
|
+
// Fall through
|
|
907
|
+
case 'Ed448':
|
|
908
|
+
// Fall through
|
|
909
|
+
case 'X25519':
|
|
910
|
+
// Fall through
|
|
911
|
+
case 'X448':
|
|
912
|
+
return jwk;
|
|
880
913
|
case 'AES-CTR':
|
|
881
914
|
// Fall through
|
|
882
915
|
case 'AES-CBC':
|
|
@@ -885,6 +918,8 @@ const exportKeyJWK = key => {
|
|
|
885
918
|
// Fall through
|
|
886
919
|
case 'AES-KW':
|
|
887
920
|
// Fall through
|
|
921
|
+
case 'AES-OCB':
|
|
922
|
+
// Fall through
|
|
888
923
|
case 'ChaCha20-Poly1305':
|
|
889
924
|
if (key.algorithm.length === undefined) {
|
|
890
925
|
throw (0, _errors.lazyDOMException)(`Algorithm ${key.algorithm.name} missing required length property`, 'InvalidAccessError');
|
|
@@ -949,6 +984,37 @@ const checkCryptoKeyPairUsages = pair => {
|
|
|
949
984
|
}
|
|
950
985
|
throw (0, _errors.lazyDOMException)('Usages cannot be empty when creating a key.', 'SyntaxError');
|
|
951
986
|
};
|
|
987
|
+
function argon2DeriveBits(algorithm, baseKey, length) {
|
|
988
|
+
if (length === 0 || length % 8 !== 0) {
|
|
989
|
+
throw (0, _errors.lazyDOMException)('Invalid Argon2 derived key length', 'OperationError');
|
|
990
|
+
}
|
|
991
|
+
if (length < 32) {
|
|
992
|
+
throw (0, _errors.lazyDOMException)('Argon2 derived key length must be at least 32 bits', 'OperationError');
|
|
993
|
+
}
|
|
994
|
+
const {
|
|
995
|
+
nonce,
|
|
996
|
+
parallelism,
|
|
997
|
+
memory,
|
|
998
|
+
passes,
|
|
999
|
+
secretValue,
|
|
1000
|
+
associatedData
|
|
1001
|
+
} = algorithm;
|
|
1002
|
+
const tagLength = length / 8;
|
|
1003
|
+
const message = baseKey.keyObject.export();
|
|
1004
|
+
const algName = algorithm.name.toLowerCase();
|
|
1005
|
+
const result = (0, _argon.argon2Sync)(algName, {
|
|
1006
|
+
message,
|
|
1007
|
+
nonce: nonce ?? new Uint8Array(0),
|
|
1008
|
+
parallelism: parallelism ?? 1,
|
|
1009
|
+
tagLength,
|
|
1010
|
+
memory: memory ?? 65536,
|
|
1011
|
+
passes: passes ?? 3,
|
|
1012
|
+
secret: secretValue,
|
|
1013
|
+
associatedData,
|
|
1014
|
+
version: algorithm.version
|
|
1015
|
+
});
|
|
1016
|
+
return (0, _conversion.bufferLikeToArrayBuffer)(result);
|
|
1017
|
+
}
|
|
952
1018
|
|
|
953
1019
|
// Type guard to check if result is CryptoKeyPair
|
|
954
1020
|
function isCryptoKeyPair(result) {
|
|
@@ -1101,6 +1167,8 @@ const cipherOrWrap = async (mode, algorithm, key, data, op) => {
|
|
|
1101
1167
|
case 'AES-CBC':
|
|
1102
1168
|
// Fall through
|
|
1103
1169
|
case 'AES-GCM':
|
|
1170
|
+
// Fall through
|
|
1171
|
+
case 'AES-OCB':
|
|
1104
1172
|
return aesCipher(mode, key, data, algorithm);
|
|
1105
1173
|
case 'AES-KW':
|
|
1106
1174
|
return aesKwCipher(mode, key, data);
|
|
@@ -1108,7 +1176,49 @@ const cipherOrWrap = async (mode, algorithm, key, data, op) => {
|
|
|
1108
1176
|
return chaCha20Poly1305Cipher(mode, key, data, algorithm);
|
|
1109
1177
|
}
|
|
1110
1178
|
};
|
|
1179
|
+
const SUPPORTED_ALGORITHMS = {
|
|
1180
|
+
encrypt: new Set(['RSA-OAEP', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-OCB', 'ChaCha20-Poly1305']),
|
|
1181
|
+
decrypt: new Set(['RSA-OAEP', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-OCB', 'ChaCha20-Poly1305']),
|
|
1182
|
+
sign: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'ECDSA', 'HMAC', 'Ed25519', 'Ed448', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
|
|
1183
|
+
verify: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'ECDSA', 'HMAC', 'Ed25519', 'Ed448', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
|
|
1184
|
+
digest: new Set(['SHA-1', 'SHA-256', 'SHA-384', 'SHA-512']),
|
|
1185
|
+
generateKey: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'RSA-OAEP', 'ECDSA', 'ECDH', 'Ed25519', 'Ed448', 'X25519', 'X448', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'HMAC', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
|
|
1186
|
+
importKey: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'RSA-OAEP', 'ECDSA', 'ECDH', 'Ed25519', 'Ed448', 'X25519', 'X448', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'HMAC', 'HKDF', 'PBKDF2', 'Argon2d', 'Argon2i', 'Argon2id', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
|
|
1187
|
+
exportKey: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'RSA-OAEP', 'ECDSA', 'ECDH', 'Ed25519', 'Ed448', 'X25519', 'X448', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'HMAC', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
|
|
1188
|
+
deriveBits: new Set(['PBKDF2', 'HKDF', 'ECDH', 'X25519', 'X448', 'Argon2d', 'Argon2i', 'Argon2id']),
|
|
1189
|
+
wrapKey: new Set(['AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'RSA-OAEP']),
|
|
1190
|
+
unwrapKey: new Set(['AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'RSA-OAEP'])
|
|
1191
|
+
};
|
|
1192
|
+
const ASYMMETRIC_ALGORITHMS = new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'RSA-OAEP', 'ECDSA', 'ECDH', 'Ed25519', 'Ed448', 'X25519', 'X448', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']);
|
|
1111
1193
|
class Subtle {
|
|
1194
|
+
static supports(operation, algorithm, _lengthOrAdditionalAlgorithm) {
|
|
1195
|
+
let normalizedAlgorithm;
|
|
1196
|
+
try {
|
|
1197
|
+
normalizedAlgorithm = normalizeAlgorithm(algorithm, operation === 'getPublicKey' ? 'exportKey' : operation);
|
|
1198
|
+
} catch {
|
|
1199
|
+
return false;
|
|
1200
|
+
}
|
|
1201
|
+
const name = normalizedAlgorithm.name;
|
|
1202
|
+
if (operation === 'getPublicKey') {
|
|
1203
|
+
return ASYMMETRIC_ALGORITHMS.has(name);
|
|
1204
|
+
}
|
|
1205
|
+
if (operation === 'deriveKey') {
|
|
1206
|
+
// deriveKey decomposes to deriveBits + importKey of additional algorithm
|
|
1207
|
+
if (!SUPPORTED_ALGORITHMS.deriveBits?.has(name)) return false;
|
|
1208
|
+
if (_lengthOrAdditionalAlgorithm != null) {
|
|
1209
|
+
try {
|
|
1210
|
+
const additionalAlg = normalizeAlgorithm(_lengthOrAdditionalAlgorithm, 'importKey');
|
|
1211
|
+
return SUPPORTED_ALGORITHMS.importKey?.has(additionalAlg.name) ?? false;
|
|
1212
|
+
} catch {
|
|
1213
|
+
return false;
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
return true;
|
|
1217
|
+
}
|
|
1218
|
+
const supported = SUPPORTED_ALGORITHMS[operation];
|
|
1219
|
+
if (!supported) return false;
|
|
1220
|
+
return supported.has(name);
|
|
1221
|
+
}
|
|
1112
1222
|
async decrypt(algorithm, key, data) {
|
|
1113
1223
|
const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'decrypt');
|
|
1114
1224
|
return cipherOrWrap(CipherOrWrapMode.kWebCryptoCipherDecrypt, normalizedAlgorithm, key, (0, _conversion.bufferLikeToArrayBuffer)(data), 'decrypt');
|
|
@@ -1134,6 +1244,10 @@ class Subtle {
|
|
|
1134
1244
|
return (0, _ec.ecDeriveBits)(algorithm, baseKey, length);
|
|
1135
1245
|
case 'HKDF':
|
|
1136
1246
|
return (0, _hkdf.hkdfDeriveBits)(algorithm, baseKey, length);
|
|
1247
|
+
case 'Argon2d':
|
|
1248
|
+
case 'Argon2i':
|
|
1249
|
+
case 'Argon2id':
|
|
1250
|
+
return argon2DeriveBits(algorithm, baseKey, length);
|
|
1137
1251
|
}
|
|
1138
1252
|
throw new Error(`'subtle.deriveBits()' for ${algorithm.name} is not implemented.`);
|
|
1139
1253
|
}
|
|
@@ -1158,9 +1272,17 @@ class Subtle {
|
|
|
1158
1272
|
case 'X448':
|
|
1159
1273
|
derivedBits = await (0, _ed.xDeriveBits)(algorithm, baseKey, length);
|
|
1160
1274
|
break;
|
|
1275
|
+
case 'ECDH':
|
|
1276
|
+
derivedBits = await (0, _ec.ecDeriveBits)(algorithm, baseKey, length);
|
|
1277
|
+
break;
|
|
1161
1278
|
case 'HKDF':
|
|
1162
1279
|
derivedBits = (0, _hkdf.hkdfDeriveBits)(algorithm, baseKey, length);
|
|
1163
1280
|
break;
|
|
1281
|
+
case 'Argon2d':
|
|
1282
|
+
case 'Argon2i':
|
|
1283
|
+
case 'Argon2id':
|
|
1284
|
+
derivedBits = argon2DeriveBits(algorithm, baseKey, length);
|
|
1285
|
+
break;
|
|
1164
1286
|
default:
|
|
1165
1287
|
throw new Error(`'subtle.deriveKey()' for ${algorithm.name} is not implemented.`);
|
|
1166
1288
|
}
|
|
@@ -1174,6 +1296,7 @@ class Subtle {
|
|
|
1174
1296
|
}
|
|
1175
1297
|
async exportKey(format, key) {
|
|
1176
1298
|
if (!key.extractable) throw new Error('key is not extractable');
|
|
1299
|
+
if (format === 'raw-secret' || format === 'raw-public') format = 'raw';
|
|
1177
1300
|
switch (format) {
|
|
1178
1301
|
case 'spki':
|
|
1179
1302
|
return await exportKeySpki(key);
|
|
@@ -1279,6 +1402,8 @@ class Subtle {
|
|
|
1279
1402
|
case 'AES-GCM':
|
|
1280
1403
|
// Fall through
|
|
1281
1404
|
case 'AES-KW':
|
|
1405
|
+
// Fall through
|
|
1406
|
+
case 'AES-OCB':
|
|
1282
1407
|
result = await aesGenerateKey(algorithm, extractable, keyUsages);
|
|
1283
1408
|
break;
|
|
1284
1409
|
case 'ChaCha20-Poly1305':
|
|
@@ -1322,7 +1447,18 @@ class Subtle {
|
|
|
1322
1447
|
}
|
|
1323
1448
|
return result;
|
|
1324
1449
|
}
|
|
1450
|
+
async getPublicKey(key, keyUsages) {
|
|
1451
|
+
if (key.type === 'secret') {
|
|
1452
|
+
throw (0, _errors.lazyDOMException)('key must be a private key', 'NotSupportedError');
|
|
1453
|
+
}
|
|
1454
|
+
if (key.type !== 'private') {
|
|
1455
|
+
throw (0, _errors.lazyDOMException)('key must be a private key', 'InvalidAccessError');
|
|
1456
|
+
}
|
|
1457
|
+
const publicKeyObject = (0, _keys.createPublicKey)(key.keyObject);
|
|
1458
|
+
return publicKeyObject.toCryptoKey(key.algorithm, true, keyUsages);
|
|
1459
|
+
}
|
|
1325
1460
|
async importKey(format, data, algorithm, extractable, keyUsages) {
|
|
1461
|
+
if (format === 'raw-secret' || format === 'raw-public') format = 'raw';
|
|
1326
1462
|
const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'importKey');
|
|
1327
1463
|
let result;
|
|
1328
1464
|
switch (normalizedAlgorithm.name) {
|
|
@@ -1349,10 +1485,15 @@ class Subtle {
|
|
|
1349
1485
|
// Fall through
|
|
1350
1486
|
case 'AES-KW':
|
|
1351
1487
|
// Fall through
|
|
1488
|
+
case 'AES-OCB':
|
|
1489
|
+
// Fall through
|
|
1352
1490
|
case 'ChaCha20-Poly1305':
|
|
1353
1491
|
result = await aesImportKey(normalizedAlgorithm, format, data, extractable, keyUsages);
|
|
1354
1492
|
break;
|
|
1355
1493
|
case 'PBKDF2':
|
|
1494
|
+
case 'Argon2d':
|
|
1495
|
+
case 'Argon2i':
|
|
1496
|
+
case 'Argon2id':
|
|
1356
1497
|
result = await importGenericSecretKey(normalizedAlgorithm, format, data, extractable, keyUsages);
|
|
1357
1498
|
break;
|
|
1358
1499
|
case 'HKDF':
|
|
@@ -1473,6 +1614,7 @@ function getKeyLength(algorithm) {
|
|
|
1473
1614
|
case 'AES-CBC':
|
|
1474
1615
|
case 'AES-GCM':
|
|
1475
1616
|
case 'AES-KW':
|
|
1617
|
+
case 'AES-OCB':
|
|
1476
1618
|
case 'ChaCha20-Poly1305':
|
|
1477
1619
|
return algorithm.length || 256;
|
|
1478
1620
|
case 'HMAC':
|