jose 5.10.0 → 6.0.1
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/README.md +15 -15
- package/dist/types/index.d.ts +48 -48
- package/dist/types/jwe/compact/decrypt.d.ts +4 -4
- package/dist/types/jwe/compact/encrypt.d.ts +4 -4
- package/dist/types/jwe/flattened/decrypt.d.ts +4 -4
- package/dist/types/jwe/flattened/encrypt.d.ts +6 -6
- package/dist/types/jwe/general/decrypt.d.ts +4 -4
- package/dist/types/jwe/general/encrypt.d.ts +7 -7
- package/dist/types/jwk/embedded.d.ts +2 -2
- package/dist/types/jwk/thumbprint.d.ts +5 -5
- package/dist/types/jwks/local.d.ts +2 -2
- package/dist/types/jwks/remote.d.ts +104 -25
- package/dist/types/jws/compact/sign.d.ts +4 -4
- package/dist/types/jws/compact/verify.d.ts +4 -4
- package/dist/types/jws/flattened/sign.d.ts +4 -4
- package/dist/types/jws/flattened/verify.d.ts +4 -4
- package/dist/types/jws/general/sign.d.ts +6 -6
- package/dist/types/jws/general/verify.d.ts +4 -4
- package/dist/types/jwt/decrypt.d.ts +5 -5
- package/dist/types/jwt/encrypt.d.ts +5 -5
- package/dist/types/jwt/produce.d.ts +3 -3
- package/dist/types/jwt/sign.d.ts +4 -4
- package/dist/types/jwt/unsecured.d.ts +6 -6
- package/dist/types/jwt/verify.d.ts +5 -5
- package/dist/types/key/export.d.ts +10 -12
- package/dist/types/key/generate_key_pair.d.ts +10 -11
- package/dist/types/key/generate_secret.d.ts +6 -9
- package/dist/types/key/import.d.ts +20 -27
- package/dist/types/types.d.ts +27 -29
- package/dist/types/util/decode_jwt.d.ts +2 -2
- package/dist/types/util/decode_protected_header.d.ts +2 -2
- package/dist/types/util/errors.d.ts +6 -6
- package/dist/{browser → webapi}/index.js +2 -2
- package/dist/{node/esm → webapi}/jwe/flattened/decrypt.js +8 -4
- package/dist/{node/esm → webapi}/jwe/flattened/encrypt.js +7 -3
- package/dist/{node/esm → webapi}/jwe/general/encrypt.js +8 -3
- package/dist/{node/esm → webapi}/jwk/thumbprint.js +18 -8
- package/dist/{node/esm → webapi}/jwks/local.js +1 -6
- package/dist/{node/esm → webapi}/jwks/remote.js +34 -6
- package/dist/{node/esm → webapi}/jws/flattened/sign.js +7 -5
- package/dist/{browser → webapi}/jws/flattened/verify.js +8 -14
- package/dist/{browser → webapi}/jwt/unsecured.js +1 -1
- package/dist/{node/esm → webapi}/key/export.js +2 -3
- package/dist/{browser/runtime/generate.js → webapi/key/generate_key_pair.js} +4 -57
- package/dist/webapi/key/generate_secret.js +40 -0
- package/dist/{browser → webapi}/key/import.js +8 -6
- package/dist/{node/esm → webapi}/lib/aesgcmkw.js +3 -3
- package/dist/{browser/runtime → webapi/lib}/aeskw.js +9 -16
- package/dist/{browser/runtime → webapi/lib}/asn1.js +24 -20
- package/dist/{browser/runtime → webapi/lib}/base64url.js +17 -9
- package/dist/{browser → webapi}/lib/buffer_utils.js +4 -19
- package/dist/{browser → webapi}/lib/cek.js +1 -2
- package/dist/{browser/runtime → webapi/lib}/check_cek_length.js +1 -2
- package/dist/{browser → webapi}/lib/check_iv_length.js +1 -2
- package/dist/webapi/lib/check_key_type.js +126 -0
- package/dist/{node/esm → webapi}/lib/crypto_key.js +9 -26
- package/dist/{browser/runtime → webapi/lib}/decrypt.js +26 -10
- package/dist/{node/esm → webapi}/lib/decrypt_key_management.js +22 -24
- package/dist/{browser/runtime → webapi/lib}/digest.js +1 -3
- package/dist/webapi/lib/ecdhes.js +46 -0
- package/dist/{browser/runtime → webapi/lib}/encrypt.js +8 -10
- package/dist/{node/esm → webapi}/lib/encrypt_key_management.js +26 -23
- package/dist/webapi/lib/get_sign_verify_key.js +12 -0
- package/dist/{node/esm → webapi}/lib/is_disjoint.js +1 -2
- package/dist/{browser → webapi}/lib/is_jwk.js +1 -1
- package/dist/webapi/lib/is_key_like.js +14 -0
- package/dist/{browser → webapi}/lib/is_object.js +2 -2
- package/dist/{node/esm → webapi}/lib/iv.js +1 -2
- package/dist/{browser/runtime → webapi/lib}/jwk_to_key.js +3 -13
- package/dist/webapi/lib/key_to_jwk.js +27 -0
- package/dist/webapi/lib/normalize_key.js +164 -0
- package/dist/webapi/lib/pbes2kw.js +37 -0
- package/dist/webapi/lib/rsaes.js +24 -0
- package/dist/{browser/runtime → webapi/lib}/sign.js +1 -3
- package/dist/{browser/runtime → webapi/lib}/subtle_dsa.js +4 -5
- package/dist/{browser → webapi}/lib/validate_algorithms.js +1 -2
- package/dist/{node/esm → webapi}/lib/validate_crit.js +3 -4
- package/dist/{browser/runtime → webapi/lib}/verify.js +1 -3
- package/dist/{node/esm → webapi}/util/base64url.js +1 -1
- package/package.json +36 -219
- package/dist/browser/jwe/compact/encrypt.js +0 -26
- package/dist/browser/jwe/flattened/decrypt.js +0 -161
- package/dist/browser/jwe/flattened/encrypt.js +0 -153
- package/dist/browser/jwe/general/encrypt.js +0 -174
- package/dist/browser/jwk/thumbprint.js +0 -53
- package/dist/browser/jwks/local.js +0 -124
- package/dist/browser/jwks/remote.js +0 -139
- package/dist/browser/jws/compact/sign.js +0 -17
- package/dist/browser/jws/flattened/sign.js +0 -81
- package/dist/browser/jws/general/sign.js +0 -67
- package/dist/browser/jwt/encrypt.js +0 -68
- package/dist/browser/jwt/produce.js +0 -75
- package/dist/browser/jwt/sign.js +0 -20
- package/dist/browser/key/export.js +0 -12
- package/dist/browser/key/generate_key_pair.js +0 -4
- package/dist/browser/key/generate_secret.js +0 -4
- package/dist/browser/lib/aesgcmkw.js +0 -16
- package/dist/browser/lib/check_key_type.js +0 -77
- package/dist/browser/lib/check_p2s.js +0 -6
- package/dist/browser/lib/crypto_key.js +0 -157
- package/dist/browser/lib/decrypt_key_management.js +0 -129
- package/dist/browser/lib/encrypt_key_management.js +0 -89
- package/dist/browser/lib/format_pem.js +0 -4
- package/dist/browser/lib/is_disjoint.js +0 -22
- package/dist/browser/lib/iv.js +0 -20
- package/dist/browser/lib/validate_crit.js +0 -34
- package/dist/browser/package.json +0 -1
- package/dist/browser/runtime/bogus.js +0 -6
- package/dist/browser/runtime/ecdhes.js +0 -47
- package/dist/browser/runtime/fetch_jwks.js +0 -34
- package/dist/browser/runtime/get_sign_verify_key.js +0 -24
- package/dist/browser/runtime/is_key_like.js +0 -8
- package/dist/browser/runtime/key_to_jwk.js +0 -21
- package/dist/browser/runtime/normalize_key.js +0 -68
- package/dist/browser/runtime/pbes2kw.js +0 -51
- package/dist/browser/runtime/random.js +0 -2
- package/dist/browser/runtime/rsaes.js +0 -37
- package/dist/browser/runtime/runtime.js +0 -1
- package/dist/browser/runtime/subtle_rsaes.js +0 -12
- package/dist/browser/runtime/timing_safe_equal.js +0 -19
- package/dist/browser/runtime/webcrypto.js +0 -2
- package/dist/browser/util/base64url.js +0 -3
- package/dist/browser/util/errors.js +0 -114
- package/dist/browser/util/runtime.js +0 -2
- package/dist/node/cjs/index.js +0 -69
- package/dist/node/cjs/jwe/compact/decrypt.js +0 -30
- package/dist/node/cjs/jwe/compact/encrypt.js +0 -31
- package/dist/node/cjs/jwe/flattened/decrypt.js +0 -164
- package/dist/node/cjs/jwe/flattened/encrypt.js +0 -165
- package/dist/node/cjs/jwe/general/decrypt.js +0 -34
- package/dist/node/cjs/jwe/general/encrypt.js +0 -186
- package/dist/node/cjs/jwk/embedded.js +0 -20
- package/dist/node/cjs/jwk/thumbprint.js +0 -57
- package/dist/node/cjs/jwks/local.js +0 -128
- package/dist/node/cjs/jwks/remote.js +0 -152
- package/dist/node/cjs/jws/compact/sign.js +0 -22
- package/dist/node/cjs/jws/compact/verify.js +0 -24
- package/dist/node/cjs/jws/flattened/sign.js +0 -88
- package/dist/node/cjs/jws/flattened/verify.js +0 -125
- package/dist/node/cjs/jws/general/sign.js +0 -77
- package/dist/node/cjs/jws/general/verify.js +0 -27
- package/dist/node/cjs/jwt/decrypt.js +0 -26
- package/dist/node/cjs/jwt/encrypt.js +0 -79
- package/dist/node/cjs/jwt/produce.js +0 -80
- package/dist/node/cjs/jwt/sign.js +0 -25
- package/dist/node/cjs/jwt/unsecured.js +0 -36
- package/dist/node/cjs/jwt/verify.js +0 -18
- package/dist/node/cjs/key/export.js +0 -17
- package/dist/node/cjs/key/generate_key_pair.js +0 -7
- package/dist/node/cjs/key/generate_secret.js +0 -7
- package/dist/node/cjs/key/import.js +0 -51
- package/dist/node/cjs/lib/aesgcmkw.js +0 -20
- package/dist/node/cjs/lib/buffer_utils.js +0 -60
- package/dist/node/cjs/lib/cek.js +0 -23
- package/dist/node/cjs/lib/check_iv_length.js +0 -10
- package/dist/node/cjs/lib/check_key_type.js +0 -80
- package/dist/node/cjs/lib/check_p2s.js +0 -9
- package/dist/node/cjs/lib/crypto_key.js +0 -161
- package/dist/node/cjs/lib/decrypt_key_management.js +0 -131
- package/dist/node/cjs/lib/encrypt_key_management.js +0 -91
- package/dist/node/cjs/lib/epoch.js +0 -3
- package/dist/node/cjs/lib/invalid_key_input.js +0 -34
- package/dist/node/cjs/lib/is_disjoint.js +0 -24
- package/dist/node/cjs/lib/is_jwk.js +0 -19
- package/dist/node/cjs/lib/is_object.js +0 -19
- package/dist/node/cjs/lib/iv.js +0 -23
- package/dist/node/cjs/lib/jwt_claims_set.js +0 -106
- package/dist/node/cjs/lib/private_symbols.js +0 -4
- package/dist/node/cjs/lib/secs.js +0 -57
- package/dist/node/cjs/lib/validate_algorithms.js +0 -13
- package/dist/node/cjs/lib/validate_crit.js +0 -36
- package/dist/node/cjs/runtime/aeskw.js +0 -55
- package/dist/node/cjs/runtime/asn1.js +0 -54
- package/dist/node/cjs/runtime/base64url.js +0 -20
- package/dist/node/cjs/runtime/cbc_tag.js +0 -11
- package/dist/node/cjs/runtime/check_cek_length.js +0 -37
- package/dist/node/cjs/runtime/check_key_length.js +0 -18
- package/dist/node/cjs/runtime/ciphers.js +0 -8
- package/dist/node/cjs/runtime/decrypt.js +0 -103
- package/dist/node/cjs/runtime/digest.js +0 -5
- package/dist/node/cjs/runtime/dsa_digest.js +0 -26
- package/dist/node/cjs/runtime/ecdhes.js +0 -70
- package/dist/node/cjs/runtime/encrypt.js +0 -80
- package/dist/node/cjs/runtime/fetch_jwks.js +0 -45
- package/dist/node/cjs/runtime/generate.js +0 -103
- package/dist/node/cjs/runtime/get_named_curve.js +0 -61
- package/dist/node/cjs/runtime/get_sign_verify_key.js +0 -31
- package/dist/node/cjs/runtime/hmac_digest.js +0 -16
- package/dist/node/cjs/runtime/is_key_like.js +0 -11
- package/dist/node/cjs/runtime/is_key_object.js +0 -4
- package/dist/node/cjs/runtime/jwk_to_key.js +0 -10
- package/dist/node/cjs/runtime/key_to_jwk.js +0 -36
- package/dist/node/cjs/runtime/node_key.js +0 -111
- package/dist/node/cjs/runtime/normalize_key.js +0 -3
- package/dist/node/cjs/runtime/pbes2kw.js +0 -48
- package/dist/node/cjs/runtime/random.js +0 -5
- package/dist/node/cjs/runtime/rsaes.js +0 -71
- package/dist/node/cjs/runtime/runtime.js +0 -3
- package/dist/node/cjs/runtime/sign.js +0 -19
- package/dist/node/cjs/runtime/timing_safe_equal.js +0 -5
- package/dist/node/cjs/runtime/verify.js +0 -31
- package/dist/node/cjs/runtime/webcrypto.js +0 -9
- package/dist/node/cjs/util/base64url.js +0 -6
- package/dist/node/cjs/util/decode_jwt.js +0 -35
- package/dist/node/cjs/util/decode_protected_header.js +0 -37
- package/dist/node/cjs/util/errors.js +0 -117
- package/dist/node/cjs/util/runtime.js +0 -4
- package/dist/node/esm/index.js +0 -30
- package/dist/node/esm/jwe/compact/decrypt.js +0 -27
- package/dist/node/esm/jwe/general/decrypt.js +0 -31
- package/dist/node/esm/jwk/embedded.js +0 -17
- package/dist/node/esm/jws/compact/verify.js +0 -21
- package/dist/node/esm/jws/flattened/verify.js +0 -122
- package/dist/node/esm/jws/general/verify.js +0 -24
- package/dist/node/esm/jwt/decrypt.js +0 -23
- package/dist/node/esm/jwt/unsecured.js +0 -32
- package/dist/node/esm/jwt/verify.js +0 -15
- package/dist/node/esm/key/generate_key_pair.js +0 -4
- package/dist/node/esm/key/generate_secret.js +0 -4
- package/dist/node/esm/key/import.js +0 -45
- package/dist/node/esm/lib/buffer_utils.js +0 -51
- package/dist/node/esm/lib/cek.js +0 -20
- package/dist/node/esm/lib/check_iv_length.js +0 -8
- package/dist/node/esm/lib/check_key_type.js +0 -77
- package/dist/node/esm/lib/check_p2s.js +0 -6
- package/dist/node/esm/lib/epoch.js +0 -1
- package/dist/node/esm/lib/invalid_key_input.js +0 -31
- package/dist/node/esm/lib/is_jwk.js +0 -13
- package/dist/node/esm/lib/is_object.js +0 -16
- package/dist/node/esm/lib/jwt_claims_set.js +0 -104
- package/dist/node/esm/lib/private_symbols.js +0 -1
- package/dist/node/esm/lib/secs.js +0 -55
- package/dist/node/esm/lib/validate_algorithms.js +0 -11
- package/dist/node/esm/package.json +0 -1
- package/dist/node/esm/runtime/aeskw.js +0 -50
- package/dist/node/esm/runtime/asn1.js +0 -46
- package/dist/node/esm/runtime/base64url.js +0 -14
- package/dist/node/esm/runtime/cbc_tag.js +0 -8
- package/dist/node/esm/runtime/check_cek_length.js +0 -35
- package/dist/node/esm/runtime/check_key_length.js +0 -16
- package/dist/node/esm/runtime/ciphers.js +0 -6
- package/dist/node/esm/runtime/decrypt.js +0 -101
- package/dist/node/esm/runtime/digest.js +0 -3
- package/dist/node/esm/runtime/dsa_digest.js +0 -23
- package/dist/node/esm/runtime/ecdhes.js +0 -64
- package/dist/node/esm/runtime/encrypt.js +0 -78
- package/dist/node/esm/runtime/fetch_jwks.js +0 -43
- package/dist/node/esm/runtime/generate.js +0 -99
- package/dist/node/esm/runtime/get_named_curve.js +0 -58
- package/dist/node/esm/runtime/get_sign_verify_key.js +0 -28
- package/dist/node/esm/runtime/hmac_digest.js +0 -13
- package/dist/node/esm/runtime/is_key_like.js +0 -8
- package/dist/node/esm/runtime/is_key_object.js +0 -2
- package/dist/node/esm/runtime/jwk_to_key.js +0 -8
- package/dist/node/esm/runtime/key_to_jwk.js +0 -34
- package/dist/node/esm/runtime/node_key.js +0 -108
- package/dist/node/esm/runtime/normalize_key.js +0 -1
- package/dist/node/esm/runtime/pbes2kw.js +0 -43
- package/dist/node/esm/runtime/random.js +0 -1
- package/dist/node/esm/runtime/rsaes.js +0 -66
- package/dist/node/esm/runtime/runtime.js +0 -1
- package/dist/node/esm/runtime/sign.js +0 -17
- package/dist/node/esm/runtime/timing_safe_equal.js +0 -3
- package/dist/node/esm/runtime/verify.js +0 -29
- package/dist/node/esm/runtime/webcrypto.js +0 -5
- package/dist/node/esm/util/decode_jwt.js +0 -32
- package/dist/node/esm/util/decode_protected_header.js +0 -34
- package/dist/node/esm/util/runtime.js +0 -2
- package/dist/types/util/runtime.d.ts +0 -3
- /package/dist/{browser → webapi}/jwe/compact/decrypt.js +0 -0
- /package/dist/{node/esm → webapi}/jwe/compact/encrypt.js +0 -0
- /package/dist/{browser → webapi}/jwe/general/decrypt.js +0 -0
- /package/dist/{browser → webapi}/jwk/embedded.js +0 -0
- /package/dist/{node/esm → webapi}/jws/compact/sign.js +0 -0
- /package/dist/{browser → webapi}/jws/compact/verify.js +0 -0
- /package/dist/{node/esm → webapi}/jws/general/sign.js +0 -0
- /package/dist/{browser → webapi}/jws/general/verify.js +0 -0
- /package/dist/{browser → webapi}/jwt/decrypt.js +0 -0
- /package/dist/{node/esm → webapi}/jwt/encrypt.js +0 -0
- /package/dist/{node/esm → webapi}/jwt/produce.js +0 -0
- /package/dist/{node/esm → webapi}/jwt/sign.js +0 -0
- /package/dist/{browser → webapi}/jwt/verify.js +0 -0
- /package/dist/{browser/runtime → webapi/lib}/check_key_length.js +0 -0
- /package/dist/{browser → webapi}/lib/epoch.js +0 -0
- /package/dist/{browser → webapi}/lib/invalid_key_input.js +0 -0
- /package/dist/{browser → webapi}/lib/jwt_claims_set.js +0 -0
- /package/dist/{browser → webapi}/lib/private_symbols.js +0 -0
- /package/dist/{browser → webapi}/lib/secs.js +0 -0
- /package/dist/{browser → webapi}/util/decode_jwt.js +0 -0
- /package/dist/{browser → webapi}/util/decode_protected_header.js +0 -0
- /package/dist/{node/esm → webapi}/util/errors.js +0 -0
package/dist/node/cjs/lib/cek.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.bitLength = bitLength;
|
|
4
|
-
const errors_js_1 = require("../util/errors.js");
|
|
5
|
-
const random_js_1 = require("../runtime/random.js");
|
|
6
|
-
function bitLength(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 errors_js_1.JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
exports.default = (alg) => (0, random_js_1.default)(new Uint8Array(bitLength(alg) >> 3));
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const errors_js_1 = require("../util/errors.js");
|
|
4
|
-
const iv_js_1 = require("./iv.js");
|
|
5
|
-
const checkIvLength = (enc, iv) => {
|
|
6
|
-
if (iv.length << 3 !== (0, iv_js_1.bitLength)(enc)) {
|
|
7
|
-
throw new errors_js_1.JWEInvalid('Invalid Initialization Vector length');
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
exports.default = checkIvLength;
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkKeyTypeWithJwk = void 0;
|
|
4
|
-
const invalid_key_input_js_1 = require("./invalid_key_input.js");
|
|
5
|
-
const is_key_like_js_1 = require("../runtime/is_key_like.js");
|
|
6
|
-
const jwk = require("./is_jwk.js");
|
|
7
|
-
const tag = (key) => key?.[Symbol.toStringTag];
|
|
8
|
-
const jwkMatchesOp = (alg, key, usage) => {
|
|
9
|
-
if (key.use !== undefined && key.use !== 'sig') {
|
|
10
|
-
throw new TypeError('Invalid key for this operation, when present its use must be sig');
|
|
11
|
-
}
|
|
12
|
-
if (key.key_ops !== undefined && key.key_ops.includes?.(usage) !== true) {
|
|
13
|
-
throw new TypeError(`Invalid key for this operation, when present its key_ops must include ${usage}`);
|
|
14
|
-
}
|
|
15
|
-
if (key.alg !== undefined && key.alg !== alg) {
|
|
16
|
-
throw new TypeError(`Invalid key for this operation, when present its alg must be ${alg}`);
|
|
17
|
-
}
|
|
18
|
-
return true;
|
|
19
|
-
};
|
|
20
|
-
const symmetricTypeCheck = (alg, key, usage, allowJwk) => {
|
|
21
|
-
if (key instanceof Uint8Array)
|
|
22
|
-
return;
|
|
23
|
-
if (allowJwk && jwk.isJWK(key)) {
|
|
24
|
-
if (jwk.isSecretJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
25
|
-
return;
|
|
26
|
-
throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present`);
|
|
27
|
-
}
|
|
28
|
-
if (!(0, is_key_like_js_1.default)(key)) {
|
|
29
|
-
throw new TypeError((0, invalid_key_input_js_1.withAlg)(alg, key, ...is_key_like_js_1.types, 'Uint8Array', allowJwk ? 'JSON Web Key' : null));
|
|
30
|
-
}
|
|
31
|
-
if (key.type !== 'secret') {
|
|
32
|
-
throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type "secret"`);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const asymmetricTypeCheck = (alg, key, usage, allowJwk) => {
|
|
36
|
-
if (allowJwk && jwk.isJWK(key)) {
|
|
37
|
-
switch (usage) {
|
|
38
|
-
case 'sign':
|
|
39
|
-
if (jwk.isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
40
|
-
return;
|
|
41
|
-
throw new TypeError(`JSON Web Key for this operation be a private JWK`);
|
|
42
|
-
case 'verify':
|
|
43
|
-
if (jwk.isPublicJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
44
|
-
return;
|
|
45
|
-
throw new TypeError(`JSON Web Key for this operation be a public JWK`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (!(0, is_key_like_js_1.default)(key)) {
|
|
49
|
-
throw new TypeError((0, invalid_key_input_js_1.withAlg)(alg, key, ...is_key_like_js_1.types, allowJwk ? 'JSON Web Key' : null));
|
|
50
|
-
}
|
|
51
|
-
if (key.type === 'secret') {
|
|
52
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type "secret"`);
|
|
53
|
-
}
|
|
54
|
-
if (usage === 'sign' && key.type === 'public') {
|
|
55
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type "private"`);
|
|
56
|
-
}
|
|
57
|
-
if (usage === 'decrypt' && key.type === 'public') {
|
|
58
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type "private"`);
|
|
59
|
-
}
|
|
60
|
-
if (key.algorithm && usage === 'verify' && key.type === 'private') {
|
|
61
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type "public"`);
|
|
62
|
-
}
|
|
63
|
-
if (key.algorithm && usage === 'encrypt' && key.type === 'private') {
|
|
64
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type "public"`);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
function checkKeyType(allowJwk, alg, key, usage) {
|
|
68
|
-
const symmetric = alg.startsWith('HS') ||
|
|
69
|
-
alg === 'dir' ||
|
|
70
|
-
alg.startsWith('PBES2') ||
|
|
71
|
-
/^A\d{3}(?:GCM)?KW$/.test(alg);
|
|
72
|
-
if (symmetric) {
|
|
73
|
-
symmetricTypeCheck(alg, key, usage, allowJwk);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
asymmetricTypeCheck(alg, key, usage, allowJwk);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
exports.default = checkKeyType.bind(undefined, false);
|
|
80
|
-
exports.checkKeyTypeWithJwk = checkKeyType.bind(undefined, true);
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = checkP2s;
|
|
4
|
-
const errors_js_1 = require("../util/errors.js");
|
|
5
|
-
function checkP2s(p2s) {
|
|
6
|
-
if (!(p2s instanceof Uint8Array) || p2s.length < 8) {
|
|
7
|
-
throw new errors_js_1.JWEInvalid('PBES2 Salt Input must be 8 or more octets');
|
|
8
|
-
}
|
|
9
|
-
}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkSigCryptoKey = checkSigCryptoKey;
|
|
4
|
-
exports.checkEncCryptoKey = checkEncCryptoKey;
|
|
5
|
-
function unusable(name, prop = 'algorithm.name') {
|
|
6
|
-
return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);
|
|
7
|
-
}
|
|
8
|
-
function isAlgorithm(algorithm, name) {
|
|
9
|
-
return algorithm.name === name;
|
|
10
|
-
}
|
|
11
|
-
function getHashLength(hash) {
|
|
12
|
-
return parseInt(hash.name.slice(4), 10);
|
|
13
|
-
}
|
|
14
|
-
function getNamedCurve(alg) {
|
|
15
|
-
switch (alg) {
|
|
16
|
-
case 'ES256':
|
|
17
|
-
return 'P-256';
|
|
18
|
-
case 'ES384':
|
|
19
|
-
return 'P-384';
|
|
20
|
-
case 'ES512':
|
|
21
|
-
return 'P-521';
|
|
22
|
-
default:
|
|
23
|
-
throw new Error('unreachable');
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
function checkUsage(key, usages) {
|
|
27
|
-
if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {
|
|
28
|
-
let msg = 'CryptoKey does not support this operation, its usages must include ';
|
|
29
|
-
if (usages.length > 2) {
|
|
30
|
-
const last = usages.pop();
|
|
31
|
-
msg += `one of ${usages.join(', ')}, or ${last}.`;
|
|
32
|
-
}
|
|
33
|
-
else if (usages.length === 2) {
|
|
34
|
-
msg += `one of ${usages[0]} or ${usages[1]}.`;
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
msg += `${usages[0]}.`;
|
|
38
|
-
}
|
|
39
|
-
throw new TypeError(msg);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function checkSigCryptoKey(key, alg, ...usages) {
|
|
43
|
-
switch (alg) {
|
|
44
|
-
case 'HS256':
|
|
45
|
-
case 'HS384':
|
|
46
|
-
case 'HS512': {
|
|
47
|
-
if (!isAlgorithm(key.algorithm, 'HMAC'))
|
|
48
|
-
throw unusable('HMAC');
|
|
49
|
-
const expected = parseInt(alg.slice(2), 10);
|
|
50
|
-
const actual = getHashLength(key.algorithm.hash);
|
|
51
|
-
if (actual !== expected)
|
|
52
|
-
throw unusable(`SHA-${expected}`, 'algorithm.hash');
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
case 'RS256':
|
|
56
|
-
case 'RS384':
|
|
57
|
-
case 'RS512': {
|
|
58
|
-
if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))
|
|
59
|
-
throw unusable('RSASSA-PKCS1-v1_5');
|
|
60
|
-
const expected = parseInt(alg.slice(2), 10);
|
|
61
|
-
const actual = getHashLength(key.algorithm.hash);
|
|
62
|
-
if (actual !== expected)
|
|
63
|
-
throw unusable(`SHA-${expected}`, 'algorithm.hash');
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
case 'PS256':
|
|
67
|
-
case 'PS384':
|
|
68
|
-
case 'PS512': {
|
|
69
|
-
if (!isAlgorithm(key.algorithm, 'RSA-PSS'))
|
|
70
|
-
throw unusable('RSA-PSS');
|
|
71
|
-
const expected = parseInt(alg.slice(2), 10);
|
|
72
|
-
const actual = getHashLength(key.algorithm.hash);
|
|
73
|
-
if (actual !== expected)
|
|
74
|
-
throw unusable(`SHA-${expected}`, 'algorithm.hash');
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
case 'EdDSA': {
|
|
78
|
-
if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {
|
|
79
|
-
throw unusable('Ed25519 or Ed448');
|
|
80
|
-
}
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
case 'Ed25519': {
|
|
84
|
-
if (!isAlgorithm(key.algorithm, 'Ed25519'))
|
|
85
|
-
throw unusable('Ed25519');
|
|
86
|
-
break;
|
|
87
|
-
}
|
|
88
|
-
case 'ES256':
|
|
89
|
-
case 'ES384':
|
|
90
|
-
case 'ES512': {
|
|
91
|
-
if (!isAlgorithm(key.algorithm, 'ECDSA'))
|
|
92
|
-
throw unusable('ECDSA');
|
|
93
|
-
const expected = getNamedCurve(alg);
|
|
94
|
-
const actual = key.algorithm.namedCurve;
|
|
95
|
-
if (actual !== expected)
|
|
96
|
-
throw unusable(expected, 'algorithm.namedCurve');
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
default:
|
|
100
|
-
throw new TypeError('CryptoKey does not support this operation');
|
|
101
|
-
}
|
|
102
|
-
checkUsage(key, usages);
|
|
103
|
-
}
|
|
104
|
-
function checkEncCryptoKey(key, alg, ...usages) {
|
|
105
|
-
switch (alg) {
|
|
106
|
-
case 'A128GCM':
|
|
107
|
-
case 'A192GCM':
|
|
108
|
-
case 'A256GCM': {
|
|
109
|
-
if (!isAlgorithm(key.algorithm, 'AES-GCM'))
|
|
110
|
-
throw unusable('AES-GCM');
|
|
111
|
-
const expected = parseInt(alg.slice(1, 4), 10);
|
|
112
|
-
const actual = key.algorithm.length;
|
|
113
|
-
if (actual !== expected)
|
|
114
|
-
throw unusable(expected, 'algorithm.length');
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
case 'A128KW':
|
|
118
|
-
case 'A192KW':
|
|
119
|
-
case 'A256KW': {
|
|
120
|
-
if (!isAlgorithm(key.algorithm, 'AES-KW'))
|
|
121
|
-
throw unusable('AES-KW');
|
|
122
|
-
const expected = parseInt(alg.slice(1, 4), 10);
|
|
123
|
-
const actual = key.algorithm.length;
|
|
124
|
-
if (actual !== expected)
|
|
125
|
-
throw unusable(expected, 'algorithm.length');
|
|
126
|
-
break;
|
|
127
|
-
}
|
|
128
|
-
case 'ECDH': {
|
|
129
|
-
switch (key.algorithm.name) {
|
|
130
|
-
case 'ECDH':
|
|
131
|
-
case 'X25519':
|
|
132
|
-
case 'X448':
|
|
133
|
-
break;
|
|
134
|
-
default:
|
|
135
|
-
throw unusable('ECDH, X25519, or X448');
|
|
136
|
-
}
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
case 'PBES2-HS256+A128KW':
|
|
140
|
-
case 'PBES2-HS384+A192KW':
|
|
141
|
-
case 'PBES2-HS512+A256KW':
|
|
142
|
-
if (!isAlgorithm(key.algorithm, 'PBKDF2'))
|
|
143
|
-
throw unusable('PBKDF2');
|
|
144
|
-
break;
|
|
145
|
-
case 'RSA-OAEP':
|
|
146
|
-
case 'RSA-OAEP-256':
|
|
147
|
-
case 'RSA-OAEP-384':
|
|
148
|
-
case 'RSA-OAEP-512': {
|
|
149
|
-
if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))
|
|
150
|
-
throw unusable('RSA-OAEP');
|
|
151
|
-
const expected = parseInt(alg.slice(9), 10) || 1;
|
|
152
|
-
const actual = getHashLength(key.algorithm.hash);
|
|
153
|
-
if (actual !== expected)
|
|
154
|
-
throw unusable(`SHA-${expected}`, 'algorithm.hash');
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
default:
|
|
158
|
-
throw new TypeError('CryptoKey does not support this operation');
|
|
159
|
-
}
|
|
160
|
-
checkUsage(key, usages);
|
|
161
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const aeskw_js_1 = require("../runtime/aeskw.js");
|
|
4
|
-
const ECDH = require("../runtime/ecdhes.js");
|
|
5
|
-
const pbes2kw_js_1 = require("../runtime/pbes2kw.js");
|
|
6
|
-
const rsaes_js_1 = require("../runtime/rsaes.js");
|
|
7
|
-
const base64url_js_1 = require("../runtime/base64url.js");
|
|
8
|
-
const normalize_key_js_1 = require("../runtime/normalize_key.js");
|
|
9
|
-
const errors_js_1 = require("../util/errors.js");
|
|
10
|
-
const cek_js_1 = require("../lib/cek.js");
|
|
11
|
-
const import_js_1 = require("../key/import.js");
|
|
12
|
-
const check_key_type_js_1 = require("./check_key_type.js");
|
|
13
|
-
const is_object_js_1 = require("./is_object.js");
|
|
14
|
-
const aesgcmkw_js_1 = require("./aesgcmkw.js");
|
|
15
|
-
async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options) {
|
|
16
|
-
(0, check_key_type_js_1.default)(alg, key, 'decrypt');
|
|
17
|
-
key = (await normalize_key_js_1.default.normalizePrivateKey?.(key, alg)) || key;
|
|
18
|
-
switch (alg) {
|
|
19
|
-
case 'dir': {
|
|
20
|
-
if (encryptedKey !== undefined)
|
|
21
|
-
throw new errors_js_1.JWEInvalid('Encountered unexpected JWE Encrypted Key');
|
|
22
|
-
return key;
|
|
23
|
-
}
|
|
24
|
-
case 'ECDH-ES':
|
|
25
|
-
if (encryptedKey !== undefined)
|
|
26
|
-
throw new errors_js_1.JWEInvalid('Encountered unexpected JWE Encrypted Key');
|
|
27
|
-
case 'ECDH-ES+A128KW':
|
|
28
|
-
case 'ECDH-ES+A192KW':
|
|
29
|
-
case 'ECDH-ES+A256KW': {
|
|
30
|
-
if (!(0, is_object_js_1.default)(joseHeader.epk))
|
|
31
|
-
throw new errors_js_1.JWEInvalid(`JOSE Header "epk" (Ephemeral Public Key) missing or invalid`);
|
|
32
|
-
if (!ECDH.ecdhAllowed(key))
|
|
33
|
-
throw new errors_js_1.JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');
|
|
34
|
-
const epk = await (0, import_js_1.importJWK)(joseHeader.epk, alg);
|
|
35
|
-
let partyUInfo;
|
|
36
|
-
let partyVInfo;
|
|
37
|
-
if (joseHeader.apu !== undefined) {
|
|
38
|
-
if (typeof joseHeader.apu !== 'string')
|
|
39
|
-
throw new errors_js_1.JWEInvalid(`JOSE Header "apu" (Agreement PartyUInfo) invalid`);
|
|
40
|
-
try {
|
|
41
|
-
partyUInfo = (0, base64url_js_1.decode)(joseHeader.apu);
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
throw new errors_js_1.JWEInvalid('Failed to base64url decode the apu');
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (joseHeader.apv !== undefined) {
|
|
48
|
-
if (typeof joseHeader.apv !== 'string')
|
|
49
|
-
throw new errors_js_1.JWEInvalid(`JOSE Header "apv" (Agreement PartyVInfo) invalid`);
|
|
50
|
-
try {
|
|
51
|
-
partyVInfo = (0, base64url_js_1.decode)(joseHeader.apv);
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
throw new errors_js_1.JWEInvalid('Failed to base64url decode the apv');
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
const sharedSecret = await ECDH.deriveKey(epk, key, alg === 'ECDH-ES' ? joseHeader.enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1.bitLength)(joseHeader.enc) : parseInt(alg.slice(-5, -2), 10), partyUInfo, partyVInfo);
|
|
58
|
-
if (alg === 'ECDH-ES')
|
|
59
|
-
return sharedSecret;
|
|
60
|
-
if (encryptedKey === undefined)
|
|
61
|
-
throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');
|
|
62
|
-
return (0, aeskw_js_1.unwrap)(alg.slice(-6), sharedSecret, encryptedKey);
|
|
63
|
-
}
|
|
64
|
-
case 'RSA1_5':
|
|
65
|
-
case 'RSA-OAEP':
|
|
66
|
-
case 'RSA-OAEP-256':
|
|
67
|
-
case 'RSA-OAEP-384':
|
|
68
|
-
case 'RSA-OAEP-512': {
|
|
69
|
-
if (encryptedKey === undefined)
|
|
70
|
-
throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');
|
|
71
|
-
return (0, rsaes_js_1.decrypt)(alg, key, encryptedKey);
|
|
72
|
-
}
|
|
73
|
-
case 'PBES2-HS256+A128KW':
|
|
74
|
-
case 'PBES2-HS384+A192KW':
|
|
75
|
-
case 'PBES2-HS512+A256KW': {
|
|
76
|
-
if (encryptedKey === undefined)
|
|
77
|
-
throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');
|
|
78
|
-
if (typeof joseHeader.p2c !== 'number')
|
|
79
|
-
throw new errors_js_1.JWEInvalid(`JOSE Header "p2c" (PBES2 Count) missing or invalid`);
|
|
80
|
-
const p2cLimit = options?.maxPBES2Count || 10_000;
|
|
81
|
-
if (joseHeader.p2c > p2cLimit)
|
|
82
|
-
throw new errors_js_1.JWEInvalid(`JOSE Header "p2c" (PBES2 Count) out is of acceptable bounds`);
|
|
83
|
-
if (typeof joseHeader.p2s !== 'string')
|
|
84
|
-
throw new errors_js_1.JWEInvalid(`JOSE Header "p2s" (PBES2 Salt) missing or invalid`);
|
|
85
|
-
let p2s;
|
|
86
|
-
try {
|
|
87
|
-
p2s = (0, base64url_js_1.decode)(joseHeader.p2s);
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
throw new errors_js_1.JWEInvalid('Failed to base64url decode the p2s');
|
|
91
|
-
}
|
|
92
|
-
return (0, pbes2kw_js_1.decrypt)(alg, key, encryptedKey, joseHeader.p2c, p2s);
|
|
93
|
-
}
|
|
94
|
-
case 'A128KW':
|
|
95
|
-
case 'A192KW':
|
|
96
|
-
case 'A256KW': {
|
|
97
|
-
if (encryptedKey === undefined)
|
|
98
|
-
throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');
|
|
99
|
-
return (0, aeskw_js_1.unwrap)(alg, key, encryptedKey);
|
|
100
|
-
}
|
|
101
|
-
case 'A128GCMKW':
|
|
102
|
-
case 'A192GCMKW':
|
|
103
|
-
case 'A256GCMKW': {
|
|
104
|
-
if (encryptedKey === undefined)
|
|
105
|
-
throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');
|
|
106
|
-
if (typeof joseHeader.iv !== 'string')
|
|
107
|
-
throw new errors_js_1.JWEInvalid(`JOSE Header "iv" (Initialization Vector) missing or invalid`);
|
|
108
|
-
if (typeof joseHeader.tag !== 'string')
|
|
109
|
-
throw new errors_js_1.JWEInvalid(`JOSE Header "tag" (Authentication Tag) missing or invalid`);
|
|
110
|
-
let iv;
|
|
111
|
-
try {
|
|
112
|
-
iv = (0, base64url_js_1.decode)(joseHeader.iv);
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
throw new errors_js_1.JWEInvalid('Failed to base64url decode the iv');
|
|
116
|
-
}
|
|
117
|
-
let tag;
|
|
118
|
-
try {
|
|
119
|
-
tag = (0, base64url_js_1.decode)(joseHeader.tag);
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
throw new errors_js_1.JWEInvalid('Failed to base64url decode the tag');
|
|
123
|
-
}
|
|
124
|
-
return (0, aesgcmkw_js_1.unwrap)(alg, key, encryptedKey, iv, tag);
|
|
125
|
-
}
|
|
126
|
-
default: {
|
|
127
|
-
throw new errors_js_1.JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value');
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
exports.default = decryptKeyManagement;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const aeskw_js_1 = require("../runtime/aeskw.js");
|
|
4
|
-
const ECDH = require("../runtime/ecdhes.js");
|
|
5
|
-
const pbes2kw_js_1 = require("../runtime/pbes2kw.js");
|
|
6
|
-
const rsaes_js_1 = require("../runtime/rsaes.js");
|
|
7
|
-
const base64url_js_1 = require("../runtime/base64url.js");
|
|
8
|
-
const normalize_key_js_1 = require("../runtime/normalize_key.js");
|
|
9
|
-
const cek_js_1 = require("../lib/cek.js");
|
|
10
|
-
const errors_js_1 = require("../util/errors.js");
|
|
11
|
-
const export_js_1 = require("../key/export.js");
|
|
12
|
-
const check_key_type_js_1 = require("./check_key_type.js");
|
|
13
|
-
const aesgcmkw_js_1 = require("./aesgcmkw.js");
|
|
14
|
-
async function encryptKeyManagement(alg, enc, key, providedCek, providedParameters = {}) {
|
|
15
|
-
let encryptedKey;
|
|
16
|
-
let parameters;
|
|
17
|
-
let cek;
|
|
18
|
-
(0, check_key_type_js_1.default)(alg, key, 'encrypt');
|
|
19
|
-
key = (await normalize_key_js_1.default.normalizePublicKey?.(key, alg)) || key;
|
|
20
|
-
switch (alg) {
|
|
21
|
-
case 'dir': {
|
|
22
|
-
cek = key;
|
|
23
|
-
break;
|
|
24
|
-
}
|
|
25
|
-
case 'ECDH-ES':
|
|
26
|
-
case 'ECDH-ES+A128KW':
|
|
27
|
-
case 'ECDH-ES+A192KW':
|
|
28
|
-
case 'ECDH-ES+A256KW': {
|
|
29
|
-
if (!ECDH.ecdhAllowed(key)) {
|
|
30
|
-
throw new errors_js_1.JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');
|
|
31
|
-
}
|
|
32
|
-
const { apu, apv } = providedParameters;
|
|
33
|
-
let { epk: ephemeralKey } = providedParameters;
|
|
34
|
-
ephemeralKey ||= (await ECDH.generateEpk(key)).privateKey;
|
|
35
|
-
const { x, y, crv, kty } = await (0, export_js_1.exportJWK)(ephemeralKey);
|
|
36
|
-
const sharedSecret = await ECDH.deriveKey(key, ephemeralKey, alg === 'ECDH-ES' ? enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1.bitLength)(enc) : parseInt(alg.slice(-5, -2), 10), apu, apv);
|
|
37
|
-
parameters = { epk: { x, crv, kty } };
|
|
38
|
-
if (kty === 'EC')
|
|
39
|
-
parameters.epk.y = y;
|
|
40
|
-
if (apu)
|
|
41
|
-
parameters.apu = (0, base64url_js_1.encode)(apu);
|
|
42
|
-
if (apv)
|
|
43
|
-
parameters.apv = (0, base64url_js_1.encode)(apv);
|
|
44
|
-
if (alg === 'ECDH-ES') {
|
|
45
|
-
cek = sharedSecret;
|
|
46
|
-
break;
|
|
47
|
-
}
|
|
48
|
-
cek = providedCek || (0, cek_js_1.default)(enc);
|
|
49
|
-
const kwAlg = alg.slice(-6);
|
|
50
|
-
encryptedKey = await (0, aeskw_js_1.wrap)(kwAlg, sharedSecret, cek);
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
case 'RSA1_5':
|
|
54
|
-
case 'RSA-OAEP':
|
|
55
|
-
case 'RSA-OAEP-256':
|
|
56
|
-
case 'RSA-OAEP-384':
|
|
57
|
-
case 'RSA-OAEP-512': {
|
|
58
|
-
cek = providedCek || (0, cek_js_1.default)(enc);
|
|
59
|
-
encryptedKey = await (0, rsaes_js_1.encrypt)(alg, key, cek);
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
case 'PBES2-HS256+A128KW':
|
|
63
|
-
case 'PBES2-HS384+A192KW':
|
|
64
|
-
case 'PBES2-HS512+A256KW': {
|
|
65
|
-
cek = providedCek || (0, cek_js_1.default)(enc);
|
|
66
|
-
const { p2c, p2s } = providedParameters;
|
|
67
|
-
({ encryptedKey, ...parameters } = await (0, pbes2kw_js_1.encrypt)(alg, key, cek, p2c, p2s));
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
case 'A128KW':
|
|
71
|
-
case 'A192KW':
|
|
72
|
-
case 'A256KW': {
|
|
73
|
-
cek = providedCek || (0, cek_js_1.default)(enc);
|
|
74
|
-
encryptedKey = await (0, aeskw_js_1.wrap)(alg, key, cek);
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
case 'A128GCMKW':
|
|
78
|
-
case 'A192GCMKW':
|
|
79
|
-
case 'A256GCMKW': {
|
|
80
|
-
cek = providedCek || (0, cek_js_1.default)(enc);
|
|
81
|
-
const { iv } = providedParameters;
|
|
82
|
-
({ encryptedKey, ...parameters } = await (0, aesgcmkw_js_1.wrap)(alg, key, cek, iv));
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
default: {
|
|
86
|
-
throw new errors_js_1.JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return { cek, encryptedKey, parameters };
|
|
90
|
-
}
|
|
91
|
-
exports.default = encryptKeyManagement;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withAlg = withAlg;
|
|
4
|
-
function message(msg, actual, ...types) {
|
|
5
|
-
types = types.filter(Boolean);
|
|
6
|
-
if (types.length > 2) {
|
|
7
|
-
const last = types.pop();
|
|
8
|
-
msg += `one of type ${types.join(', ')}, or ${last}.`;
|
|
9
|
-
}
|
|
10
|
-
else if (types.length === 2) {
|
|
11
|
-
msg += `one of type ${types[0]} or ${types[1]}.`;
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
msg += `of type ${types[0]}.`;
|
|
15
|
-
}
|
|
16
|
-
if (actual == null) {
|
|
17
|
-
msg += ` Received ${actual}`;
|
|
18
|
-
}
|
|
19
|
-
else if (typeof actual === 'function' && actual.name) {
|
|
20
|
-
msg += ` Received function ${actual.name}`;
|
|
21
|
-
}
|
|
22
|
-
else if (typeof actual === 'object' && actual != null) {
|
|
23
|
-
if (actual.constructor?.name) {
|
|
24
|
-
msg += ` Received an instance of ${actual.constructor.name}`;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return msg;
|
|
28
|
-
}
|
|
29
|
-
exports.default = (actual, ...types) => {
|
|
30
|
-
return message('Key must be ', actual, ...types);
|
|
31
|
-
};
|
|
32
|
-
function withAlg(alg, actual, ...types) {
|
|
33
|
-
return message(`Key for the ${alg} algorithm must be `, actual, ...types);
|
|
34
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const isDisjoint = (...headers) => {
|
|
4
|
-
const sources = headers.filter(Boolean);
|
|
5
|
-
if (sources.length === 0 || sources.length === 1) {
|
|
6
|
-
return true;
|
|
7
|
-
}
|
|
8
|
-
let acc;
|
|
9
|
-
for (const header of sources) {
|
|
10
|
-
const parameters = Object.keys(header);
|
|
11
|
-
if (!acc || acc.size === 0) {
|
|
12
|
-
acc = new Set(parameters);
|
|
13
|
-
continue;
|
|
14
|
-
}
|
|
15
|
-
for (const parameter of parameters) {
|
|
16
|
-
if (acc.has(parameter)) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
acc.add(parameter);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return true;
|
|
23
|
-
};
|
|
24
|
-
exports.default = isDisjoint;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isJWK = isJWK;
|
|
4
|
-
exports.isPrivateJWK = isPrivateJWK;
|
|
5
|
-
exports.isPublicJWK = isPublicJWK;
|
|
6
|
-
exports.isSecretJWK = isSecretJWK;
|
|
7
|
-
const is_object_js_1 = require("./is_object.js");
|
|
8
|
-
function isJWK(key) {
|
|
9
|
-
return (0, is_object_js_1.default)(key) && typeof key.kty === 'string';
|
|
10
|
-
}
|
|
11
|
-
function isPrivateJWK(key) {
|
|
12
|
-
return key.kty !== 'oct' && typeof key.d === 'string';
|
|
13
|
-
}
|
|
14
|
-
function isPublicJWK(key) {
|
|
15
|
-
return key.kty !== 'oct' && typeof key.d === 'undefined';
|
|
16
|
-
}
|
|
17
|
-
function isSecretJWK(key) {
|
|
18
|
-
return isJWK(key) && key.kty === 'oct' && typeof key.k === 'string';
|
|
19
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = isObject;
|
|
4
|
-
function isObjectLike(value) {
|
|
5
|
-
return typeof value === 'object' && value !== null;
|
|
6
|
-
}
|
|
7
|
-
function isObject(input) {
|
|
8
|
-
if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
if (Object.getPrototypeOf(input) === null) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
let proto = input;
|
|
15
|
-
while (Object.getPrototypeOf(proto) !== null) {
|
|
16
|
-
proto = Object.getPrototypeOf(proto);
|
|
17
|
-
}
|
|
18
|
-
return Object.getPrototypeOf(input) === proto;
|
|
19
|
-
}
|
package/dist/node/cjs/lib/iv.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.bitLength = bitLength;
|
|
4
|
-
const errors_js_1 = require("../util/errors.js");
|
|
5
|
-
const random_js_1 = require("../runtime/random.js");
|
|
6
|
-
function bitLength(alg) {
|
|
7
|
-
switch (alg) {
|
|
8
|
-
case 'A128GCM':
|
|
9
|
-
case 'A128GCMKW':
|
|
10
|
-
case 'A192GCM':
|
|
11
|
-
case 'A192GCMKW':
|
|
12
|
-
case 'A256GCM':
|
|
13
|
-
case 'A256GCMKW':
|
|
14
|
-
return 96;
|
|
15
|
-
case 'A128CBC-HS256':
|
|
16
|
-
case 'A192CBC-HS384':
|
|
17
|
-
case 'A256CBC-HS512':
|
|
18
|
-
return 128;
|
|
19
|
-
default:
|
|
20
|
-
throw new errors_js_1.JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
exports.default = (alg) => (0, random_js_1.default)(new Uint8Array(bitLength(alg) >> 3));
|