jose 6.2.10 → 6.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/types/jwe/compact/decrypt.d.ts +7 -16
  2. package/dist/types/jwe/compact/encrypt.d.ts +6 -17
  3. package/dist/types/jwe/flattened/decrypt.d.ts +7 -16
  4. package/dist/types/jwe/flattened/encrypt.d.ts +11 -34
  5. package/dist/types/jwe/general/decrypt.d.ts +7 -16
  6. package/dist/types/jwe/general/encrypt.d.ts +15 -35
  7. package/dist/types/jwk/embedded.d.ts +3 -8
  8. package/dist/types/jwk/thumbprint.d.ts +5 -5
  9. package/dist/types/jwks/local.d.ts +6 -10
  10. package/dist/types/jwks/remote.d.ts +13 -24
  11. package/dist/types/jws/compact/sign.d.ts +5 -10
  12. package/dist/types/jws/compact/verify.d.ts +9 -18
  13. package/dist/types/jws/flattened/sign.d.ts +7 -16
  14. package/dist/types/jws/flattened/verify.d.ts +9 -18
  15. package/dist/types/jws/general/sign.d.ts +11 -21
  16. package/dist/types/jws/general/verify.d.ts +9 -18
  17. package/dist/types/jwt/decrypt.d.ts +10 -20
  18. package/dist/types/jwt/encrypt.d.ts +6 -13
  19. package/dist/types/jwt/sign.d.ts +5 -6
  20. package/dist/types/jwt/unsecured.d.ts +9 -14
  21. package/dist/types/jwt/verify.d.ts +9 -19
  22. package/dist/types/key/export.d.ts +4 -4
  23. package/dist/types/key/generate_key_pair.d.ts +6 -8
  24. package/dist/types/key/generate_secret.d.ts +4 -11
  25. package/dist/types/key/import.d.ts +10 -17
  26. package/dist/types/types.d.ts +44 -84
  27. package/dist/types/util/base64url.d.ts +2 -2
  28. package/dist/types/util/decode_jwt.d.ts +3 -10
  29. package/dist/types/util/decode_protected_header.d.ts +4 -4
  30. package/dist/types/util/errors.d.ts +26 -53
  31. package/dist/webapi/index.js +70 -32
  32. package/dist/webapi/jwe/compact/decrypt.js +7 -8
  33. package/dist/webapi/jwe/compact/encrypt.js +42 -48
  34. package/dist/webapi/jwe/flattened/decrypt.js +14 -14
  35. package/dist/webapi/jwe/flattened/encrypt.js +53 -64
  36. package/dist/webapi/jwe/general/decrypt.js +38 -49
  37. package/dist/webapi/jwe/general/encrypt.js +121 -169
  38. package/dist/webapi/jwk/embedded.js +30 -32
  39. package/dist/webapi/jwk/thumbprint.js +54 -70
  40. package/dist/webapi/jwks/local.js +47 -64
  41. package/dist/webapi/jwks/remote.js +88 -136
  42. package/dist/webapi/jws/compact/sign.js +21 -21
  43. package/dist/webapi/jws/compact/verify.js +7 -8
  44. package/dist/webapi/jws/flattened/sign.js +29 -31
  45. package/dist/webapi/jws/flattened/verify.js +21 -24
  46. package/dist/webapi/jws/general/sign.js +61 -72
  47. package/dist/webapi/jws/general/verify.js +45 -69
  48. package/dist/webapi/jwt/decrypt.js +13 -20
  49. package/dist/webapi/jwt/encrypt.js +57 -70
  50. package/dist/webapi/jwt/sign.js +17 -16
  51. package/dist/webapi/jwt/unsecured.js +32 -40
  52. package/dist/webapi/jwt/verify.js +12 -14
  53. package/dist/webapi/key/export.js +32 -37
  54. package/dist/webapi/key/generate_key_pair.js +40 -48
  55. package/dist/webapi/key/generate_secret.js +35 -40
  56. package/dist/webapi/key/import.js +52 -56
  57. package/dist/webapi/lib/asn1.js +130 -169
  58. package/dist/webapi/lib/base64.js +18 -20
  59. package/dist/webapi/lib/buffer_utils.js +34 -38
  60. package/dist/webapi/lib/content_encryption.js +79 -115
  61. package/dist/webapi/lib/crypto_key.js +24 -25
  62. package/dist/webapi/lib/deflate.js +45 -47
  63. package/dist/webapi/lib/helpers.js +40 -37
  64. package/dist/webapi/lib/invalid_key_input.js +10 -24
  65. package/dist/webapi/lib/is_key_like.js +17 -15
  66. package/dist/webapi/lib/jwe_algorithms.js +106 -93
  67. package/dist/webapi/lib/jwe_decrypt.js +207 -230
  68. package/dist/webapi/lib/jwe_encrypt.js +104 -138
  69. package/dist/webapi/lib/jwk_metadata.js +17 -18
  70. package/dist/webapi/lib/jwk_to_key.js +9 -16
  71. package/dist/webapi/lib/jws_algorithms.js +62 -61
  72. package/dist/webapi/lib/jws_sign.js +50 -75
  73. package/dist/webapi/lib/jws_verify.js +80 -125
  74. package/dist/webapi/lib/jwt_claims_set.js +123 -209
  75. package/dist/webapi/lib/key.js +84 -136
  76. package/dist/webapi/lib/key_algorithm.js +13 -8
  77. package/dist/webapi/lib/key_descriptor.js +8 -6
  78. package/dist/webapi/lib/key_management.js +200 -231
  79. package/dist/webapi/lib/key_options.js +7 -5
  80. package/dist/webapi/lib/options.js +55 -68
  81. package/dist/webapi/lib/signing.js +18 -22
  82. package/dist/webapi/lib/type_checks.js +26 -29
  83. package/dist/webapi/util/base64url.js +26 -35
  84. package/dist/webapi/util/decode_jwt.js +32 -31
  85. package/dist/webapi/util/decode_protected_header.js +18 -23
  86. package/dist/webapi/util/errors.js +94 -84
  87. package/package.json +17 -81
@@ -1,32 +1,70 @@
1
- export { compactDecrypt } from './jwe/compact/decrypt.js';
2
- export { flattenedDecrypt } from './jwe/flattened/decrypt.js';
3
- export { generalDecrypt } from './jwe/general/decrypt.js';
4
- export { GeneralEncrypt } from './jwe/general/encrypt.js';
5
- export { compactVerify } from './jws/compact/verify.js';
6
- export { flattenedVerify } from './jws/flattened/verify.js';
7
- export { generalVerify } from './jws/general/verify.js';
8
- export { jwtVerify } from './jwt/verify.js';
9
- export { jwtDecrypt } from './jwt/decrypt.js';
10
- export { CompactEncrypt } from './jwe/compact/encrypt.js';
11
- export { FlattenedEncrypt } from './jwe/flattened/encrypt.js';
12
- export { CompactSign } from './jws/compact/sign.js';
13
- export { FlattenedSign } from './jws/flattened/sign.js';
14
- export { GeneralSign } from './jws/general/sign.js';
15
- export { SignJWT } from './jwt/sign.js';
16
- export { EncryptJWT } from './jwt/encrypt.js';
17
- export { calculateJwkThumbprint, calculateJwkThumbprintUri } from './jwk/thumbprint.js';
18
- export { EmbeddedJWK } from './jwk/embedded.js';
19
- export { createLocalJWKSet } from './jwks/local.js';
20
- export { createRemoteJWKSet, jwksCache, customFetch } from './jwks/remote.js';
21
- export { UnsecuredJWT } from './jwt/unsecured.js';
22
- export { exportPKCS8, exportSPKI, exportJWK } from './key/export.js';
23
- export { importSPKI, importPKCS8, importX509, importJWK } from './key/import.js';
24
- export { decodeProtectedHeader } from './util/decode_protected_header.js';
25
- export { decodeJwt } from './util/decode_jwt.js';
26
- import * as errors from './util/errors.js';
27
- export { errors };
28
- export { generateKeyPair } from './key/generate_key_pair.js';
29
- export { generateSecret } from './key/generate_secret.js';
30
- import * as base64url from './util/base64url.js';
31
- export { base64url };
32
- export const cryptoRuntime = 'WebCryptoAPI';
1
+ import { compactDecrypt } from "./jwe/compact/decrypt.js";
2
+ import { flattenedDecrypt } from "./jwe/flattened/decrypt.js";
3
+ import { generalDecrypt } from "./jwe/general/decrypt.js";
4
+ import { GeneralEncrypt } from "./jwe/general/encrypt.js";
5
+ import { compactVerify } from "./jws/compact/verify.js";
6
+ import { flattenedVerify } from "./jws/flattened/verify.js";
7
+ import { generalVerify } from "./jws/general/verify.js";
8
+ import { jwtVerify } from "./jwt/verify.js";
9
+ import { jwtDecrypt } from "./jwt/decrypt.js";
10
+ import { CompactEncrypt } from "./jwe/compact/encrypt.js";
11
+ import { FlattenedEncrypt } from "./jwe/flattened/encrypt.js";
12
+ import { CompactSign } from "./jws/compact/sign.js";
13
+ import { FlattenedSign } from "./jws/flattened/sign.js";
14
+ import { GeneralSign } from "./jws/general/sign.js";
15
+ import { SignJWT } from "./jwt/sign.js";
16
+ import { EncryptJWT } from "./jwt/encrypt.js";
17
+ import { calculateJwkThumbprint, calculateJwkThumbprintUri } from "./jwk/thumbprint.js";
18
+ import { EmbeddedJWK } from "./jwk/embedded.js";
19
+ import { createLocalJWKSet } from "./jwks/local.js";
20
+ import { createRemoteJWKSet, jwksCache, customFetch } from "./jwks/remote.js";
21
+ import { UnsecuredJWT } from "./jwt/unsecured.js";
22
+ import { exportPKCS8, exportSPKI, exportJWK } from "./key/export.js";
23
+ import { importSPKI, importPKCS8, importX509, importJWK } from "./key/import.js";
24
+ import { decodeProtectedHeader } from "./util/decode_protected_header.js";
25
+ import { decodeJwt } from "./util/decode_jwt.js";
26
+ import * as errors from "./util/errors.js";
27
+ import { generateKeyPair } from "./key/generate_key_pair.js";
28
+ import { generateSecret } from "./key/generate_secret.js";
29
+ import * as base64url from "./util/base64url.js";
30
+ const cryptoRuntime = "WebCryptoAPI";
31
+ export {
32
+ CompactEncrypt,
33
+ CompactSign,
34
+ EmbeddedJWK,
35
+ EncryptJWT,
36
+ FlattenedEncrypt,
37
+ FlattenedSign,
38
+ GeneralEncrypt,
39
+ GeneralSign,
40
+ SignJWT,
41
+ UnsecuredJWT,
42
+ base64url,
43
+ calculateJwkThumbprint,
44
+ calculateJwkThumbprintUri,
45
+ compactDecrypt,
46
+ compactVerify,
47
+ createLocalJWKSet,
48
+ createRemoteJWKSet,
49
+ cryptoRuntime,
50
+ customFetch,
51
+ decodeJwt,
52
+ decodeProtectedHeader,
53
+ errors,
54
+ exportJWK,
55
+ exportPKCS8,
56
+ exportSPKI,
57
+ flattenedDecrypt,
58
+ flattenedVerify,
59
+ generalDecrypt,
60
+ generalVerify,
61
+ generateKeyPair,
62
+ generateSecret,
63
+ importJWK,
64
+ importPKCS8,
65
+ importSPKI,
66
+ importX509,
67
+ jwksCache,
68
+ jwtDecrypt,
69
+ jwtVerify
70
+ };
@@ -1,9 +1,8 @@
1
- import { prepareDecrypt, decryptCompact } from '../../lib/jwe_decrypt.js';
2
- export async function compactDecrypt(jwe, key, options) {
3
- const decrypted = await decryptCompact(jwe, prepareDecrypt(options), key);
4
- const result = { plaintext: decrypted[0], protectedHeader: decrypted[1] };
5
- if (typeof key === 'function') {
6
- return { ...result, key: decrypted[2] };
7
- }
8
- return result;
1
+ import { prepareDecrypt, decryptCompact } from "../../lib/jwe_decrypt.js";
2
+ async function compactDecrypt(jwe, key, options) {
3
+ const decrypted = await decryptCompact(jwe, prepareDecrypt(options), key), result = { plaintext: decrypted[0], protectedHeader: decrypted[1] };
4
+ return typeof key == "function" ? { ...result, key: decrypted[2] } : result;
9
5
  }
6
+ export {
7
+ compactDecrypt
8
+ };
@@ -1,49 +1,43 @@
1
- import { assertNotSet } from '../../lib/helpers.js';
2
- import { assertUint8Array } from '../../lib/type_checks.js';
3
- import { createJWE } from '../../lib/jwe_encrypt.js';
4
- export class CompactEncrypt {
5
- #plaintext;
6
- #protectedHeader;
7
- #cek;
8
- #iv;
9
- #keyManagementParameters;
10
- constructor(plaintext) {
11
- assertUint8Array(plaintext, 'plaintext');
12
- this.#plaintext = plaintext;
13
- }
14
- setContentEncryptionKey(cek) {
15
- assertNotSet(this.#cek, 'setContentEncryptionKey');
16
- this.#cek = cek;
17
- return this;
18
- }
19
- setInitializationVector(iv) {
20
- assertNotSet(this.#iv, 'setInitializationVector');
21
- this.#iv = iv;
22
- return this;
23
- }
24
- setProtectedHeader(protectedHeader) {
25
- assertNotSet(this.#protectedHeader, 'setProtectedHeader');
26
- this.#protectedHeader = protectedHeader;
27
- return this;
28
- }
29
- setKeyManagementParameters(parameters) {
30
- assertNotSet(this.#keyManagementParameters, 'setKeyManagementParameters');
31
- this.#keyManagementParameters = parameters;
32
- return this;
33
- }
34
- async encrypt(key, options) {
35
- const jwe = await createJWE([
36
- this.#plaintext,
37
- this.#protectedHeader,
38
- undefined,
39
- undefined,
40
- undefined,
41
- this.#cek,
42
- this.#iv,
43
- this.#keyManagementParameters,
44
- undefined,
45
- false,
46
- ], key, options);
47
- return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.');
48
- }
1
+ import { assertNotSet } from "../../lib/helpers.js";
2
+ import { assertUint8Array } from "../../lib/type_checks.js";
3
+ import { createJWE } from "../../lib/jwe_encrypt.js";
4
+ class CompactEncrypt {
5
+ #plaintext;
6
+ #protectedHeader;
7
+ #cek;
8
+ #iv;
9
+ #keyManagementParameters;
10
+ constructor(plaintext) {
11
+ assertUint8Array(plaintext, "plaintext"), this.#plaintext = plaintext;
12
+ }
13
+ setContentEncryptionKey(cek) {
14
+ return assertNotSet(this.#cek, "setContentEncryptionKey"), this.#cek = cek, this;
15
+ }
16
+ setInitializationVector(iv) {
17
+ return assertNotSet(this.#iv, "setInitializationVector"), this.#iv = iv, this;
18
+ }
19
+ setProtectedHeader(protectedHeader) {
20
+ return assertNotSet(this.#protectedHeader, "setProtectedHeader"), this.#protectedHeader = protectedHeader, this;
21
+ }
22
+ setKeyManagementParameters(parameters) {
23
+ return assertNotSet(this.#keyManagementParameters, "setKeyManagementParameters"), this.#keyManagementParameters = parameters, this;
24
+ }
25
+ async encrypt(key, options) {
26
+ const jwe = await createJWE([
27
+ this.#plaintext,
28
+ this.#protectedHeader,
29
+ void 0,
30
+ void 0,
31
+ void 0,
32
+ this.#cek,
33
+ this.#iv,
34
+ this.#keyManagementParameters,
35
+ void 0,
36
+ !1
37
+ ], key, options);
38
+ return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join(".");
39
+ }
49
40
  }
41
+ export {
42
+ CompactEncrypt
43
+ };
@@ -1,15 +1,15 @@
1
- import { JWEInvalid } from '../../util/errors.js';
2
- import { isObject } from '../../lib/type_checks.js';
3
- import { prepareDecrypt, decryptJWE, decryptResult, checkRecipient, snapshotSharedJWE, snapshotRecipientJWE, } from '../../lib/jwe_decrypt.js';
4
- export async function flattenedDecrypt(jwe, key, options) {
5
- if (!isObject(jwe)) {
6
- throw new JWEInvalid('Flattened JWE must be an object');
7
- }
8
- const shared = snapshotSharedJWE(jwe);
9
- const [recipient, , error] = snapshotRecipientJWE(jwe);
10
- if (!recipient)
11
- throw error;
12
- const snapshot = { ...shared, ...recipient };
13
- checkRecipient(snapshot);
14
- return decryptResult(snapshot, await decryptJWE(snapshot, prepareDecrypt(options), key));
1
+ import { JWEInvalid } from "../../util/errors.js";
2
+ import { isObject } from "../../lib/type_checks.js";
3
+ import { prepareDecrypt, decryptJWE, decryptResult, checkRecipient, snapshotSharedJWE, snapshotRecipientJWE } from "../../lib/jwe_decrypt.js";
4
+ async function flattenedDecrypt(jwe, key, options) {
5
+ if (!isObject(jwe))
6
+ throw new JWEInvalid("Flattened JWE must be an object");
7
+ const shared = snapshotSharedJWE(jwe), [recipient, , error] = snapshotRecipientJWE(jwe);
8
+ if (!recipient)
9
+ throw error;
10
+ const snapshot = { ...shared, ...recipient };
11
+ return checkRecipient(snapshot), decryptResult(snapshot, await decryptJWE(snapshot, prepareDecrypt(options), key));
15
12
  }
13
+ export {
14
+ flattenedDecrypt
15
+ };
@@ -1,65 +1,54 @@
1
- import { assertNotSet } from '../../lib/helpers.js';
2
- import { createJWE } from '../../lib/jwe_encrypt.js';
3
- import { assertUint8Array } from '../../lib/type_checks.js';
4
- export class FlattenedEncrypt {
5
- #plaintext;
6
- #protectedHeader;
7
- #sharedUnprotectedHeader;
8
- #unprotectedHeader;
9
- #aad;
10
- #cek;
11
- #iv;
12
- #keyManagementParameters;
13
- constructor(plaintext) {
14
- assertUint8Array(plaintext, 'plaintext');
15
- this.#plaintext = plaintext;
16
- }
17
- setKeyManagementParameters(parameters) {
18
- assertNotSet(this.#keyManagementParameters, 'setKeyManagementParameters');
19
- this.#keyManagementParameters = parameters;
20
- return this;
21
- }
22
- setProtectedHeader(protectedHeader) {
23
- assertNotSet(this.#protectedHeader, 'setProtectedHeader');
24
- this.#protectedHeader = protectedHeader;
25
- return this;
26
- }
27
- setSharedUnprotectedHeader(sharedUnprotectedHeader) {
28
- assertNotSet(this.#sharedUnprotectedHeader, 'setSharedUnprotectedHeader');
29
- this.#sharedUnprotectedHeader = sharedUnprotectedHeader;
30
- return this;
31
- }
32
- setUnprotectedHeader(unprotectedHeader) {
33
- assertNotSet(this.#unprotectedHeader, 'setUnprotectedHeader');
34
- this.#unprotectedHeader = unprotectedHeader;
35
- return this;
36
- }
37
- setAdditionalAuthenticatedData(aad) {
38
- this.#aad = aad;
39
- return this;
40
- }
41
- setContentEncryptionKey(cek) {
42
- assertNotSet(this.#cek, 'setContentEncryptionKey');
43
- this.#cek = cek;
44
- return this;
45
- }
46
- setInitializationVector(iv) {
47
- assertNotSet(this.#iv, 'setInitializationVector');
48
- this.#iv = iv;
49
- return this;
50
- }
51
- async encrypt(key, options) {
52
- return createJWE([
53
- this.#plaintext,
54
- this.#protectedHeader,
55
- this.#unprotectedHeader,
56
- this.#sharedUnprotectedHeader,
57
- this.#aad,
58
- this.#cek,
59
- this.#iv,
60
- this.#keyManagementParameters,
61
- undefined,
62
- false,
63
- ], key, options);
64
- }
1
+ import { assertNotSet } from "../../lib/helpers.js";
2
+ import { createJWE } from "../../lib/jwe_encrypt.js";
3
+ import { assertUint8Array } from "../../lib/type_checks.js";
4
+ class FlattenedEncrypt {
5
+ #plaintext;
6
+ #protectedHeader;
7
+ #sharedUnprotectedHeader;
8
+ #unprotectedHeader;
9
+ #aad;
10
+ #cek;
11
+ #iv;
12
+ #keyManagementParameters;
13
+ constructor(plaintext) {
14
+ assertUint8Array(plaintext, "plaintext"), this.#plaintext = plaintext;
15
+ }
16
+ setKeyManagementParameters(parameters) {
17
+ return assertNotSet(this.#keyManagementParameters, "setKeyManagementParameters"), this.#keyManagementParameters = parameters, this;
18
+ }
19
+ setProtectedHeader(protectedHeader) {
20
+ return assertNotSet(this.#protectedHeader, "setProtectedHeader"), this.#protectedHeader = protectedHeader, this;
21
+ }
22
+ setSharedUnprotectedHeader(sharedUnprotectedHeader) {
23
+ return assertNotSet(this.#sharedUnprotectedHeader, "setSharedUnprotectedHeader"), this.#sharedUnprotectedHeader = sharedUnprotectedHeader, this;
24
+ }
25
+ setUnprotectedHeader(unprotectedHeader) {
26
+ return assertNotSet(this.#unprotectedHeader, "setUnprotectedHeader"), this.#unprotectedHeader = unprotectedHeader, this;
27
+ }
28
+ setAdditionalAuthenticatedData(aad) {
29
+ return this.#aad = aad, this;
30
+ }
31
+ setContentEncryptionKey(cek) {
32
+ return assertNotSet(this.#cek, "setContentEncryptionKey"), this.#cek = cek, this;
33
+ }
34
+ setInitializationVector(iv) {
35
+ return assertNotSet(this.#iv, "setInitializationVector"), this.#iv = iv, this;
36
+ }
37
+ async encrypt(key, options) {
38
+ return createJWE([
39
+ this.#plaintext,
40
+ this.#protectedHeader,
41
+ this.#unprotectedHeader,
42
+ this.#sharedUnprotectedHeader,
43
+ this.#aad,
44
+ this.#cek,
45
+ this.#iv,
46
+ this.#keyManagementParameters,
47
+ void 0,
48
+ !1
49
+ ], key, options);
50
+ }
65
51
  }
52
+ export {
53
+ FlattenedEncrypt
54
+ };
@@ -1,51 +1,40 @@
1
- import { prepareDecrypt, shareJWE, decryptRecipient, decryptResult, checkRecipient, snapshotSharedJWE, snapshotRecipientJWE, } from '../../lib/jwe_decrypt.js';
2
- import { JWEDecryptionFailed, JWEInvalid } from '../../util/errors.js';
3
- import { isObject } from '../../lib/type_checks.js';
4
- export async function generalDecrypt(jwe, key, options) {
5
- if (!isObject(jwe)) {
6
- throw new JWEInvalid('General JWE must be an object');
7
- }
8
- const inputRecipients = jwe.recipients;
9
- if (!Array.isArray(inputRecipients)) {
10
- throw new JWEInvalid('JWE Recipients missing or incorrect type');
11
- }
12
- const recipients = Array.from(inputRecipients);
13
- if (!recipients.every(isObject)) {
14
- throw new JWEInvalid('JWE Recipients missing or incorrect type');
15
- }
16
- if (!recipients.length) {
17
- throw new JWEInvalid('JWE Recipients has no members');
18
- }
19
- let shared;
20
- let sharedJwe;
21
- let token;
22
- try {
23
- shared = prepareDecrypt(options);
24
- sharedJwe = snapshotSharedJWE(jwe);
25
- token = shareJWE(sharedJwe);
26
- }
27
- catch {
28
- throw new JWEDecryptionFailed();
29
- }
30
- const recipientSnapshots = recipients.map((recipient) => snapshotRecipientJWE(recipient));
31
- if (recipients.length > 1) {
32
- for (const [, headerAlg] of recipientSnapshots) {
33
- const alg = token[0]?.alg ?? headerAlg ?? sharedJwe.unprotected?.alg;
34
- if (alg === 'dir' || alg === 'ECDH-ES') {
35
- throw new JWEInvalid(`"${alg}" alg may only have a single recipient`);
36
- }
37
- }
38
- }
39
- for (const [recipient] of recipientSnapshots) {
40
- if (!recipient)
41
- continue;
42
- try {
43
- const flattened = { ...sharedJwe, ...recipient };
44
- checkRecipient(flattened);
45
- return decryptResult(flattened, await decryptRecipient(flattened, token, shared, key));
46
- }
47
- catch {
48
- }
49
- }
1
+ import { prepareDecrypt, shareJWE, decryptRecipient, decryptResult, checkRecipient, snapshotSharedJWE, snapshotRecipientJWE } from "../../lib/jwe_decrypt.js";
2
+ import { JWEDecryptionFailed, JWEInvalid } from "../../util/errors.js";
3
+ import { isObject } from "../../lib/type_checks.js";
4
+ import { JWE, isJWECEKTransport } from "../../lib/jwe_algorithms.js";
5
+ async function generalDecrypt(jwe, key, options) {
6
+ if (!isObject(jwe))
7
+ throw new JWEInvalid("General JWE must be an object");
8
+ const inputRecipients = jwe.recipients;
9
+ if (!Array.isArray(inputRecipients))
10
+ throw new JWEInvalid("JWE Recipients missing or incorrect type");
11
+ const recipients = Array.from(inputRecipients);
12
+ if (!recipients.every(isObject))
13
+ throw new JWEInvalid("JWE Recipients missing or incorrect type");
14
+ if (!recipients.length)
15
+ throw new JWEInvalid("JWE Recipients has no members");
16
+ let shared, sharedJwe, token;
17
+ try {
18
+ shared = prepareDecrypt(options), sharedJwe = snapshotSharedJWE(jwe), token = shareJWE(sharedJwe);
19
+ } catch {
50
20
  throw new JWEDecryptionFailed();
21
+ }
22
+ const recipientSnapshots = recipients.map((recipient) => snapshotRecipientJWE(recipient)), recipientAlgorithms = recipientSnapshots.map(([, headerAlg]) => token[0]?.alg ?? headerAlg ?? sharedJwe.unprotected?.alg);
23
+ if (recipients.length > 1)
24
+ for (const alg of recipientAlgorithms) {
25
+ const algEntry = typeof alg == "string" ? JWE[alg] : void 0;
26
+ if (algEntry && !isJWECEKTransport(algEntry))
27
+ throw new JWEInvalid(`"${alg}" alg may only have a single recipient`);
28
+ }
29
+ for (const [recipient] of recipientSnapshots)
30
+ if (recipient)
31
+ try {
32
+ const flattened = { ...sharedJwe, ...recipient };
33
+ return checkRecipient(flattened), decryptResult(flattened, await decryptRecipient(flattened, token, shared, key));
34
+ } catch {
35
+ }
36
+ throw new JWEDecryptionFailed();
51
37
  }
38
+ export {
39
+ generalDecrypt
40
+ };