jose 5.10.0 → 6.0.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/README.md +15 -15
- package/dist/types/index.d.ts +5 -5
- 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 +4 -4
- package/dist/types/jwt/produce.d.ts +3 -3
- package/dist/types/jwt/sign.d.ts +3 -3
- package/dist/types/jwt/unsecured.d.ts +5 -5
- 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
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const node_crypto_1 = require("node:crypto");
|
|
4
|
-
const check_iv_length_js_1 = require("../lib/check_iv_length.js");
|
|
5
|
-
const check_cek_length_js_1 = require("./check_cek_length.js");
|
|
6
|
-
const buffer_utils_js_1 = require("../lib/buffer_utils.js");
|
|
7
|
-
const cbc_tag_js_1 = require("./cbc_tag.js");
|
|
8
|
-
const webcrypto_js_1 = require("./webcrypto.js");
|
|
9
|
-
const crypto_key_js_1 = require("../lib/crypto_key.js");
|
|
10
|
-
const is_key_object_js_1 = require("./is_key_object.js");
|
|
11
|
-
const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
|
|
12
|
-
const iv_js_1 = require("../lib/iv.js");
|
|
13
|
-
const errors_js_1 = require("../util/errors.js");
|
|
14
|
-
const ciphers_js_1 = require("./ciphers.js");
|
|
15
|
-
const is_key_like_js_1 = require("./is_key_like.js");
|
|
16
|
-
function cbcEncrypt(enc, plaintext, cek, iv, aad) {
|
|
17
|
-
const keySize = parseInt(enc.slice(1, 4), 10);
|
|
18
|
-
if ((0, is_key_object_js_1.default)(cek)) {
|
|
19
|
-
cek = cek.export();
|
|
20
|
-
}
|
|
21
|
-
const encKey = cek.subarray(keySize >> 3);
|
|
22
|
-
const macKey = cek.subarray(0, keySize >> 3);
|
|
23
|
-
const algorithm = `aes-${keySize}-cbc`;
|
|
24
|
-
if (!(0, ciphers_js_1.default)(algorithm)) {
|
|
25
|
-
throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
|
|
26
|
-
}
|
|
27
|
-
const cipher = (0, node_crypto_1.createCipheriv)(algorithm, encKey, iv);
|
|
28
|
-
const ciphertext = (0, buffer_utils_js_1.concat)(cipher.update(plaintext), cipher.final());
|
|
29
|
-
const macSize = parseInt(enc.slice(-3), 10);
|
|
30
|
-
const tag = (0, cbc_tag_js_1.default)(aad, iv, ciphertext, macSize, macKey, keySize);
|
|
31
|
-
return { ciphertext, tag, iv };
|
|
32
|
-
}
|
|
33
|
-
function gcmEncrypt(enc, plaintext, cek, iv, aad) {
|
|
34
|
-
const keySize = parseInt(enc.slice(1, 4), 10);
|
|
35
|
-
const algorithm = `aes-${keySize}-gcm`;
|
|
36
|
-
if (!(0, ciphers_js_1.default)(algorithm)) {
|
|
37
|
-
throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
|
|
38
|
-
}
|
|
39
|
-
const cipher = (0, node_crypto_1.createCipheriv)(algorithm, cek, iv, { authTagLength: 16 });
|
|
40
|
-
if (aad.byteLength) {
|
|
41
|
-
cipher.setAAD(aad, { plaintextLength: plaintext.length });
|
|
42
|
-
}
|
|
43
|
-
const ciphertext = cipher.update(plaintext);
|
|
44
|
-
cipher.final();
|
|
45
|
-
const tag = cipher.getAuthTag();
|
|
46
|
-
return { ciphertext, tag, iv };
|
|
47
|
-
}
|
|
48
|
-
const encrypt = (enc, plaintext, cek, iv, aad) => {
|
|
49
|
-
let key;
|
|
50
|
-
if ((0, webcrypto_js_1.isCryptoKey)(cek)) {
|
|
51
|
-
(0, crypto_key_js_1.checkEncCryptoKey)(cek, enc, 'encrypt');
|
|
52
|
-
key = node_crypto_1.KeyObject.from(cek);
|
|
53
|
-
}
|
|
54
|
-
else if (cek instanceof Uint8Array || (0, is_key_object_js_1.default)(cek)) {
|
|
55
|
-
key = cek;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
throw new TypeError((0, invalid_key_input_js_1.default)(cek, ...is_key_like_js_1.types, 'Uint8Array'));
|
|
59
|
-
}
|
|
60
|
-
(0, check_cek_length_js_1.default)(enc, key);
|
|
61
|
-
if (iv) {
|
|
62
|
-
(0, check_iv_length_js_1.default)(enc, iv);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
iv = (0, iv_js_1.default)(enc);
|
|
66
|
-
}
|
|
67
|
-
switch (enc) {
|
|
68
|
-
case 'A128CBC-HS256':
|
|
69
|
-
case 'A192CBC-HS384':
|
|
70
|
-
case 'A256CBC-HS512':
|
|
71
|
-
return cbcEncrypt(enc, plaintext, key, iv, aad);
|
|
72
|
-
case 'A128GCM':
|
|
73
|
-
case 'A192GCM':
|
|
74
|
-
case 'A256GCM':
|
|
75
|
-
return gcmEncrypt(enc, plaintext, key, iv, aad);
|
|
76
|
-
default:
|
|
77
|
-
throw new errors_js_1.JOSENotSupported('Unsupported JWE Content Encryption Algorithm');
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
exports.default = encrypt;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const http = require("node:http");
|
|
4
|
-
const https = require("node:https");
|
|
5
|
-
const node_events_1 = require("node:events");
|
|
6
|
-
const errors_js_1 = require("../util/errors.js");
|
|
7
|
-
const buffer_utils_js_1 = require("../lib/buffer_utils.js");
|
|
8
|
-
const fetchJwks = async (url, timeout, options) => {
|
|
9
|
-
let get;
|
|
10
|
-
switch (url.protocol) {
|
|
11
|
-
case 'https:':
|
|
12
|
-
get = https.get;
|
|
13
|
-
break;
|
|
14
|
-
case 'http:':
|
|
15
|
-
get = http.get;
|
|
16
|
-
break;
|
|
17
|
-
default:
|
|
18
|
-
throw new TypeError('Unsupported URL protocol.');
|
|
19
|
-
}
|
|
20
|
-
const { agent, headers } = options;
|
|
21
|
-
const req = get(url.href, {
|
|
22
|
-
agent,
|
|
23
|
-
timeout,
|
|
24
|
-
headers,
|
|
25
|
-
});
|
|
26
|
-
const [response] = (await Promise.race([(0, node_events_1.once)(req, 'response'), (0, node_events_1.once)(req, 'timeout')]));
|
|
27
|
-
if (!response) {
|
|
28
|
-
req.destroy();
|
|
29
|
-
throw new errors_js_1.JWKSTimeout();
|
|
30
|
-
}
|
|
31
|
-
if (response.statusCode !== 200) {
|
|
32
|
-
throw new errors_js_1.JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');
|
|
33
|
-
}
|
|
34
|
-
const parts = [];
|
|
35
|
-
for await (const part of response) {
|
|
36
|
-
parts.push(part);
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
return JSON.parse(buffer_utils_js_1.decoder.decode((0, buffer_utils_js_1.concat)(...parts)));
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
throw new errors_js_1.JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
exports.default = fetchJwks;
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateSecret = generateSecret;
|
|
4
|
-
exports.generateKeyPair = generateKeyPair;
|
|
5
|
-
const node_crypto_1 = require("node:crypto");
|
|
6
|
-
const node_util_1 = require("node:util");
|
|
7
|
-
const random_js_1 = require("./random.js");
|
|
8
|
-
const errors_js_1 = require("../util/errors.js");
|
|
9
|
-
const generate = (0, node_util_1.promisify)(node_crypto_1.generateKeyPair);
|
|
10
|
-
async function generateSecret(alg, options) {
|
|
11
|
-
let length;
|
|
12
|
-
switch (alg) {
|
|
13
|
-
case 'HS256':
|
|
14
|
-
case 'HS384':
|
|
15
|
-
case 'HS512':
|
|
16
|
-
case 'A128CBC-HS256':
|
|
17
|
-
case 'A192CBC-HS384':
|
|
18
|
-
case 'A256CBC-HS512':
|
|
19
|
-
length = parseInt(alg.slice(-3), 10);
|
|
20
|
-
break;
|
|
21
|
-
case 'A128KW':
|
|
22
|
-
case 'A192KW':
|
|
23
|
-
case 'A256KW':
|
|
24
|
-
case 'A128GCMKW':
|
|
25
|
-
case 'A192GCMKW':
|
|
26
|
-
case 'A256GCMKW':
|
|
27
|
-
case 'A128GCM':
|
|
28
|
-
case 'A192GCM':
|
|
29
|
-
case 'A256GCM':
|
|
30
|
-
length = parseInt(alg.slice(1, 4), 10);
|
|
31
|
-
break;
|
|
32
|
-
default:
|
|
33
|
-
throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
34
|
-
}
|
|
35
|
-
return (0, node_crypto_1.createSecretKey)((0, random_js_1.default)(new Uint8Array(length >> 3)));
|
|
36
|
-
}
|
|
37
|
-
async function generateKeyPair(alg, options) {
|
|
38
|
-
switch (alg) {
|
|
39
|
-
case 'RS256':
|
|
40
|
-
case 'RS384':
|
|
41
|
-
case 'RS512':
|
|
42
|
-
case 'PS256':
|
|
43
|
-
case 'PS384':
|
|
44
|
-
case 'PS512':
|
|
45
|
-
case 'RSA-OAEP':
|
|
46
|
-
case 'RSA-OAEP-256':
|
|
47
|
-
case 'RSA-OAEP-384':
|
|
48
|
-
case 'RSA-OAEP-512':
|
|
49
|
-
case 'RSA1_5': {
|
|
50
|
-
const modulusLength = options?.modulusLength ?? 2048;
|
|
51
|
-
if (typeof modulusLength !== 'number' || modulusLength < 2048) {
|
|
52
|
-
throw new errors_js_1.JOSENotSupported('Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used');
|
|
53
|
-
}
|
|
54
|
-
const keypair = await generate('rsa', {
|
|
55
|
-
modulusLength,
|
|
56
|
-
publicExponent: 0x10001,
|
|
57
|
-
});
|
|
58
|
-
return keypair;
|
|
59
|
-
}
|
|
60
|
-
case 'ES256':
|
|
61
|
-
return generate('ec', { namedCurve: 'P-256' });
|
|
62
|
-
case 'ES256K':
|
|
63
|
-
return generate('ec', { namedCurve: 'secp256k1' });
|
|
64
|
-
case 'ES384':
|
|
65
|
-
return generate('ec', { namedCurve: 'P-384' });
|
|
66
|
-
case 'ES512':
|
|
67
|
-
return generate('ec', { namedCurve: 'P-521' });
|
|
68
|
-
case 'Ed25519':
|
|
69
|
-
return generate('ed25519');
|
|
70
|
-
case 'EdDSA': {
|
|
71
|
-
switch (options?.crv) {
|
|
72
|
-
case undefined:
|
|
73
|
-
case 'Ed25519':
|
|
74
|
-
return generate('ed25519');
|
|
75
|
-
case 'Ed448':
|
|
76
|
-
return generate('ed448');
|
|
77
|
-
default:
|
|
78
|
-
throw new errors_js_1.JOSENotSupported('Invalid or unsupported crv option provided, supported values are Ed25519 and Ed448');
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
case 'ECDH-ES':
|
|
82
|
-
case 'ECDH-ES+A128KW':
|
|
83
|
-
case 'ECDH-ES+A192KW':
|
|
84
|
-
case 'ECDH-ES+A256KW': {
|
|
85
|
-
const crv = options?.crv ?? 'P-256';
|
|
86
|
-
switch (crv) {
|
|
87
|
-
case undefined:
|
|
88
|
-
case 'P-256':
|
|
89
|
-
case 'P-384':
|
|
90
|
-
case 'P-521':
|
|
91
|
-
return generate('ec', { namedCurve: crv });
|
|
92
|
-
case 'X25519':
|
|
93
|
-
return generate('x25519');
|
|
94
|
-
case 'X448':
|
|
95
|
-
return generate('x448');
|
|
96
|
-
default:
|
|
97
|
-
throw new errors_js_1.JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448');
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
default:
|
|
101
|
-
throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
102
|
-
}
|
|
103
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.weakMap = void 0;
|
|
4
|
-
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const errors_js_1 = require("../util/errors.js");
|
|
6
|
-
const webcrypto_js_1 = require("./webcrypto.js");
|
|
7
|
-
const is_key_object_js_1 = require("./is_key_object.js");
|
|
8
|
-
const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
|
|
9
|
-
const is_key_like_js_1 = require("./is_key_like.js");
|
|
10
|
-
const is_jwk_js_1 = require("../lib/is_jwk.js");
|
|
11
|
-
exports.weakMap = new WeakMap();
|
|
12
|
-
const namedCurveToJOSE = (namedCurve) => {
|
|
13
|
-
switch (namedCurve) {
|
|
14
|
-
case 'prime256v1':
|
|
15
|
-
return 'P-256';
|
|
16
|
-
case 'secp384r1':
|
|
17
|
-
return 'P-384';
|
|
18
|
-
case 'secp521r1':
|
|
19
|
-
return 'P-521';
|
|
20
|
-
case 'secp256k1':
|
|
21
|
-
return 'secp256k1';
|
|
22
|
-
default:
|
|
23
|
-
throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
const getNamedCurve = (kee, raw) => {
|
|
27
|
-
let key;
|
|
28
|
-
if ((0, webcrypto_js_1.isCryptoKey)(kee)) {
|
|
29
|
-
key = node_crypto_1.KeyObject.from(kee);
|
|
30
|
-
}
|
|
31
|
-
else if ((0, is_key_object_js_1.default)(kee)) {
|
|
32
|
-
key = kee;
|
|
33
|
-
}
|
|
34
|
-
else if ((0, is_jwk_js_1.isJWK)(kee)) {
|
|
35
|
-
return kee.crv;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
throw new TypeError((0, invalid_key_input_js_1.default)(kee, ...is_key_like_js_1.types));
|
|
39
|
-
}
|
|
40
|
-
if (key.type === 'secret') {
|
|
41
|
-
throw new TypeError('only "private" or "public" type keys can be used for this operation');
|
|
42
|
-
}
|
|
43
|
-
switch (key.asymmetricKeyType) {
|
|
44
|
-
case 'ed25519':
|
|
45
|
-
case 'ed448':
|
|
46
|
-
return `Ed${key.asymmetricKeyType.slice(2)}`;
|
|
47
|
-
case 'x25519':
|
|
48
|
-
case 'x448':
|
|
49
|
-
return `X${key.asymmetricKeyType.slice(1)}`;
|
|
50
|
-
case 'ec': {
|
|
51
|
-
const namedCurve = key.asymmetricKeyDetails.namedCurve;
|
|
52
|
-
if (raw) {
|
|
53
|
-
return namedCurve;
|
|
54
|
-
}
|
|
55
|
-
return namedCurveToJOSE(namedCurve);
|
|
56
|
-
}
|
|
57
|
-
default:
|
|
58
|
-
throw new TypeError('Invalid asymmetric key type for this operation');
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
exports.default = getNamedCurve;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = getSignVerifyKey;
|
|
4
|
-
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const webcrypto_js_1 = require("./webcrypto.js");
|
|
6
|
-
const crypto_key_js_1 = require("../lib/crypto_key.js");
|
|
7
|
-
const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
|
|
8
|
-
const is_key_like_js_1 = require("./is_key_like.js");
|
|
9
|
-
const jwk = require("../lib/is_jwk.js");
|
|
10
|
-
function getSignVerifyKey(alg, key, usage) {
|
|
11
|
-
if (key instanceof Uint8Array) {
|
|
12
|
-
if (!alg.startsWith('HS')) {
|
|
13
|
-
throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));
|
|
14
|
-
}
|
|
15
|
-
return (0, node_crypto_1.createSecretKey)(key);
|
|
16
|
-
}
|
|
17
|
-
if (key instanceof node_crypto_1.KeyObject) {
|
|
18
|
-
return key;
|
|
19
|
-
}
|
|
20
|
-
if ((0, webcrypto_js_1.isCryptoKey)(key)) {
|
|
21
|
-
(0, crypto_key_js_1.checkSigCryptoKey)(key, alg, usage);
|
|
22
|
-
return node_crypto_1.KeyObject.from(key);
|
|
23
|
-
}
|
|
24
|
-
if (jwk.isJWK(key)) {
|
|
25
|
-
if (alg.startsWith('HS')) {
|
|
26
|
-
return (0, node_crypto_1.createSecretKey)(Buffer.from(key.k, 'base64url'));
|
|
27
|
-
}
|
|
28
|
-
return key;
|
|
29
|
-
}
|
|
30
|
-
throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array', 'JSON Web Key'));
|
|
31
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = hmacDigest;
|
|
4
|
-
const errors_js_1 = require("../util/errors.js");
|
|
5
|
-
function hmacDigest(alg) {
|
|
6
|
-
switch (alg) {
|
|
7
|
-
case 'HS256':
|
|
8
|
-
return 'sha256';
|
|
9
|
-
case 'HS384':
|
|
10
|
-
return 'sha384';
|
|
11
|
-
case 'HS512':
|
|
12
|
-
return 'sha512';
|
|
13
|
-
default:
|
|
14
|
-
throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.types = void 0;
|
|
4
|
-
const webcrypto_js_1 = require("./webcrypto.js");
|
|
5
|
-
const is_key_object_js_1 = require("./is_key_object.js");
|
|
6
|
-
exports.default = (key) => (0, is_key_object_js_1.default)(key) || (0, webcrypto_js_1.isCryptoKey)(key);
|
|
7
|
-
const types = ['KeyObject'];
|
|
8
|
-
exports.types = types;
|
|
9
|
-
if (globalThis.CryptoKey || webcrypto_js_1.default?.CryptoKey) {
|
|
10
|
-
types.push('CryptoKey');
|
|
11
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const node_crypto_1 = require("node:crypto");
|
|
4
|
-
const parse = (key) => {
|
|
5
|
-
if (key.d) {
|
|
6
|
-
return (0, node_crypto_1.createPrivateKey)({ format: 'jwk', key });
|
|
7
|
-
}
|
|
8
|
-
return (0, node_crypto_1.createPublicKey)({ format: 'jwk', key });
|
|
9
|
-
};
|
|
10
|
-
exports.default = parse;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const node_crypto_1 = require("node:crypto");
|
|
4
|
-
const base64url_js_1 = require("./base64url.js");
|
|
5
|
-
const errors_js_1 = require("../util/errors.js");
|
|
6
|
-
const webcrypto_js_1 = require("./webcrypto.js");
|
|
7
|
-
const is_key_object_js_1 = require("./is_key_object.js");
|
|
8
|
-
const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
|
|
9
|
-
const is_key_like_js_1 = require("./is_key_like.js");
|
|
10
|
-
const keyToJWK = (key) => {
|
|
11
|
-
let keyObject;
|
|
12
|
-
if ((0, webcrypto_js_1.isCryptoKey)(key)) {
|
|
13
|
-
if (!key.extractable) {
|
|
14
|
-
throw new TypeError('CryptoKey is not extractable');
|
|
15
|
-
}
|
|
16
|
-
keyObject = node_crypto_1.KeyObject.from(key);
|
|
17
|
-
}
|
|
18
|
-
else if ((0, is_key_object_js_1.default)(key)) {
|
|
19
|
-
keyObject = key;
|
|
20
|
-
}
|
|
21
|
-
else if (key instanceof Uint8Array) {
|
|
22
|
-
return {
|
|
23
|
-
kty: 'oct',
|
|
24
|
-
k: (0, base64url_js_1.encode)(key),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));
|
|
29
|
-
}
|
|
30
|
-
if (keyObject.type !== 'secret' &&
|
|
31
|
-
!['rsa', 'ec', 'ed25519', 'x25519', 'ed448', 'x448'].includes(keyObject.asymmetricKeyType)) {
|
|
32
|
-
throw new errors_js_1.JOSENotSupported('Unsupported key asymmetricKeyType');
|
|
33
|
-
}
|
|
34
|
-
return keyObject.export({ format: 'jwk' });
|
|
35
|
-
};
|
|
36
|
-
exports.default = keyToJWK;
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = keyForCrypto;
|
|
4
|
-
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const get_named_curve_js_1 = require("./get_named_curve.js");
|
|
6
|
-
const errors_js_1 = require("../util/errors.js");
|
|
7
|
-
const check_key_length_js_1 = require("./check_key_length.js");
|
|
8
|
-
const ecCurveAlgMap = new Map([
|
|
9
|
-
['ES256', 'P-256'],
|
|
10
|
-
['ES256K', 'secp256k1'],
|
|
11
|
-
['ES384', 'P-384'],
|
|
12
|
-
['ES512', 'P-521'],
|
|
13
|
-
]);
|
|
14
|
-
function keyForCrypto(alg, key) {
|
|
15
|
-
let asymmetricKeyType;
|
|
16
|
-
let asymmetricKeyDetails;
|
|
17
|
-
let isJWK;
|
|
18
|
-
if (key instanceof node_crypto_1.KeyObject) {
|
|
19
|
-
asymmetricKeyType = key.asymmetricKeyType;
|
|
20
|
-
asymmetricKeyDetails = key.asymmetricKeyDetails;
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
isJWK = true;
|
|
24
|
-
switch (key.kty) {
|
|
25
|
-
case 'RSA':
|
|
26
|
-
asymmetricKeyType = 'rsa';
|
|
27
|
-
break;
|
|
28
|
-
case 'EC':
|
|
29
|
-
asymmetricKeyType = 'ec';
|
|
30
|
-
break;
|
|
31
|
-
case 'OKP': {
|
|
32
|
-
if (key.crv === 'Ed25519') {
|
|
33
|
-
asymmetricKeyType = 'ed25519';
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
if (key.crv === 'Ed448') {
|
|
37
|
-
asymmetricKeyType = 'ed448';
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
throw new TypeError('Invalid key for this operation, its crv must be Ed25519 or Ed448');
|
|
41
|
-
}
|
|
42
|
-
default:
|
|
43
|
-
throw new TypeError('Invalid key for this operation, its kty must be RSA, OKP, or EC');
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
let options;
|
|
47
|
-
switch (alg) {
|
|
48
|
-
case 'Ed25519':
|
|
49
|
-
if (asymmetricKeyType !== 'ed25519') {
|
|
50
|
-
throw new TypeError(`Invalid key for this operation, its asymmetricKeyType must be ed25519`);
|
|
51
|
-
}
|
|
52
|
-
break;
|
|
53
|
-
case 'EdDSA':
|
|
54
|
-
if (!['ed25519', 'ed448'].includes(asymmetricKeyType)) {
|
|
55
|
-
throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ed25519 or ed448');
|
|
56
|
-
}
|
|
57
|
-
break;
|
|
58
|
-
case 'RS256':
|
|
59
|
-
case 'RS384':
|
|
60
|
-
case 'RS512':
|
|
61
|
-
if (asymmetricKeyType !== 'rsa') {
|
|
62
|
-
throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
|
|
63
|
-
}
|
|
64
|
-
(0, check_key_length_js_1.default)(key, alg);
|
|
65
|
-
break;
|
|
66
|
-
case 'PS256':
|
|
67
|
-
case 'PS384':
|
|
68
|
-
case 'PS512':
|
|
69
|
-
if (asymmetricKeyType === 'rsa-pss') {
|
|
70
|
-
const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = asymmetricKeyDetails;
|
|
71
|
-
const length = parseInt(alg.slice(-3), 10);
|
|
72
|
-
if (hashAlgorithm !== undefined &&
|
|
73
|
-
(hashAlgorithm !== `sha${length}` || mgf1HashAlgorithm !== hashAlgorithm)) {
|
|
74
|
-
throw new TypeError(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of "alg" ${alg}`);
|
|
75
|
-
}
|
|
76
|
-
if (saltLength !== undefined && saltLength > length >> 3) {
|
|
77
|
-
throw new TypeError(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of "alg" ${alg}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
else if (asymmetricKeyType !== 'rsa') {
|
|
81
|
-
throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa or rsa-pss');
|
|
82
|
-
}
|
|
83
|
-
(0, check_key_length_js_1.default)(key, alg);
|
|
84
|
-
options = {
|
|
85
|
-
padding: node_crypto_1.constants.RSA_PKCS1_PSS_PADDING,
|
|
86
|
-
saltLength: node_crypto_1.constants.RSA_PSS_SALTLEN_DIGEST,
|
|
87
|
-
};
|
|
88
|
-
break;
|
|
89
|
-
case 'ES256':
|
|
90
|
-
case 'ES256K':
|
|
91
|
-
case 'ES384':
|
|
92
|
-
case 'ES512': {
|
|
93
|
-
if (asymmetricKeyType !== 'ec') {
|
|
94
|
-
throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ec');
|
|
95
|
-
}
|
|
96
|
-
const actual = (0, get_named_curve_js_1.default)(key);
|
|
97
|
-
const expected = ecCurveAlgMap.get(alg);
|
|
98
|
-
if (actual !== expected) {
|
|
99
|
-
throw new TypeError(`Invalid key curve for the algorithm, its curve must be ${expected}, got ${actual}`);
|
|
100
|
-
}
|
|
101
|
-
options = { dsaEncoding: 'ieee-p1363' };
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
default:
|
|
105
|
-
throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
|
|
106
|
-
}
|
|
107
|
-
if (isJWK) {
|
|
108
|
-
return { format: 'jwk', key, ...options };
|
|
109
|
-
}
|
|
110
|
-
return options ? { ...options, key } : key;
|
|
111
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decrypt = exports.encrypt = void 0;
|
|
4
|
-
const node_util_1 = require("node:util");
|
|
5
|
-
const node_crypto_1 = require("node:crypto");
|
|
6
|
-
const random_js_1 = require("./random.js");
|
|
7
|
-
const buffer_utils_js_1 = require("../lib/buffer_utils.js");
|
|
8
|
-
const base64url_js_1 = require("./base64url.js");
|
|
9
|
-
const aeskw_js_1 = require("./aeskw.js");
|
|
10
|
-
const check_p2s_js_1 = require("../lib/check_p2s.js");
|
|
11
|
-
const webcrypto_js_1 = require("./webcrypto.js");
|
|
12
|
-
const crypto_key_js_1 = require("../lib/crypto_key.js");
|
|
13
|
-
const is_key_object_js_1 = require("./is_key_object.js");
|
|
14
|
-
const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
|
|
15
|
-
const is_key_like_js_1 = require("./is_key_like.js");
|
|
16
|
-
const pbkdf2 = (0, node_util_1.promisify)(node_crypto_1.pbkdf2);
|
|
17
|
-
function getPassword(key, alg) {
|
|
18
|
-
if ((0, is_key_object_js_1.default)(key)) {
|
|
19
|
-
return key.export();
|
|
20
|
-
}
|
|
21
|
-
if (key instanceof Uint8Array) {
|
|
22
|
-
return key;
|
|
23
|
-
}
|
|
24
|
-
if ((0, webcrypto_js_1.isCryptoKey)(key)) {
|
|
25
|
-
(0, crypto_key_js_1.checkEncCryptoKey)(key, alg, 'deriveBits', 'deriveKey');
|
|
26
|
-
return node_crypto_1.KeyObject.from(key).export();
|
|
27
|
-
}
|
|
28
|
-
throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));
|
|
29
|
-
}
|
|
30
|
-
const encrypt = async (alg, key, cek, p2c = 2048, p2s = (0, random_js_1.default)(new Uint8Array(16))) => {
|
|
31
|
-
(0, check_p2s_js_1.default)(p2s);
|
|
32
|
-
const salt = (0, buffer_utils_js_1.p2s)(alg, p2s);
|
|
33
|
-
const keylen = parseInt(alg.slice(13, 16), 10) >> 3;
|
|
34
|
-
const password = getPassword(key, alg);
|
|
35
|
-
const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);
|
|
36
|
-
const encryptedKey = await (0, aeskw_js_1.wrap)(alg.slice(-6), derivedKey, cek);
|
|
37
|
-
return { encryptedKey, p2c, p2s: (0, base64url_js_1.encode)(p2s) };
|
|
38
|
-
};
|
|
39
|
-
exports.encrypt = encrypt;
|
|
40
|
-
const decrypt = async (alg, key, encryptedKey, p2c, p2s) => {
|
|
41
|
-
(0, check_p2s_js_1.default)(p2s);
|
|
42
|
-
const salt = (0, buffer_utils_js_1.p2s)(alg, p2s);
|
|
43
|
-
const keylen = parseInt(alg.slice(13, 16), 10) >> 3;
|
|
44
|
-
const password = getPassword(key, alg);
|
|
45
|
-
const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);
|
|
46
|
-
return (0, aeskw_js_1.unwrap)(alg.slice(-6), derivedKey, encryptedKey);
|
|
47
|
-
};
|
|
48
|
-
exports.decrypt = decrypt;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = void 0;
|
|
4
|
-
var node_crypto_1 = require("node:crypto");
|
|
5
|
-
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return node_crypto_1.randomFillSync; } });
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decrypt = exports.encrypt = void 0;
|
|
4
|
-
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const node_util_1 = require("node:util");
|
|
6
|
-
const check_key_length_js_1 = require("./check_key_length.js");
|
|
7
|
-
const webcrypto_js_1 = require("./webcrypto.js");
|
|
8
|
-
const crypto_key_js_1 = require("../lib/crypto_key.js");
|
|
9
|
-
const is_key_object_js_1 = require("./is_key_object.js");
|
|
10
|
-
const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
|
|
11
|
-
const is_key_like_js_1 = require("./is_key_like.js");
|
|
12
|
-
const checkKey = (key, alg) => {
|
|
13
|
-
if (key.asymmetricKeyType !== 'rsa') {
|
|
14
|
-
throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
|
|
15
|
-
}
|
|
16
|
-
(0, check_key_length_js_1.default)(key, alg);
|
|
17
|
-
};
|
|
18
|
-
const RSA1_5 = (0, node_util_1.deprecate)(() => node_crypto_1.constants.RSA_PKCS1_PADDING, 'The RSA1_5 "alg" (JWE Algorithm) is deprecated and will be removed in the next major revision.');
|
|
19
|
-
const resolvePadding = (alg) => {
|
|
20
|
-
switch (alg) {
|
|
21
|
-
case 'RSA-OAEP':
|
|
22
|
-
case 'RSA-OAEP-256':
|
|
23
|
-
case 'RSA-OAEP-384':
|
|
24
|
-
case 'RSA-OAEP-512':
|
|
25
|
-
return node_crypto_1.constants.RSA_PKCS1_OAEP_PADDING;
|
|
26
|
-
case 'RSA1_5':
|
|
27
|
-
return RSA1_5();
|
|
28
|
-
default:
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
const resolveOaepHash = (alg) => {
|
|
33
|
-
switch (alg) {
|
|
34
|
-
case 'RSA-OAEP':
|
|
35
|
-
return 'sha1';
|
|
36
|
-
case 'RSA-OAEP-256':
|
|
37
|
-
return 'sha256';
|
|
38
|
-
case 'RSA-OAEP-384':
|
|
39
|
-
return 'sha384';
|
|
40
|
-
case 'RSA-OAEP-512':
|
|
41
|
-
return 'sha512';
|
|
42
|
-
default:
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
function ensureKeyObject(key, alg, ...usages) {
|
|
47
|
-
if ((0, is_key_object_js_1.default)(key)) {
|
|
48
|
-
return key;
|
|
49
|
-
}
|
|
50
|
-
if ((0, webcrypto_js_1.isCryptoKey)(key)) {
|
|
51
|
-
(0, crypto_key_js_1.checkEncCryptoKey)(key, alg, ...usages);
|
|
52
|
-
return node_crypto_1.KeyObject.from(key);
|
|
53
|
-
}
|
|
54
|
-
throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));
|
|
55
|
-
}
|
|
56
|
-
const encrypt = (alg, key, cek) => {
|
|
57
|
-
const padding = resolvePadding(alg);
|
|
58
|
-
const oaepHash = resolveOaepHash(alg);
|
|
59
|
-
const keyObject = ensureKeyObject(key, alg, 'wrapKey', 'encrypt');
|
|
60
|
-
checkKey(keyObject, alg);
|
|
61
|
-
return (0, node_crypto_1.publicEncrypt)({ key: keyObject, oaepHash, padding }, cek);
|
|
62
|
-
};
|
|
63
|
-
exports.encrypt = encrypt;
|
|
64
|
-
const decrypt = (alg, key, encryptedKey) => {
|
|
65
|
-
const padding = resolvePadding(alg);
|
|
66
|
-
const oaepHash = resolveOaepHash(alg);
|
|
67
|
-
const keyObject = ensureKeyObject(key, alg, 'unwrapKey', 'decrypt');
|
|
68
|
-
checkKey(keyObject, alg);
|
|
69
|
-
return (0, node_crypto_1.privateDecrypt)({ key: keyObject, oaepHash, padding }, encryptedKey);
|
|
70
|
-
};
|
|
71
|
-
exports.decrypt = decrypt;
|