jose 5.9.6 → 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.
Files changed (291) hide show
  1. package/README.md +21 -19
  2. package/dist/types/index.d.ts +5 -5
  3. package/dist/types/jwe/compact/decrypt.d.ts +4 -4
  4. package/dist/types/jwe/compact/encrypt.d.ts +4 -4
  5. package/dist/types/jwe/flattened/decrypt.d.ts +4 -4
  6. package/dist/types/jwe/flattened/encrypt.d.ts +6 -6
  7. package/dist/types/jwe/general/decrypt.d.ts +4 -4
  8. package/dist/types/jwe/general/encrypt.d.ts +7 -7
  9. package/dist/types/jwk/embedded.d.ts +2 -2
  10. package/dist/types/jwk/thumbprint.d.ts +5 -5
  11. package/dist/types/jwks/local.d.ts +2 -2
  12. package/dist/types/jwks/remote.d.ts +104 -25
  13. package/dist/types/jws/compact/sign.d.ts +4 -4
  14. package/dist/types/jws/compact/verify.d.ts +4 -4
  15. package/dist/types/jws/flattened/sign.d.ts +4 -4
  16. package/dist/types/jws/flattened/verify.d.ts +4 -4
  17. package/dist/types/jws/general/sign.d.ts +6 -6
  18. package/dist/types/jws/general/verify.d.ts +4 -4
  19. package/dist/types/jwt/decrypt.d.ts +5 -5
  20. package/dist/types/jwt/encrypt.d.ts +4 -4
  21. package/dist/types/jwt/produce.d.ts +3 -3
  22. package/dist/types/jwt/sign.d.ts +3 -3
  23. package/dist/types/jwt/unsecured.d.ts +5 -5
  24. package/dist/types/jwt/verify.d.ts +5 -5
  25. package/dist/types/key/export.d.ts +10 -12
  26. package/dist/types/key/generate_key_pair.d.ts +10 -11
  27. package/dist/types/key/generate_secret.d.ts +6 -9
  28. package/dist/types/key/import.d.ts +20 -27
  29. package/dist/types/types.d.ts +38 -59
  30. package/dist/types/util/decode_jwt.d.ts +2 -2
  31. package/dist/types/util/decode_protected_header.d.ts +2 -2
  32. package/dist/types/util/errors.d.ts +6 -6
  33. package/dist/{browser → webapi}/index.js +2 -2
  34. package/dist/{node/esm → webapi}/jwe/flattened/decrypt.js +8 -4
  35. package/dist/{node/esm → webapi}/jwe/flattened/encrypt.js +7 -3
  36. package/dist/{node/esm → webapi}/jwe/general/encrypt.js +8 -3
  37. package/dist/{node/esm → webapi}/jwk/thumbprint.js +18 -8
  38. package/dist/{node/esm → webapi}/jwks/local.js +4 -6
  39. package/dist/{node/esm → webapi}/jwks/remote.js +34 -6
  40. package/dist/{node/esm → webapi}/jws/flattened/sign.js +7 -5
  41. package/dist/{browser → webapi}/jws/flattened/verify.js +8 -14
  42. package/dist/{browser → webapi}/jwt/unsecured.js +1 -1
  43. package/dist/{node/esm → webapi}/key/export.js +2 -3
  44. package/dist/{browser/runtime/generate.js → webapi/key/generate_key_pair.js} +5 -54
  45. package/dist/webapi/key/generate_secret.js +40 -0
  46. package/dist/{browser → webapi}/key/import.js +9 -7
  47. package/dist/{node/esm → webapi}/lib/aesgcmkw.js +3 -3
  48. package/dist/{browser/runtime → webapi/lib}/aeskw.js +9 -16
  49. package/dist/{browser/runtime → webapi/lib}/asn1.js +25 -17
  50. package/dist/{browser/runtime → webapi/lib}/base64url.js +17 -9
  51. package/dist/{browser → webapi}/lib/buffer_utils.js +4 -19
  52. package/dist/{browser → webapi}/lib/cek.js +1 -2
  53. package/dist/{browser/runtime → webapi/lib}/check_cek_length.js +1 -2
  54. package/dist/{browser → webapi}/lib/check_iv_length.js +1 -2
  55. package/dist/webapi/lib/check_key_type.js +126 -0
  56. package/dist/{node/esm → webapi}/lib/crypto_key.js +11 -23
  57. package/dist/{browser/runtime → webapi/lib}/decrypt.js +26 -10
  58. package/dist/{node/esm → webapi}/lib/decrypt_key_management.js +22 -24
  59. package/dist/{browser/runtime → webapi/lib}/digest.js +1 -3
  60. package/dist/webapi/lib/ecdhes.js +46 -0
  61. package/dist/{browser/runtime → webapi/lib}/encrypt.js +8 -10
  62. package/dist/{node/esm → webapi}/lib/encrypt_key_management.js +26 -23
  63. package/dist/webapi/lib/get_sign_verify_key.js +12 -0
  64. package/dist/{node/esm → webapi}/lib/is_disjoint.js +1 -2
  65. package/dist/{browser → webapi}/lib/is_jwk.js +1 -1
  66. package/dist/webapi/lib/is_key_like.js +14 -0
  67. package/dist/{browser → webapi}/lib/is_object.js +2 -2
  68. package/dist/{node/esm → webapi}/lib/iv.js +1 -2
  69. package/dist/{browser/runtime → webapi/lib}/jwk_to_key.js +4 -10
  70. package/dist/webapi/lib/key_to_jwk.js +27 -0
  71. package/dist/webapi/lib/normalize_key.js +164 -0
  72. package/dist/webapi/lib/pbes2kw.js +37 -0
  73. package/dist/webapi/lib/rsaes.js +24 -0
  74. package/dist/{browser/runtime → webapi/lib}/sign.js +1 -3
  75. package/dist/{browser/runtime → webapi/lib}/subtle_dsa.js +5 -4
  76. package/dist/{browser → webapi}/lib/validate_algorithms.js +1 -2
  77. package/dist/{node/esm → webapi}/lib/validate_crit.js +3 -4
  78. package/dist/{browser/runtime → webapi/lib}/verify.js +1 -3
  79. package/dist/{node/esm → webapi}/util/base64url.js +1 -1
  80. package/package.json +36 -219
  81. package/dist/browser/jwe/compact/encrypt.js +0 -26
  82. package/dist/browser/jwe/flattened/decrypt.js +0 -161
  83. package/dist/browser/jwe/flattened/encrypt.js +0 -153
  84. package/dist/browser/jwe/general/encrypt.js +0 -174
  85. package/dist/browser/jwk/thumbprint.js +0 -53
  86. package/dist/browser/jwks/local.js +0 -121
  87. package/dist/browser/jwks/remote.js +0 -139
  88. package/dist/browser/jws/compact/sign.js +0 -17
  89. package/dist/browser/jws/flattened/sign.js +0 -81
  90. package/dist/browser/jws/general/sign.js +0 -67
  91. package/dist/browser/jwt/encrypt.js +0 -68
  92. package/dist/browser/jwt/produce.js +0 -75
  93. package/dist/browser/jwt/sign.js +0 -20
  94. package/dist/browser/key/export.js +0 -12
  95. package/dist/browser/key/generate_key_pair.js +0 -4
  96. package/dist/browser/key/generate_secret.js +0 -4
  97. package/dist/browser/lib/aesgcmkw.js +0 -16
  98. package/dist/browser/lib/check_key_type.js +0 -77
  99. package/dist/browser/lib/check_p2s.js +0 -6
  100. package/dist/browser/lib/crypto_key.js +0 -152
  101. package/dist/browser/lib/decrypt_key_management.js +0 -129
  102. package/dist/browser/lib/encrypt_key_management.js +0 -89
  103. package/dist/browser/lib/format_pem.js +0 -4
  104. package/dist/browser/lib/is_disjoint.js +0 -22
  105. package/dist/browser/lib/iv.js +0 -20
  106. package/dist/browser/lib/validate_crit.js +0 -34
  107. package/dist/browser/package.json +0 -1
  108. package/dist/browser/runtime/bogus.js +0 -6
  109. package/dist/browser/runtime/ecdhes.js +0 -47
  110. package/dist/browser/runtime/fetch_jwks.js +0 -34
  111. package/dist/browser/runtime/get_sign_verify_key.js +0 -24
  112. package/dist/browser/runtime/is_key_like.js +0 -8
  113. package/dist/browser/runtime/key_to_jwk.js +0 -21
  114. package/dist/browser/runtime/normalize_key.js +0 -68
  115. package/dist/browser/runtime/pbes2kw.js +0 -51
  116. package/dist/browser/runtime/random.js +0 -2
  117. package/dist/browser/runtime/rsaes.js +0 -37
  118. package/dist/browser/runtime/runtime.js +0 -1
  119. package/dist/browser/runtime/subtle_rsaes.js +0 -12
  120. package/dist/browser/runtime/timing_safe_equal.js +0 -19
  121. package/dist/browser/runtime/webcrypto.js +0 -2
  122. package/dist/browser/util/base64url.js +0 -3
  123. package/dist/browser/util/errors.js +0 -114
  124. package/dist/browser/util/runtime.js +0 -2
  125. package/dist/node/cjs/index.js +0 -69
  126. package/dist/node/cjs/jwe/compact/decrypt.js +0 -30
  127. package/dist/node/cjs/jwe/compact/encrypt.js +0 -31
  128. package/dist/node/cjs/jwe/flattened/decrypt.js +0 -164
  129. package/dist/node/cjs/jwe/flattened/encrypt.js +0 -165
  130. package/dist/node/cjs/jwe/general/decrypt.js +0 -34
  131. package/dist/node/cjs/jwe/general/encrypt.js +0 -186
  132. package/dist/node/cjs/jwk/embedded.js +0 -20
  133. package/dist/node/cjs/jwk/thumbprint.js +0 -57
  134. package/dist/node/cjs/jwks/local.js +0 -125
  135. package/dist/node/cjs/jwks/remote.js +0 -152
  136. package/dist/node/cjs/jws/compact/sign.js +0 -22
  137. package/dist/node/cjs/jws/compact/verify.js +0 -24
  138. package/dist/node/cjs/jws/flattened/sign.js +0 -88
  139. package/dist/node/cjs/jws/flattened/verify.js +0 -125
  140. package/dist/node/cjs/jws/general/sign.js +0 -77
  141. package/dist/node/cjs/jws/general/verify.js +0 -27
  142. package/dist/node/cjs/jwt/decrypt.js +0 -26
  143. package/dist/node/cjs/jwt/encrypt.js +0 -79
  144. package/dist/node/cjs/jwt/produce.js +0 -80
  145. package/dist/node/cjs/jwt/sign.js +0 -25
  146. package/dist/node/cjs/jwt/unsecured.js +0 -36
  147. package/dist/node/cjs/jwt/verify.js +0 -18
  148. package/dist/node/cjs/key/export.js +0 -17
  149. package/dist/node/cjs/key/generate_key_pair.js +0 -7
  150. package/dist/node/cjs/key/generate_secret.js +0 -7
  151. package/dist/node/cjs/key/import.js +0 -51
  152. package/dist/node/cjs/lib/aesgcmkw.js +0 -20
  153. package/dist/node/cjs/lib/buffer_utils.js +0 -60
  154. package/dist/node/cjs/lib/cek.js +0 -23
  155. package/dist/node/cjs/lib/check_iv_length.js +0 -10
  156. package/dist/node/cjs/lib/check_key_type.js +0 -80
  157. package/dist/node/cjs/lib/check_p2s.js +0 -9
  158. package/dist/node/cjs/lib/crypto_key.js +0 -156
  159. package/dist/node/cjs/lib/decrypt_key_management.js +0 -131
  160. package/dist/node/cjs/lib/encrypt_key_management.js +0 -91
  161. package/dist/node/cjs/lib/epoch.js +0 -3
  162. package/dist/node/cjs/lib/invalid_key_input.js +0 -34
  163. package/dist/node/cjs/lib/is_disjoint.js +0 -24
  164. package/dist/node/cjs/lib/is_jwk.js +0 -19
  165. package/dist/node/cjs/lib/is_object.js +0 -19
  166. package/dist/node/cjs/lib/iv.js +0 -23
  167. package/dist/node/cjs/lib/jwt_claims_set.js +0 -106
  168. package/dist/node/cjs/lib/private_symbols.js +0 -4
  169. package/dist/node/cjs/lib/secs.js +0 -57
  170. package/dist/node/cjs/lib/validate_algorithms.js +0 -13
  171. package/dist/node/cjs/lib/validate_crit.js +0 -36
  172. package/dist/node/cjs/runtime/aeskw.js +0 -55
  173. package/dist/node/cjs/runtime/asn1.js +0 -54
  174. package/dist/node/cjs/runtime/base64url.js +0 -20
  175. package/dist/node/cjs/runtime/cbc_tag.js +0 -11
  176. package/dist/node/cjs/runtime/check_cek_length.js +0 -37
  177. package/dist/node/cjs/runtime/check_key_length.js +0 -18
  178. package/dist/node/cjs/runtime/ciphers.js +0 -8
  179. package/dist/node/cjs/runtime/decrypt.js +0 -103
  180. package/dist/node/cjs/runtime/digest.js +0 -5
  181. package/dist/node/cjs/runtime/dsa_digest.js +0 -25
  182. package/dist/node/cjs/runtime/ecdhes.js +0 -70
  183. package/dist/node/cjs/runtime/encrypt.js +0 -80
  184. package/dist/node/cjs/runtime/fetch_jwks.js +0 -45
  185. package/dist/node/cjs/runtime/generate.js +0 -101
  186. package/dist/node/cjs/runtime/get_named_curve.js +0 -61
  187. package/dist/node/cjs/runtime/get_sign_verify_key.js +0 -31
  188. package/dist/node/cjs/runtime/hmac_digest.js +0 -16
  189. package/dist/node/cjs/runtime/is_key_like.js +0 -11
  190. package/dist/node/cjs/runtime/is_key_object.js +0 -4
  191. package/dist/node/cjs/runtime/jwk_to_key.js +0 -10
  192. package/dist/node/cjs/runtime/key_to_jwk.js +0 -36
  193. package/dist/node/cjs/runtime/node_key.js +0 -106
  194. package/dist/node/cjs/runtime/normalize_key.js +0 -3
  195. package/dist/node/cjs/runtime/pbes2kw.js +0 -48
  196. package/dist/node/cjs/runtime/random.js +0 -5
  197. package/dist/node/cjs/runtime/rsaes.js +0 -71
  198. package/dist/node/cjs/runtime/runtime.js +0 -3
  199. package/dist/node/cjs/runtime/sign.js +0 -19
  200. package/dist/node/cjs/runtime/timing_safe_equal.js +0 -5
  201. package/dist/node/cjs/runtime/verify.js +0 -31
  202. package/dist/node/cjs/runtime/webcrypto.js +0 -9
  203. package/dist/node/cjs/util/base64url.js +0 -6
  204. package/dist/node/cjs/util/decode_jwt.js +0 -35
  205. package/dist/node/cjs/util/decode_protected_header.js +0 -37
  206. package/dist/node/cjs/util/errors.js +0 -117
  207. package/dist/node/cjs/util/runtime.js +0 -4
  208. package/dist/node/esm/index.js +0 -30
  209. package/dist/node/esm/jwe/compact/decrypt.js +0 -27
  210. package/dist/node/esm/jwe/general/decrypt.js +0 -31
  211. package/dist/node/esm/jwk/embedded.js +0 -17
  212. package/dist/node/esm/jws/compact/verify.js +0 -21
  213. package/dist/node/esm/jws/flattened/verify.js +0 -122
  214. package/dist/node/esm/jws/general/verify.js +0 -24
  215. package/dist/node/esm/jwt/decrypt.js +0 -23
  216. package/dist/node/esm/jwt/unsecured.js +0 -32
  217. package/dist/node/esm/jwt/verify.js +0 -15
  218. package/dist/node/esm/key/generate_key_pair.js +0 -4
  219. package/dist/node/esm/key/generate_secret.js +0 -4
  220. package/dist/node/esm/key/import.js +0 -45
  221. package/dist/node/esm/lib/buffer_utils.js +0 -51
  222. package/dist/node/esm/lib/cek.js +0 -20
  223. package/dist/node/esm/lib/check_iv_length.js +0 -8
  224. package/dist/node/esm/lib/check_key_type.js +0 -77
  225. package/dist/node/esm/lib/check_p2s.js +0 -6
  226. package/dist/node/esm/lib/epoch.js +0 -1
  227. package/dist/node/esm/lib/invalid_key_input.js +0 -31
  228. package/dist/node/esm/lib/is_jwk.js +0 -13
  229. package/dist/node/esm/lib/is_object.js +0 -16
  230. package/dist/node/esm/lib/jwt_claims_set.js +0 -104
  231. package/dist/node/esm/lib/private_symbols.js +0 -1
  232. package/dist/node/esm/lib/secs.js +0 -55
  233. package/dist/node/esm/lib/validate_algorithms.js +0 -11
  234. package/dist/node/esm/package.json +0 -1
  235. package/dist/node/esm/runtime/aeskw.js +0 -50
  236. package/dist/node/esm/runtime/asn1.js +0 -46
  237. package/dist/node/esm/runtime/base64url.js +0 -14
  238. package/dist/node/esm/runtime/cbc_tag.js +0 -8
  239. package/dist/node/esm/runtime/check_cek_length.js +0 -35
  240. package/dist/node/esm/runtime/check_key_length.js +0 -16
  241. package/dist/node/esm/runtime/ciphers.js +0 -6
  242. package/dist/node/esm/runtime/decrypt.js +0 -101
  243. package/dist/node/esm/runtime/digest.js +0 -3
  244. package/dist/node/esm/runtime/dsa_digest.js +0 -22
  245. package/dist/node/esm/runtime/ecdhes.js +0 -64
  246. package/dist/node/esm/runtime/encrypt.js +0 -78
  247. package/dist/node/esm/runtime/fetch_jwks.js +0 -43
  248. package/dist/node/esm/runtime/generate.js +0 -97
  249. package/dist/node/esm/runtime/get_named_curve.js +0 -58
  250. package/dist/node/esm/runtime/get_sign_verify_key.js +0 -28
  251. package/dist/node/esm/runtime/hmac_digest.js +0 -13
  252. package/dist/node/esm/runtime/is_key_like.js +0 -8
  253. package/dist/node/esm/runtime/is_key_object.js +0 -2
  254. package/dist/node/esm/runtime/jwk_to_key.js +0 -8
  255. package/dist/node/esm/runtime/key_to_jwk.js +0 -34
  256. package/dist/node/esm/runtime/node_key.js +0 -103
  257. package/dist/node/esm/runtime/normalize_key.js +0 -1
  258. package/dist/node/esm/runtime/pbes2kw.js +0 -43
  259. package/dist/node/esm/runtime/random.js +0 -1
  260. package/dist/node/esm/runtime/rsaes.js +0 -66
  261. package/dist/node/esm/runtime/runtime.js +0 -1
  262. package/dist/node/esm/runtime/sign.js +0 -17
  263. package/dist/node/esm/runtime/timing_safe_equal.js +0 -3
  264. package/dist/node/esm/runtime/verify.js +0 -29
  265. package/dist/node/esm/runtime/webcrypto.js +0 -5
  266. package/dist/node/esm/util/decode_jwt.js +0 -32
  267. package/dist/node/esm/util/decode_protected_header.js +0 -34
  268. package/dist/node/esm/util/runtime.js +0 -2
  269. package/dist/types/util/runtime.d.ts +0 -3
  270. /package/dist/{browser → webapi}/jwe/compact/decrypt.js +0 -0
  271. /package/dist/{node/esm → webapi}/jwe/compact/encrypt.js +0 -0
  272. /package/dist/{browser → webapi}/jwe/general/decrypt.js +0 -0
  273. /package/dist/{browser → webapi}/jwk/embedded.js +0 -0
  274. /package/dist/{node/esm → webapi}/jws/compact/sign.js +0 -0
  275. /package/dist/{browser → webapi}/jws/compact/verify.js +0 -0
  276. /package/dist/{node/esm → webapi}/jws/general/sign.js +0 -0
  277. /package/dist/{browser → webapi}/jws/general/verify.js +0 -0
  278. /package/dist/{browser → webapi}/jwt/decrypt.js +0 -0
  279. /package/dist/{node/esm → webapi}/jwt/encrypt.js +0 -0
  280. /package/dist/{node/esm → webapi}/jwt/produce.js +0 -0
  281. /package/dist/{node/esm → webapi}/jwt/sign.js +0 -0
  282. /package/dist/{browser → webapi}/jwt/verify.js +0 -0
  283. /package/dist/{browser/runtime → webapi/lib}/check_key_length.js +0 -0
  284. /package/dist/{browser → webapi}/lib/epoch.js +0 -0
  285. /package/dist/{browser → webapi}/lib/invalid_key_input.js +0 -0
  286. /package/dist/{browser → webapi}/lib/jwt_claims_set.js +0 -0
  287. /package/dist/{browser → webapi}/lib/private_symbols.js +0 -0
  288. /package/dist/{browser → webapi}/lib/secs.js +0 -0
  289. /package/dist/{browser → webapi}/util/decode_jwt.js +0 -0
  290. /package/dist/{browser → webapi}/util/decode_protected_header.js +0 -0
  291. /package/dist/{node/esm → webapi}/util/errors.js +0 -0
@@ -1,106 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const errors_js_1 = require("../util/errors.js");
4
- const buffer_utils_js_1 = require("./buffer_utils.js");
5
- const epoch_js_1 = require("./epoch.js");
6
- const secs_js_1 = require("./secs.js");
7
- const is_object_js_1 = require("./is_object.js");
8
- const normalizeTyp = (value) => value.toLowerCase().replace(/^application\//, '');
9
- const checkAudiencePresence = (audPayload, audOption) => {
10
- if (typeof audPayload === 'string') {
11
- return audOption.includes(audPayload);
12
- }
13
- if (Array.isArray(audPayload)) {
14
- return audOption.some(Set.prototype.has.bind(new Set(audPayload)));
15
- }
16
- return false;
17
- };
18
- exports.default = (protectedHeader, encodedPayload, options = {}) => {
19
- let payload;
20
- try {
21
- payload = JSON.parse(buffer_utils_js_1.decoder.decode(encodedPayload));
22
- }
23
- catch {
24
- }
25
- if (!(0, is_object_js_1.default)(payload)) {
26
- throw new errors_js_1.JWTInvalid('JWT Claims Set must be a top-level JSON object');
27
- }
28
- const { typ } = options;
29
- if (typ &&
30
- (typeof protectedHeader.typ !== 'string' ||
31
- normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {
32
- throw new errors_js_1.JWTClaimValidationFailed('unexpected "typ" JWT header value', payload, 'typ', 'check_failed');
33
- }
34
- const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;
35
- const presenceCheck = [...requiredClaims];
36
- if (maxTokenAge !== undefined)
37
- presenceCheck.push('iat');
38
- if (audience !== undefined)
39
- presenceCheck.push('aud');
40
- if (subject !== undefined)
41
- presenceCheck.push('sub');
42
- if (issuer !== undefined)
43
- presenceCheck.push('iss');
44
- for (const claim of new Set(presenceCheck.reverse())) {
45
- if (!(claim in payload)) {
46
- throw new errors_js_1.JWTClaimValidationFailed(`missing required "${claim}" claim`, payload, claim, 'missing');
47
- }
48
- }
49
- if (issuer &&
50
- !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {
51
- throw new errors_js_1.JWTClaimValidationFailed('unexpected "iss" claim value', payload, 'iss', 'check_failed');
52
- }
53
- if (subject && payload.sub !== subject) {
54
- throw new errors_js_1.JWTClaimValidationFailed('unexpected "sub" claim value', payload, 'sub', 'check_failed');
55
- }
56
- if (audience &&
57
- !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {
58
- throw new errors_js_1.JWTClaimValidationFailed('unexpected "aud" claim value', payload, 'aud', 'check_failed');
59
- }
60
- let tolerance;
61
- switch (typeof options.clockTolerance) {
62
- case 'string':
63
- tolerance = (0, secs_js_1.default)(options.clockTolerance);
64
- break;
65
- case 'number':
66
- tolerance = options.clockTolerance;
67
- break;
68
- case 'undefined':
69
- tolerance = 0;
70
- break;
71
- default:
72
- throw new TypeError('Invalid clockTolerance option type');
73
- }
74
- const { currentDate } = options;
75
- const now = (0, epoch_js_1.default)(currentDate || new Date());
76
- if ((payload.iat !== undefined || maxTokenAge) && typeof payload.iat !== 'number') {
77
- throw new errors_js_1.JWTClaimValidationFailed('"iat" claim must be a number', payload, 'iat', 'invalid');
78
- }
79
- if (payload.nbf !== undefined) {
80
- if (typeof payload.nbf !== 'number') {
81
- throw new errors_js_1.JWTClaimValidationFailed('"nbf" claim must be a number', payload, 'nbf', 'invalid');
82
- }
83
- if (payload.nbf > now + tolerance) {
84
- throw new errors_js_1.JWTClaimValidationFailed('"nbf" claim timestamp check failed', payload, 'nbf', 'check_failed');
85
- }
86
- }
87
- if (payload.exp !== undefined) {
88
- if (typeof payload.exp !== 'number') {
89
- throw new errors_js_1.JWTClaimValidationFailed('"exp" claim must be a number', payload, 'exp', 'invalid');
90
- }
91
- if (payload.exp <= now - tolerance) {
92
- throw new errors_js_1.JWTExpired('"exp" claim timestamp check failed', payload, 'exp', 'check_failed');
93
- }
94
- }
95
- if (maxTokenAge) {
96
- const age = now - payload.iat;
97
- const max = typeof maxTokenAge === 'number' ? maxTokenAge : (0, secs_js_1.default)(maxTokenAge);
98
- if (age - tolerance > max) {
99
- throw new errors_js_1.JWTExpired('"iat" claim timestamp check failed (too far in the past)', payload, 'iat', 'check_failed');
100
- }
101
- if (age < 0 - tolerance) {
102
- throw new errors_js_1.JWTClaimValidationFailed('"iat" claim timestamp check failed (it should be in the past)', payload, 'iat', 'check_failed');
103
- }
104
- }
105
- return payload;
106
- };
@@ -1,4 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unprotected = void 0;
4
- exports.unprotected = Symbol();
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const minute = 60;
4
- const hour = minute * 60;
5
- const day = hour * 24;
6
- const week = day * 7;
7
- const year = day * 365.25;
8
- const REGEX = /^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;
9
- exports.default = (str) => {
10
- const matched = REGEX.exec(str);
11
- if (!matched || (matched[4] && matched[1])) {
12
- throw new TypeError('Invalid time period format');
13
- }
14
- const value = parseFloat(matched[2]);
15
- const unit = matched[3].toLowerCase();
16
- let numericDate;
17
- switch (unit) {
18
- case 'sec':
19
- case 'secs':
20
- case 'second':
21
- case 'seconds':
22
- case 's':
23
- numericDate = Math.round(value);
24
- break;
25
- case 'minute':
26
- case 'minutes':
27
- case 'min':
28
- case 'mins':
29
- case 'm':
30
- numericDate = Math.round(value * minute);
31
- break;
32
- case 'hour':
33
- case 'hours':
34
- case 'hr':
35
- case 'hrs':
36
- case 'h':
37
- numericDate = Math.round(value * hour);
38
- break;
39
- case 'day':
40
- case 'days':
41
- case 'd':
42
- numericDate = Math.round(value * day);
43
- break;
44
- case 'week':
45
- case 'weeks':
46
- case 'w':
47
- numericDate = Math.round(value * week);
48
- break;
49
- default:
50
- numericDate = Math.round(value * year);
51
- break;
52
- }
53
- if (matched[1] === '-' || matched[4] === 'ago') {
54
- return -numericDate;
55
- }
56
- return numericDate;
57
- };
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const validateAlgorithms = (option, algorithms) => {
4
- if (algorithms !== undefined &&
5
- (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {
6
- throw new TypeError(`"${option}" option must be an array of strings`);
7
- }
8
- if (!algorithms) {
9
- return undefined;
10
- }
11
- return new Set(algorithms);
12
- };
13
- exports.default = validateAlgorithms;
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const errors_js_1 = require("../util/errors.js");
4
- function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {
5
- if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {
6
- throw new Err('"crit" (Critical) Header Parameter MUST be integrity protected');
7
- }
8
- if (!protectedHeader || protectedHeader.crit === undefined) {
9
- return new Set();
10
- }
11
- if (!Array.isArray(protectedHeader.crit) ||
12
- protectedHeader.crit.length === 0 ||
13
- protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {
14
- throw new Err('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');
15
- }
16
- let recognized;
17
- if (recognizedOption !== undefined) {
18
- recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);
19
- }
20
- else {
21
- recognized = recognizedDefault;
22
- }
23
- for (const parameter of protectedHeader.crit) {
24
- if (!recognized.has(parameter)) {
25
- throw new errors_js_1.JOSENotSupported(`Extension Header Parameter "${parameter}" is not recognized`);
26
- }
27
- if (joseHeader[parameter] === undefined) {
28
- throw new Err(`Extension Header Parameter "${parameter}" is missing`);
29
- }
30
- if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {
31
- throw new Err(`Extension Header Parameter "${parameter}" MUST be integrity protected`);
32
- }
33
- }
34
- return new Set(protectedHeader.crit);
35
- }
36
- exports.default = validateCrit;
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unwrap = exports.wrap = void 0;
4
- const node_buffer_1 = require("node:buffer");
5
- const node_crypto_1 = require("node:crypto");
6
- const errors_js_1 = require("../util/errors.js");
7
- const buffer_utils_js_1 = require("../lib/buffer_utils.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 ciphers_js_1 = require("./ciphers.js");
13
- const is_key_like_js_1 = require("./is_key_like.js");
14
- function checkKeySize(key, alg) {
15
- if (key.symmetricKeySize << 3 !== parseInt(alg.slice(1, 4), 10)) {
16
- throw new TypeError(`Invalid key size for alg: ${alg}`);
17
- }
18
- }
19
- function ensureKeyObject(key, alg, usage) {
20
- if ((0, is_key_object_js_1.default)(key)) {
21
- return key;
22
- }
23
- if (key instanceof Uint8Array) {
24
- return (0, node_crypto_1.createSecretKey)(key);
25
- }
26
- if ((0, webcrypto_js_1.isCryptoKey)(key)) {
27
- (0, crypto_key_js_1.checkEncCryptoKey)(key, alg, usage);
28
- return node_crypto_1.KeyObject.from(key);
29
- }
30
- throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));
31
- }
32
- const wrap = (alg, key, cek) => {
33
- const size = parseInt(alg.slice(1, 4), 10);
34
- const algorithm = `aes${size}-wrap`;
35
- if (!(0, ciphers_js_1.default)(algorithm)) {
36
- throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
37
- }
38
- const keyObject = ensureKeyObject(key, alg, 'wrapKey');
39
- checkKeySize(keyObject, alg);
40
- const cipher = (0, node_crypto_1.createCipheriv)(algorithm, keyObject, node_buffer_1.Buffer.alloc(8, 0xa6));
41
- return (0, buffer_utils_js_1.concat)(cipher.update(cek), cipher.final());
42
- };
43
- exports.wrap = wrap;
44
- const unwrap = (alg, key, encryptedKey) => {
45
- const size = parseInt(alg.slice(1, 4), 10);
46
- const algorithm = `aes${size}-wrap`;
47
- if (!(0, ciphers_js_1.default)(algorithm)) {
48
- throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
49
- }
50
- const keyObject = ensureKeyObject(key, alg, 'unwrapKey');
51
- checkKeySize(keyObject, alg);
52
- const cipher = (0, node_crypto_1.createDecipheriv)(algorithm, keyObject, node_buffer_1.Buffer.alloc(8, 0xa6));
53
- return (0, buffer_utils_js_1.concat)(cipher.update(encryptedKey), cipher.final());
54
- };
55
- exports.unwrap = unwrap;
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fromX509 = exports.fromSPKI = exports.fromPKCS8 = exports.toPKCS8 = exports.toSPKI = void 0;
4
- const node_crypto_1 = require("node:crypto");
5
- const node_buffer_1 = require("node:buffer");
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 genericExport = (keyType, keyFormat, 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 {
22
- throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));
23
- }
24
- if (keyObject.type !== keyType) {
25
- throw new TypeError(`key is not a ${keyType} key`);
26
- }
27
- return keyObject.export({ format: 'pem', type: keyFormat });
28
- };
29
- const toSPKI = (key) => {
30
- return genericExport('public', 'spki', key);
31
- };
32
- exports.toSPKI = toSPKI;
33
- const toPKCS8 = (key) => {
34
- return genericExport('private', 'pkcs8', key);
35
- };
36
- exports.toPKCS8 = toPKCS8;
37
- const fromPKCS8 = (pem) => (0, node_crypto_1.createPrivateKey)({
38
- key: node_buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g, ''), 'base64'),
39
- type: 'pkcs8',
40
- format: 'der',
41
- });
42
- exports.fromPKCS8 = fromPKCS8;
43
- const fromSPKI = (pem) => (0, node_crypto_1.createPublicKey)({
44
- key: node_buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, ''), 'base64'),
45
- type: 'spki',
46
- format: 'der',
47
- });
48
- exports.fromSPKI = fromSPKI;
49
- const fromX509 = (pem) => (0, node_crypto_1.createPublicKey)({
50
- key: pem,
51
- type: 'spki',
52
- format: 'pem',
53
- });
54
- exports.fromX509 = fromX509;
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decode = exports.encode = exports.encodeBase64 = exports.decodeBase64 = void 0;
4
- const node_buffer_1 = require("node:buffer");
5
- const buffer_utils_js_1 = require("../lib/buffer_utils.js");
6
- function normalize(input) {
7
- let encoded = input;
8
- if (encoded instanceof Uint8Array) {
9
- encoded = buffer_utils_js_1.decoder.decode(encoded);
10
- }
11
- return encoded;
12
- }
13
- const encode = (input) => node_buffer_1.Buffer.from(input).toString('base64url');
14
- exports.encode = encode;
15
- const decodeBase64 = (input) => new Uint8Array(node_buffer_1.Buffer.from(input, 'base64'));
16
- exports.decodeBase64 = decodeBase64;
17
- const encodeBase64 = (input) => node_buffer_1.Buffer.from(input).toString('base64');
18
- exports.encodeBase64 = encodeBase64;
19
- const decode = (input) => new Uint8Array(node_buffer_1.Buffer.from(normalize(input), 'base64url'));
20
- exports.decode = decode;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = cbcTag;
4
- const node_crypto_1 = require("node:crypto");
5
- const buffer_utils_js_1 = require("../lib/buffer_utils.js");
6
- function cbcTag(aad, iv, ciphertext, macSize, macKey, keySize) {
7
- const macData = (0, buffer_utils_js_1.concat)(aad, iv, ciphertext, (0, buffer_utils_js_1.uint64be)(aad.length << 3));
8
- const hmac = (0, node_crypto_1.createHmac)(`sha${macSize}`, macKey);
9
- hmac.update(macData);
10
- return hmac.digest().slice(0, keySize >> 3);
11
- }
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const errors_js_1 = require("../util/errors.js");
4
- const is_key_object_js_1 = require("./is_key_object.js");
5
- const checkCekLength = (enc, cek) => {
6
- let expected;
7
- switch (enc) {
8
- case 'A128CBC-HS256':
9
- case 'A192CBC-HS384':
10
- case 'A256CBC-HS512':
11
- expected = parseInt(enc.slice(-3), 10);
12
- break;
13
- case 'A128GCM':
14
- case 'A192GCM':
15
- case 'A256GCM':
16
- expected = parseInt(enc.slice(1, 4), 10);
17
- break;
18
- default:
19
- throw new errors_js_1.JOSENotSupported(`Content Encryption Algorithm ${enc} is not supported either by JOSE or your javascript runtime`);
20
- }
21
- if (cek instanceof Uint8Array) {
22
- const actual = cek.byteLength << 3;
23
- if (actual !== expected) {
24
- throw new errors_js_1.JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
25
- }
26
- return;
27
- }
28
- if ((0, is_key_object_js_1.default)(cek) && cek.type === 'secret') {
29
- const actual = cek.symmetricKeySize << 3;
30
- if (actual !== expected) {
31
- throw new errors_js_1.JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
32
- }
33
- return;
34
- }
35
- throw new TypeError('Invalid Content Encryption Key type');
36
- };
37
- exports.default = checkCekLength;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const node_crypto_1 = require("node:crypto");
4
- exports.default = (key, alg) => {
5
- let modulusLength;
6
- try {
7
- if (key instanceof node_crypto_1.KeyObject) {
8
- modulusLength = key.asymmetricKeyDetails?.modulusLength;
9
- }
10
- else {
11
- modulusLength = Buffer.from(key.n, 'base64url').byteLength << 3;
12
- }
13
- }
14
- catch { }
15
- if (typeof modulusLength !== 'number' || modulusLength < 2048) {
16
- throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);
17
- }
18
- };
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const node_crypto_1 = require("node:crypto");
4
- let ciphers;
5
- exports.default = (algorithm) => {
6
- ciphers ||= new Set((0, node_crypto_1.getCiphers)());
7
- return ciphers.has(algorithm);
8
- };
@@ -1,103 +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 errors_js_1 = require("../util/errors.js");
8
- const timing_safe_equal_js_1 = require("./timing_safe_equal.js");
9
- const cbc_tag_js_1 = require("./cbc_tag.js");
10
- const webcrypto_js_1 = require("./webcrypto.js");
11
- const crypto_key_js_1 = require("../lib/crypto_key.js");
12
- const is_key_object_js_1 = require("./is_key_object.js");
13
- const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
14
- const ciphers_js_1 = require("./ciphers.js");
15
- const is_key_like_js_1 = require("./is_key_like.js");
16
- function cbcDecrypt(enc, cek, ciphertext, iv, tag, 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 macSize = parseInt(enc.slice(-3), 10);
24
- const algorithm = `aes-${keySize}-cbc`;
25
- if (!(0, ciphers_js_1.default)(algorithm)) {
26
- throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
27
- }
28
- const expectedTag = (0, cbc_tag_js_1.default)(aad, iv, ciphertext, macSize, macKey, keySize);
29
- let macCheckPassed;
30
- try {
31
- macCheckPassed = (0, timing_safe_equal_js_1.default)(tag, expectedTag);
32
- }
33
- catch {
34
- }
35
- if (!macCheckPassed) {
36
- throw new errors_js_1.JWEDecryptionFailed();
37
- }
38
- let plaintext;
39
- try {
40
- const decipher = (0, node_crypto_1.createDecipheriv)(algorithm, encKey, iv);
41
- plaintext = (0, buffer_utils_js_1.concat)(decipher.update(ciphertext), decipher.final());
42
- }
43
- catch {
44
- }
45
- if (!plaintext) {
46
- throw new errors_js_1.JWEDecryptionFailed();
47
- }
48
- return plaintext;
49
- }
50
- function gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {
51
- const keySize = parseInt(enc.slice(1, 4), 10);
52
- const algorithm = `aes-${keySize}-gcm`;
53
- if (!(0, ciphers_js_1.default)(algorithm)) {
54
- throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
55
- }
56
- try {
57
- const decipher = (0, node_crypto_1.createDecipheriv)(algorithm, cek, iv, { authTagLength: 16 });
58
- decipher.setAuthTag(tag);
59
- if (aad.byteLength) {
60
- decipher.setAAD(aad, { plaintextLength: ciphertext.length });
61
- }
62
- const plaintext = decipher.update(ciphertext);
63
- decipher.final();
64
- return plaintext;
65
- }
66
- catch {
67
- throw new errors_js_1.JWEDecryptionFailed();
68
- }
69
- }
70
- const decrypt = (enc, cek, ciphertext, iv, tag, aad) => {
71
- let key;
72
- if ((0, webcrypto_js_1.isCryptoKey)(cek)) {
73
- (0, crypto_key_js_1.checkEncCryptoKey)(cek, enc, 'decrypt');
74
- key = node_crypto_1.KeyObject.from(cek);
75
- }
76
- else if (cek instanceof Uint8Array || (0, is_key_object_js_1.default)(cek)) {
77
- key = cek;
78
- }
79
- else {
80
- throw new TypeError((0, invalid_key_input_js_1.default)(cek, ...is_key_like_js_1.types, 'Uint8Array'));
81
- }
82
- if (!iv) {
83
- throw new errors_js_1.JWEInvalid('JWE Initialization Vector missing');
84
- }
85
- if (!tag) {
86
- throw new errors_js_1.JWEInvalid('JWE Authentication Tag missing');
87
- }
88
- (0, check_cek_length_js_1.default)(enc, key);
89
- (0, check_iv_length_js_1.default)(enc, iv);
90
- switch (enc) {
91
- case 'A128CBC-HS256':
92
- case 'A192CBC-HS384':
93
- case 'A256CBC-HS512':
94
- return cbcDecrypt(enc, key, ciphertext, iv, tag, aad);
95
- case 'A128GCM':
96
- case 'A192GCM':
97
- case 'A256GCM':
98
- return gcmDecrypt(enc, key, ciphertext, iv, tag, aad);
99
- default:
100
- throw new errors_js_1.JOSENotSupported('Unsupported JWE Content Encryption Algorithm');
101
- }
102
- };
103
- exports.default = decrypt;
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const node_crypto_1 = require("node:crypto");
4
- const digest = (algorithm, data) => (0, node_crypto_1.createHash)(algorithm).update(data).digest();
5
- exports.default = digest;
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = dsaDigest;
4
- const errors_js_1 = require("../util/errors.js");
5
- function dsaDigest(alg) {
6
- switch (alg) {
7
- case 'PS256':
8
- case 'RS256':
9
- case 'ES256':
10
- case 'ES256K':
11
- return 'sha256';
12
- case 'PS384':
13
- case 'RS384':
14
- case 'ES384':
15
- return 'sha384';
16
- case 'PS512':
17
- case 'RS512':
18
- case 'ES512':
19
- return 'sha512';
20
- case 'EdDSA':
21
- return undefined;
22
- default:
23
- throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
24
- }
25
- }
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ecdhAllowed = void 0;
4
- exports.deriveKey = deriveKey;
5
- exports.generateEpk = generateEpk;
6
- const node_crypto_1 = require("node:crypto");
7
- const node_util_1 = require("node:util");
8
- const get_named_curve_js_1 = require("./get_named_curve.js");
9
- const buffer_utils_js_1 = require("../lib/buffer_utils.js");
10
- const errors_js_1 = require("../util/errors.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 generateKeyPair = (0, node_util_1.promisify)(node_crypto_1.generateKeyPair);
17
- async function deriveKey(publicKee, privateKee, algorithm, keyLength, apu = new Uint8Array(0), apv = new Uint8Array(0)) {
18
- let publicKey;
19
- if ((0, webcrypto_js_1.isCryptoKey)(publicKee)) {
20
- (0, crypto_key_js_1.checkEncCryptoKey)(publicKee, 'ECDH');
21
- publicKey = node_crypto_1.KeyObject.from(publicKee);
22
- }
23
- else if ((0, is_key_object_js_1.default)(publicKee)) {
24
- publicKey = publicKee;
25
- }
26
- else {
27
- throw new TypeError((0, invalid_key_input_js_1.default)(publicKee, ...is_key_like_js_1.types));
28
- }
29
- let privateKey;
30
- if ((0, webcrypto_js_1.isCryptoKey)(privateKee)) {
31
- (0, crypto_key_js_1.checkEncCryptoKey)(privateKee, 'ECDH', 'deriveBits');
32
- privateKey = node_crypto_1.KeyObject.from(privateKee);
33
- }
34
- else if ((0, is_key_object_js_1.default)(privateKee)) {
35
- privateKey = privateKee;
36
- }
37
- else {
38
- throw new TypeError((0, invalid_key_input_js_1.default)(privateKee, ...is_key_like_js_1.types));
39
- }
40
- const value = (0, buffer_utils_js_1.concat)((0, buffer_utils_js_1.lengthAndInput)(buffer_utils_js_1.encoder.encode(algorithm)), (0, buffer_utils_js_1.lengthAndInput)(apu), (0, buffer_utils_js_1.lengthAndInput)(apv), (0, buffer_utils_js_1.uint32be)(keyLength));
41
- const sharedSecret = (0, node_crypto_1.diffieHellman)({ privateKey, publicKey });
42
- return (0, buffer_utils_js_1.concatKdf)(sharedSecret, keyLength, value);
43
- }
44
- async function generateEpk(kee) {
45
- let key;
46
- if ((0, webcrypto_js_1.isCryptoKey)(kee)) {
47
- key = node_crypto_1.KeyObject.from(kee);
48
- }
49
- else if ((0, is_key_object_js_1.default)(kee)) {
50
- key = kee;
51
- }
52
- else {
53
- throw new TypeError((0, invalid_key_input_js_1.default)(kee, ...is_key_like_js_1.types));
54
- }
55
- switch (key.asymmetricKeyType) {
56
- case 'x25519':
57
- return generateKeyPair('x25519');
58
- case 'x448': {
59
- return generateKeyPair('x448');
60
- }
61
- case 'ec': {
62
- const namedCurve = (0, get_named_curve_js_1.default)(key);
63
- return generateKeyPair('ec', { namedCurve });
64
- }
65
- default:
66
- throw new errors_js_1.JOSENotSupported('Invalid or unsupported EPK');
67
- }
68
- }
69
- const ecdhAllowed = (key) => ['P-256', 'P-384', 'P-521', 'X25519', 'X448'].includes((0, get_named_curve_js_1.default)(key));
70
- exports.ecdhAllowed = ecdhAllowed;