@suveren/gateway 0.7.4 → 0.8.0
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/content/integrations/mollie.json +103 -28
- package/dist/control-plane/index.mjs +248 -58
- package/dist/mcp-server/http.mjs +577 -124
- package/dist/ui/assets/index-BFnSVa9N.js +110 -0
- package/dist/ui/assets/{index-CkWaRck1.css → index-BYVb_0oG.css} +1 -1
- package/dist/ui/index.html +2 -2
- package/node_modules/@hap/core/dist/index.d.mts +285 -13
- package/node_modules/@hap/core/dist/index.d.ts +285 -13
- package/node_modules/@hap/core/dist/index.js +281 -13
- package/node_modules/@hap/core/dist/index.mjs +266 -12
- package/node_modules/@hap/core/package.json +4 -2
- package/node_modules/@hap/core/src/did-key.ts +126 -0
- package/node_modules/@hap/core/src/frame.ts +115 -14
- package/node_modules/@hap/core/src/gatekeeper.ts +26 -0
- package/node_modules/@hap/core/src/identity.ts +21 -5
- package/node_modules/@hap/core/src/index.ts +3 -0
- package/node_modules/@hap/core/src/mandate.ts +207 -0
- package/node_modules/@hap/core/src/receipt.ts +74 -0
- package/node_modules/@hap/core/src/types.ts +87 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/accept.js +54 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/charset.js +10 -34
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/encoding.js +9 -30
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/language.js +15 -36
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/mediaType.js +16 -134
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/LICENSE +22 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/README.md +71 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/package.json +52 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/package.json +16 -10
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/buffer.buffer.d.ts +10 -5
- package/node_modules/@types/node/crypto.d.ts +2 -4
- package/node_modules/@types/node/dgram.d.ts +119 -4
- package/node_modules/@types/node/ffi.d.ts +1 -1
- package/node_modules/@types/node/fs/promises.d.ts +61 -65
- package/node_modules/@types/node/fs.d.ts +86 -76
- package/node_modules/@types/node/http.d.ts +17 -1
- package/node_modules/@types/node/http2.d.ts +12 -4
- package/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@types/node/inspector.d.ts +2 -1
- package/node_modules/@types/node/net.d.ts +108 -16
- package/node_modules/@types/node/package.json +2 -2
- package/node_modules/@types/node/process.d.ts +52 -0
- package/node_modules/@types/node/quic.d.ts +246 -38
- package/node_modules/@types/node/sqlite.d.ts +6 -2
- package/node_modules/@types/node/stream/iter.d.ts +4 -4
- package/node_modules/@types/node/test.d.ts +36 -0
- package/node_modules/@types/node/tls.d.ts +24 -0
- package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
- package/node_modules/@types/node/ts5.6/index.d.ts +1 -0
- package/node_modules/@types/node/ts5.7/index.d.ts +1 -0
- package/node_modules/@types/node/tty.d.ts +4 -3
- package/node_modules/@types/node/vfs.d.ts +210 -0
- package/node_modules/@types/node/vm.d.ts +1 -1
- package/node_modules/express-rate-limit/dist/index.cjs +6 -3
- package/node_modules/express-rate-limit/dist/index.d.cts +11 -0
- package/node_modules/express-rate-limit/dist/index.d.mts +11 -0
- package/node_modules/express-rate-limit/dist/index.d.ts +11 -0
- package/node_modules/express-rate-limit/dist/index.mjs +6 -3
- package/node_modules/express-rate-limit/{license.md → license} +7 -6
- package/node_modules/express-rate-limit/package.json +5 -5
- package/node_modules/express-rate-limit/readme.md +1 -0
- package/node_modules/fast-uri/index.js +215 -47
- package/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/fast-uri/lib/utils.js +396 -92
- package/node_modules/fast-uri/package.json +1 -1
- package/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
- package/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
- package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/fast-uri/test/security-normalization.test.js +101 -0
- package/node_modules/fast-uri/test/security.test.js +75 -3
- package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/hono/dist/cjs/client/client.js +25 -11
- package/node_modules/hono/dist/cjs/client/utils.js +4 -1
- package/node_modules/hono/dist/cjs/context.js +4 -0
- package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
- package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
- package/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
- package/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
- package/node_modules/hono/dist/cjs/middleware/cache/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/cors/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/etag/digest.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/etag/index.js +3 -3
- package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
- package/node_modules/hono/dist/cjs/request.js +8 -4
- package/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
- package/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +10 -3
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +47 -83
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +2 -1
- package/node_modules/hono/dist/cjs/router/trie-router/node.js +46 -69
- package/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
- package/node_modules/hono/dist/cjs/router/utils.js +27 -0
- package/node_modules/hono/dist/cjs/utils/body.js +15 -3
- package/node_modules/hono/dist/cjs/utils/cookie.js +1 -1
- package/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
- package/node_modules/hono/dist/cjs/utils/stream.js +7 -1
- package/node_modules/hono/dist/cjs/utils/url.js +9 -1
- package/node_modules/hono/dist/client/client.js +25 -11
- package/node_modules/hono/dist/client/utils.js +4 -1
- package/node_modules/hono/dist/context.js +4 -0
- package/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
- package/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
- package/node_modules/hono/dist/helper/ssg/utils.js +30 -10
- package/node_modules/hono/dist/jsx/dom/render.js +2 -0
- package/node_modules/hono/dist/middleware/cache/index.js +1 -1
- package/node_modules/hono/dist/middleware/cors/index.js +1 -1
- package/node_modules/hono/dist/middleware/csrf/index.js +1 -1
- package/node_modules/hono/dist/middleware/etag/digest.js +1 -1
- package/node_modules/hono/dist/middleware/etag/index.js +3 -3
- package/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
- package/node_modules/hono/dist/request.js +8 -4
- package/node_modules/hono/dist/router/linear-router/router.js +7 -2
- package/node_modules/hono/dist/router/pattern-router/router.js +3 -9
- package/node_modules/hono/dist/router/reg-exp-router/node.js +6 -2
- package/node_modules/hono/dist/router/reg-exp-router/router.js +53 -84
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +2 -1
- package/node_modules/hono/dist/router/trie-router/node.js +46 -69
- package/node_modules/hono/dist/router/trie-router/router.js +3 -11
- package/node_modules/hono/dist/router/utils.js +5 -0
- package/node_modules/hono/dist/types/context.d.ts +4 -0
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +3 -0
- package/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
- package/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
- package/node_modules/hono/dist/types/router/utils.d.ts +1 -0
- package/node_modules/hono/dist/types/utils/url.d.ts +4 -0
- package/node_modules/hono/dist/utils/body.js +15 -3
- package/node_modules/hono/dist/utils/cookie.js +1 -1
- package/node_modules/hono/dist/utils/ipaddr.js +5 -3
- package/node_modules/hono/dist/utils/stream.js +7 -1
- package/node_modules/hono/dist/utils/url.js +9 -1
- package/node_modules/hono/package.json +1 -1
- package/node_modules/ip-address/README.md +92 -82
- package/node_modules/ip-address/dist/common.d.ts +20 -0
- package/node_modules/ip-address/dist/common.js +36 -0
- package/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/ip-address/dist/ipv4.d.ts +50 -0
- package/node_modules/ip-address/dist/ipv4.js +75 -0
- package/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/ip-address/dist/ipv6.d.ts +79 -10
- package/node_modules/ip-address/dist/ipv6.js +120 -30
- package/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/ip-address/dist/v4/constants.js +40 -1
- package/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/ip-address/dist/v6/constants.js +47 -1
- package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/ip-address/package.json +1 -1
- package/node_modules/is-plain-object/README.md +39 -95
- package/node_modules/is-plain-object/dist/is-plain-object.js +0 -2
- package/node_modules/is-plain-object/is-plain-object.d.ts +6 -1
- package/node_modules/is-plain-object/package.json +8 -34
- package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +10 -20
- package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +16 -38
- package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +19 -38
- package/node_modules/jose/dist/types/jwk/embedded.d.ts +3 -8
- package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +5 -5
- package/node_modules/jose/dist/types/jwks/local.d.ts +6 -10
- package/node_modules/jose/dist/types/jwks/remote.d.ts +17 -28
- package/node_modules/jose/dist/types/jws/compact/sign.d.ts +5 -10
- package/node_modules/jose/dist/types/jws/compact/verify.d.ts +9 -18
- package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +7 -16
- package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +9 -18
- package/node_modules/jose/dist/types/jws/general/sign.d.ts +11 -21
- package/node_modules/jose/dist/types/jws/general/verify.d.ts +12 -21
- package/node_modules/jose/dist/types/jwt/decrypt.d.ts +10 -20
- package/node_modules/jose/dist/types/jwt/encrypt.d.ts +17 -29
- package/node_modules/jose/dist/types/jwt/sign.d.ts +12 -19
- package/node_modules/jose/dist/types/jwt/unsecured.d.ts +17 -28
- package/node_modules/jose/dist/types/jwt/verify.d.ts +9 -19
- package/node_modules/jose/dist/types/key/export.d.ts +4 -4
- package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +6 -8
- package/node_modules/jose/dist/types/key/generate_secret.d.ts +4 -11
- package/node_modules/jose/dist/types/key/import.d.ts +10 -17
- package/node_modules/jose/dist/types/types.d.ts +48 -86
- package/node_modules/jose/dist/types/util/base64url.d.ts +2 -2
- package/node_modules/jose/dist/types/util/decode_jwt.d.ts +3 -10
- package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +4 -4
- package/node_modules/jose/dist/types/util/errors.d.ts +26 -53
- package/node_modules/jose/dist/webapi/index.js +70 -32
- package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +7 -8
- package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +42 -26
- package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -10
- package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +53 -71
- package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
- package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +121 -158
- package/node_modules/jose/dist/webapi/jwk/embedded.js +30 -18
- package/node_modules/jose/dist/webapi/jwk/thumbprint.js +54 -64
- package/node_modules/jose/dist/webapi/jwks/local.js +49 -74
- package/node_modules/jose/dist/webapi/jwks/remote.js +91 -160
- package/node_modules/jose/dist/webapi/jws/compact/sign.js +21 -20
- package/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
- package/node_modules/jose/dist/webapi/jws/flattened/sign.js +29 -30
- package/node_modules/jose/dist/webapi/jws/flattened/verify.js +21 -23
- package/node_modules/jose/dist/webapi/jws/general/sign.js +61 -70
- package/node_modules/jose/dist/webapi/jws/general/verify.js +47 -41
- package/node_modules/jose/dist/webapi/jwt/decrypt.js +13 -22
- package/node_modules/jose/dist/webapi/jwt/encrypt.js +58 -100
- package/node_modules/jose/dist/webapi/jwt/sign.js +18 -50
- package/node_modules/jose/dist/webapi/jwt/unsecured.js +34 -63
- package/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
- package/node_modules/jose/dist/webapi/key/export.js +32 -37
- package/node_modules/jose/dist/webapi/key/generate_key_pair.js +40 -44
- package/node_modules/jose/dist/webapi/key/generate_secret.js +35 -39
- package/node_modules/jose/dist/webapi/key/import.js +52 -52
- package/node_modules/jose/dist/webapi/lib/asn1.js +130 -164
- package/node_modules/jose/dist/webapi/lib/base64.js +18 -20
- package/node_modules/jose/dist/webapi/lib/buffer_utils.js +34 -38
- package/node_modules/jose/dist/webapi/lib/content_encryption.js +79 -123
- package/node_modules/jose/dist/webapi/lib/crypto_key.js +24 -25
- package/node_modules/jose/dist/webapi/lib/deflate.js +46 -40
- package/node_modules/jose/dist/webapi/lib/helpers.js +40 -37
- package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +10 -24
- package/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -15
- package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +106 -93
- package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +210 -176
- package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +105 -107
- package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +19 -0
- package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +9 -16
- package/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
- package/node_modules/jose/dist/webapi/lib/jws_sign.js +58 -72
- package/node_modules/jose/dist/webapi/lib/jws_verify.js +90 -103
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +134 -185
- package/node_modules/jose/dist/webapi/lib/key.js +84 -121
- package/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
- package/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
- package/node_modules/jose/dist/webapi/lib/key_management.js +200 -225
- package/node_modules/jose/dist/webapi/lib/key_options.js +8 -0
- package/node_modules/jose/dist/webapi/lib/options.js +57 -44
- package/node_modules/jose/dist/webapi/lib/signing.js +18 -22
- package/node_modules/jose/dist/webapi/lib/type_checks.js +28 -33
- package/node_modules/jose/dist/webapi/util/base64url.js +26 -35
- package/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
- package/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
- package/node_modules/jose/dist/webapi/util/errors.js +94 -84
- package/node_modules/jose/package.json +17 -81
- package/package.json +2 -2
- package/profiles/calendar/0.5.profile.json +190 -0
- package/profiles/charge/0.5.profile.json +210 -0
- package/profiles/customers/0.7.profile.json +157 -0
- package/profiles/deploy/0.9.profile.json +176 -0
- package/profiles/email/0.6.profile.json +208 -0
- package/profiles/index.json +9 -1
- package/profiles/publish/0.5.profile.json +186 -0
- package/profiles/purchase/0.5.profile.json +231 -0
- package/profiles/records/0.5.profile.json +117 -0
- package/dist/ui/assets/index-0Q2eNytX.js +0 -110
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/HISTORY.md +0 -114
|
@@ -1,48 +1,44 @@
|
|
|
1
|
-
import { JOSENotSupported } from
|
|
2
|
-
import {
|
|
1
|
+
import { JOSENotSupported } from "../util/errors.js";
|
|
2
|
+
import { validateExtractableOption } from "../lib/key_options.js";
|
|
3
|
+
import { keyAlgorithm, unsupportedAlg, algArgument } from "../lib/key_algorithm.js";
|
|
3
4
|
function getModulusLengthOption(options) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return modulusLength;
|
|
5
|
+
const modulusLength = options?.modulusLength ?? 2048;
|
|
6
|
+
if (typeof modulusLength != "number" || !Number.isInteger(modulusLength) || modulusLength < 2048)
|
|
7
|
+
throw new JOSENotSupported("Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used");
|
|
8
|
+
return modulusLength;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
default:
|
|
28
|
-
throw new JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, and X25519');
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
if (entry.crv !== undefined && options?.crv !== undefined && options.crv !== entry.crv) {
|
|
33
|
-
throw new JOSENotSupported(`Invalid or unsupported crv option provided, the only supported value for ${alg} is ${entry.crv}`);
|
|
34
|
-
}
|
|
35
|
-
algorithm =
|
|
36
|
-
entry.kty[0] === 'RSA'
|
|
37
|
-
? {
|
|
38
|
-
...entry.subtle,
|
|
39
|
-
publicExponent: Uint8Array.of(0x01, 0x00, 0x01),
|
|
40
|
-
modulusLength: getModulusLengthOption(options),
|
|
41
|
-
}
|
|
42
|
-
: entry.subtle;
|
|
10
|
+
async function generateKeyPair(alg, options) {
|
|
11
|
+
const extractable = validateExtractableOption(options?.extractable), entry = keyAlgorithm(alg, algArgument);
|
|
12
|
+
entry.secret && unsupportedAlg(algArgument);
|
|
13
|
+
let algorithm;
|
|
14
|
+
if (entry.resolve) {
|
|
15
|
+
const crv = options?.crv ?? "P-256";
|
|
16
|
+
switch (crv) {
|
|
17
|
+
case "P-256":
|
|
18
|
+
case "P-384":
|
|
19
|
+
case "P-521":
|
|
20
|
+
algorithm = { name: "ECDH", namedCurve: crv };
|
|
21
|
+
break;
|
|
22
|
+
case "X25519":
|
|
23
|
+
algorithm = { name: "X25519" };
|
|
24
|
+
break;
|
|
25
|
+
default:
|
|
26
|
+
throw new JOSENotSupported("Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, and X25519");
|
|
43
27
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
]
|
|
28
|
+
} else {
|
|
29
|
+
if (entry.crv !== void 0 && options?.crv !== void 0 && options.crv !== entry.crv)
|
|
30
|
+
throw new JOSENotSupported(`Invalid or unsupported crv option provided, the only supported value for ${alg} is ${entry.crv}`);
|
|
31
|
+
algorithm = entry.kty[0] === "RSA" ? {
|
|
32
|
+
...entry.subtle,
|
|
33
|
+
publicExponent: Uint8Array.of(1, 0, 1),
|
|
34
|
+
modulusLength: getModulusLengthOption(options)
|
|
35
|
+
} : entry.subtle;
|
|
36
|
+
}
|
|
37
|
+
return crypto.subtle.generateKey(algorithm, extractable ?? !1, [
|
|
38
|
+
...entry.usages[1],
|
|
39
|
+
...entry.usages[0]
|
|
40
|
+
]);
|
|
48
41
|
}
|
|
42
|
+
export {
|
|
43
|
+
generateKeyPair
|
|
44
|
+
};
|
|
@@ -1,40 +1,36 @@
|
|
|
1
|
-
import { unsupportedAlg, algArgument } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
algorithm = { name: 'AES-GCM', length };
|
|
34
|
-
keyUsages = ['encrypt', 'decrypt'];
|
|
35
|
-
break;
|
|
36
|
-
default:
|
|
37
|
-
unsupportedAlg(algArgument);
|
|
38
|
-
}
|
|
39
|
-
return crypto.subtle.generateKey(algorithm, options?.extractable ?? false, keyUsages);
|
|
1
|
+
import { unsupportedAlg, algArgument } from "../lib/key_algorithm.js";
|
|
2
|
+
import { validateExtractableOption } from "../lib/key_options.js";
|
|
3
|
+
async function generateSecret(alg, options) {
|
|
4
|
+
const extractable = validateExtractableOption(options?.extractable);
|
|
5
|
+
let length, algorithm, keyUsages;
|
|
6
|
+
switch (alg) {
|
|
7
|
+
case "HS256":
|
|
8
|
+
case "HS384":
|
|
9
|
+
case "HS512":
|
|
10
|
+
length = +alg.slice(-3), algorithm = { name: "HMAC", hash: `SHA-${length}`, length }, keyUsages = ["sign", "verify"];
|
|
11
|
+
break;
|
|
12
|
+
case "A128CBC-HS256":
|
|
13
|
+
case "A192CBC-HS384":
|
|
14
|
+
case "A256CBC-HS512":
|
|
15
|
+
return crypto.getRandomValues(new Uint8Array(+alg.slice(-3) >> 3));
|
|
16
|
+
case "A128KW":
|
|
17
|
+
case "A192KW":
|
|
18
|
+
case "A256KW":
|
|
19
|
+
length = +alg.slice(1, 4), algorithm = { name: "AES-KW", length }, keyUsages = ["wrapKey", "unwrapKey"];
|
|
20
|
+
break;
|
|
21
|
+
case "A128GCMKW":
|
|
22
|
+
case "A192GCMKW":
|
|
23
|
+
case "A256GCMKW":
|
|
24
|
+
case "A128GCM":
|
|
25
|
+
case "A192GCM":
|
|
26
|
+
case "A256GCM":
|
|
27
|
+
length = +alg.slice(1, 4), algorithm = { name: "AES-GCM", length }, keyUsages = ["encrypt", "decrypt"];
|
|
28
|
+
break;
|
|
29
|
+
default:
|
|
30
|
+
unsupportedAlg(algArgument);
|
|
31
|
+
}
|
|
32
|
+
return crypto.subtle.generateKey(algorithm, extractable ?? !1, keyUsages);
|
|
40
33
|
}
|
|
34
|
+
export {
|
|
35
|
+
generateSecret
|
|
36
|
+
};
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import { decode as decodeBase64URL } from
|
|
2
|
-
import { fromSPKI, fromPKCS8, fromX509 } from
|
|
3
|
-
import { jwkToKey } from
|
|
4
|
-
import { keyAlgorithm } from
|
|
5
|
-
import { JOSENotSupported } from
|
|
6
|
-
import { isObject } from
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { decode as decodeBase64URL } from "../util/base64url.js";
|
|
2
|
+
import { fromSPKI, fromPKCS8, fromX509 } from "../lib/asn1.js";
|
|
3
|
+
import { jwkToKey } from "../lib/jwk_to_key.js";
|
|
4
|
+
import { keyAlgorithm } from "../lib/key_algorithm.js";
|
|
5
|
+
import { JOSENotSupported } from "../util/errors.js";
|
|
6
|
+
import { isObject } from "../lib/type_checks.js";
|
|
7
|
+
import { validateExtractableOption } from "../lib/key_options.js";
|
|
8
|
+
import { normalizeJwk } from "../lib/jwk_metadata.js";
|
|
9
|
+
async function importSPKI(spki, alg, options) {
|
|
10
|
+
if (typeof spki != "string" || spki.indexOf("-----BEGIN PUBLIC KEY-----") !== 0)
|
|
11
|
+
throw new TypeError('"spki" must be SPKI formatted string');
|
|
12
|
+
return fromSPKI(spki, alg, options);
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return fromX509(x509, alg, options);
|
|
14
|
+
async function importX509(x509, alg, options) {
|
|
15
|
+
if (typeof x509 != "string" || x509.indexOf("-----BEGIN CERTIFICATE-----") !== 0)
|
|
16
|
+
throw new TypeError('"x509" must be X.509 formatted string');
|
|
17
|
+
return fromX509(x509, alg, options);
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return fromPKCS8(pkcs8, alg, options);
|
|
19
|
+
async function importPKCS8(pkcs8, alg, options) {
|
|
20
|
+
if (typeof pkcs8 != "string" || pkcs8.indexOf("-----BEGIN PRIVATE KEY-----") !== 0)
|
|
21
|
+
throw new TypeError('"pkcs8" must be PKCS#8 formatted string');
|
|
22
|
+
return fromPKCS8(pkcs8, alg, options);
|
|
24
23
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
throw new TypeError('missing "alg" (Algorithm) Parameter value');
|
|
45
|
-
}
|
|
46
|
-
if (alg !== undefined && alg !== jwk.alg) {
|
|
47
|
-
throw new TypeError('JWK alg and alg option value mismatch');
|
|
48
|
-
}
|
|
49
|
-
return jwkToKey(keyAlgorithm(jwk.alg), { ...jwk, ext });
|
|
50
|
-
}
|
|
51
|
-
case 'EC':
|
|
52
|
-
case 'OKP':
|
|
53
|
-
return jwkToKey(keyAlgorithm(alg), { ...jwk, alg, ext });
|
|
54
|
-
default:
|
|
55
|
-
throw new JOSENotSupported('Unsupported "kty" (Key Type) Parameter value');
|
|
24
|
+
async function importJWK(jwk, alg, options) {
|
|
25
|
+
if (!isObject(jwk))
|
|
26
|
+
throw new TypeError("JWK must be an object");
|
|
27
|
+
const normalized = normalizeJwk(jwk), extractable = validateExtractableOption(options?.extractable), { alg: jwkAlg } = normalized;
|
|
28
|
+
alg ??= jwkAlg;
|
|
29
|
+
const ext = extractable ?? normalized.ext;
|
|
30
|
+
if (normalized.kty !== "oct" && !alg)
|
|
31
|
+
throw new TypeError('"alg" argument is required when "jwk.alg" is not present');
|
|
32
|
+
switch (normalized.kty) {
|
|
33
|
+
case "oct":
|
|
34
|
+
if (typeof normalized.k != "string")
|
|
35
|
+
throw new TypeError('missing "k" (Key Value) Parameter value');
|
|
36
|
+
return decodeBase64URL(normalized.k);
|
|
37
|
+
case "AKP": {
|
|
38
|
+
if (typeof jwkAlg != "string" || !jwkAlg)
|
|
39
|
+
throw new TypeError('missing "alg" (Algorithm) Parameter value');
|
|
40
|
+
if (alg !== jwkAlg)
|
|
41
|
+
throw new TypeError("JWK alg and alg option value mismatch");
|
|
42
|
+
return jwkToKey(keyAlgorithm(alg), { ...normalized, ext });
|
|
56
43
|
}
|
|
44
|
+
case "RSA":
|
|
45
|
+
case "EC":
|
|
46
|
+
case "OKP":
|
|
47
|
+
return jwkToKey(keyAlgorithm(alg), { ...normalized, alg, ext });
|
|
48
|
+
default:
|
|
49
|
+
throw new JOSENotSupported('Unsupported "kty" (Key Type) Parameter value');
|
|
50
|
+
}
|
|
57
51
|
}
|
|
52
|
+
export {
|
|
53
|
+
importJWK,
|
|
54
|
+
importPKCS8,
|
|
55
|
+
importSPKI,
|
|
56
|
+
importX509
|
|
57
|
+
};
|
|
@@ -1,174 +1,140 @@
|
|
|
1
|
-
import { invalidKeyInput } from
|
|
2
|
-
import { encodeBase64, decodeBase64 } from
|
|
3
|
-
import { JOSENotSupported } from
|
|
4
|
-
import { keyAlgorithm, unsupportedAlg, algArgument } from
|
|
5
|
-
import { isCryptoKey, isKeyObject } from
|
|
1
|
+
import { invalidKeyInput } from "./invalid_key_input.js";
|
|
2
|
+
import { encodeBase64, decodeBase64 } from "../lib/base64.js";
|
|
3
|
+
import { JOSENotSupported } from "../util/errors.js";
|
|
4
|
+
import { keyAlgorithm, unsupportedAlg, algArgument } from "./key_algorithm.js";
|
|
5
|
+
import { isCryptoKey, isKeyObject } from "./is_key_like.js";
|
|
6
|
+
import { validateExtractableOption } from "./key_options.js";
|
|
6
7
|
const formatPEM = (b64, descriptor) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
let length = 0;
|
|
52
|
-
for (let i = 0; i < lengthOfLen; i++) {
|
|
53
|
-
length = (length << 8) | readByte(state);
|
|
54
|
-
}
|
|
55
|
-
return length;
|
|
56
|
-
}
|
|
57
|
-
return first;
|
|
58
|
-
};
|
|
59
|
-
const skipElement = (state, count = 1) => {
|
|
60
|
-
while (count-- > 0) {
|
|
61
|
-
state.pos++;
|
|
62
|
-
const length = parseLength(state);
|
|
63
|
-
state.pos += length;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
const expectTag = (state, expectedTag, errorMessage) => {
|
|
67
|
-
if (readByte(state) !== expectedTag) {
|
|
68
|
-
throw new Error(errorMessage);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
const getSubarray = (state, length) => {
|
|
72
|
-
if (length < 0 || state.pos + length > state.data.length) {
|
|
73
|
-
throw new Error('Unexpected end of ASN.1 input');
|
|
74
|
-
}
|
|
75
|
-
const result = state.data.subarray(state.pos, state.pos + length);
|
|
8
|
+
const newlined = (b64.match(/.{1,64}/g) || []).join(`
|
|
9
|
+
`);
|
|
10
|
+
return `-----BEGIN ${descriptor}-----
|
|
11
|
+
${newlined}
|
|
12
|
+
-----END ${descriptor}-----`;
|
|
13
|
+
}, genericExport = async (keyType, keyFormat, key) => {
|
|
14
|
+
if (isKeyObject(key)) {
|
|
15
|
+
if (key.type !== keyType)
|
|
16
|
+
throw new TypeError(`key is not a ${keyType} key`);
|
|
17
|
+
return key.export({ format: "pem", type: keyFormat });
|
|
18
|
+
}
|
|
19
|
+
if (!isCryptoKey(key))
|
|
20
|
+
throw new TypeError(invalidKeyInput(key, "CryptoKey", "KeyObject"));
|
|
21
|
+
if (!key.extractable)
|
|
22
|
+
throw new TypeError("CryptoKey is not extractable");
|
|
23
|
+
if (key.type !== keyType)
|
|
24
|
+
throw new TypeError(`key is not a ${keyType} key`);
|
|
25
|
+
return formatPEM(encodeBase64(new Uint8Array(await crypto.subtle.exportKey(keyFormat, key))), `${keyType.toUpperCase()} KEY`);
|
|
26
|
+
}, toSPKI = (key) => genericExport("public", "spki", key), toPKCS8 = (key) => genericExport("private", "pkcs8", key), bytesEqual = (a, b) => {
|
|
27
|
+
if (a.byteLength !== b.length)
|
|
28
|
+
return !1;
|
|
29
|
+
for (let i = 0; i < a.byteLength; i++)
|
|
30
|
+
if (a[i] !== b[i])
|
|
31
|
+
return !1;
|
|
32
|
+
return !0;
|
|
33
|
+
}, createASN1State = (data) => ({ data, pos: 0 }), readByte = (state) => {
|
|
34
|
+
const byte = state.data[state.pos++];
|
|
35
|
+
if (byte === void 0)
|
|
36
|
+
throw new Error("Unexpected end of ASN.1 input");
|
|
37
|
+
return byte;
|
|
38
|
+
}, parseLength = (state) => {
|
|
39
|
+
const first = readByte(state);
|
|
40
|
+
if (first & 128) {
|
|
41
|
+
const lengthOfLen = first & 127;
|
|
42
|
+
let length = 0;
|
|
43
|
+
for (let i = 0; i < lengthOfLen; i++)
|
|
44
|
+
length = length << 8 | readByte(state);
|
|
45
|
+
return length;
|
|
46
|
+
}
|
|
47
|
+
return first;
|
|
48
|
+
}, skipElement = (state, count = 1) => {
|
|
49
|
+
for (; count-- > 0; ) {
|
|
50
|
+
state.pos++;
|
|
51
|
+
const length = parseLength(state);
|
|
76
52
|
state.pos += length;
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
53
|
+
}
|
|
54
|
+
}, expectTag = (state, expectedTag, errorMessage) => {
|
|
55
|
+
if (readByte(state) !== expectedTag)
|
|
56
|
+
throw new Error(errorMessage);
|
|
57
|
+
}, getSubarray = (state, length) => {
|
|
58
|
+
if (length < 0 || state.pos + length > state.data.length)
|
|
59
|
+
throw new Error("Unexpected end of ASN.1 input");
|
|
60
|
+
const result = state.data.subarray(state.pos, state.pos + length);
|
|
61
|
+
return state.pos += length, result;
|
|
62
|
+
}, parseAlgorithmOID = (state) => {
|
|
63
|
+
expectTag(state, 6, "Expected algorithm OID");
|
|
64
|
+
const oidLen = parseLength(state);
|
|
65
|
+
return getSubarray(state, oidLen);
|
|
83
66
|
};
|
|
84
67
|
function parseKeyHeader(state, keyFormat) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
expectTag(state, 0x30, 'Expected algorithm identifier');
|
|
93
|
-
parseLength(state);
|
|
68
|
+
if (expectTag(state, 48, `Invalid ${keyFormat === "spki" ? "SPKI" : "PKCS#8"} structure`), parseLength(state), keyFormat === "pkcs8") {
|
|
69
|
+
expectTag(state, 2, "Expected version field");
|
|
70
|
+
const length = parseLength(state);
|
|
71
|
+
state.pos += length;
|
|
72
|
+
}
|
|
73
|
+
expectTag(state, 48, "Expected algorithm identifier"), parseLength(state);
|
|
94
74
|
}
|
|
95
75
|
const parseECAlgorithmIdentifier = (state) => {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
else {
|
|
132
|
-
algorithm = entry.subtle;
|
|
133
|
-
}
|
|
134
|
-
return crypto.subtle.importKey(keyFormat, keyData, algorithm, options?.extractable ?? isPublic, entry.usages[isPublic ? 0 : 1]);
|
|
135
|
-
};
|
|
136
|
-
const processPEMData = (pem, pattern) => {
|
|
137
|
-
return decodeBase64(pem.replace(pattern, ''));
|
|
138
|
-
};
|
|
139
|
-
export const fromPKCS8 = (pem, alg, options) => {
|
|
140
|
-
const keyData = processPEMData(pem, /(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g);
|
|
141
|
-
return genericImport('pkcs8', keyData, alg, options);
|
|
142
|
-
};
|
|
143
|
-
export const fromSPKI = (pem, alg, options) => {
|
|
144
|
-
const keyData = processPEMData(pem, /(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g);
|
|
145
|
-
return genericImport('spki', keyData, alg, options);
|
|
76
|
+
const algOid = parseAlgorithmOID(state);
|
|
77
|
+
if (bytesEqual(algOid, [43, 101, 110]))
|
|
78
|
+
return "X25519";
|
|
79
|
+
if (!bytesEqual(algOid, [42, 134, 72, 206, 61, 2, 1]))
|
|
80
|
+
throw new Error("Unsupported key algorithm");
|
|
81
|
+
expectTag(state, 6, "Expected curve OID");
|
|
82
|
+
const curveOidLen = parseLength(state), curveOid = getSubarray(state, curveOidLen);
|
|
83
|
+
if (bytesEqual(curveOid, [42, 134, 72, 206, 61, 3, 1, 7]))
|
|
84
|
+
return "P-256";
|
|
85
|
+
if (bytesEqual(curveOid, [43, 129, 4, 0, 34]))
|
|
86
|
+
return "P-384";
|
|
87
|
+
if (bytesEqual(curveOid, [43, 129, 4, 0, 35]))
|
|
88
|
+
return "P-521";
|
|
89
|
+
throw new Error("Unsupported named curve");
|
|
90
|
+
}, genericImport = async (keyFormat, keyData, alg, options) => {
|
|
91
|
+
const extractable = validateExtractableOption(options?.extractable), entry = keyAlgorithm(alg, algArgument);
|
|
92
|
+
entry.secret && unsupportedAlg(algArgument);
|
|
93
|
+
const isPublic = keyFormat === "spki";
|
|
94
|
+
let algorithm;
|
|
95
|
+
if (entry.resolve)
|
|
96
|
+
try {
|
|
97
|
+
const state = createASN1State(keyData);
|
|
98
|
+
parseKeyHeader(state, keyFormat), algorithm = entry.resolve({ crv: parseECAlgorithmIdentifier(state) });
|
|
99
|
+
} catch {
|
|
100
|
+
throw new JOSENotSupported("Invalid or unsupported key format");
|
|
101
|
+
}
|
|
102
|
+
else
|
|
103
|
+
algorithm = entry.subtle;
|
|
104
|
+
return crypto.subtle.importKey(keyFormat, keyData, algorithm, extractable ?? isPublic, entry.usages[isPublic ? 0 : 1]);
|
|
105
|
+
}, processPEMData = (pem, pattern) => decodeBase64(pem.replace(pattern, "")), fromPKCS8 = (pem, alg, options) => {
|
|
106
|
+
const keyData = processPEMData(pem, /(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g);
|
|
107
|
+
return genericImport("pkcs8", keyData, alg, options);
|
|
108
|
+
}, fromSPKI = (pem, alg, options) => {
|
|
109
|
+
const keyData = processPEMData(pem, /(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g);
|
|
110
|
+
return genericImport("spki", keyData, alg, options);
|
|
146
111
|
};
|
|
147
112
|
function spkiFromX509(buf) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
const spkiStart = state.pos;
|
|
160
|
-
expectTag(state, 0x30, 'Invalid SPKI structure');
|
|
161
|
-
const spkiContentLen = parseLength(state);
|
|
162
|
-
return buf.subarray(spkiStart, spkiStart + spkiContentLen + (state.pos - spkiStart));
|
|
113
|
+
const state = createASN1State(buf);
|
|
114
|
+
expectTag(state, 48, "Invalid certificate structure");
|
|
115
|
+
const certificateLength = parseLength(state);
|
|
116
|
+
if (certificateLength < 0 || state.pos + certificateLength > state.data.length)
|
|
117
|
+
throw new Error("Unexpected end of ASN.1 input");
|
|
118
|
+
expectTag(state, 48, "Invalid tbsCertificate structure"), parseLength(state), buf[state.pos] === 160 ? skipElement(state, 6) : skipElement(state, 5);
|
|
119
|
+
const spkiStart = state.pos;
|
|
120
|
+
expectTag(state, 48, "Invalid SPKI structure");
|
|
121
|
+
const spkiContentLen = parseLength(state);
|
|
122
|
+
return buf.subarray(spkiStart, spkiStart + spkiContentLen + (state.pos - spkiStart));
|
|
163
123
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
124
|
+
const fromX509 = (pem, alg, options) => {
|
|
125
|
+
let spki;
|
|
126
|
+
try {
|
|
127
|
+
const certificate = processPEMData(pem, /(?:-----(?:BEGIN|END) CERTIFICATE-----|\s)/g);
|
|
128
|
+
spki = spkiFromX509(certificate);
|
|
129
|
+
} catch (cause) {
|
|
130
|
+
throw new TypeError("Failed to parse the X.509 certificate", { cause });
|
|
131
|
+
}
|
|
132
|
+
return genericImport("spki", spki, alg, options);
|
|
133
|
+
};
|
|
134
|
+
export {
|
|
135
|
+
fromPKCS8,
|
|
136
|
+
fromSPKI,
|
|
137
|
+
fromX509,
|
|
138
|
+
toPKCS8,
|
|
139
|
+
toSPKI
|
|
174
140
|
};
|
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));
|
|
9
|
-
}
|
|
10
|
-
return btoa(arr.join(''));
|
|
1
|
+
function encodeBase64(input) {
|
|
2
|
+
if (Uint8Array.prototype.toBase64)
|
|
3
|
+
return input.toBase64();
|
|
4
|
+
const CHUNK_SIZE = 32768, arr = [];
|
|
5
|
+
for (let i = 0; i < input.length; i += CHUNK_SIZE)
|
|
6
|
+
arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));
|
|
7
|
+
return btoa(arr.join(""));
|
|
11
8
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
bytes[i] = binary.charCodeAt(i);
|
|
20
|
-
}
|
|
21
|
-
return bytes;
|
|
9
|
+
function decodeBase64(encoded) {
|
|
10
|
+
if (Uint8Array.fromBase64)
|
|
11
|
+
return Uint8Array.fromBase64(encoded);
|
|
12
|
+
const binary = atob(encoded), bytes = new Uint8Array(binary.length);
|
|
13
|
+
for (let i = 0; i < binary.length; i++)
|
|
14
|
+
bytes[i] = binary.charCodeAt(i);
|
|
15
|
+
return bytes;
|
|
22
16
|
}
|
|
17
|
+
export {
|
|
18
|
+
decodeBase64,
|
|
19
|
+
encodeBase64
|
|
20
|
+
};
|