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
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
import { ed_generateKeyPair } from '../ed';
|
|
4
4
|
import { rsa_generateKeyPairNode, rsa_generateKeyPairNodeSync } from '../rsa';
|
|
5
5
|
import { ec_generateKeyPairNode, ec_generateKeyPairNodeSync } from '../ec';
|
|
6
|
+
import { dsa_generateKeyPairNode, dsa_generateKeyPairNodeSync } from '../dsa';
|
|
7
|
+
import { dh_generateKeyPairNode, dh_generateKeyPairNodeSync } from '../dhKeyPair';
|
|
6
8
|
import { kEmptyObject, validateFunction } from '../utils';
|
|
7
9
|
import { parsePrivateKeyEncoding, parsePublicKeyEncoding } from './utils';
|
|
8
10
|
export const generateKeyPair = (type, options, callback) => {
|
|
@@ -89,6 +91,7 @@ function internalGenerateKeyPair(isAsync, type, options, callback) {
|
|
|
89
91
|
case 'rsa-pss':
|
|
90
92
|
case 'dsa':
|
|
91
93
|
case 'ec':
|
|
94
|
+
case 'dh':
|
|
92
95
|
break;
|
|
93
96
|
default:
|
|
94
97
|
{
|
|
@@ -108,6 +111,10 @@ function internalGenerateKeyPair(isAsync, type, options, callback) {
|
|
|
108
111
|
result = await rsa_generateKeyPairNode(type, options, encoding);
|
|
109
112
|
} else if (type === 'ec') {
|
|
110
113
|
result = await ec_generateKeyPairNode(options, encoding);
|
|
114
|
+
} else if (type === 'dsa') {
|
|
115
|
+
result = await dsa_generateKeyPairNode(options, encoding);
|
|
116
|
+
} else if (type === 'dh') {
|
|
117
|
+
result = await dh_generateKeyPairNode(options, encoding);
|
|
111
118
|
} else {
|
|
112
119
|
throw new Error(`Unsupported key type: ${type}`);
|
|
113
120
|
}
|
|
@@ -128,6 +135,10 @@ function internalGenerateKeyPair(isAsync, type, options, callback) {
|
|
|
128
135
|
result = rsa_generateKeyPairNodeSync(type, options, encoding);
|
|
129
136
|
} else if (type === 'ec') {
|
|
130
137
|
result = ec_generateKeyPairNodeSync(options, encoding);
|
|
138
|
+
} else if (type === 'dsa') {
|
|
139
|
+
result = dsa_generateKeyPairNodeSync(options, encoding);
|
|
140
|
+
} else if (type === 'dh') {
|
|
141
|
+
result = dh_generateKeyPairNodeSync(options, encoding);
|
|
131
142
|
} else {
|
|
132
143
|
throw new Error(`Unsupported key type: ${type}`);
|
|
133
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ed_generateKeyPair","rsa_generateKeyPairNode","rsa_generateKeyPairNodeSync","ec_generateKeyPairNode","ec_generateKeyPairNodeSync","kEmptyObject","validateFunction","parsePrivateKeyEncoding","parsePublicKeyEncoding","generateKeyPair","type","options","callback","internalGenerateKeyPair","generateKeyPairPromise","Promise","resolve","reject","err","publicKey","privateKey","undefined","generateKeyPairSync","parseKeyPairEncoding","keyType","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","format","Error","privateFormat","privateType","cipher","passphrase","isAsync","encoding","impl","result","error","then"],"sourceRoot":"../../../src","sources":["keys/generateKeyPair.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["ed_generateKeyPair","rsa_generateKeyPairNode","rsa_generateKeyPairNodeSync","ec_generateKeyPairNode","ec_generateKeyPairNodeSync","dsa_generateKeyPairNode","dsa_generateKeyPairNodeSync","dh_generateKeyPairNode","dh_generateKeyPairNodeSync","kEmptyObject","validateFunction","parsePrivateKeyEncoding","parsePublicKeyEncoding","generateKeyPair","type","options","callback","internalGenerateKeyPair","generateKeyPairPromise","Promise","resolve","reject","err","publicKey","privateKey","undefined","generateKeyPairSync","parseKeyPairEncoding","keyType","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","format","Error","privateFormat","privateType","cipher","passphrase","isAsync","encoding","impl","result","error","then"],"sourceRoot":"../../../src","sources":["keys/generateKeyPair.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
4
|
+
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
5
|
+
import { binaryLikeToArrayBuffer } from './utils';
|
|
6
|
+
let native;
|
|
7
|
+
function getNative() {
|
|
8
|
+
if (native == null) {
|
|
9
|
+
native = NitroModules.createHybridObject('Prime');
|
|
10
|
+
}
|
|
11
|
+
return native;
|
|
12
|
+
}
|
|
13
|
+
function toOptionalArrayBuffer(value) {
|
|
14
|
+
if (value == null) return undefined;
|
|
15
|
+
if (value instanceof ArrayBuffer) return value;
|
|
16
|
+
return binaryLikeToArrayBuffer(value);
|
|
17
|
+
}
|
|
18
|
+
function bufferToBigInt(buf) {
|
|
19
|
+
let result = 0n;
|
|
20
|
+
for (let i = 0; i < buf.length; i++) {
|
|
21
|
+
result = result << 8n | BigInt(buf[i]);
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
function bigIntToBuffer(value) {
|
|
26
|
+
if (value === 0n) return new Uint8Array([0]).buffer;
|
|
27
|
+
const hex = value.toString(16);
|
|
28
|
+
const paddedHex = hex.length % 2 ? '0' + hex : hex;
|
|
29
|
+
const bytes = new Uint8Array(paddedHex.length / 2);
|
|
30
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
31
|
+
bytes[i] = parseInt(paddedHex.substring(i * 2, i * 2 + 2), 16);
|
|
32
|
+
}
|
|
33
|
+
return bytes.buffer;
|
|
34
|
+
}
|
|
35
|
+
export function generatePrimeSync(size, options) {
|
|
36
|
+
const safe = options?.safe ?? false;
|
|
37
|
+
const add = toOptionalArrayBuffer(options?.add);
|
|
38
|
+
const rem = toOptionalArrayBuffer(options?.rem);
|
|
39
|
+
const result = Buffer.from(getNative().generatePrimeSync(size, safe, add, rem));
|
|
40
|
+
if (options?.bigint) {
|
|
41
|
+
return bufferToBigInt(result);
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
export function generatePrime(size, options, callback) {
|
|
46
|
+
if (typeof options === 'function') {
|
|
47
|
+
callback = options;
|
|
48
|
+
options = {};
|
|
49
|
+
}
|
|
50
|
+
const safe = options?.safe ?? false;
|
|
51
|
+
const add = toOptionalArrayBuffer(options?.add);
|
|
52
|
+
const rem = toOptionalArrayBuffer(options?.rem);
|
|
53
|
+
const wantBigint = options?.bigint ?? false;
|
|
54
|
+
getNative().generatePrime(size, safe, add, rem).then(ab => {
|
|
55
|
+
const result = Buffer.from(ab);
|
|
56
|
+
if (wantBigint) {
|
|
57
|
+
callback?.(null, bufferToBigInt(result));
|
|
58
|
+
} else {
|
|
59
|
+
callback?.(null, result);
|
|
60
|
+
}
|
|
61
|
+
}).catch(err => callback?.(err, Buffer.alloc(0)));
|
|
62
|
+
}
|
|
63
|
+
export function checkPrimeSync(candidate, options) {
|
|
64
|
+
const checks = options?.checks ?? 0;
|
|
65
|
+
const buf = typeof candidate === 'bigint' ? bigIntToBuffer(candidate) : binaryLikeToArrayBuffer(candidate);
|
|
66
|
+
return getNative().checkPrimeSync(buf, checks);
|
|
67
|
+
}
|
|
68
|
+
export function checkPrime(candidate, options, callback) {
|
|
69
|
+
if (typeof options === 'function') {
|
|
70
|
+
callback = options;
|
|
71
|
+
options = {};
|
|
72
|
+
}
|
|
73
|
+
const checks = options.checks ?? 0;
|
|
74
|
+
const buf = typeof candidate === 'bigint' ? bigIntToBuffer(candidate) : binaryLikeToArrayBuffer(candidate);
|
|
75
|
+
getNative().checkPrime(buf, checks).then(result => callback?.(null, result)).catch(err => callback?.(err, false));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=prime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NitroModules","Buffer","binaryLikeToArrayBuffer","native","getNative","createHybridObject","toOptionalArrayBuffer","value","undefined","ArrayBuffer","bufferToBigInt","buf","result","i","length","BigInt","bigIntToBuffer","Uint8Array","buffer","hex","toString","paddedHex","bytes","parseInt","substring","generatePrimeSync","size","options","safe","add","rem","from","bigint","generatePrime","callback","wantBigint","then","ab","catch","err","alloc","checkPrimeSync","candidate","checks","checkPrime"],"sourceRoot":"../../src","sources":["prime.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/argon2.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -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/module/subtle.js
CHANGED
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
4
|
import { Buffer as SBuffer } from 'safe-buffer';
|
|
5
|
-
import { KFormatType, KeyEncoding } from './utils';
|
|
5
|
+
import { KFormatType, KeyEncoding, KeyType } from './utils';
|
|
6
6
|
import { CryptoKey, KeyObject, PublicKeyObject, PrivateKeyObject, SecretKeyObject } from './keys';
|
|
7
7
|
import { bufferLikeToArrayBuffer } from './utils/conversion';
|
|
8
|
+
import { argon2Sync } from './argon2';
|
|
8
9
|
import { lazyDOMException } from './utils/errors';
|
|
9
10
|
import { normalizeHashName, HashContext } from './utils/hashnames';
|
|
10
11
|
import { validateMaxBufferLength } from './utils/validation';
|
|
11
12
|
import { asyncDigest } from './hash';
|
|
12
|
-
import { createSecretKey } from './keys';
|
|
13
|
+
import { createSecretKey, createPublicKey } from './keys';
|
|
13
14
|
import { NitroModules } from 'react-native-nitro-modules';
|
|
14
15
|
import { pbkdf2DeriveBits } from './pbkdf2';
|
|
15
16
|
import { ecImportKey, ecdsaSignVerify, ec_generateKeyPair, ecDeriveBits } from './ec';
|
|
@@ -20,12 +21,6 @@ import { createSign, createVerify } from './keys/signVerify';
|
|
|
20
21
|
import { ed_generateKeyPairWebCrypto, x_generateKeyPairWebCrypto, xDeriveBits, Ed } from './ed';
|
|
21
22
|
import { mldsa_generateKeyPairWebCrypto } from './mldsa';
|
|
22
23
|
import { hkdfDeriveBits } from './hkdf';
|
|
23
|
-
// import { pbkdf2DeriveBits } from './pbkdf2';
|
|
24
|
-
// import { aesCipher, aesGenerateKey, aesImportKey, getAlgorithmName } from './aes';
|
|
25
|
-
// import { rsaCipher, rsaExportKey, rsaImportKey, rsaKeyGenerate } from './rsa';
|
|
26
|
-
// import { normalizeAlgorithm, type Operation } from './algorithms';
|
|
27
|
-
// import { hmacImportKey } from './mac';
|
|
28
|
-
|
|
29
24
|
// Temporary enums that need to be defined
|
|
30
25
|
var KWebCryptoKeyFormat = /*#__PURE__*/function (KWebCryptoKeyFormat) {
|
|
31
26
|
KWebCryptoKeyFormat[KWebCryptoKeyFormat["kWebCryptoKeyFormatRaw"] = 0] = "kWebCryptoKeyFormatRaw";
|
|
@@ -50,21 +45,36 @@ function normalizeAlgorithm(algorithm, _operation) {
|
|
|
50
45
|
return algorithm;
|
|
51
46
|
}
|
|
52
47
|
function getAlgorithmName(name, length) {
|
|
53
|
-
|
|
48
|
+
switch (name) {
|
|
49
|
+
case 'AES-CBC':
|
|
50
|
+
return `A${length}CBC`;
|
|
51
|
+
case 'AES-CTR':
|
|
52
|
+
return `A${length}CTR`;
|
|
53
|
+
case 'AES-GCM':
|
|
54
|
+
return `A${length}GCM`;
|
|
55
|
+
case 'AES-KW':
|
|
56
|
+
return `A${length}KW`;
|
|
57
|
+
case 'AES-OCB':
|
|
58
|
+
return `A${length}OCB`;
|
|
59
|
+
case 'ChaCha20-Poly1305':
|
|
60
|
+
return 'C20P';
|
|
61
|
+
default:
|
|
62
|
+
return `${name}${length}`;
|
|
63
|
+
}
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
// Placeholder implementations for missing functions
|
|
57
67
|
function ecExportKey(key, format) {
|
|
58
68
|
const keyObject = key.keyObject;
|
|
59
|
-
if (format === KWebCryptoKeyFormat.
|
|
60
|
-
|
|
69
|
+
if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatRaw) {
|
|
70
|
+
return bufferLikeToArrayBuffer(keyObject.handle.exportKey());
|
|
71
|
+
} else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatSPKI) {
|
|
61
72
|
const exported = keyObject.export({
|
|
62
73
|
format: 'der',
|
|
63
74
|
type: 'spki'
|
|
64
75
|
});
|
|
65
76
|
return bufferLikeToArrayBuffer(exported);
|
|
66
77
|
} else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatPKCS8) {
|
|
67
|
-
// Export private key in PKCS8 format
|
|
68
78
|
const exported = keyObject.export({
|
|
69
79
|
format: 'der',
|
|
70
80
|
type: 'pkcs8'
|
|
@@ -133,6 +143,8 @@ async function aesCipher(mode, key, data, algorithm) {
|
|
|
133
143
|
return aesCbcCipher(mode, key, data, algorithm);
|
|
134
144
|
case 'AES-GCM':
|
|
135
145
|
return aesGcmCipher(mode, key, data, algorithm);
|
|
146
|
+
case 'AES-OCB':
|
|
147
|
+
return aesOcbCipher(mode, key, data, algorithm);
|
|
136
148
|
default:
|
|
137
149
|
throw lazyDOMException(`Unsupported AES algorithm: ${name}`, 'NotSupportedError');
|
|
138
150
|
}
|
|
@@ -199,61 +211,40 @@ async function aesCbcCipher(mode, key, data, algorithm) {
|
|
|
199
211
|
result.set(new Uint8Array(final), updated.byteLength);
|
|
200
212
|
return result.buffer;
|
|
201
213
|
}
|
|
202
|
-
async function
|
|
203
|
-
|
|
204
|
-
tagLength
|
|
205
|
-
} = algorithm;
|
|
206
|
-
|
|
207
|
-
// Validate tag length
|
|
208
|
-
const validTagLengths = [32, 64, 96, 104, 112, 120, 128];
|
|
209
|
-
if (!validTagLengths.includes(tagLength)) {
|
|
210
|
-
throw lazyDOMException(`${tagLength} is not a valid AES-GCM tag length`, 'OperationError');
|
|
214
|
+
async function aesAeadCipher(mode, key, data, config, additionalData, tagLength = 128) {
|
|
215
|
+
if (!config.validTagLengths.includes(tagLength)) {
|
|
216
|
+
throw lazyDOMException(`${tagLength} is not a valid ${config.algorithmName} tag length`, 'OperationError');
|
|
211
217
|
}
|
|
212
218
|
const tagByteLength = tagLength / 8;
|
|
213
|
-
|
|
214
|
-
// Get cipher type based on key length
|
|
215
219
|
const keyLength = key.algorithm.length;
|
|
216
|
-
const cipherType = `aes-${keyLength}
|
|
217
|
-
|
|
218
|
-
// Create cipher
|
|
220
|
+
const cipherType = `aes-${keyLength}-${config.cipherSuffix}`;
|
|
219
221
|
const factory = NitroModules.createHybridObject('CipherFactory');
|
|
220
222
|
const cipher = factory.createCipher({
|
|
221
223
|
isCipher: mode === CipherOrWrapMode.kWebCryptoCipherEncrypt,
|
|
222
224
|
cipherType,
|
|
223
225
|
cipherKey: bufferLikeToArrayBuffer(key.keyObject.export()),
|
|
224
|
-
iv:
|
|
226
|
+
iv: config.iv,
|
|
225
227
|
authTagLen: tagByteLength
|
|
226
228
|
});
|
|
227
229
|
let processData;
|
|
228
|
-
let authTag;
|
|
229
230
|
if (mode === CipherOrWrapMode.kWebCryptoCipherDecrypt) {
|
|
230
|
-
// For decryption, extract auth tag from end of data
|
|
231
231
|
const dataView = new Uint8Array(data);
|
|
232
232
|
if (dataView.byteLength < tagByteLength) {
|
|
233
233
|
throw lazyDOMException('The provided data is too small.', 'OperationError');
|
|
234
234
|
}
|
|
235
|
-
|
|
236
|
-
// Split data and tag
|
|
237
235
|
const ciphertextLength = dataView.byteLength - tagByteLength;
|
|
238
236
|
processData = dataView.slice(0, ciphertextLength).buffer;
|
|
239
|
-
authTag = dataView.slice(ciphertextLength).buffer;
|
|
240
|
-
|
|
241
|
-
// Set auth tag for verification
|
|
237
|
+
const authTag = dataView.slice(ciphertextLength).buffer;
|
|
242
238
|
cipher.setAuthTag(authTag);
|
|
243
239
|
} else {
|
|
244
240
|
processData = data;
|
|
245
241
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
if (algorithm.additionalData) {
|
|
249
|
-
cipher.setAAD(bufferLikeToArrayBuffer(algorithm.additionalData));
|
|
242
|
+
if (additionalData) {
|
|
243
|
+
cipher.setAAD(bufferLikeToArrayBuffer(additionalData));
|
|
250
244
|
}
|
|
251
|
-
|
|
252
|
-
// Process data
|
|
253
245
|
const updated = cipher.update(processData);
|
|
254
246
|
const final = cipher.final();
|
|
255
247
|
if (mode === CipherOrWrapMode.kWebCryptoCipherEncrypt) {
|
|
256
|
-
// For encryption, append auth tag to result
|
|
257
248
|
const tag = cipher.getAuthTag();
|
|
258
249
|
const result = new Uint8Array(updated.byteLength + final.byteLength + tag.byteLength);
|
|
259
250
|
result.set(new Uint8Array(updated), 0);
|
|
@@ -261,13 +252,32 @@ async function aesGcmCipher(mode, key, data, algorithm) {
|
|
|
261
252
|
result.set(new Uint8Array(tag), updated.byteLength + final.byteLength);
|
|
262
253
|
return result.buffer;
|
|
263
254
|
} else {
|
|
264
|
-
// For decryption, just concatenate plaintext
|
|
265
255
|
const result = new Uint8Array(updated.byteLength + final.byteLength);
|
|
266
256
|
result.set(new Uint8Array(updated), 0);
|
|
267
257
|
result.set(new Uint8Array(final), updated.byteLength);
|
|
268
258
|
return result.buffer;
|
|
269
259
|
}
|
|
270
260
|
}
|
|
261
|
+
async function aesGcmCipher(mode, key, data, algorithm) {
|
|
262
|
+
return aesAeadCipher(mode, key, data, {
|
|
263
|
+
algorithmName: 'AES-GCM',
|
|
264
|
+
validTagLengths: [32, 64, 96, 104, 112, 120, 128],
|
|
265
|
+
cipherSuffix: 'gcm',
|
|
266
|
+
iv: bufferLikeToArrayBuffer(algorithm.iv)
|
|
267
|
+
}, algorithm.additionalData, algorithm.tagLength);
|
|
268
|
+
}
|
|
269
|
+
async function aesOcbCipher(mode, key, data, algorithm) {
|
|
270
|
+
const ivBuffer = bufferLikeToArrayBuffer(algorithm.iv);
|
|
271
|
+
if (ivBuffer.byteLength < 1 || ivBuffer.byteLength > 15) {
|
|
272
|
+
throw lazyDOMException('AES-OCB algorithm.iv must be between 1 and 15 bytes', 'OperationError');
|
|
273
|
+
}
|
|
274
|
+
return aesAeadCipher(mode, key, data, {
|
|
275
|
+
algorithmName: 'AES-OCB',
|
|
276
|
+
validTagLengths: [64, 96, 128],
|
|
277
|
+
cipherSuffix: 'ocb',
|
|
278
|
+
iv: ivBuffer
|
|
279
|
+
}, algorithm.additionalData, algorithm.tagLength);
|
|
280
|
+
}
|
|
271
281
|
async function aesKwCipher(mode, key, data) {
|
|
272
282
|
const isWrap = mode === CipherOrWrapMode.kWebCryptoCipherEncrypt;
|
|
273
283
|
|
|
@@ -691,6 +701,18 @@ function edImportKey(format, data, algorithm, extractable, keyUsages) {
|
|
|
691
701
|
// Raw public keys are just the key bytes
|
|
692
702
|
handle.init(1, keyData); // 1 = public key type
|
|
693
703
|
keyObject = new PublicKeyObject(handle);
|
|
704
|
+
} else if (format === 'jwk') {
|
|
705
|
+
const jwkData = data;
|
|
706
|
+
const handle = NitroModules.createHybridObject('KeyObjectHandle');
|
|
707
|
+
const keyType = handle.initJwk(jwkData);
|
|
708
|
+
if (keyType === undefined) {
|
|
709
|
+
throw lazyDOMException('Invalid JWK data', 'DataError');
|
|
710
|
+
}
|
|
711
|
+
if (keyType === KeyType.PRIVATE) {
|
|
712
|
+
keyObject = new PrivateKeyObject(handle);
|
|
713
|
+
} else {
|
|
714
|
+
keyObject = new PublicKeyObject(handle);
|
|
715
|
+
}
|
|
694
716
|
} else {
|
|
695
717
|
throw lazyDOMException(`Unsupported format for ${name} import: ${format}`, 'NotSupportedError');
|
|
696
718
|
}
|
|
@@ -839,6 +861,8 @@ const exportKeyRaw = key => {
|
|
|
839
861
|
// Fall through
|
|
840
862
|
case 'AES-KW':
|
|
841
863
|
// Fall through
|
|
864
|
+
case 'AES-OCB':
|
|
865
|
+
// Fall through
|
|
842
866
|
case 'ChaCha20-Poly1305':
|
|
843
867
|
// Fall through
|
|
844
868
|
case 'HMAC':
|
|
@@ -873,6 +897,14 @@ const exportKeyJWK = key => {
|
|
|
873
897
|
case 'ECDH':
|
|
874
898
|
jwk.crv ||= key.algorithm.namedCurve;
|
|
875
899
|
return jwk;
|
|
900
|
+
case 'Ed25519':
|
|
901
|
+
// Fall through
|
|
902
|
+
case 'Ed448':
|
|
903
|
+
// Fall through
|
|
904
|
+
case 'X25519':
|
|
905
|
+
// Fall through
|
|
906
|
+
case 'X448':
|
|
907
|
+
return jwk;
|
|
876
908
|
case 'AES-CTR':
|
|
877
909
|
// Fall through
|
|
878
910
|
case 'AES-CBC':
|
|
@@ -881,6 +913,8 @@ const exportKeyJWK = key => {
|
|
|
881
913
|
// Fall through
|
|
882
914
|
case 'AES-KW':
|
|
883
915
|
// Fall through
|
|
916
|
+
case 'AES-OCB':
|
|
917
|
+
// Fall through
|
|
884
918
|
case 'ChaCha20-Poly1305':
|
|
885
919
|
if (key.algorithm.length === undefined) {
|
|
886
920
|
throw lazyDOMException(`Algorithm ${key.algorithm.name} missing required length property`, 'InvalidAccessError');
|
|
@@ -945,6 +979,37 @@ const checkCryptoKeyPairUsages = pair => {
|
|
|
945
979
|
}
|
|
946
980
|
throw lazyDOMException('Usages cannot be empty when creating a key.', 'SyntaxError');
|
|
947
981
|
};
|
|
982
|
+
function argon2DeriveBits(algorithm, baseKey, length) {
|
|
983
|
+
if (length === 0 || length % 8 !== 0) {
|
|
984
|
+
throw lazyDOMException('Invalid Argon2 derived key length', 'OperationError');
|
|
985
|
+
}
|
|
986
|
+
if (length < 32) {
|
|
987
|
+
throw lazyDOMException('Argon2 derived key length must be at least 32 bits', 'OperationError');
|
|
988
|
+
}
|
|
989
|
+
const {
|
|
990
|
+
nonce,
|
|
991
|
+
parallelism,
|
|
992
|
+
memory,
|
|
993
|
+
passes,
|
|
994
|
+
secretValue,
|
|
995
|
+
associatedData
|
|
996
|
+
} = algorithm;
|
|
997
|
+
const tagLength = length / 8;
|
|
998
|
+
const message = baseKey.keyObject.export();
|
|
999
|
+
const algName = algorithm.name.toLowerCase();
|
|
1000
|
+
const result = argon2Sync(algName, {
|
|
1001
|
+
message,
|
|
1002
|
+
nonce: nonce ?? new Uint8Array(0),
|
|
1003
|
+
parallelism: parallelism ?? 1,
|
|
1004
|
+
tagLength,
|
|
1005
|
+
memory: memory ?? 65536,
|
|
1006
|
+
passes: passes ?? 3,
|
|
1007
|
+
secret: secretValue,
|
|
1008
|
+
associatedData,
|
|
1009
|
+
version: algorithm.version
|
|
1010
|
+
});
|
|
1011
|
+
return bufferLikeToArrayBuffer(result);
|
|
1012
|
+
}
|
|
948
1013
|
|
|
949
1014
|
// Type guard to check if result is CryptoKeyPair
|
|
950
1015
|
export function isCryptoKeyPair(result) {
|
|
@@ -1097,6 +1162,8 @@ const cipherOrWrap = async (mode, algorithm, key, data, op) => {
|
|
|
1097
1162
|
case 'AES-CBC':
|
|
1098
1163
|
// Fall through
|
|
1099
1164
|
case 'AES-GCM':
|
|
1165
|
+
// Fall through
|
|
1166
|
+
case 'AES-OCB':
|
|
1100
1167
|
return aesCipher(mode, key, data, algorithm);
|
|
1101
1168
|
case 'AES-KW':
|
|
1102
1169
|
return aesKwCipher(mode, key, data);
|
|
@@ -1104,7 +1171,49 @@ const cipherOrWrap = async (mode, algorithm, key, data, op) => {
|
|
|
1104
1171
|
return chaCha20Poly1305Cipher(mode, key, data, algorithm);
|
|
1105
1172
|
}
|
|
1106
1173
|
};
|
|
1174
|
+
const SUPPORTED_ALGORITHMS = {
|
|
1175
|
+
encrypt: new Set(['RSA-OAEP', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-OCB', 'ChaCha20-Poly1305']),
|
|
1176
|
+
decrypt: new Set(['RSA-OAEP', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-OCB', 'ChaCha20-Poly1305']),
|
|
1177
|
+
sign: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'ECDSA', 'HMAC', 'Ed25519', 'Ed448', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
|
|
1178
|
+
verify: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'ECDSA', 'HMAC', 'Ed25519', 'Ed448', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
|
|
1179
|
+
digest: new Set(['SHA-1', 'SHA-256', 'SHA-384', 'SHA-512']),
|
|
1180
|
+
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']),
|
|
1181
|
+
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']),
|
|
1182
|
+
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']),
|
|
1183
|
+
deriveBits: new Set(['PBKDF2', 'HKDF', 'ECDH', 'X25519', 'X448', 'Argon2d', 'Argon2i', 'Argon2id']),
|
|
1184
|
+
wrapKey: new Set(['AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'RSA-OAEP']),
|
|
1185
|
+
unwrapKey: new Set(['AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'RSA-OAEP'])
|
|
1186
|
+
};
|
|
1187
|
+
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']);
|
|
1107
1188
|
export class Subtle {
|
|
1189
|
+
static supports(operation, algorithm, _lengthOrAdditionalAlgorithm) {
|
|
1190
|
+
let normalizedAlgorithm;
|
|
1191
|
+
try {
|
|
1192
|
+
normalizedAlgorithm = normalizeAlgorithm(algorithm, operation === 'getPublicKey' ? 'exportKey' : operation);
|
|
1193
|
+
} catch {
|
|
1194
|
+
return false;
|
|
1195
|
+
}
|
|
1196
|
+
const name = normalizedAlgorithm.name;
|
|
1197
|
+
if (operation === 'getPublicKey') {
|
|
1198
|
+
return ASYMMETRIC_ALGORITHMS.has(name);
|
|
1199
|
+
}
|
|
1200
|
+
if (operation === 'deriveKey') {
|
|
1201
|
+
// deriveKey decomposes to deriveBits + importKey of additional algorithm
|
|
1202
|
+
if (!SUPPORTED_ALGORITHMS.deriveBits?.has(name)) return false;
|
|
1203
|
+
if (_lengthOrAdditionalAlgorithm != null) {
|
|
1204
|
+
try {
|
|
1205
|
+
const additionalAlg = normalizeAlgorithm(_lengthOrAdditionalAlgorithm, 'importKey');
|
|
1206
|
+
return SUPPORTED_ALGORITHMS.importKey?.has(additionalAlg.name) ?? false;
|
|
1207
|
+
} catch {
|
|
1208
|
+
return false;
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
return true;
|
|
1212
|
+
}
|
|
1213
|
+
const supported = SUPPORTED_ALGORITHMS[operation];
|
|
1214
|
+
if (!supported) return false;
|
|
1215
|
+
return supported.has(name);
|
|
1216
|
+
}
|
|
1108
1217
|
async decrypt(algorithm, key, data) {
|
|
1109
1218
|
const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'decrypt');
|
|
1110
1219
|
return cipherOrWrap(CipherOrWrapMode.kWebCryptoCipherDecrypt, normalizedAlgorithm, key, bufferLikeToArrayBuffer(data), 'decrypt');
|
|
@@ -1130,6 +1239,10 @@ export class Subtle {
|
|
|
1130
1239
|
return ecDeriveBits(algorithm, baseKey, length);
|
|
1131
1240
|
case 'HKDF':
|
|
1132
1241
|
return hkdfDeriveBits(algorithm, baseKey, length);
|
|
1242
|
+
case 'Argon2d':
|
|
1243
|
+
case 'Argon2i':
|
|
1244
|
+
case 'Argon2id':
|
|
1245
|
+
return argon2DeriveBits(algorithm, baseKey, length);
|
|
1133
1246
|
}
|
|
1134
1247
|
throw new Error(`'subtle.deriveBits()' for ${algorithm.name} is not implemented.`);
|
|
1135
1248
|
}
|
|
@@ -1154,9 +1267,17 @@ export class Subtle {
|
|
|
1154
1267
|
case 'X448':
|
|
1155
1268
|
derivedBits = await xDeriveBits(algorithm, baseKey, length);
|
|
1156
1269
|
break;
|
|
1270
|
+
case 'ECDH':
|
|
1271
|
+
derivedBits = await ecDeriveBits(algorithm, baseKey, length);
|
|
1272
|
+
break;
|
|
1157
1273
|
case 'HKDF':
|
|
1158
1274
|
derivedBits = hkdfDeriveBits(algorithm, baseKey, length);
|
|
1159
1275
|
break;
|
|
1276
|
+
case 'Argon2d':
|
|
1277
|
+
case 'Argon2i':
|
|
1278
|
+
case 'Argon2id':
|
|
1279
|
+
derivedBits = argon2DeriveBits(algorithm, baseKey, length);
|
|
1280
|
+
break;
|
|
1160
1281
|
default:
|
|
1161
1282
|
throw new Error(`'subtle.deriveKey()' for ${algorithm.name} is not implemented.`);
|
|
1162
1283
|
}
|
|
@@ -1170,6 +1291,7 @@ export class Subtle {
|
|
|
1170
1291
|
}
|
|
1171
1292
|
async exportKey(format, key) {
|
|
1172
1293
|
if (!key.extractable) throw new Error('key is not extractable');
|
|
1294
|
+
if (format === 'raw-secret' || format === 'raw-public') format = 'raw';
|
|
1173
1295
|
switch (format) {
|
|
1174
1296
|
case 'spki':
|
|
1175
1297
|
return await exportKeySpki(key);
|
|
@@ -1275,6 +1397,8 @@ export class Subtle {
|
|
|
1275
1397
|
case 'AES-GCM':
|
|
1276
1398
|
// Fall through
|
|
1277
1399
|
case 'AES-KW':
|
|
1400
|
+
// Fall through
|
|
1401
|
+
case 'AES-OCB':
|
|
1278
1402
|
result = await aesGenerateKey(algorithm, extractable, keyUsages);
|
|
1279
1403
|
break;
|
|
1280
1404
|
case 'ChaCha20-Poly1305':
|
|
@@ -1318,7 +1442,18 @@ export class Subtle {
|
|
|
1318
1442
|
}
|
|
1319
1443
|
return result;
|
|
1320
1444
|
}
|
|
1445
|
+
async getPublicKey(key, keyUsages) {
|
|
1446
|
+
if (key.type === 'secret') {
|
|
1447
|
+
throw lazyDOMException('key must be a private key', 'NotSupportedError');
|
|
1448
|
+
}
|
|
1449
|
+
if (key.type !== 'private') {
|
|
1450
|
+
throw lazyDOMException('key must be a private key', 'InvalidAccessError');
|
|
1451
|
+
}
|
|
1452
|
+
const publicKeyObject = createPublicKey(key.keyObject);
|
|
1453
|
+
return publicKeyObject.toCryptoKey(key.algorithm, true, keyUsages);
|
|
1454
|
+
}
|
|
1321
1455
|
async importKey(format, data, algorithm, extractable, keyUsages) {
|
|
1456
|
+
if (format === 'raw-secret' || format === 'raw-public') format = 'raw';
|
|
1322
1457
|
const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'importKey');
|
|
1323
1458
|
let result;
|
|
1324
1459
|
switch (normalizedAlgorithm.name) {
|
|
@@ -1345,10 +1480,15 @@ export class Subtle {
|
|
|
1345
1480
|
// Fall through
|
|
1346
1481
|
case 'AES-KW':
|
|
1347
1482
|
// Fall through
|
|
1483
|
+
case 'AES-OCB':
|
|
1484
|
+
// Fall through
|
|
1348
1485
|
case 'ChaCha20-Poly1305':
|
|
1349
1486
|
result = await aesImportKey(normalizedAlgorithm, format, data, extractable, keyUsages);
|
|
1350
1487
|
break;
|
|
1351
1488
|
case 'PBKDF2':
|
|
1489
|
+
case 'Argon2d':
|
|
1490
|
+
case 'Argon2i':
|
|
1491
|
+
case 'Argon2id':
|
|
1352
1492
|
result = await importGenericSecretKey(normalizedAlgorithm, format, data, extractable, keyUsages);
|
|
1353
1493
|
break;
|
|
1354
1494
|
case 'HKDF':
|
|
@@ -1468,6 +1608,7 @@ function getKeyLength(algorithm) {
|
|
|
1468
1608
|
case 'AES-CBC':
|
|
1469
1609
|
case 'AES-GCM':
|
|
1470
1610
|
case 'AES-KW':
|
|
1611
|
+
case 'AES-OCB':
|
|
1471
1612
|
case 'ChaCha20-Poly1305':
|
|
1472
1613
|
return algorithm.length || 256;
|
|
1473
1614
|
case 'HMAC':
|