conductor-oss 0.4.0 → 0.6.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/dist/backend.d.ts +112 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +101 -0
- package/dist/backend.js.map +1 -0
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +8 -6
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +84 -147
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +3 -8
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +56 -128
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/kill.d.ts.map +1 -1
- package/dist/commands/kill.js +6 -11
- package/dist/commands/kill.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +12 -10
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/mcp-server.d.ts +0 -20
- package/dist/commands/mcp-server.d.ts.map +1 -1
- package/dist/commands/mcp-server.js +18 -22
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +7 -12
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/retry.d.ts.map +1 -1
- package/dist/commands/retry.js +2 -5
- package/dist/commands/retry.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +5 -9
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/spawn.d.ts.map +1 -1
- package/dist/commands/spawn.js +16 -17
- package/dist/commands/spawn.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +7 -7
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/task.d.ts.map +1 -1
- package/dist/commands/task.js +3 -5
- package/dist/commands/task.js.map +1 -1
- package/dist/rust-cli.d.ts +9 -0
- package/dist/rust-cli.d.ts.map +1 -0
- package/dist/rust-cli.js +75 -0
- package/dist/rust-cli.js.map +1 -0
- package/node_modules/@conductor-oss/plugin-agent-amp/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-codex/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-droid/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-mcp-server/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-scm-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-terminal-web/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-tracker-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +1 -1
- package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +11 -36
- package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +10 -22
- package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +1 -1
- package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +8 -16
- package/node_modules/jose/dist/webapi/jwk/embedded.js +1 -1
- package/node_modules/jose/dist/webapi/jwk/thumbprint.js +2 -2
- package/node_modules/jose/dist/webapi/jwks/local.js +1 -1
- package/node_modules/jose/dist/webapi/jwks/remote.js +2 -2
- package/node_modules/jose/dist/webapi/jws/flattened/sign.js +5 -8
- package/node_modules/jose/dist/webapi/jws/flattened/verify.js +6 -16
- package/node_modules/jose/dist/webapi/jws/general/sign.js +3 -6
- package/node_modules/jose/dist/webapi/jws/general/verify.js +1 -1
- package/node_modules/jose/dist/webapi/jwt/encrypt.js +5 -12
- package/node_modules/jose/dist/webapi/key/import.js +1 -1
- package/node_modules/jose/dist/webapi/lib/aesgcmkw.js +1 -2
- package/node_modules/jose/dist/webapi/lib/check_key_type.js +1 -1
- package/node_modules/jose/dist/webapi/lib/content_encryption.js +217 -0
- package/node_modules/jose/dist/webapi/lib/crypto_key.js +9 -16
- package/node_modules/jose/dist/webapi/lib/ecdhes.js +1 -1
- package/node_modules/jose/dist/webapi/lib/helpers.js +19 -0
- package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +9 -11
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +1 -1
- package/node_modules/jose/dist/webapi/lib/key_management.js +186 -0
- package/node_modules/jose/dist/webapi/lib/normalize_key.js +10 -20
- package/node_modules/jose/dist/webapi/lib/rsaes.js +1 -1
- package/node_modules/jose/dist/webapi/lib/signing.js +68 -0
- package/node_modules/jose/dist/webapi/lib/type_checks.js +40 -0
- package/node_modules/jose/dist/webapi/util/decode_jwt.js +1 -1
- package/node_modules/jose/dist/webapi/util/decode_protected_header.js +1 -1
- package/node_modules/jose/package.json +1 -1
- package/package.json +23 -23
- package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/packages/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js +3 -4
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__02aa69a2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__06b6b4e9._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__025155ac._.js → [root-of-the-server]__0cdc32e7._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__105e4f26._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__119c6b92._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__137fab33._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__15c7d025._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1be57288._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__66e8ccce._.js → [root-of-the-server]__1d2f280d._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1e450a04._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2ce39d51._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__30055cf3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__85b114a2._.js → [root-of-the-server]__308f1548._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__30e803d7._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3cfb9abc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__a45d3a1d._.js → [root-of-the-server]__3d4382ac._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__41e0efdc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__42e88695._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__45147dc5._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__46573554._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__47b9cd43._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4c56df8f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5064824d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__57113ab2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5b1a6733._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__64061a84._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__668ff2cd._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6a1b89e2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7ddba7a1._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__87674bea._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__89cafbb6._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8baf1991._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__92efd41b._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__97b2fe24._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a2cdc6d9._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a80a6abe._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ac588927._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b03e9dba._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b0bc3324._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b39c66d6._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c207ffb8._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c24a825f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c27d443a._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d0fc233f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d35c3ac2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d3d0e4a1._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e2d46590._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e7aa992a._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ec231481._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef43f682._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f134e517._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f7e5d8de._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/_2c837d66._.js +5 -5
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__000b8c99._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__4168e031._.js → [root-of-the-server]__13c58ffa._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__29d8d063._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_1f2460d5._.js → _08147ea0._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b6d31783._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_4622a292._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{node_modules_@clerk_nextjs_dist_esm_app-router_0a811c5a._.js → node_modules_@clerk_nextjs_dist_esm_app-router_9141c401._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/functions-config-manifest.json +3 -2
- package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +8 -8
- package/web/.next/standalone/packages/web/.next/static/chunks/4486758753cb685a.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/48b4b6b3dba3b0b6.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{2e2e8fd2ceca47dc.js → 97ae9d425d9939b0.js} +2 -2
- package/web/.next/standalone/packages/web/src/app/api/agents/route.ts +2 -196
- package/web/.next/standalone/packages/web/src/app/api/auth/session/route.ts +3 -38
- package/web/.next/standalone/packages/web/src/app/api/events/route.ts +61 -2
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/feed/stream/route.ts +75 -5
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/output/stream/route.ts +75 -5
- package/web/.next/static/chunks/4486758753cb685a.js +1 -0
- package/web/.next/static/chunks/48b4b6b3dba3b0b6.js +1 -0
- package/web/.next/static/chunks/{2e2e8fd2ceca47dc.js → 97ae9d425d9939b0.js} +2 -2
- package/node_modules/jose/dist/webapi/lib/cek.js +0 -19
- package/node_modules/jose/dist/webapi/lib/check_cek_length.js +0 -7
- package/node_modules/jose/dist/webapi/lib/check_iv_length.js +0 -7
- package/node_modules/jose/dist/webapi/lib/check_key_length.js +0 -8
- package/node_modules/jose/dist/webapi/lib/decrypt.js +0 -106
- package/node_modules/jose/dist/webapi/lib/decrypt_key_management.js +0 -127
- package/node_modules/jose/dist/webapi/lib/digest.js +0 -4
- package/node_modules/jose/dist/webapi/lib/encrypt.js +0 -74
- package/node_modules/jose/dist/webapi/lib/encrypt_key_management.js +0 -92
- package/node_modules/jose/dist/webapi/lib/get_sign_verify_key.js +0 -12
- package/node_modules/jose/dist/webapi/lib/is_disjoint.js +0 -21
- package/node_modules/jose/dist/webapi/lib/is_jwk.js +0 -6
- package/node_modules/jose/dist/webapi/lib/is_object.js +0 -14
- package/node_modules/jose/dist/webapi/lib/iv.js +0 -19
- package/node_modules/jose/dist/webapi/lib/private_symbols.js +0 -1
- package/node_modules/jose/dist/webapi/lib/sign.js +0 -9
- package/node_modules/jose/dist/webapi/lib/subtle_dsa.js +0 -31
- package/node_modules/jose/dist/webapi/lib/verify.js +0 -14
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__07d320fc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0d3270b2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__186317eb._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1888a793._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1ae07be2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1c1c0e68._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1ce34a21._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__31703e2b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__394943dc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3bab2cf7._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3f48e8a2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__405fc5bc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__428f1837._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__49e358a8._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5dc7cf0d._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5fd67791._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__61a55b93._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__621d9bca._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__65fcccc8._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6b163dd7._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6c5a5852._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78d6e137._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7dac9015._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7fcfdb86._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__90d02df4._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__95440fe8._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__968aabbd._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__97658502._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b5c89bad._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b73a3118._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c06cb06b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c9626ece._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cb1e2942._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cc4964a5._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cdcdbbe3._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ce529f57._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cfaae401._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d2afbd4e._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e0d759be._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eabdec9e._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ececfccf._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eda7b9ea._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef38eeb2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__efd26bfc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f4d63c18._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f8ebc9db._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5eb57175.js +0 -6
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_2c78c2f3._.js +0 -3
- package/web/.next/standalone/packages/web/.next/static/chunks/7fd2a83e9e74f215.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/91e9e111a2536f92.js +0 -1
- package/web/.next/static/chunks/7fd2a83e9e74f215.js +0 -1
- package/web/.next/static/chunks/91e9e111a2536f92.js +0 -1
- /package/web/.next/standalone/packages/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_buildManifest.js +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_ssgManifest.js +0 -0
- /package/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_buildManifest.js +0 -0
- /package/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_ssgManifest.js +0 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { decode as b64u } from '../../util/base64url.js';
|
|
2
|
-
import { decrypt } from '../../lib/
|
|
2
|
+
import { decrypt } from '../../lib/content_encryption.js';
|
|
3
|
+
import { decodeBase64url } from '../../lib/helpers.js';
|
|
3
4
|
import { JOSEAlgNotAllowed, JOSENotSupported, JWEInvalid } from '../../util/errors.js';
|
|
4
|
-
import { isDisjoint } from '../../lib/
|
|
5
|
-
import { isObject } from '../../lib/
|
|
6
|
-
import { decryptKeyManagement } from '../../lib/
|
|
5
|
+
import { isDisjoint } from '../../lib/type_checks.js';
|
|
6
|
+
import { isObject } from '../../lib/type_checks.js';
|
|
7
|
+
import { decryptKeyManagement } from '../../lib/key_management.js';
|
|
7
8
|
import { decoder, concat, encode } from '../../lib/buffer_utils.js';
|
|
8
|
-
import { generateCek } from '../../lib/
|
|
9
|
+
import { generateCek } from '../../lib/content_encryption.js';
|
|
9
10
|
import { validateCrit } from '../../lib/validate_crit.js';
|
|
10
11
|
import { validateAlgorithms } from '../../lib/validate_algorithms.js';
|
|
11
12
|
import { normalizeKey } from '../../lib/normalize_key.js';
|
|
@@ -86,12 +87,7 @@ export async function flattenedDecrypt(jwe, key, options) {
|
|
|
86
87
|
}
|
|
87
88
|
let encryptedKey;
|
|
88
89
|
if (jwe.encrypted_key !== undefined) {
|
|
89
|
-
|
|
90
|
-
encryptedKey = b64u(jwe.encrypted_key);
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
throw new JWEInvalid('Failed to base64url decode the encrypted_key');
|
|
94
|
-
}
|
|
90
|
+
encryptedKey = decodeBase64url(jwe.encrypted_key, 'encrypted_key', JWEInvalid);
|
|
95
91
|
}
|
|
96
92
|
let resolvedKey = false;
|
|
97
93
|
if (typeof key === 'function') {
|
|
@@ -113,20 +109,10 @@ export async function flattenedDecrypt(jwe, key, options) {
|
|
|
113
109
|
let iv;
|
|
114
110
|
let tag;
|
|
115
111
|
if (jwe.iv !== undefined) {
|
|
116
|
-
|
|
117
|
-
iv = b64u(jwe.iv);
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
throw new JWEInvalid('Failed to base64url decode the iv');
|
|
121
|
-
}
|
|
112
|
+
iv = decodeBase64url(jwe.iv, 'iv', JWEInvalid);
|
|
122
113
|
}
|
|
123
114
|
if (jwe.tag !== undefined) {
|
|
124
|
-
|
|
125
|
-
tag = b64u(jwe.tag);
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
throw new JWEInvalid('Failed to base64url decode the tag');
|
|
129
|
-
}
|
|
115
|
+
tag = decodeBase64url(jwe.tag, 'tag', JWEInvalid);
|
|
130
116
|
}
|
|
131
117
|
const protectedHeader = jwe.protected !== undefined ? encode(jwe.protected) : new Uint8Array();
|
|
132
118
|
let additionalData;
|
|
@@ -136,13 +122,7 @@ export async function flattenedDecrypt(jwe, key, options) {
|
|
|
136
122
|
else {
|
|
137
123
|
additionalData = protectedHeader;
|
|
138
124
|
}
|
|
139
|
-
|
|
140
|
-
try {
|
|
141
|
-
ciphertext = b64u(jwe.ciphertext);
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
throw new JWEInvalid('Failed to base64url decode the ciphertext');
|
|
145
|
-
}
|
|
125
|
+
const ciphertext = decodeBase64url(jwe.ciphertext, 'ciphertext', JWEInvalid);
|
|
146
126
|
const plaintext = await decrypt(enc, cek, ciphertext, iv, tag, additionalData);
|
|
147
127
|
const result = { plaintext };
|
|
148
128
|
if (joseHeader.zip === 'DEF') {
|
|
@@ -160,12 +140,7 @@ export async function flattenedDecrypt(jwe, key, options) {
|
|
|
160
140
|
result.protectedHeader = parsedProt;
|
|
161
141
|
}
|
|
162
142
|
if (jwe.aad !== undefined) {
|
|
163
|
-
|
|
164
|
-
result.additionalAuthenticatedData = b64u(jwe.aad);
|
|
165
|
-
}
|
|
166
|
-
catch {
|
|
167
|
-
throw new JWEInvalid('Failed to base64url decode the aad');
|
|
168
|
-
}
|
|
143
|
+
result.additionalAuthenticatedData = decodeBase64url(jwe.aad, 'aad', JWEInvalid);
|
|
169
144
|
}
|
|
170
145
|
if (jwe.unprotected !== undefined) {
|
|
171
146
|
result.sharedUnprotectedHeader = jwe.unprotected;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { encode as b64u } from '../../util/base64url.js';
|
|
2
|
-
import { unprotected } from '../../lib/
|
|
3
|
-
import { encrypt } from '../../lib/
|
|
4
|
-
import { encryptKeyManagement } from '../../lib/
|
|
2
|
+
import { unprotected, assertNotSet } from '../../lib/helpers.js';
|
|
3
|
+
import { encrypt } from '../../lib/content_encryption.js';
|
|
4
|
+
import { encryptKeyManagement } from '../../lib/key_management.js';
|
|
5
5
|
import { JOSENotSupported, JWEInvalid } from '../../util/errors.js';
|
|
6
|
-
import { isDisjoint } from '../../lib/
|
|
6
|
+
import { isDisjoint } from '../../lib/type_checks.js';
|
|
7
7
|
import { concat, encode } from '../../lib/buffer_utils.js';
|
|
8
8
|
import { validateCrit } from '../../lib/validate_crit.js';
|
|
9
9
|
import { normalizeKey } from '../../lib/normalize_key.js';
|
|
@@ -25,30 +25,22 @@ export class FlattenedEncrypt {
|
|
|
25
25
|
this.#plaintext = plaintext;
|
|
26
26
|
}
|
|
27
27
|
setKeyManagementParameters(parameters) {
|
|
28
|
-
|
|
29
|
-
throw new TypeError('setKeyManagementParameters can only be called once');
|
|
30
|
-
}
|
|
28
|
+
assertNotSet(this.#keyManagementParameters, 'setKeyManagementParameters');
|
|
31
29
|
this.#keyManagementParameters = parameters;
|
|
32
30
|
return this;
|
|
33
31
|
}
|
|
34
32
|
setProtectedHeader(protectedHeader) {
|
|
35
|
-
|
|
36
|
-
throw new TypeError('setProtectedHeader can only be called once');
|
|
37
|
-
}
|
|
33
|
+
assertNotSet(this.#protectedHeader, 'setProtectedHeader');
|
|
38
34
|
this.#protectedHeader = protectedHeader;
|
|
39
35
|
return this;
|
|
40
36
|
}
|
|
41
37
|
setSharedUnprotectedHeader(sharedUnprotectedHeader) {
|
|
42
|
-
|
|
43
|
-
throw new TypeError('setSharedUnprotectedHeader can only be called once');
|
|
44
|
-
}
|
|
38
|
+
assertNotSet(this.#sharedUnprotectedHeader, 'setSharedUnprotectedHeader');
|
|
45
39
|
this.#sharedUnprotectedHeader = sharedUnprotectedHeader;
|
|
46
40
|
return this;
|
|
47
41
|
}
|
|
48
42
|
setUnprotectedHeader(unprotectedHeader) {
|
|
49
|
-
|
|
50
|
-
throw new TypeError('setUnprotectedHeader can only be called once');
|
|
51
|
-
}
|
|
43
|
+
assertNotSet(this.#unprotectedHeader, 'setUnprotectedHeader');
|
|
52
44
|
this.#unprotectedHeader = unprotectedHeader;
|
|
53
45
|
return this;
|
|
54
46
|
}
|
|
@@ -57,16 +49,12 @@ export class FlattenedEncrypt {
|
|
|
57
49
|
return this;
|
|
58
50
|
}
|
|
59
51
|
setContentEncryptionKey(cek) {
|
|
60
|
-
|
|
61
|
-
throw new TypeError('setContentEncryptionKey can only be called once');
|
|
62
|
-
}
|
|
52
|
+
assertNotSet(this.#cek, 'setContentEncryptionKey');
|
|
63
53
|
this.#cek = cek;
|
|
64
54
|
return this;
|
|
65
55
|
}
|
|
66
56
|
setInitializationVector(iv) {
|
|
67
|
-
|
|
68
|
-
throw new TypeError('setInitializationVector can only be called once');
|
|
69
|
-
}
|
|
57
|
+
assertNotSet(this.#iv, 'setInitializationVector');
|
|
70
58
|
this.#iv = iv;
|
|
71
59
|
return this;
|
|
72
60
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { flattenedDecrypt } from '../flattened/decrypt.js';
|
|
2
2
|
import { JWEDecryptionFailed, JWEInvalid } from '../../util/errors.js';
|
|
3
|
-
import { isObject } from '../../lib/
|
|
3
|
+
import { isObject } from '../../lib/type_checks.js';
|
|
4
4
|
export async function generalDecrypt(jwe, key, options) {
|
|
5
5
|
if (!isObject(jwe)) {
|
|
6
6
|
throw new JWEInvalid('General JWE must be an object');
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { FlattenedEncrypt } from '../flattened/encrypt.js';
|
|
2
|
-
import { unprotected } from '../../lib/
|
|
2
|
+
import { unprotected, assertNotSet } from '../../lib/helpers.js';
|
|
3
3
|
import { JOSENotSupported, JWEInvalid } from '../../util/errors.js';
|
|
4
|
-
import { generateCek } from '../../lib/
|
|
5
|
-
import { isDisjoint } from '../../lib/
|
|
6
|
-
import { encryptKeyManagement } from '../../lib/
|
|
4
|
+
import { generateCek } from '../../lib/content_encryption.js';
|
|
5
|
+
import { isDisjoint } from '../../lib/type_checks.js';
|
|
6
|
+
import { encryptKeyManagement } from '../../lib/key_management.js';
|
|
7
7
|
import { encode as b64u } from '../../util/base64url.js';
|
|
8
8
|
import { validateCrit } from '../../lib/validate_crit.js';
|
|
9
9
|
import { normalizeKey } from '../../lib/normalize_key.js';
|
|
@@ -20,16 +20,12 @@ class IndividualRecipient {
|
|
|
20
20
|
this.options = options;
|
|
21
21
|
}
|
|
22
22
|
setUnprotectedHeader(unprotectedHeader) {
|
|
23
|
-
|
|
24
|
-
throw new TypeError('setUnprotectedHeader can only be called once');
|
|
25
|
-
}
|
|
23
|
+
assertNotSet(this.unprotectedHeader, 'setUnprotectedHeader');
|
|
26
24
|
this.unprotectedHeader = unprotectedHeader;
|
|
27
25
|
return this;
|
|
28
26
|
}
|
|
29
27
|
setKeyManagementParameters(parameters) {
|
|
30
|
-
|
|
31
|
-
throw new TypeError('setKeyManagementParameters can only be called once');
|
|
32
|
-
}
|
|
28
|
+
assertNotSet(this.keyManagementParameters, 'setKeyManagementParameters');
|
|
33
29
|
this.keyManagementParameters = parameters;
|
|
34
30
|
return this;
|
|
35
31
|
}
|
|
@@ -58,16 +54,12 @@ export class GeneralEncrypt {
|
|
|
58
54
|
return recipient;
|
|
59
55
|
}
|
|
60
56
|
setProtectedHeader(protectedHeader) {
|
|
61
|
-
|
|
62
|
-
throw new TypeError('setProtectedHeader can only be called once');
|
|
63
|
-
}
|
|
57
|
+
assertNotSet(this.#protectedHeader, 'setProtectedHeader');
|
|
64
58
|
this.#protectedHeader = protectedHeader;
|
|
65
59
|
return this;
|
|
66
60
|
}
|
|
67
61
|
setSharedUnprotectedHeader(sharedUnprotectedHeader) {
|
|
68
|
-
|
|
69
|
-
throw new TypeError('setSharedUnprotectedHeader can only be called once');
|
|
70
|
-
}
|
|
62
|
+
assertNotSet(this.#unprotectedHeader, 'setSharedUnprotectedHeader');
|
|
71
63
|
this.#unprotectedHeader = sharedUnprotectedHeader;
|
|
72
64
|
return this;
|
|
73
65
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { importJWK } from '../key/import.js';
|
|
2
|
-
import { isObject } from '../lib/
|
|
2
|
+
import { isObject } from '../lib/type_checks.js';
|
|
3
3
|
import { JWSInvalid } from '../util/errors.js';
|
|
4
4
|
export async function EmbeddedJWK(protectedHeader, token) {
|
|
5
5
|
const joseHeader = {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { digest } from '../lib/
|
|
1
|
+
import { digest } from '../lib/helpers.js';
|
|
2
2
|
import { encode as b64u } from '../util/base64url.js';
|
|
3
3
|
import { JOSENotSupported, JWKInvalid } from '../util/errors.js';
|
|
4
4
|
import { encode } from '../lib/buffer_utils.js';
|
|
5
5
|
import { isKeyLike } from '../lib/is_key_like.js';
|
|
6
|
-
import { isJWK } from '../lib/
|
|
6
|
+
import { isJWK } from '../lib/type_checks.js';
|
|
7
7
|
import { exportJWK } from '../key/export.js';
|
|
8
8
|
import { invalidKeyInput } from '../lib/invalid_key_input.js';
|
|
9
9
|
const check = (value, description) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { importJWK } from '../key/import.js';
|
|
2
2
|
import { JWKSInvalid, JOSENotSupported, JWKSNoMatchingKey, JWKSMultipleMatchingKeys, } from '../util/errors.js';
|
|
3
|
-
import { isObject } from '../lib/
|
|
3
|
+
import { isObject } from '../lib/type_checks.js';
|
|
4
4
|
function getKtyFromAlg(alg) {
|
|
5
5
|
switch (typeof alg === 'string' && alg.slice(0, 2)) {
|
|
6
6
|
case 'RS':
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { JOSEError, JWKSNoMatchingKey, JWKSTimeout } from '../util/errors.js';
|
|
2
2
|
import { createLocalJWKSet } from './local.js';
|
|
3
|
-
import { isObject } from '../lib/
|
|
3
|
+
import { isObject } from '../lib/type_checks.js';
|
|
4
4
|
function isCloudflareWorkers() {
|
|
5
5
|
return (typeof WebSocketPair !== 'undefined' ||
|
|
6
6
|
(typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||
|
|
@@ -9,7 +9,7 @@ function isCloudflareWorkers() {
|
|
|
9
9
|
let USER_AGENT;
|
|
10
10
|
if (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {
|
|
11
11
|
const NAME = 'jose';
|
|
12
|
-
const VERSION = 'v6.2.
|
|
12
|
+
const VERSION = 'v6.2.1';
|
|
13
13
|
USER_AGENT = `${NAME}/${VERSION}`;
|
|
14
14
|
}
|
|
15
15
|
export const customFetch = Symbol();
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { encode as b64u } from '../../util/base64url.js';
|
|
2
|
-
import { sign } from '../../lib/
|
|
3
|
-
import { isDisjoint } from '../../lib/
|
|
2
|
+
import { sign } from '../../lib/signing.js';
|
|
3
|
+
import { isDisjoint } from '../../lib/type_checks.js';
|
|
4
4
|
import { JWSInvalid } from '../../util/errors.js';
|
|
5
5
|
import { concat, encode } from '../../lib/buffer_utils.js';
|
|
6
6
|
import { checkKeyType } from '../../lib/check_key_type.js';
|
|
7
7
|
import { validateCrit } from '../../lib/validate_crit.js';
|
|
8
8
|
import { normalizeKey } from '../../lib/normalize_key.js';
|
|
9
|
+
import { assertNotSet } from '../../lib/helpers.js';
|
|
9
10
|
export class FlattenedSign {
|
|
10
11
|
#payload;
|
|
11
12
|
#protectedHeader;
|
|
@@ -17,16 +18,12 @@ export class FlattenedSign {
|
|
|
17
18
|
this.#payload = payload;
|
|
18
19
|
}
|
|
19
20
|
setProtectedHeader(protectedHeader) {
|
|
20
|
-
|
|
21
|
-
throw new TypeError('setProtectedHeader can only be called once');
|
|
22
|
-
}
|
|
21
|
+
assertNotSet(this.#protectedHeader, 'setProtectedHeader');
|
|
23
22
|
this.#protectedHeader = protectedHeader;
|
|
24
23
|
return this;
|
|
25
24
|
}
|
|
26
25
|
setUnprotectedHeader(unprotectedHeader) {
|
|
27
|
-
|
|
28
|
-
throw new TypeError('setUnprotectedHeader can only be called once');
|
|
29
|
-
}
|
|
26
|
+
assertNotSet(this.#unprotectedHeader, 'setUnprotectedHeader');
|
|
30
27
|
this.#unprotectedHeader = unprotectedHeader;
|
|
31
28
|
return this;
|
|
32
29
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { decode as b64u } from '../../util/base64url.js';
|
|
2
|
-
import { verify } from '../../lib/
|
|
2
|
+
import { verify } from '../../lib/signing.js';
|
|
3
3
|
import { JOSEAlgNotAllowed, JWSInvalid, JWSSignatureVerificationFailed } from '../../util/errors.js';
|
|
4
4
|
import { concat, encoder, decoder, encode } from '../../lib/buffer_utils.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { decodeBase64url } from '../../lib/helpers.js';
|
|
6
|
+
import { isDisjoint } from '../../lib/type_checks.js';
|
|
7
|
+
import { isObject } from '../../lib/type_checks.js';
|
|
7
8
|
import { checkKeyType } from '../../lib/check_key_type.js';
|
|
8
9
|
import { validateCrit } from '../../lib/validate_crit.js';
|
|
9
10
|
import { validateAlgorithms } from '../../lib/validate_algorithms.js';
|
|
@@ -79,13 +80,7 @@ export async function flattenedVerify(jws, key, options) {
|
|
|
79
80
|
? encode(jws.payload)
|
|
80
81
|
: encoder.encode(jws.payload)
|
|
81
82
|
: jws.payload);
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
signature = b64u(jws.signature);
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
throw new JWSInvalid('Failed to base64url decode the signature');
|
|
88
|
-
}
|
|
83
|
+
const signature = decodeBase64url(jws.signature, 'signature', JWSInvalid);
|
|
89
84
|
const k = await normalizeKey(key, alg);
|
|
90
85
|
const verified = await verify(alg, k, signature, data);
|
|
91
86
|
if (!verified) {
|
|
@@ -93,12 +88,7 @@ export async function flattenedVerify(jws, key, options) {
|
|
|
93
88
|
}
|
|
94
89
|
let payload;
|
|
95
90
|
if (b64) {
|
|
96
|
-
|
|
97
|
-
payload = b64u(jws.payload);
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
throw new JWSInvalid('Failed to base64url decode the payload');
|
|
101
|
-
}
|
|
91
|
+
payload = decodeBase64url(jws.payload, 'payload', JWSInvalid);
|
|
102
92
|
}
|
|
103
93
|
else if (typeof jws.payload === 'string') {
|
|
104
94
|
payload = encoder.encode(jws.payload);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FlattenedSign } from '../flattened/sign.js';
|
|
2
2
|
import { JWSInvalid } from '../../util/errors.js';
|
|
3
|
+
import { assertNotSet } from '../../lib/helpers.js';
|
|
3
4
|
class IndividualSignature {
|
|
4
5
|
#parent;
|
|
5
6
|
protectedHeader;
|
|
@@ -12,16 +13,12 @@ class IndividualSignature {
|
|
|
12
13
|
this.options = options;
|
|
13
14
|
}
|
|
14
15
|
setProtectedHeader(protectedHeader) {
|
|
15
|
-
|
|
16
|
-
throw new TypeError('setProtectedHeader can only be called once');
|
|
17
|
-
}
|
|
16
|
+
assertNotSet(this.protectedHeader, 'setProtectedHeader');
|
|
18
17
|
this.protectedHeader = protectedHeader;
|
|
19
18
|
return this;
|
|
20
19
|
}
|
|
21
20
|
setUnprotectedHeader(unprotectedHeader) {
|
|
22
|
-
|
|
23
|
-
throw new TypeError('setUnprotectedHeader can only be called once');
|
|
24
|
-
}
|
|
21
|
+
assertNotSet(this.unprotectedHeader, 'setUnprotectedHeader');
|
|
25
22
|
this.unprotectedHeader = unprotectedHeader;
|
|
26
23
|
return this;
|
|
27
24
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { flattenedVerify } from '../flattened/verify.js';
|
|
2
2
|
import { JWSInvalid, JWSSignatureVerificationFailed } from '../../util/errors.js';
|
|
3
|
-
import { isObject } from '../../lib/
|
|
3
|
+
import { isObject } from '../../lib/type_checks.js';
|
|
4
4
|
export async function generalVerify(jws, key, options) {
|
|
5
5
|
if (!isObject(jws)) {
|
|
6
6
|
throw new JWSInvalid('General JWS must be an object');
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CompactEncrypt } from '../jwe/compact/encrypt.js';
|
|
2
2
|
import { JWTClaimsBuilder } from '../lib/jwt_claims_set.js';
|
|
3
|
+
import { assertNotSet } from '../lib/helpers.js';
|
|
3
4
|
export class EncryptJWT {
|
|
4
5
|
#cek;
|
|
5
6
|
#iv;
|
|
@@ -41,30 +42,22 @@ export class EncryptJWT {
|
|
|
41
42
|
return this;
|
|
42
43
|
}
|
|
43
44
|
setProtectedHeader(protectedHeader) {
|
|
44
|
-
|
|
45
|
-
throw new TypeError('setProtectedHeader can only be called once');
|
|
46
|
-
}
|
|
45
|
+
assertNotSet(this.#protectedHeader, 'setProtectedHeader');
|
|
47
46
|
this.#protectedHeader = protectedHeader;
|
|
48
47
|
return this;
|
|
49
48
|
}
|
|
50
49
|
setKeyManagementParameters(parameters) {
|
|
51
|
-
|
|
52
|
-
throw new TypeError('setKeyManagementParameters can only be called once');
|
|
53
|
-
}
|
|
50
|
+
assertNotSet(this.#keyManagementParameters, 'setKeyManagementParameters');
|
|
54
51
|
this.#keyManagementParameters = parameters;
|
|
55
52
|
return this;
|
|
56
53
|
}
|
|
57
54
|
setContentEncryptionKey(cek) {
|
|
58
|
-
|
|
59
|
-
throw new TypeError('setContentEncryptionKey can only be called once');
|
|
60
|
-
}
|
|
55
|
+
assertNotSet(this.#cek, 'setContentEncryptionKey');
|
|
61
56
|
this.#cek = cek;
|
|
62
57
|
return this;
|
|
63
58
|
}
|
|
64
59
|
setInitializationVector(iv) {
|
|
65
|
-
|
|
66
|
-
throw new TypeError('setInitializationVector can only be called once');
|
|
67
|
-
}
|
|
60
|
+
assertNotSet(this.#iv, 'setInitializationVector');
|
|
68
61
|
this.#iv = iv;
|
|
69
62
|
return this;
|
|
70
63
|
}
|
|
@@ -2,7 +2,7 @@ import { decode as decodeBase64URL } from '../util/base64url.js';
|
|
|
2
2
|
import { fromSPKI, fromPKCS8, fromX509 } from '../lib/asn1.js';
|
|
3
3
|
import { jwkToKey } from '../lib/jwk_to_key.js';
|
|
4
4
|
import { JOSENotSupported } from '../util/errors.js';
|
|
5
|
-
import { isObject } from '../lib/
|
|
5
|
+
import { isObject } from '../lib/type_checks.js';
|
|
6
6
|
export async function importSPKI(spki, alg, options) {
|
|
7
7
|
if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {
|
|
8
8
|
throw new TypeError('"spki" must be SPKI formatted string');
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { encrypt } from './
|
|
2
|
-
import { decrypt } from './decrypt.js';
|
|
1
|
+
import { encrypt, decrypt } from './content_encryption.js';
|
|
3
2
|
import { encode as b64u } from '../util/base64url.js';
|
|
4
3
|
export async function wrap(alg, key, cek, iv) {
|
|
5
4
|
const jweAlgorithm = alg.slice(0, 7);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { withAlg as invalidKeyInput } from './invalid_key_input.js';
|
|
2
2
|
import { isKeyLike } from './is_key_like.js';
|
|
3
|
-
import * as jwk from './
|
|
3
|
+
import * as jwk from './type_checks.js';
|
|
4
4
|
const tag = (key) => key?.[Symbol.toStringTag];
|
|
5
5
|
const jwkMatchesOp = (alg, key, usage) => {
|
|
6
6
|
if (key.use !== undefined) {
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { concat, uint64be } from './buffer_utils.js';
|
|
2
|
+
import { checkEncCryptoKey } from './crypto_key.js';
|
|
3
|
+
import { invalidKeyInput } from './invalid_key_input.js';
|
|
4
|
+
import { JOSENotSupported, JWEDecryptionFailed, JWEInvalid } from '../util/errors.js';
|
|
5
|
+
import { isCryptoKey } from './is_key_like.js';
|
|
6
|
+
export function cekLength(alg) {
|
|
7
|
+
switch (alg) {
|
|
8
|
+
case 'A128GCM':
|
|
9
|
+
return 128;
|
|
10
|
+
case 'A192GCM':
|
|
11
|
+
return 192;
|
|
12
|
+
case 'A256GCM':
|
|
13
|
+
case 'A128CBC-HS256':
|
|
14
|
+
return 256;
|
|
15
|
+
case 'A192CBC-HS384':
|
|
16
|
+
return 384;
|
|
17
|
+
case 'A256CBC-HS512':
|
|
18
|
+
return 512;
|
|
19
|
+
default:
|
|
20
|
+
throw new JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export const generateCek = (alg) => crypto.getRandomValues(new Uint8Array(cekLength(alg) >> 3));
|
|
24
|
+
function checkCekLength(cek, expected) {
|
|
25
|
+
const actual = cek.byteLength << 3;
|
|
26
|
+
if (actual !== expected) {
|
|
27
|
+
throw new JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function ivBitLength(alg) {
|
|
31
|
+
switch (alg) {
|
|
32
|
+
case 'A128GCM':
|
|
33
|
+
case 'A128GCMKW':
|
|
34
|
+
case 'A192GCM':
|
|
35
|
+
case 'A192GCMKW':
|
|
36
|
+
case 'A256GCM':
|
|
37
|
+
case 'A256GCMKW':
|
|
38
|
+
return 96;
|
|
39
|
+
case 'A128CBC-HS256':
|
|
40
|
+
case 'A192CBC-HS384':
|
|
41
|
+
case 'A256CBC-HS512':
|
|
42
|
+
return 128;
|
|
43
|
+
default:
|
|
44
|
+
throw new JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export const generateIv = (alg) => crypto.getRandomValues(new Uint8Array(ivBitLength(alg) >> 3));
|
|
48
|
+
export function checkIvLength(enc, iv) {
|
|
49
|
+
if (iv.length << 3 !== ivBitLength(enc)) {
|
|
50
|
+
throw new JWEInvalid('Invalid Initialization Vector length');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function cbcKeySetup(enc, cek, usage) {
|
|
54
|
+
if (!(cek instanceof Uint8Array)) {
|
|
55
|
+
throw new TypeError(invalidKeyInput(cek, 'Uint8Array'));
|
|
56
|
+
}
|
|
57
|
+
const keySize = parseInt(enc.slice(1, 4), 10);
|
|
58
|
+
const encKey = await crypto.subtle.importKey('raw', cek.subarray(keySize >> 3), 'AES-CBC', false, [usage]);
|
|
59
|
+
const macKey = await crypto.subtle.importKey('raw', cek.subarray(0, keySize >> 3), {
|
|
60
|
+
hash: `SHA-${keySize << 1}`,
|
|
61
|
+
name: 'HMAC',
|
|
62
|
+
}, false, ['sign']);
|
|
63
|
+
return { encKey, macKey, keySize };
|
|
64
|
+
}
|
|
65
|
+
async function cbcHmacTag(macKey, macData, keySize) {
|
|
66
|
+
return new Uint8Array((await crypto.subtle.sign('HMAC', macKey, macData)).slice(0, keySize >> 3));
|
|
67
|
+
}
|
|
68
|
+
async function cbcEncrypt(enc, plaintext, cek, iv, aad) {
|
|
69
|
+
const { encKey, macKey, keySize } = await cbcKeySetup(enc, cek, 'encrypt');
|
|
70
|
+
const ciphertext = new Uint8Array(await crypto.subtle.encrypt({
|
|
71
|
+
iv: iv,
|
|
72
|
+
name: 'AES-CBC',
|
|
73
|
+
}, encKey, plaintext));
|
|
74
|
+
const macData = concat(aad, iv, ciphertext, uint64be(aad.length << 3));
|
|
75
|
+
const tag = await cbcHmacTag(macKey, macData, keySize);
|
|
76
|
+
return { ciphertext, tag, iv };
|
|
77
|
+
}
|
|
78
|
+
async function timingSafeEqual(a, b) {
|
|
79
|
+
if (!(a instanceof Uint8Array)) {
|
|
80
|
+
throw new TypeError('First argument must be a buffer');
|
|
81
|
+
}
|
|
82
|
+
if (!(b instanceof Uint8Array)) {
|
|
83
|
+
throw new TypeError('Second argument must be a buffer');
|
|
84
|
+
}
|
|
85
|
+
const algorithm = { name: 'HMAC', hash: 'SHA-256' };
|
|
86
|
+
const key = (await crypto.subtle.generateKey(algorithm, false, ['sign']));
|
|
87
|
+
const aHmac = new Uint8Array(await crypto.subtle.sign(algorithm, key, a));
|
|
88
|
+
const bHmac = new Uint8Array(await crypto.subtle.sign(algorithm, key, b));
|
|
89
|
+
let out = 0;
|
|
90
|
+
let i = -1;
|
|
91
|
+
while (++i < 32) {
|
|
92
|
+
out |= aHmac[i] ^ bHmac[i];
|
|
93
|
+
}
|
|
94
|
+
return out === 0;
|
|
95
|
+
}
|
|
96
|
+
async function cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
97
|
+
const { encKey, macKey, keySize } = await cbcKeySetup(enc, cek, 'decrypt');
|
|
98
|
+
const macData = concat(aad, iv, ciphertext, uint64be(aad.length << 3));
|
|
99
|
+
const expectedTag = await cbcHmacTag(macKey, macData, keySize);
|
|
100
|
+
let macCheckPassed;
|
|
101
|
+
try {
|
|
102
|
+
macCheckPassed = await timingSafeEqual(tag, expectedTag);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
}
|
|
106
|
+
if (!macCheckPassed) {
|
|
107
|
+
throw new JWEDecryptionFailed();
|
|
108
|
+
}
|
|
109
|
+
let plaintext;
|
|
110
|
+
try {
|
|
111
|
+
plaintext = new Uint8Array(await crypto.subtle.decrypt({ iv: iv, name: 'AES-CBC' }, encKey, ciphertext));
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
}
|
|
115
|
+
if (!plaintext) {
|
|
116
|
+
throw new JWEDecryptionFailed();
|
|
117
|
+
}
|
|
118
|
+
return plaintext;
|
|
119
|
+
}
|
|
120
|
+
async function gcmEncrypt(enc, plaintext, cek, iv, aad) {
|
|
121
|
+
let encKey;
|
|
122
|
+
if (cek instanceof Uint8Array) {
|
|
123
|
+
encKey = await crypto.subtle.importKey('raw', cek, 'AES-GCM', false, ['encrypt']);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
checkEncCryptoKey(cek, enc, 'encrypt');
|
|
127
|
+
encKey = cek;
|
|
128
|
+
}
|
|
129
|
+
const encrypted = new Uint8Array(await crypto.subtle.encrypt({
|
|
130
|
+
additionalData: aad,
|
|
131
|
+
iv: iv,
|
|
132
|
+
name: 'AES-GCM',
|
|
133
|
+
tagLength: 128,
|
|
134
|
+
}, encKey, plaintext));
|
|
135
|
+
const tag = encrypted.slice(-16);
|
|
136
|
+
const ciphertext = encrypted.slice(0, -16);
|
|
137
|
+
return { ciphertext, tag, iv };
|
|
138
|
+
}
|
|
139
|
+
async function gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
140
|
+
let encKey;
|
|
141
|
+
if (cek instanceof Uint8Array) {
|
|
142
|
+
encKey = await crypto.subtle.importKey('raw', cek, 'AES-GCM', false, ['decrypt']);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
checkEncCryptoKey(cek, enc, 'decrypt');
|
|
146
|
+
encKey = cek;
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
return new Uint8Array(await crypto.subtle.decrypt({
|
|
150
|
+
additionalData: aad,
|
|
151
|
+
iv: iv,
|
|
152
|
+
name: 'AES-GCM',
|
|
153
|
+
tagLength: 128,
|
|
154
|
+
}, encKey, concat(ciphertext, tag)));
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
throw new JWEDecryptionFailed();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const unsupportedEnc = 'Unsupported JWE Content Encryption Algorithm';
|
|
161
|
+
export async function encrypt(enc, plaintext, cek, iv, aad) {
|
|
162
|
+
if (!isCryptoKey(cek) && !(cek instanceof Uint8Array)) {
|
|
163
|
+
throw new TypeError(invalidKeyInput(cek, 'CryptoKey', 'KeyObject', 'Uint8Array', 'JSON Web Key'));
|
|
164
|
+
}
|
|
165
|
+
if (iv) {
|
|
166
|
+
checkIvLength(enc, iv);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
iv = generateIv(enc);
|
|
170
|
+
}
|
|
171
|
+
switch (enc) {
|
|
172
|
+
case 'A128CBC-HS256':
|
|
173
|
+
case 'A192CBC-HS384':
|
|
174
|
+
case 'A256CBC-HS512':
|
|
175
|
+
if (cek instanceof Uint8Array) {
|
|
176
|
+
checkCekLength(cek, parseInt(enc.slice(-3), 10));
|
|
177
|
+
}
|
|
178
|
+
return cbcEncrypt(enc, plaintext, cek, iv, aad);
|
|
179
|
+
case 'A128GCM':
|
|
180
|
+
case 'A192GCM':
|
|
181
|
+
case 'A256GCM':
|
|
182
|
+
if (cek instanceof Uint8Array) {
|
|
183
|
+
checkCekLength(cek, parseInt(enc.slice(1, 4), 10));
|
|
184
|
+
}
|
|
185
|
+
return gcmEncrypt(enc, plaintext, cek, iv, aad);
|
|
186
|
+
default:
|
|
187
|
+
throw new JOSENotSupported(unsupportedEnc);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
export async function decrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
191
|
+
if (!isCryptoKey(cek) && !(cek instanceof Uint8Array)) {
|
|
192
|
+
throw new TypeError(invalidKeyInput(cek, 'CryptoKey', 'KeyObject', 'Uint8Array', 'JSON Web Key'));
|
|
193
|
+
}
|
|
194
|
+
if (!iv) {
|
|
195
|
+
throw new JWEInvalid('JWE Initialization Vector missing');
|
|
196
|
+
}
|
|
197
|
+
if (!tag) {
|
|
198
|
+
throw new JWEInvalid('JWE Authentication Tag missing');
|
|
199
|
+
}
|
|
200
|
+
checkIvLength(enc, iv);
|
|
201
|
+
switch (enc) {
|
|
202
|
+
case 'A128CBC-HS256':
|
|
203
|
+
case 'A192CBC-HS384':
|
|
204
|
+
case 'A256CBC-HS512':
|
|
205
|
+
if (cek instanceof Uint8Array)
|
|
206
|
+
checkCekLength(cek, parseInt(enc.slice(-3), 10));
|
|
207
|
+
return cbcDecrypt(enc, cek, ciphertext, iv, tag, aad);
|
|
208
|
+
case 'A128GCM':
|
|
209
|
+
case 'A192GCM':
|
|
210
|
+
case 'A256GCM':
|
|
211
|
+
if (cek instanceof Uint8Array)
|
|
212
|
+
checkCekLength(cek, parseInt(enc.slice(1, 4), 10));
|
|
213
|
+
return gcmDecrypt(enc, cek, ciphertext, iv, tag, aad);
|
|
214
|
+
default:
|
|
215
|
+
throw new JOSENotSupported(unsupportedEnc);
|
|
216
|
+
}
|
|
217
|
+
}
|