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.
Files changed (291) hide show
  1. package/README.md +15 -15
  2. package/dist/types/index.d.ts +48 -48
  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 +5 -5
  21. package/dist/types/jwt/produce.d.ts +3 -3
  22. package/dist/types/jwt/sign.d.ts +4 -4
  23. package/dist/types/jwt/unsecured.d.ts +6 -6
  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 +27 -29
  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 +1 -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} +4 -57
  45. package/dist/webapi/key/generate_secret.js +40 -0
  46. package/dist/{browser → webapi}/key/import.js +8 -6
  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 +24 -20
  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 +9 -26
  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 +3 -13
  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 +4 -5
  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 -124
  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 -157
  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 -128
  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 -161
  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 -26
  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 -103
  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 -111
  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 -23
  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 -99
  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 -108
  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,108 +0,0 @@
1
- import { constants, KeyObject } from 'node:crypto';
2
- import getNamedCurve from './get_named_curve.js';
3
- import { JOSENotSupported } from '../util/errors.js';
4
- import checkKeyLength from './check_key_length.js';
5
- const ecCurveAlgMap = new Map([
6
- ['ES256', 'P-256'],
7
- ['ES256K', 'secp256k1'],
8
- ['ES384', 'P-384'],
9
- ['ES512', 'P-521'],
10
- ]);
11
- export default function keyForCrypto(alg, key) {
12
- let asymmetricKeyType;
13
- let asymmetricKeyDetails;
14
- let isJWK;
15
- if (key instanceof KeyObject) {
16
- asymmetricKeyType = key.asymmetricKeyType;
17
- asymmetricKeyDetails = key.asymmetricKeyDetails;
18
- }
19
- else {
20
- isJWK = true;
21
- switch (key.kty) {
22
- case 'RSA':
23
- asymmetricKeyType = 'rsa';
24
- break;
25
- case 'EC':
26
- asymmetricKeyType = 'ec';
27
- break;
28
- case 'OKP': {
29
- if (key.crv === 'Ed25519') {
30
- asymmetricKeyType = 'ed25519';
31
- break;
32
- }
33
- if (key.crv === 'Ed448') {
34
- asymmetricKeyType = 'ed448';
35
- break;
36
- }
37
- throw new TypeError('Invalid key for this operation, its crv must be Ed25519 or Ed448');
38
- }
39
- default:
40
- throw new TypeError('Invalid key for this operation, its kty must be RSA, OKP, or EC');
41
- }
42
- }
43
- let options;
44
- switch (alg) {
45
- case 'Ed25519':
46
- if (asymmetricKeyType !== 'ed25519') {
47
- throw new TypeError(`Invalid key for this operation, its asymmetricKeyType must be ed25519`);
48
- }
49
- break;
50
- case 'EdDSA':
51
- if (!['ed25519', 'ed448'].includes(asymmetricKeyType)) {
52
- throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ed25519 or ed448');
53
- }
54
- break;
55
- case 'RS256':
56
- case 'RS384':
57
- case 'RS512':
58
- if (asymmetricKeyType !== 'rsa') {
59
- throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
60
- }
61
- checkKeyLength(key, alg);
62
- break;
63
- case 'PS256':
64
- case 'PS384':
65
- case 'PS512':
66
- if (asymmetricKeyType === 'rsa-pss') {
67
- const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = asymmetricKeyDetails;
68
- const length = parseInt(alg.slice(-3), 10);
69
- if (hashAlgorithm !== undefined &&
70
- (hashAlgorithm !== `sha${length}` || mgf1HashAlgorithm !== hashAlgorithm)) {
71
- throw new TypeError(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of "alg" ${alg}`);
72
- }
73
- if (saltLength !== undefined && saltLength > length >> 3) {
74
- throw new TypeError(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of "alg" ${alg}`);
75
- }
76
- }
77
- else if (asymmetricKeyType !== 'rsa') {
78
- throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa or rsa-pss');
79
- }
80
- checkKeyLength(key, alg);
81
- options = {
82
- padding: constants.RSA_PKCS1_PSS_PADDING,
83
- saltLength: constants.RSA_PSS_SALTLEN_DIGEST,
84
- };
85
- break;
86
- case 'ES256':
87
- case 'ES256K':
88
- case 'ES384':
89
- case 'ES512': {
90
- if (asymmetricKeyType !== 'ec') {
91
- throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ec');
92
- }
93
- const actual = getNamedCurve(key);
94
- const expected = ecCurveAlgMap.get(alg);
95
- if (actual !== expected) {
96
- throw new TypeError(`Invalid key curve for the algorithm, its curve must be ${expected}, got ${actual}`);
97
- }
98
- options = { dsaEncoding: 'ieee-p1363' };
99
- break;
100
- }
101
- default:
102
- throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
103
- }
104
- if (isJWK) {
105
- return { format: 'jwk', key, ...options };
106
- }
107
- return options ? { ...options, key } : key;
108
- }
@@ -1 +0,0 @@
1
- export default {};
@@ -1,43 +0,0 @@
1
- import { promisify } from 'node:util';
2
- import { KeyObject, pbkdf2 as pbkdf2cb } from 'node:crypto';
3
- import random from './random.js';
4
- import { p2s as concatSalt } from '../lib/buffer_utils.js';
5
- import { encode as base64url } from './base64url.js';
6
- import { wrap, unwrap } from './aeskw.js';
7
- import checkP2s from '../lib/check_p2s.js';
8
- import { isCryptoKey } from './webcrypto.js';
9
- import { checkEncCryptoKey } from '../lib/crypto_key.js';
10
- import isKeyObject from './is_key_object.js';
11
- import invalidKeyInput from '../lib/invalid_key_input.js';
12
- import { types } from './is_key_like.js';
13
- const pbkdf2 = promisify(pbkdf2cb);
14
- function getPassword(key, alg) {
15
- if (isKeyObject(key)) {
16
- return key.export();
17
- }
18
- if (key instanceof Uint8Array) {
19
- return key;
20
- }
21
- if (isCryptoKey(key)) {
22
- checkEncCryptoKey(key, alg, 'deriveBits', 'deriveKey');
23
- return KeyObject.from(key).export();
24
- }
25
- throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));
26
- }
27
- export const encrypt = async (alg, key, cek, p2c = 2048, p2s = random(new Uint8Array(16))) => {
28
- checkP2s(p2s);
29
- const salt = concatSalt(alg, p2s);
30
- const keylen = parseInt(alg.slice(13, 16), 10) >> 3;
31
- const password = getPassword(key, alg);
32
- const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);
33
- const encryptedKey = await wrap(alg.slice(-6), derivedKey, cek);
34
- return { encryptedKey, p2c, p2s: base64url(p2s) };
35
- };
36
- export const decrypt = async (alg, key, encryptedKey, p2c, p2s) => {
37
- checkP2s(p2s);
38
- const salt = concatSalt(alg, p2s);
39
- const keylen = parseInt(alg.slice(13, 16), 10) >> 3;
40
- const password = getPassword(key, alg);
41
- const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);
42
- return unwrap(alg.slice(-6), derivedKey, encryptedKey);
43
- };
@@ -1 +0,0 @@
1
- export { randomFillSync as default } from 'node:crypto';
@@ -1,66 +0,0 @@
1
- import { KeyObject, publicEncrypt, constants, privateDecrypt } from 'node:crypto';
2
- import { deprecate } from 'node:util';
3
- import checkKeyLength from './check_key_length.js';
4
- import { isCryptoKey } from './webcrypto.js';
5
- import { checkEncCryptoKey } from '../lib/crypto_key.js';
6
- import isKeyObject from './is_key_object.js';
7
- import invalidKeyInput from '../lib/invalid_key_input.js';
8
- import { types } from './is_key_like.js';
9
- const checkKey = (key, alg) => {
10
- if (key.asymmetricKeyType !== 'rsa') {
11
- throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
12
- }
13
- checkKeyLength(key, alg);
14
- };
15
- const RSA1_5 = deprecate(() => constants.RSA_PKCS1_PADDING, 'The RSA1_5 "alg" (JWE Algorithm) is deprecated and will be removed in the next major revision.');
16
- const resolvePadding = (alg) => {
17
- switch (alg) {
18
- case 'RSA-OAEP':
19
- case 'RSA-OAEP-256':
20
- case 'RSA-OAEP-384':
21
- case 'RSA-OAEP-512':
22
- return constants.RSA_PKCS1_OAEP_PADDING;
23
- case 'RSA1_5':
24
- return RSA1_5();
25
- default:
26
- return undefined;
27
- }
28
- };
29
- const resolveOaepHash = (alg) => {
30
- switch (alg) {
31
- case 'RSA-OAEP':
32
- return 'sha1';
33
- case 'RSA-OAEP-256':
34
- return 'sha256';
35
- case 'RSA-OAEP-384':
36
- return 'sha384';
37
- case 'RSA-OAEP-512':
38
- return 'sha512';
39
- default:
40
- return undefined;
41
- }
42
- };
43
- function ensureKeyObject(key, alg, ...usages) {
44
- if (isKeyObject(key)) {
45
- return key;
46
- }
47
- if (isCryptoKey(key)) {
48
- checkEncCryptoKey(key, alg, ...usages);
49
- return KeyObject.from(key);
50
- }
51
- throw new TypeError(invalidKeyInput(key, ...types));
52
- }
53
- export const encrypt = (alg, key, cek) => {
54
- const padding = resolvePadding(alg);
55
- const oaepHash = resolveOaepHash(alg);
56
- const keyObject = ensureKeyObject(key, alg, 'wrapKey', 'encrypt');
57
- checkKey(keyObject, alg);
58
- return publicEncrypt({ key: keyObject, oaepHash, padding }, cek);
59
- };
60
- export const decrypt = (alg, key, encryptedKey) => {
61
- const padding = resolvePadding(alg);
62
- const oaepHash = resolveOaepHash(alg);
63
- const keyObject = ensureKeyObject(key, alg, 'unwrapKey', 'decrypt');
64
- checkKey(keyObject, alg);
65
- return privateDecrypt({ key: keyObject, oaepHash, padding }, encryptedKey);
66
- };
@@ -1 +0,0 @@
1
- export default 'node:crypto';
@@ -1,17 +0,0 @@
1
- import * as crypto from 'node:crypto';
2
- import { promisify } from 'node:util';
3
- import nodeDigest from './dsa_digest.js';
4
- import hmacDigest from './hmac_digest.js';
5
- import nodeKey from './node_key.js';
6
- import getSignKey from './get_sign_verify_key.js';
7
- const oneShotSign = promisify(crypto.sign);
8
- const sign = async (alg, key, data) => {
9
- const k = getSignKey(alg, key, 'sign');
10
- if (alg.startsWith('HS')) {
11
- const hmac = crypto.createHmac(hmacDigest(alg), k);
12
- hmac.update(data);
13
- return hmac.digest();
14
- }
15
- return oneShotSign(nodeDigest(alg), data, nodeKey(alg, k));
16
- };
17
- export default sign;
@@ -1,3 +0,0 @@
1
- import { timingSafeEqual as impl } from 'node:crypto';
2
- const timingSafeEqual = impl;
3
- export default timingSafeEqual;
@@ -1,29 +0,0 @@
1
- import * as crypto from 'node:crypto';
2
- import { promisify } from 'node:util';
3
- import nodeDigest from './dsa_digest.js';
4
- import nodeKey from './node_key.js';
5
- import sign from './sign.js';
6
- import getVerifyKey from './get_sign_verify_key.js';
7
- const oneShotVerify = promisify(crypto.verify);
8
- const verify = async (alg, key, signature, data) => {
9
- const k = getVerifyKey(alg, key, 'verify');
10
- if (alg.startsWith('HS')) {
11
- const expected = await sign(alg, k, data);
12
- const actual = signature;
13
- try {
14
- return crypto.timingSafeEqual(actual, expected);
15
- }
16
- catch {
17
- return false;
18
- }
19
- }
20
- const algorithm = nodeDigest(alg);
21
- const keyInput = nodeKey(alg, k);
22
- try {
23
- return await oneShotVerify(algorithm, data, keyInput, signature);
24
- }
25
- catch {
26
- return false;
27
- }
28
- };
29
- export default verify;
@@ -1,5 +0,0 @@
1
- import * as crypto from 'node:crypto';
2
- import * as util from 'node:util';
3
- const webcrypto = crypto.webcrypto;
4
- export default webcrypto;
5
- export const isCryptoKey = (key) => util.types.isCryptoKey(key);
@@ -1,32 +0,0 @@
1
- import { decode as base64url } from './base64url.js';
2
- import { decoder } from '../lib/buffer_utils.js';
3
- import isObject from '../lib/is_object.js';
4
- import { JWTInvalid } from './errors.js';
5
- export function decodeJwt(jwt) {
6
- if (typeof jwt !== 'string')
7
- throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');
8
- const { 1: payload, length } = jwt.split('.');
9
- if (length === 5)
10
- throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');
11
- if (length !== 3)
12
- throw new JWTInvalid('Invalid JWT');
13
- if (!payload)
14
- throw new JWTInvalid('JWTs must contain a payload');
15
- let decoded;
16
- try {
17
- decoded = base64url(payload);
18
- }
19
- catch {
20
- throw new JWTInvalid('Failed to base64url decode the payload');
21
- }
22
- let result;
23
- try {
24
- result = JSON.parse(decoder.decode(decoded));
25
- }
26
- catch {
27
- throw new JWTInvalid('Failed to parse the decoded payload as JSON');
28
- }
29
- if (!isObject(result))
30
- throw new JWTInvalid('Invalid JWT Claims Set');
31
- return result;
32
- }
@@ -1,34 +0,0 @@
1
- import { decode as base64url } from './base64url.js';
2
- import { decoder } from '../lib/buffer_utils.js';
3
- import isObject from '../lib/is_object.js';
4
- export function decodeProtectedHeader(token) {
5
- let protectedB64u;
6
- if (typeof token === 'string') {
7
- const parts = token.split('.');
8
- if (parts.length === 3 || parts.length === 5) {
9
- ;
10
- [protectedB64u] = parts;
11
- }
12
- }
13
- else if (typeof token === 'object' && token) {
14
- if ('protected' in token) {
15
- protectedB64u = token.protected;
16
- }
17
- else {
18
- throw new TypeError('Token does not contain a Protected Header');
19
- }
20
- }
21
- try {
22
- if (typeof protectedB64u !== 'string' || !protectedB64u) {
23
- throw new Error();
24
- }
25
- const result = JSON.parse(decoder.decode(base64url(protectedB64u)));
26
- if (!isObject(result)) {
27
- throw new Error();
28
- }
29
- return result;
30
- }
31
- catch {
32
- throw new TypeError('Invalid Token or Protected Header formatting');
33
- }
34
- }
@@ -1,2 +0,0 @@
1
- import value from '../runtime/runtime.js';
2
- export default value;
@@ -1,3 +0,0 @@
1
- import type { CryptoRuntime } from '../types';
2
- declare const _default: CryptoRuntime;
3
- export default _default;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes