@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,44 +1,50 @@
|
|
|
1
|
-
import { prepareVerify, verifySignature, verifyResult } from
|
|
2
|
-
import { JWSInvalid, JWSSignatureVerificationFailed } from
|
|
3
|
-
import { isObject } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { encodeJsonUnencodedPayload, parseProtectedHeader, prepareVerify, snapshotJws, verifySignature, verifyResult } from "../../lib/jws_verify.js";
|
|
2
|
+
import { JWSInvalid, JWSSignatureVerificationFailed } from "../../util/errors.js";
|
|
3
|
+
import { isObject } from "../../lib/type_checks.js";
|
|
4
|
+
function snapshotSignature(signature, payload) {
|
|
5
|
+
try {
|
|
6
|
+
const jws = snapshotJws(signature, [payload]), { protected: encodedProtected, header, signature: encodedSignature } = jws;
|
|
7
|
+
if (encodedProtected === void 0 && header === void 0 || encodedProtected !== void 0 && typeof encodedProtected != "string" || typeof encodedSignature != "string" || header !== void 0 && !isObject(header))
|
|
8
|
+
return;
|
|
9
|
+
const protectedHeader = parseProtectedHeader(encodedProtected), { b64, crit } = protectedHeader;
|
|
10
|
+
return [
|
|
11
|
+
jws,
|
|
12
|
+
protectedHeader,
|
|
13
|
+
Array.isArray(crit) && crit.includes("b64") ? typeof b64 == "boolean" ? b64 ? 1 : 2 : 0 : 1
|
|
14
|
+
];
|
|
15
|
+
} catch {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function generalVerify(jws, key, options) {
|
|
20
|
+
if (!isObject(jws))
|
|
21
|
+
throw new JWSInvalid("General JWS must be an object");
|
|
22
|
+
const { signatures, payload: inputPayload } = jws;
|
|
23
|
+
if (!Array.isArray(signatures))
|
|
24
|
+
throw new JWSInvalid("JWS Signatures missing or incorrect type");
|
|
25
|
+
const signatureEntries = Array.from(signatures);
|
|
26
|
+
if (!signatureEntries.every(isObject))
|
|
27
|
+
throw new JWSInvalid("JWS Signatures missing or incorrect type");
|
|
28
|
+
let shared;
|
|
29
|
+
try {
|
|
30
|
+
if (inputPayload === void 0)
|
|
31
|
+
throw new Error();
|
|
32
|
+
shared = prepareVerify(options);
|
|
33
|
+
} catch {
|
|
34
|
+
throw new JWSSignatureVerificationFailed();
|
|
35
|
+
}
|
|
36
|
+
const payload = inputPayload instanceof Uint8Array ? new Uint8Array(inputPayload) : inputPayload, candidates = signatureEntries.map((signature) => snapshotSignature(signature, payload)).filter((candidate) => candidate !== void 0);
|
|
37
|
+
let modes = 0;
|
|
38
|
+
for (const [, , mode] of candidates)
|
|
39
|
+
if (modes |= mode, modes === 3)
|
|
40
|
+
throw new JWSInvalid("inconsistent use of JWS Unencoded Payload (RFC7797)");
|
|
41
|
+
for (const candidate of candidates)
|
|
13
42
|
try {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
shared = prepareVerify(options);
|
|
43
|
+
return verifyResult(candidate[0], await verifySignature(candidate[0], shared, key, encodeJsonUnencodedPayload, candidate[1]));
|
|
44
|
+
} catch {
|
|
17
45
|
}
|
|
18
|
-
|
|
19
|
-
throw new JWSSignatureVerificationFailed();
|
|
20
|
-
}
|
|
21
|
-
for (const signature of signatures) {
|
|
22
|
-
try {
|
|
23
|
-
const { protected: encodedProtected, header, signature: encodedSignature } = signature;
|
|
24
|
-
if (encodedProtected === undefined && header === undefined)
|
|
25
|
-
throw new Error();
|
|
26
|
-
if (encodedProtected !== undefined && typeof encodedProtected !== 'string') {
|
|
27
|
-
throw new Error();
|
|
28
|
-
}
|
|
29
|
-
if (typeof encodedSignature !== 'string')
|
|
30
|
-
throw new Error();
|
|
31
|
-
if (header !== undefined && !isObject(header))
|
|
32
|
-
throw new Error();
|
|
33
|
-
return verifyResult(signature, await verifySignature({
|
|
34
|
-
header,
|
|
35
|
-
payload,
|
|
36
|
-
protected: encodedProtected,
|
|
37
|
-
signature: encodedSignature,
|
|
38
|
-
}, shared, key));
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
throw new JWSSignatureVerificationFailed();
|
|
46
|
+
throw new JWSSignatureVerificationFailed();
|
|
44
47
|
}
|
|
48
|
+
export {
|
|
49
|
+
generalVerify
|
|
50
|
+
};
|
|
@@ -1,23 +1,14 @@
|
|
|
1
|
-
import { prepareDecrypt, decryptCompact } from
|
|
2
|
-
import { validateClaimsSet } from
|
|
3
|
-
import { JWTClaimValidationFailed } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (protectedHeader.sub !== undefined && protectedHeader.sub !== payload.sub) {
|
|
12
|
-
throw new JWTClaimValidationFailed('replicated "sub" claim header parameter mismatch', payload, 'sub', 'mismatch');
|
|
13
|
-
}
|
|
14
|
-
if (protectedHeader.aud !== undefined &&
|
|
15
|
-
JSON.stringify(protectedHeader.aud) !== JSON.stringify(payload.aud)) {
|
|
16
|
-
throw new JWTClaimValidationFailed('replicated "aud" claim header parameter mismatch', payload, 'aud', 'mismatch');
|
|
17
|
-
}
|
|
18
|
-
const result = { payload, protectedHeader };
|
|
19
|
-
if (typeof key === 'function') {
|
|
20
|
-
return { ...result, key: decrypted[2] };
|
|
21
|
-
}
|
|
22
|
-
return result;
|
|
1
|
+
import { prepareDecrypt, decryptCompact } from "../lib/jwe_decrypt.js";
|
|
2
|
+
import { validateClaimsSet } from "../lib/jwt_claims_set.js";
|
|
3
|
+
import { JWTClaimValidationFailed } from "../util/errors.js";
|
|
4
|
+
async function jwtDecrypt(jwt, key, options) {
|
|
5
|
+
const decrypted = await decryptCompact(jwt, prepareDecrypt(options), key), protectedHeader = decrypted[1], payload = validateClaimsSet(protectedHeader, decrypted[0], options);
|
|
6
|
+
for (const claim of ["iss", "sub", "aud"])
|
|
7
|
+
if (protectedHeader[claim] !== void 0 && (claim === "aud" ? JSON.stringify(protectedHeader.aud) !== JSON.stringify(payload.aud) : protectedHeader[claim] !== payload[claim]))
|
|
8
|
+
throw new JWTClaimValidationFailed(`replicated "${claim}" claim header parameter mismatch`, payload, claim, "mismatch");
|
|
9
|
+
const result = { payload, protectedHeader };
|
|
10
|
+
return typeof key == "function" ? { ...result, key: decrypted[2] } : result;
|
|
23
11
|
}
|
|
12
|
+
export {
|
|
13
|
+
jwtDecrypt
|
|
14
|
+
};
|
|
@@ -1,101 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { JWTClaimsBuilder } from
|
|
3
|
-
import { assertNotSet } from
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.#cek = cek;
|
|
57
|
-
return this;
|
|
58
|
-
}
|
|
59
|
-
setInitializationVector(iv) {
|
|
60
|
-
assertNotSet(this.#iv, 'setInitializationVector');
|
|
61
|
-
this.#iv = iv;
|
|
62
|
-
return this;
|
|
63
|
-
}
|
|
64
|
-
replicateIssuerAsHeader() {
|
|
65
|
-
this.#replicateIssuerAsHeader = true;
|
|
66
|
-
return this;
|
|
67
|
-
}
|
|
68
|
-
replicateSubjectAsHeader() {
|
|
69
|
-
this.#replicateSubjectAsHeader = true;
|
|
70
|
-
return this;
|
|
71
|
-
}
|
|
72
|
-
replicateAudienceAsHeader() {
|
|
73
|
-
this.#replicateAudienceAsHeader = true;
|
|
74
|
-
return this;
|
|
75
|
-
}
|
|
76
|
-
async encrypt(key, options) {
|
|
77
|
-
const enc = new CompactEncrypt(this.#jwt.data());
|
|
78
|
-
if (this.#protectedHeader &&
|
|
79
|
-
(this.#replicateIssuerAsHeader ||
|
|
80
|
-
this.#replicateSubjectAsHeader ||
|
|
81
|
-
this.#replicateAudienceAsHeader)) {
|
|
82
|
-
this.#protectedHeader = {
|
|
83
|
-
...this.#protectedHeader,
|
|
84
|
-
iss: this.#replicateIssuerAsHeader ? this.#jwt.iss : undefined,
|
|
85
|
-
sub: this.#replicateSubjectAsHeader ? this.#jwt.sub : undefined,
|
|
86
|
-
aud: this.#replicateAudienceAsHeader ? this.#jwt.aud : undefined,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
enc.setProtectedHeader(this.#protectedHeader);
|
|
90
|
-
if (this.#iv) {
|
|
91
|
-
enc.setInitializationVector(this.#iv);
|
|
92
|
-
}
|
|
93
|
-
if (this.#cek) {
|
|
94
|
-
enc.setContentEncryptionKey(this.#cek);
|
|
95
|
-
}
|
|
96
|
-
if (this.#keyManagementParameters) {
|
|
97
|
-
enc.setKeyManagementParameters(this.#keyManagementParameters);
|
|
98
|
-
}
|
|
99
|
-
return enc.encrypt(key, options);
|
|
100
|
-
}
|
|
1
|
+
import { createJWE } from "../lib/jwe_encrypt.js";
|
|
2
|
+
import { JWTClaimsBuilder, jwtClaim, jwtData } from "../lib/jwt_claims_set.js";
|
|
3
|
+
import { assertNotSet } from "../lib/helpers.js";
|
|
4
|
+
const EncryptJWT_base = JWTClaimsBuilder;
|
|
5
|
+
class EncryptJWT extends EncryptJWT_base {
|
|
6
|
+
#cek;
|
|
7
|
+
#iv;
|
|
8
|
+
#keyManagementParameters;
|
|
9
|
+
#protectedHeader;
|
|
10
|
+
#replicateIssuerAsHeader;
|
|
11
|
+
#replicateSubjectAsHeader;
|
|
12
|
+
#replicateAudienceAsHeader;
|
|
13
|
+
setProtectedHeader(protectedHeader) {
|
|
14
|
+
return assertNotSet(this.#protectedHeader, "setProtectedHeader"), this.#protectedHeader = protectedHeader, this;
|
|
15
|
+
}
|
|
16
|
+
setKeyManagementParameters(parameters) {
|
|
17
|
+
return assertNotSet(this.#keyManagementParameters, "setKeyManagementParameters"), this.#keyManagementParameters = parameters, this;
|
|
18
|
+
}
|
|
19
|
+
setContentEncryptionKey(cek) {
|
|
20
|
+
return assertNotSet(this.#cek, "setContentEncryptionKey"), this.#cek = cek, this;
|
|
21
|
+
}
|
|
22
|
+
setInitializationVector(iv) {
|
|
23
|
+
return assertNotSet(this.#iv, "setInitializationVector"), this.#iv = iv, this;
|
|
24
|
+
}
|
|
25
|
+
replicateIssuerAsHeader() {
|
|
26
|
+
return this.#replicateIssuerAsHeader = !0, this;
|
|
27
|
+
}
|
|
28
|
+
replicateSubjectAsHeader() {
|
|
29
|
+
return this.#replicateSubjectAsHeader = !0, this;
|
|
30
|
+
}
|
|
31
|
+
replicateAudienceAsHeader() {
|
|
32
|
+
return this.#replicateAudienceAsHeader = !0, this;
|
|
33
|
+
}
|
|
34
|
+
async encrypt(key, options) {
|
|
35
|
+
const plaintext = jwtData(this);
|
|
36
|
+
this.#protectedHeader && (this.#replicateIssuerAsHeader || this.#replicateSubjectAsHeader || this.#replicateAudienceAsHeader) && (this.#protectedHeader = {
|
|
37
|
+
...this.#protectedHeader,
|
|
38
|
+
iss: this.#replicateIssuerAsHeader ? jwtClaim(this, "iss") : void 0,
|
|
39
|
+
sub: this.#replicateSubjectAsHeader ? jwtClaim(this, "sub") : void 0,
|
|
40
|
+
aud: this.#replicateAudienceAsHeader ? jwtClaim(this, "aud") : void 0
|
|
41
|
+
});
|
|
42
|
+
const jwe = await createJWE([
|
|
43
|
+
plaintext,
|
|
44
|
+
this.#protectedHeader,
|
|
45
|
+
void 0,
|
|
46
|
+
void 0,
|
|
47
|
+
void 0,
|
|
48
|
+
this.#cek,
|
|
49
|
+
this.#iv,
|
|
50
|
+
this.#keyManagementParameters,
|
|
51
|
+
void 0,
|
|
52
|
+
!1
|
|
53
|
+
], key, options);
|
|
54
|
+
return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join(".");
|
|
55
|
+
}
|
|
101
56
|
}
|
|
57
|
+
export {
|
|
58
|
+
EncryptJWT
|
|
59
|
+
};
|
|
@@ -1,51 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
this.#jwt.sub = subject;
|
|
17
|
-
return this;
|
|
18
|
-
}
|
|
19
|
-
setAudience(audience) {
|
|
20
|
-
this.#jwt.aud = audience;
|
|
21
|
-
return this;
|
|
22
|
-
}
|
|
23
|
-
setJti(jwtId) {
|
|
24
|
-
this.#jwt.jti = jwtId;
|
|
25
|
-
return this;
|
|
26
|
-
}
|
|
27
|
-
setNotBefore(input) {
|
|
28
|
-
this.#jwt.nbf = input;
|
|
29
|
-
return this;
|
|
30
|
-
}
|
|
31
|
-
setExpirationTime(input) {
|
|
32
|
-
this.#jwt.exp = input;
|
|
33
|
-
return this;
|
|
34
|
-
}
|
|
35
|
-
setIssuedAt(input) {
|
|
36
|
-
this.#jwt.iat = input;
|
|
37
|
-
return this;
|
|
38
|
-
}
|
|
39
|
-
setProtectedHeader(protectedHeader) {
|
|
40
|
-
this.#protectedHeader = protectedHeader;
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
async sign(key, options) {
|
|
44
|
-
const sig = new CompactSign(this.#jwt.data());
|
|
45
|
-
sig.setProtectedHeader(this.#protectedHeader);
|
|
46
|
-
if (unencodedPayload(this.#protectedHeader)) {
|
|
47
|
-
throw new JWTInvalid('JWTs MUST NOT use unencoded payload');
|
|
48
|
-
}
|
|
49
|
-
return sig.sign(key, options);
|
|
50
|
-
}
|
|
1
|
+
import { createCompactSignature } from "../lib/jws_sign.js";
|
|
2
|
+
import { JWTInvalid } from "../util/errors.js";
|
|
3
|
+
import { JWTClaimsBuilder, jwtData } from "../lib/jwt_claims_set.js";
|
|
4
|
+
import { assertNotSet } from "../lib/helpers.js";
|
|
5
|
+
const SignJWT_base = JWTClaimsBuilder;
|
|
6
|
+
class SignJWT extends SignJWT_base {
|
|
7
|
+
#protectedHeader;
|
|
8
|
+
setProtectedHeader(protectedHeader) {
|
|
9
|
+
return assertNotSet(this.#protectedHeader, "setProtectedHeader"), this.#protectedHeader = protectedHeader, this;
|
|
10
|
+
}
|
|
11
|
+
async sign(key, options) {
|
|
12
|
+
return createCompactSignature(jwtData(this), this.#protectedHeader, options?.crit, key, () => {
|
|
13
|
+
throw new JWTInvalid("JWTs MUST NOT use unencoded payload");
|
|
14
|
+
});
|
|
15
|
+
}
|
|
51
16
|
}
|
|
17
|
+
export {
|
|
18
|
+
SignJWT
|
|
19
|
+
};
|
|
@@ -1,64 +1,35 @@
|
|
|
1
|
-
import * as b64u from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
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
|
-
setNotBefore(input) {
|
|
33
|
-
this.#jwt.nbf = input;
|
|
34
|
-
return this;
|
|
35
|
-
}
|
|
36
|
-
setExpirationTime(input) {
|
|
37
|
-
this.#jwt.exp = input;
|
|
38
|
-
return this;
|
|
39
|
-
}
|
|
40
|
-
setIssuedAt(input) {
|
|
41
|
-
this.#jwt.iat = input;
|
|
42
|
-
return this;
|
|
43
|
-
}
|
|
44
|
-
static decode(jwt, options) {
|
|
45
|
-
if (typeof jwt !== 'string') {
|
|
46
|
-
throw new JWTInvalid('Unsecured JWT must be a string');
|
|
47
|
-
}
|
|
48
|
-
const { 0: encodedHeader, 1: encodedPayload, 2: signature, length } = jwt.split('.');
|
|
49
|
-
if (length !== 3 || signature !== '') {
|
|
50
|
-
throw new JWTInvalid('Invalid Unsecured JWT');
|
|
51
|
-
}
|
|
52
|
-
let header;
|
|
53
|
-
try {
|
|
54
|
-
header = JSON.parse(strictDecoder.decode(b64u.decode(encodedHeader)));
|
|
55
|
-
if (header.alg !== 'none')
|
|
56
|
-
throw new Error();
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
throw new JWTInvalid('Invalid Unsecured JWT');
|
|
60
|
-
}
|
|
61
|
-
const payload = validateClaimsSet(header, decodeBase64url(encodedPayload, 'payload', JWTInvalid), options);
|
|
62
|
-
return { payload, header };
|
|
63
|
-
}
|
|
1
|
+
import * as b64u from "../util/base64url.js";
|
|
2
|
+
import { decodeBase64url, parseJoseHeader } from "../lib/helpers.js";
|
|
3
|
+
import { JWSInvalid, JWTInvalid } from "../util/errors.js";
|
|
4
|
+
import { validateClaimsSet, JWTClaimsBuilder, jwtData } from "../lib/jwt_claims_set.js";
|
|
5
|
+
import { JWS_RECOGNIZED, validateB64, validateCrit } from "../lib/options.js";
|
|
6
|
+
const UnsecuredJWT_base = JWTClaimsBuilder;
|
|
7
|
+
class UnsecuredJWT extends UnsecuredJWT_base {
|
|
8
|
+
encode() {
|
|
9
|
+
const header = b64u.encode(JSON.stringify({ alg: "none" })), payload = b64u.encode(jwtData(this));
|
|
10
|
+
return `${header}.${payload}.`;
|
|
11
|
+
}
|
|
12
|
+
static decode(jwt, options) {
|
|
13
|
+
if (typeof jwt != "string")
|
|
14
|
+
throw new JWTInvalid("Unsecured JWT must be a string");
|
|
15
|
+
const { 0: encodedHeader, 1: encodedPayload, 2: signature, length } = jwt.split(".");
|
|
16
|
+
if (length !== 3 || signature !== "")
|
|
17
|
+
throw new JWTInvalid("Invalid Unsecured JWT");
|
|
18
|
+
let header, b64;
|
|
19
|
+
try {
|
|
20
|
+
header = parseJoseHeader(encodedHeader, JWSInvalid, "JWS Protected Header is invalid");
|
|
21
|
+
const extensions = validateCrit(JWSInvalid, JWS_RECOGNIZED, void 0, header, header);
|
|
22
|
+
b64 = validateB64(header, extensions);
|
|
23
|
+
} catch (cause) {
|
|
24
|
+
throw cause instanceof JWSInvalid ? new JWTInvalid("Invalid Unsecured JWT", { cause }) : cause;
|
|
25
|
+
}
|
|
26
|
+
if (header.alg !== "none")
|
|
27
|
+
throw new JWTInvalid("Invalid Unsecured JWT");
|
|
28
|
+
if (!b64)
|
|
29
|
+
throw new JWTInvalid("JWTs MUST NOT use unencoded payload");
|
|
30
|
+
return { payload: validateClaimsSet(header, decodeBase64url(encodedPayload, "payload", JWTInvalid), options), header };
|
|
31
|
+
}
|
|
64
32
|
}
|
|
33
|
+
export {
|
|
34
|
+
UnsecuredJWT
|
|
35
|
+
};
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { prepareVerify, verifyCompact } from
|
|
2
|
-
import { validateClaimsSet } from
|
|
3
|
-
import { JWTInvalid } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const result = { payload, protectedHeader: verified[1] };
|
|
11
|
-
if (typeof key === 'function') {
|
|
12
|
-
return { ...result, key: verified[3] };
|
|
13
|
-
}
|
|
14
|
-
return result;
|
|
1
|
+
import { prepareVerify, verifyCompact } from "../lib/jws_verify.js";
|
|
2
|
+
import { validateClaimsSet } from "../lib/jwt_claims_set.js";
|
|
3
|
+
import { JWTInvalid } from "../util/errors.js";
|
|
4
|
+
async function jwtVerify(jwt, key, options) {
|
|
5
|
+
const verified = await verifyCompact(jwt, prepareVerify(options), key);
|
|
6
|
+
if (!verified[2])
|
|
7
|
+
throw new JWTInvalid("JWTs MUST NOT use unencoded payload");
|
|
8
|
+
const result = { payload: validateClaimsSet(verified[1], verified[0], options), protectedHeader: verified[1] };
|
|
9
|
+
return typeof key == "function" ? { ...result, key: verified[3] } : result;
|
|
15
10
|
}
|
|
11
|
+
export {
|
|
12
|
+
jwtVerify
|
|
13
|
+
};
|
|
@@ -1,44 +1,39 @@
|
|
|
1
|
-
import { toSPKI as exportPublic, toPKCS8 as exportPrivate } from
|
|
2
|
-
import { invalidKeyInput } from
|
|
3
|
-
import { encode as b64u } from
|
|
4
|
-
import { isCryptoKey, isKeyObject } from
|
|
1
|
+
import { toSPKI as exportPublic, toPKCS8 as exportPrivate } from "../lib/asn1.js";
|
|
2
|
+
import { invalidKeyInput } from "../lib/invalid_key_input.js";
|
|
3
|
+
import { encode as b64u } from "../util/base64url.js";
|
|
4
|
+
import { isCryptoKey, isKeyObject } from "../lib/is_key_like.js";
|
|
5
5
|
function omitUndefinedProperties(jwk) {
|
|
6
|
-
|
|
6
|
+
return Object.fromEntries(Object.entries(jwk).filter(([, value]) => value !== void 0));
|
|
7
7
|
}
|
|
8
8
|
async function keyToJWK(key) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
if (!key.extractable) {
|
|
27
|
-
throw new TypeError('non-extractable CryptoKey cannot be exported as a JWK');
|
|
28
|
-
}
|
|
29
|
-
const { ext, key_ops, alg, use, ...jwk } = omitUndefinedProperties(await crypto.subtle.exportKey('jwk', key));
|
|
30
|
-
if (jwk.kty === 'AKP') {
|
|
31
|
-
;
|
|
32
|
-
jwk.alg = alg;
|
|
33
|
-
}
|
|
34
|
-
return jwk;
|
|
9
|
+
if (isKeyObject(key))
|
|
10
|
+
if (key.type === "secret")
|
|
11
|
+
key = key.export();
|
|
12
|
+
else
|
|
13
|
+
return key.export({ format: "jwk" });
|
|
14
|
+
if (key instanceof Uint8Array)
|
|
15
|
+
return {
|
|
16
|
+
kty: "oct",
|
|
17
|
+
k: b64u(key)
|
|
18
|
+
};
|
|
19
|
+
if (!isCryptoKey(key))
|
|
20
|
+
throw new TypeError(invalidKeyInput(key, "CryptoKey", "KeyObject", "Uint8Array"));
|
|
21
|
+
if (!key.extractable)
|
|
22
|
+
throw new TypeError("non-extractable CryptoKey cannot be exported as a JWK");
|
|
23
|
+
const { ext, key_ops, alg, use, ...jwk } = omitUndefinedProperties(await crypto.subtle.exportKey("jwk", key));
|
|
24
|
+
return jwk.kty === "AKP" && (jwk.alg = alg), jwk;
|
|
35
25
|
}
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
function exportSPKI(key) {
|
|
27
|
+
return exportPublic(key);
|
|
38
28
|
}
|
|
39
|
-
|
|
40
|
-
|
|
29
|
+
function exportPKCS8(key) {
|
|
30
|
+
return exportPrivate(key);
|
|
41
31
|
}
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
function exportJWK(key) {
|
|
33
|
+
return keyToJWK(key);
|
|
44
34
|
}
|
|
35
|
+
export {
|
|
36
|
+
exportJWK,
|
|
37
|
+
exportPKCS8,
|
|
38
|
+
exportSPKI
|
|
39
|
+
};
|