@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,110 +1,108 @@
|
|
|
1
|
-
import { encode as b64u } from
|
|
2
|
-
import { encrypt } from
|
|
3
|
-
import { encryptKeyManagement } from
|
|
4
|
-
import {
|
|
5
|
-
import { isDisjoint } from
|
|
6
|
-
import { concat, encode } from
|
|
7
|
-
import { validateCrit, JWE_RECOGNIZED } from
|
|
8
|
-
import { prepareKey } from
|
|
9
|
-
import { jweAlgorithm, jweEncryption } from
|
|
10
|
-
import { compress } from
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
const joseHeader = {
|
|
17
|
-
...protectedHeader,
|
|
18
|
-
...unprotectedHeader,
|
|
19
|
-
...sharedUnprotectedHeader,
|
|
20
|
-
};
|
|
21
|
-
validateCrit(JWEInvalid, JWE_RECOGNIZED, crit, protectedHeader, joseHeader);
|
|
22
|
-
if (joseHeader.zip !== undefined && joseHeader.zip !== 'DEF') {
|
|
23
|
-
throw new JOSENotSupported('Unsupported JWE "zip" (Compression Algorithm) Header Parameter value.');
|
|
24
|
-
}
|
|
25
|
-
if (joseHeader.zip !== undefined && !protectedHeader?.zip) {
|
|
26
|
-
throw new JWEInvalid('JWE "zip" (Compression Algorithm) Header Parameter MUST be in a protected header.');
|
|
27
|
-
}
|
|
28
|
-
const { alg, enc } = joseHeader;
|
|
29
|
-
if (typeof alg !== 'string' || !alg) {
|
|
30
|
-
throw new JWEInvalid('JWE "alg" (Algorithm) Header Parameter missing or invalid');
|
|
31
|
-
}
|
|
32
|
-
if (typeof enc !== 'string' || !enc) {
|
|
33
|
-
throw new JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter missing or invalid');
|
|
34
|
-
}
|
|
35
|
-
return [joseHeader, alg, enc, jweEncryption(enc)];
|
|
1
|
+
import { encode as b64u } from "../util/base64url.js";
|
|
2
|
+
import { checkCekLength, encrypt, generateCek } from "./content_encryption.js";
|
|
3
|
+
import { encryptKeyManagement } from "./key_management.js";
|
|
4
|
+
import { JWEInvalid } from "../util/errors.js";
|
|
5
|
+
import { assertUint8Array, isDisjoint, isObject } from "./type_checks.js";
|
|
6
|
+
import { concat, encode } from "./buffer_utils.js";
|
|
7
|
+
import { serializeJoseHeader, validateCrit, validateCritDuplicates, JWE_RECOGNIZED } from "./options.js";
|
|
8
|
+
import { prepareKey } from "./key.js";
|
|
9
|
+
import { JWE, invalidJWEKeyManagementMode, isJWECEKTransport, jweAlgorithm, jweEncryption } from "./jwe_algorithms.js";
|
|
10
|
+
import { compress, validateZip } from "./deflate.js";
|
|
11
|
+
import { unprotected } from "./helpers.js";
|
|
12
|
+
function checkDisjoint(protectedHeader, unprotectedHeader, sharedUnprotectedHeader) {
|
|
13
|
+
if (!isDisjoint(protectedHeader, unprotectedHeader, sharedUnprotectedHeader))
|
|
14
|
+
throw new JWEInvalid("JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint");
|
|
36
15
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
16
|
+
function checkEncryptHeaders(input) {
|
|
17
|
+
let [, protectedHeader, unprotectedHeader, sharedUnprotectedHeader, aad, cek, iv, keyManagementParameters, crit] = input;
|
|
18
|
+
if (aad !== void 0 && assertUint8Array(aad, "JWE Additional Authenticated Data"), cek !== void 0 && assertUint8Array(cek, "JWE Content Encryption Key"), iv !== void 0 && assertUint8Array(iv, "JWE Initialization Vector"), protectedHeader !== void 0 && (protectedHeader = serializeJoseHeader(JWEInvalid, protectedHeader)[0], input[1] = protectedHeader), unprotectedHeader !== void 0 && (unprotectedHeader = serializeJoseHeader(JWEInvalid, unprotectedHeader)[0], input[2] = unprotectedHeader), sharedUnprotectedHeader !== void 0 && (sharedUnprotectedHeader = serializeJoseHeader(JWEInvalid, sharedUnprotectedHeader)[0], input[3] = sharedUnprotectedHeader), keyManagementParameters !== void 0 && !isObject(keyManagementParameters))
|
|
19
|
+
throw new TypeError("JWE Key Management Parameters must be an object");
|
|
20
|
+
checkDisjoint(protectedHeader, unprotectedHeader, sharedUnprotectedHeader);
|
|
21
|
+
const joseHeader = {
|
|
22
|
+
...protectedHeader,
|
|
23
|
+
...unprotectedHeader,
|
|
24
|
+
...sharedUnprotectedHeader
|
|
25
|
+
};
|
|
26
|
+
validateCritDuplicates(JWEInvalid, protectedHeader), validateCrit(JWEInvalid, JWE_RECOGNIZED, crit, protectedHeader, joseHeader), validateZip(joseHeader, protectedHeader);
|
|
27
|
+
const { alg, enc } = joseHeader;
|
|
28
|
+
if (typeof alg != "string" || !alg)
|
|
29
|
+
throw new JWEInvalid('JWE "alg" (Algorithm) Header Parameter missing or invalid');
|
|
30
|
+
if (JWE[alg]?.mode === "integrated-encryption") {
|
|
31
|
+
if (enc !== void 0)
|
|
32
|
+
throw new JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter must not be present for integrated encryption');
|
|
33
|
+
if (cek !== void 0)
|
|
34
|
+
throw new TypeError(`setContentEncryptionKey cannot be called with JWE "alg" (Algorithm) Header ${alg}`);
|
|
35
|
+
if (iv !== void 0)
|
|
36
|
+
throw new TypeError(`setInitializationVector cannot be called with JWE "alg" (Algorithm) Header ${alg}`);
|
|
37
|
+
return [joseHeader, alg, void 0, void 0];
|
|
38
|
+
}
|
|
39
|
+
if (typeof enc != "string" || !enc)
|
|
40
|
+
throw new JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter missing or invalid');
|
|
41
|
+
return [joseHeader, alg, enc, jweEncryption(enc)];
|
|
42
|
+
}
|
|
43
|
+
function checkProducedEncryptedKey(encryptedKey) {
|
|
44
|
+
if (!(encryptedKey instanceof Uint8Array) || !encryptedKey.byteLength)
|
|
45
|
+
throw new TypeError("JWE key management algorithm did not produce an Encrypted Key");
|
|
46
|
+
}
|
|
47
|
+
async function transportCek(algEntry, encEntry, key, providedCek, joseHeader, providedParameters) {
|
|
48
|
+
const preparedKey = await prepareKey(algEntry, key, "encrypt"), cek = providedCek ?? generateCek(encEntry);
|
|
49
|
+
checkCekLength(cek, encEntry.cekBits);
|
|
50
|
+
const [, encryptedKey, parameters] = await encryptKeyManagement(algEntry, encEntry, preparedKey, joseHeader, cek, providedParameters);
|
|
51
|
+
return checkProducedEncryptedKey(encryptedKey), [cek, encryptedKey, parameters];
|
|
52
|
+
}
|
|
53
|
+
async function encryptJWE(input, checked, key, resolvedAlgEntry) {
|
|
54
|
+
const [joseHeader, alg, , encEntry] = checked, [inputPlaintext, inputProtectedHeader, inputUnprotectedHeader, sharedUnprotectedHeader, aad, providedCek, inputIv, keyManagementParameters, , unprotectedParameters] = input;
|
|
55
|
+
let protectedHeader = inputProtectedHeader, unprotectedHeader = inputUnprotectedHeader;
|
|
56
|
+
const algEntry = resolvedAlgEntry ?? jweAlgorithm(alg);
|
|
57
|
+
if (providedCek !== void 0 && !isJWECEKTransport(algEntry))
|
|
58
|
+
throw new TypeError(`setContentEncryptionKey cannot be called with JWE "alg" (Algorithm) Header ${alg}`);
|
|
59
|
+
let encryptedKey, parameters, cek, integratedKey;
|
|
60
|
+
const mode = algEntry.mode;
|
|
61
|
+
switch (mode) {
|
|
62
|
+
case "direct-encryption":
|
|
63
|
+
cek = await prepareKey(encEntry, key, "encrypt");
|
|
64
|
+
break;
|
|
65
|
+
case "direct-key-agreement": {
|
|
66
|
+
const preparedKey = await prepareKey(algEntry, key, "encrypt");
|
|
67
|
+
[cek, , parameters] = await encryptKeyManagement(algEntry, encEntry, preparedKey, joseHeader, void 0, keyManagementParameters);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case "key-wrapping":
|
|
71
|
+
case "key-encryption":
|
|
72
|
+
case "key-agreement-with-key-wrapping":
|
|
73
|
+
[cek, encryptedKey, parameters] = await transportCek(algEntry, encEntry, key, providedCek, joseHeader, keyManagementParameters);
|
|
74
|
+
break;
|
|
75
|
+
case "integrated-encryption":
|
|
76
|
+
integratedKey = await prepareKey(algEntry, key, "encrypt");
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
invalidJWEKeyManagementMode(mode);
|
|
80
|
+
}
|
|
81
|
+
parameters && (unprotectedParameters ? unprotectedHeader = unprotectedHeader ? { ...unprotectedHeader, ...parameters } : parameters : protectedHeader = protectedHeader ? { ...protectedHeader, ...parameters } : parameters, checkDisjoint(protectedHeader, unprotectedHeader, sharedUnprotectedHeader));
|
|
82
|
+
let protectedHeaderS, protectedHeaderB;
|
|
83
|
+
protectedHeader ? (protectedHeaderS = b64u(JSON.stringify(protectedHeader)), protectedHeaderB = encode(protectedHeaderS)) : (protectedHeaderS = "", protectedHeaderB = new Uint8Array());
|
|
84
|
+
let additionalData, aadMember;
|
|
85
|
+
aad?.byteLength ? (aadMember = b64u(aad), additionalData = concat(protectedHeaderB, encode("."), encode(aadMember))) : additionalData = protectedHeaderB;
|
|
86
|
+
let plaintext = inputPlaintext;
|
|
87
|
+
joseHeader.zip === "DEF" && (plaintext = await compress(plaintext).catch((cause) => {
|
|
88
|
+
throw new JWEInvalid("Failed to compress plaintext", { cause });
|
|
89
|
+
}));
|
|
90
|
+
let ciphertext, tag, iv;
|
|
91
|
+
algEntry.mode === "integrated-encryption" ? [encryptedKey, ciphertext] = await algEntry.encrypt(integratedKey, plaintext, additionalData, protectedHeader, joseHeader, keyManagementParameters) : { ciphertext, tag, iv } = await encrypt(encEntry, plaintext, cek, inputIv, additionalData);
|
|
92
|
+
const jwe = {
|
|
93
|
+
ciphertext: b64u(ciphertext)
|
|
94
|
+
};
|
|
95
|
+
return iv && (jwe.iv = b64u(iv)), tag && (jwe.tag = b64u(tag)), encryptedKey?.byteLength && (jwe.encrypted_key = b64u(encryptedKey)), aadMember && (jwe.aad = aadMember), protectedHeader && (jwe.protected = protectedHeaderS), sharedUnprotectedHeader && (jwe.unprotected = sharedUnprotectedHeader), unprotectedHeader && (jwe.header = unprotectedHeader), jwe;
|
|
107
96
|
}
|
|
108
|
-
|
|
109
|
-
|
|
97
|
+
async function createJWE(input, key, options) {
|
|
98
|
+
if (!input[1] && !input[2] && !input[3])
|
|
99
|
+
throw new JWEInvalid("either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()");
|
|
100
|
+
return options !== void 0 && (input[8] = options?.crit, input[9] = options ? unprotected in options : !1), encryptJWE(input, checkEncryptHeaders(input), key);
|
|
110
101
|
}
|
|
102
|
+
export {
|
|
103
|
+
checkDisjoint,
|
|
104
|
+
checkEncryptHeaders,
|
|
105
|
+
createJWE,
|
|
106
|
+
encryptJWE,
|
|
107
|
+
transportCek
|
|
108
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function snapshotJwk(jwk) {
|
|
2
|
+
return { __proto__: null, ...jwk };
|
|
3
|
+
}
|
|
4
|
+
function normalizeJwk(jwk) {
|
|
5
|
+
const normalized = snapshotJwk(jwk);
|
|
6
|
+
if (normalized.ext !== void 0 && typeof normalized.ext != "boolean")
|
|
7
|
+
throw new TypeError('"ext" (Extractable) Parameter must be a boolean');
|
|
8
|
+
if (normalized.key_ops !== void 0) {
|
|
9
|
+
const value = normalized.key_ops, keyOps = Array.isArray(value) ? [...value] : void 0;
|
|
10
|
+
if (!keyOps || keyOps.some((operation) => typeof operation != "string") || new Set(keyOps).size !== keyOps.length)
|
|
11
|
+
throw new TypeError('"key_ops" (Key Operations) Parameter must be an array of unique strings');
|
|
12
|
+
normalized.key_ops = keyOps;
|
|
13
|
+
}
|
|
14
|
+
return normalized;
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
normalizeJwk,
|
|
18
|
+
snapshotJwk
|
|
19
|
+
};
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
import { JOSENotSupported } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
8
|
-
}
|
|
9
|
-
const algorithm = entry.resolve?.({ kty: jwk.kty, crv: jwk.crv }) ?? entry.subtle;
|
|
10
|
-
const isPrivate = !!(jwk.d || jwk.priv);
|
|
11
|
-
const keyData = { ...jwk };
|
|
12
|
-
if (keyData.kty !== 'AKP') {
|
|
13
|
-
delete keyData.alg;
|
|
14
|
-
}
|
|
15
|
-
delete keyData.use;
|
|
16
|
-
return crypto.subtle.importKey('jwk', keyData, algorithm, jwk.ext ?? !isPrivate, jwk.key_ops ?? entry.usages[isPrivate ? 1 : 0]);
|
|
1
|
+
import { JOSENotSupported } from "../util/errors.js";
|
|
2
|
+
async function jwkToKey(entry, jwk) {
|
|
3
|
+
if (!entry.kty.includes(jwk.kty))
|
|
4
|
+
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
5
|
+
const algorithm = entry.resolve?.({ kty: jwk.kty, crv: jwk.crv }) ?? entry.subtle, isPrivate = !!(jwk.d || jwk.priv), keyData = { ...jwk };
|
|
6
|
+
return keyData.kty !== "AKP" && delete keyData.alg, delete keyData.use, crypto.subtle.importKey("jwk", keyData, algorithm, jwk.ext ?? !isPrivate, jwk.key_ops ?? entry.usages[isPrivate ? 1 : 0]);
|
|
17
7
|
}
|
|
8
|
+
export {
|
|
9
|
+
jwkToKey
|
|
10
|
+
};
|
|
@@ -1,73 +1,74 @@
|
|
|
1
|
-
import { JOSENotSupported } from
|
|
2
|
-
import { table } from
|
|
3
|
-
const sig = [[
|
|
1
|
+
import { JOSENotSupported } from "../util/errors.js";
|
|
2
|
+
import { table } from "./key_descriptor.js";
|
|
3
|
+
const sig = [["verify"], ["sign"]];
|
|
4
4
|
function hmac(bits) {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const subtle = { name: "HMAC", hash: `SHA-${bits}` };
|
|
6
|
+
return { kty: ["oct"], secret: !0, subtle, signing: subtle, usages: sig };
|
|
7
7
|
}
|
|
8
8
|
function rsa(bits, saltLength) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
9
|
+
const subtle = { name: saltLength ? "RSA-PSS" : "RSASSA-PKCS1-v1_5", hash: `SHA-${bits}` };
|
|
10
|
+
return {
|
|
11
|
+
kty: ["RSA"],
|
|
12
|
+
subtle,
|
|
13
|
+
signing: saltLength ? { ...subtle, saltLength } : subtle,
|
|
14
|
+
usages: sig,
|
|
15
|
+
minRsaBits: 2048
|
|
16
|
+
};
|
|
18
17
|
}
|
|
19
18
|
function ecdsa(crv, bits) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
return {
|
|
20
|
+
kty: ["EC"],
|
|
21
|
+
crv,
|
|
22
|
+
subtle: { name: "ECDSA", namedCurve: crv },
|
|
23
|
+
signing: { name: "ECDSA", hash: `SHA-${bits}` },
|
|
24
|
+
usages: sig
|
|
25
|
+
};
|
|
27
26
|
}
|
|
28
27
|
function eddsa() {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
const subtle = { name: "Ed25519" };
|
|
29
|
+
return {
|
|
30
|
+
kty: ["OKP"],
|
|
31
|
+
crv: "Ed25519",
|
|
32
|
+
subtle,
|
|
33
|
+
signing: subtle,
|
|
34
|
+
usages: sig
|
|
35
|
+
};
|
|
37
36
|
}
|
|
38
37
|
function mldsa(bits) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
38
|
+
const subtle = { name: `ML-DSA-${bits}` };
|
|
39
|
+
return {
|
|
40
|
+
kty: ["AKP"],
|
|
41
|
+
subtle,
|
|
42
|
+
signing: subtle,
|
|
43
|
+
usages: sig
|
|
44
|
+
};
|
|
47
45
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
46
|
+
const JWS = table({
|
|
47
|
+
HS256: hmac(256),
|
|
48
|
+
HS384: hmac(384),
|
|
49
|
+
HS512: hmac(512),
|
|
50
|
+
RS256: rsa(256),
|
|
51
|
+
RS384: rsa(384),
|
|
52
|
+
RS512: rsa(512),
|
|
53
|
+
PS256: rsa(256, 32),
|
|
54
|
+
PS384: rsa(384, 48),
|
|
55
|
+
PS512: rsa(512, 64),
|
|
56
|
+
ES256: ecdsa("P-256", 256),
|
|
57
|
+
ES384: ecdsa("P-384", 384),
|
|
58
|
+
ES512: ecdsa("P-521", 512),
|
|
59
|
+
EdDSA: eddsa(),
|
|
60
|
+
Ed25519: eddsa(),
|
|
61
|
+
"ML-DSA-44": mldsa(44),
|
|
62
|
+
"ML-DSA-65": mldsa(65),
|
|
63
|
+
"ML-DSA-87": mldsa(87)
|
|
66
64
|
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return entry;
|
|
65
|
+
function jwsAlgorithm(alg) {
|
|
66
|
+
const entry = typeof alg == "string" ? JWS[alg] : void 0;
|
|
67
|
+
if (!entry)
|
|
68
|
+
throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
|
|
69
|
+
return entry;
|
|
73
70
|
}
|
|
71
|
+
export {
|
|
72
|
+
JWS,
|
|
73
|
+
jwsAlgorithm
|
|
74
|
+
};
|
|
@@ -1,74 +1,60 @@
|
|
|
1
|
-
import { encode as b64u } from
|
|
2
|
-
import { sign } from
|
|
3
|
-
import { jwsAlgorithm } from
|
|
4
|
-
import { isDisjoint } from
|
|
5
|
-
import { JWSInvalid } from
|
|
6
|
-
import { concat, encode } from
|
|
7
|
-
import { validateCrit, validateCritDuplicates, JWS_RECOGNIZED } from
|
|
8
|
-
import { prepareKey } from
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { encode as b64u } from "../util/base64url.js";
|
|
2
|
+
import { sign } from "./signing.js";
|
|
3
|
+
import { jwsAlgorithm } from "./jws_algorithms.js";
|
|
4
|
+
import { isDisjoint } from "./type_checks.js";
|
|
5
|
+
import { JWSInvalid } from "../util/errors.js";
|
|
6
|
+
import { concat, encode } from "./buffer_utils.js";
|
|
7
|
+
import { serializeJoseHeader, validateB64, validateCrit, validateCritDuplicates, JWS_RECOGNIZED } from "./options.js";
|
|
8
|
+
import { prepareKey } from "./key.js";
|
|
9
|
+
function serializeProtectedHeader(protectedHeader) {
|
|
10
|
+
if (protectedHeader === void 0)
|
|
11
|
+
return [void 0, ""];
|
|
12
|
+
const normalized = serializeJoseHeader(JWSInvalid, protectedHeader);
|
|
13
|
+
return [normalized[0], b64u(normalized[1])];
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (!protectedHeader && !unprotectedHeader) {
|
|
17
|
-
throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');
|
|
18
|
-
}
|
|
19
|
-
if (!isDisjoint(protectedHeader, unprotectedHeader)) {
|
|
20
|
-
throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');
|
|
21
|
-
}
|
|
22
|
-
const joseHeader = { ...protectedHeader, ...unprotectedHeader };
|
|
23
|
-
validateCritDuplicates(JWSInvalid, protectedHeader);
|
|
24
|
-
const extensions = validateCrit(JWSInvalid, JWS_RECOGNIZED, input.crit, protectedHeader, joseHeader);
|
|
25
|
-
let b64 = true;
|
|
26
|
-
if (extensions.includes('b64')) {
|
|
27
|
-
b64 = protectedHeader.b64;
|
|
28
|
-
if (typeof b64 !== 'boolean') {
|
|
29
|
-
throw new JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean');
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
const { alg } = joseHeader;
|
|
33
|
-
if (typeof alg !== 'string' || !alg) {
|
|
34
|
-
throw new JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');
|
|
35
|
-
}
|
|
36
|
-
const entry = jwsAlgorithm(alg);
|
|
37
|
-
let payloadS;
|
|
38
|
-
let payloadB;
|
|
39
|
-
if (b64) {
|
|
40
|
-
const encoded = (input.encoded ??= []);
|
|
41
|
-
encoded[0] ??= b64u(input.payload);
|
|
42
|
-
encoded[1] ??= encode(encoded[0]);
|
|
43
|
-
payloadS = encoded[0];
|
|
44
|
-
payloadB = encoded[1];
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
payloadB = input.payload;
|
|
48
|
-
payloadS = '';
|
|
49
|
-
}
|
|
50
|
-
let protectedHeaderString;
|
|
51
|
-
let protectedHeaderBytes;
|
|
52
|
-
if (protectedHeader) {
|
|
53
|
-
protectedHeaderString = b64u(JSON.stringify(protectedHeader));
|
|
54
|
-
protectedHeaderBytes = encode(protectedHeaderString);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
protectedHeaderString = '';
|
|
58
|
-
protectedHeaderBytes = new Uint8Array();
|
|
59
|
-
}
|
|
60
|
-
const data = concat(protectedHeaderBytes, encode('.'), payloadB);
|
|
61
|
-
const k = await prepareKey(entry, key, 'sign');
|
|
62
|
-
const signature = await sign(entry, k, data);
|
|
63
|
-
const jws = {
|
|
64
|
-
signature: b64u(signature),
|
|
65
|
-
payload: payloadS,
|
|
66
|
-
};
|
|
67
|
-
if (protectedHeader) {
|
|
68
|
-
jws.protected = protectedHeaderString;
|
|
69
|
-
}
|
|
70
|
-
if (unprotectedHeader) {
|
|
71
|
-
jws.header = unprotectedHeader;
|
|
72
|
-
}
|
|
73
|
-
return jws;
|
|
15
|
+
function validateSignatureHeader(protectedHeader, joseHeader, crit) {
|
|
16
|
+
return validateCritDuplicates(JWSInvalid, protectedHeader), validateB64(protectedHeader, validateCrit(JWSInvalid, JWS_RECOGNIZED, crit, protectedHeader, joseHeader));
|
|
74
17
|
}
|
|
18
|
+
function signatureAlgorithm(joseHeader) {
|
|
19
|
+
const alg = joseHeader.alg;
|
|
20
|
+
if (typeof alg != "string" || !alg)
|
|
21
|
+
throw new JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');
|
|
22
|
+
return jwsAlgorithm(alg);
|
|
23
|
+
}
|
|
24
|
+
async function signSignature(protectedHeader, payload, entry, key) {
|
|
25
|
+
const data = concat(encode(protectedHeader), encode("."), payload), k = await prepareKey(entry, key, "sign");
|
|
26
|
+
return b64u(await sign(entry, k, data));
|
|
27
|
+
}
|
|
28
|
+
async function createSignature(input, key, assertB64) {
|
|
29
|
+
let { protectedHeader, unprotectedHeader } = input, protectedHeaderString;
|
|
30
|
+
if ([protectedHeader, protectedHeaderString] = serializeProtectedHeader(protectedHeader), unprotectedHeader !== void 0 && (unprotectedHeader = serializeJoseHeader(JWSInvalid, unprotectedHeader)[0]), !protectedHeader && !unprotectedHeader)
|
|
31
|
+
throw new JWSInvalid("either setProtectedHeader or setUnprotectedHeader must be called before #sign()");
|
|
32
|
+
if (!isDisjoint(protectedHeader, unprotectedHeader))
|
|
33
|
+
throw new JWSInvalid("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");
|
|
34
|
+
const joseHeader = { ...protectedHeader, ...unprotectedHeader }, b64 = validateSignatureHeader(protectedHeader, joseHeader, input.crit);
|
|
35
|
+
assertB64?.(b64);
|
|
36
|
+
const entry = signatureAlgorithm(joseHeader);
|
|
37
|
+
let payloadS, payloadB;
|
|
38
|
+
if (b64) {
|
|
39
|
+
const encoded = input.encoded ??= [];
|
|
40
|
+
encoded[0] ??= b64u(input.payload), encoded[1] ??= encode(encoded[0]), payloadS = encoded[0], payloadB = encoded[1];
|
|
41
|
+
} else
|
|
42
|
+
payloadB = input.payload, payloadS = "";
|
|
43
|
+
const jws = {
|
|
44
|
+
signature: await signSignature(protectedHeaderString, payloadB, entry, key),
|
|
45
|
+
payload: payloadS
|
|
46
|
+
};
|
|
47
|
+
return protectedHeader && (jws.protected = protectedHeaderString), unprotectedHeader && (jws.header = unprotectedHeader), [jws, b64];
|
|
48
|
+
}
|
|
49
|
+
async function createCompactSignature(payload, inputProtectedHeader, inputCrit, key, rejectUnencoded) {
|
|
50
|
+
const [protectedHeader, protectedHeaderString] = serializeProtectedHeader(inputProtectedHeader);
|
|
51
|
+
if (!protectedHeader)
|
|
52
|
+
throw new JWSInvalid("either setProtectedHeader or setUnprotectedHeader must be called before #sign()");
|
|
53
|
+
validateSignatureHeader(protectedHeader, protectedHeader, inputCrit) || rejectUnencoded();
|
|
54
|
+
const entry = signatureAlgorithm(protectedHeader), encodedPayload = b64u(payload), signature = await signSignature(protectedHeaderString, encode(encodedPayload), entry, key);
|
|
55
|
+
return `${protectedHeaderString}.${encodedPayload}.${signature}`;
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
createCompactSignature,
|
|
59
|
+
createSignature
|
|
60
|
+
};
|