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,4 +1,4 @@
1
- import type { JWTPayload, KeyLike } from '../types';
1
+ import type * as types from '../types.d.ts';
2
2
  /**
3
3
  * A generic Error that all other JOSE specific Error subclasses extend.
4
4
  *
@@ -35,9 +35,9 @@ export declare class JWTClaimValidationFailed extends JOSEError {
35
35
  * has however been verified. Claims Set verification happens after the JWS Signature or JWE
36
36
  * Decryption processes.
37
37
  */
38
- payload: JWTPayload;
38
+ payload: types.JWTPayload;
39
39
  /** @ignore */
40
- constructor(message: string, payload: JWTPayload, claim?: string, reason?: string);
40
+ constructor(message: string, payload: types.JWTPayload, claim?: string, reason?: string);
41
41
  }
42
42
  /**
43
43
  * An error subclass thrown when a JWT is expired.
@@ -57,9 +57,9 @@ export declare class JWTExpired extends JOSEError implements JWTClaimValidationF
57
57
  * has however been verified. Claims Set verification happens after the JWS Signature or JWE
58
58
  * Decryption processes.
59
59
  */
60
- payload: JWTPayload;
60
+ payload: types.JWTPayload;
61
61
  /** @ignore */
62
- constructor(message: string, payload: JWTPayload, claim?: string, reason?: string);
62
+ constructor(message: string, payload: types.JWTPayload, claim?: string, reason?: string);
63
63
  }
64
64
  /**
65
65
  * An error subclass thrown when a JOSE Algorithm is not allowed per developer preference.
@@ -157,7 +157,7 @@ export declare class JWKSNoMatchingKey extends JOSEError {
157
157
  */
158
158
  export declare class JWKSMultipleMatchingKeys extends JOSEError {
159
159
  /** @ignore */
160
- [Symbol.asyncIterator]: () => AsyncIterableIterator<KeyLike>;
160
+ [Symbol.asyncIterator]: () => AsyncIterableIterator<types.CryptoKey>;
161
161
  /** @ignore */
162
162
  static code: string;
163
163
  code: string;
@@ -17,7 +17,7 @@ export { EncryptJWT } from './jwt/encrypt.js';
17
17
  export { calculateJwkThumbprint, calculateJwkThumbprintUri } from './jwk/thumbprint.js';
18
18
  export { EmbeddedJWK } from './jwk/embedded.js';
19
19
  export { createLocalJWKSet } from './jwks/local.js';
20
- export { createRemoteJWKSet, jwksCache, experimental_jwksCache } from './jwks/remote.js';
20
+ export { createRemoteJWKSet, jwksCache } from './jwks/remote.js';
21
21
  export { UnsecuredJWT } from './jwt/unsecured.js';
22
22
  export { exportPKCS8, exportSPKI, exportJWK } from './key/export.js';
23
23
  export { importSPKI, importPKCS8, importX509, importJWK } from './key/import.js';
@@ -27,4 +27,4 @@ export * as errors from './util/errors.js';
27
27
  export { generateKeyPair } from './key/generate_key_pair.js';
28
28
  export { generateSecret } from './key/generate_secret.js';
29
29
  export * as base64url from './util/base64url.js';
30
- export { default as cryptoRuntime } from './util/runtime.js';
30
+ export const cryptoRuntime = 'WebCryptoAPI';
@@ -1,5 +1,5 @@
1
- import { decode as base64url } from '../../runtime/base64url.js';
2
- import decrypt from '../../runtime/decrypt.js';
1
+ import { decode as base64url } from '../../lib/base64url.js';
2
+ import decrypt from '../../lib/decrypt.js';
3
3
  import { JOSEAlgNotAllowed, JOSENotSupported, JWEInvalid } from '../../util/errors.js';
4
4
  import isDisjoint from '../../lib/is_disjoint.js';
5
5
  import isObject from '../../lib/is_object.js';
@@ -8,6 +8,8 @@ import { encoder, decoder, concat } from '../../lib/buffer_utils.js';
8
8
  import generateCek from '../../lib/cek.js';
9
9
  import validateCrit from '../../lib/validate_crit.js';
10
10
  import validateAlgorithms from '../../lib/validate_algorithms.js';
11
+ import normalizeKey from '../../lib/normalize_key.js';
12
+ import checkKeyType from '../../lib/check_key_type.js';
11
13
  export async function flattenedDecrypt(jwe, key, options) {
12
14
  if (!isObject(jwe)) {
13
15
  throw new JWEInvalid('Flattened JWE must be an object');
@@ -92,9 +94,11 @@ export async function flattenedDecrypt(jwe, key, options) {
92
94
  key = await key(parsedProt, jwe);
93
95
  resolvedKey = true;
94
96
  }
97
+ checkKeyType(alg === 'dir' ? enc : alg, key, 'decrypt');
98
+ const k = await normalizeKey(key, alg);
95
99
  let cek;
96
100
  try {
97
- cek = await decryptKeyManagement(alg, key, encryptedKey, joseHeader, options);
101
+ cek = await decryptKeyManagement(alg, k, encryptedKey, joseHeader, options);
98
102
  }
99
103
  catch (err) {
100
104
  if (err instanceof TypeError || err instanceof JWEInvalid || err instanceof JOSENotSupported) {
@@ -155,7 +159,7 @@ export async function flattenedDecrypt(jwe, key, options) {
155
159
  result.unprotectedHeader = jwe.header;
156
160
  }
157
161
  if (resolvedKey) {
158
- return { ...result, key };
162
+ return { ...result, key: k };
159
163
  }
160
164
  return result;
161
165
  }
@@ -1,11 +1,13 @@
1
- import { encode as base64url } from '../../runtime/base64url.js';
1
+ import { encode as base64url } from '../../lib/base64url.js';
2
2
  import { unprotected } from '../../lib/private_symbols.js';
3
- import encrypt from '../../runtime/encrypt.js';
3
+ import encrypt from '../../lib/encrypt.js';
4
4
  import encryptKeyManagement from '../../lib/encrypt_key_management.js';
5
5
  import { JOSENotSupported, JWEInvalid } from '../../util/errors.js';
6
6
  import isDisjoint from '../../lib/is_disjoint.js';
7
7
  import { encoder, decoder, concat } from '../../lib/buffer_utils.js';
8
8
  import validateCrit from '../../lib/validate_crit.js';
9
+ import normalizeKey from '../../lib/normalize_key.js';
10
+ import checkKeyType from '../../lib/check_key_type.js';
9
11
  export class FlattenedEncrypt {
10
12
  _plaintext;
11
13
  _protectedHeader;
@@ -94,10 +96,12 @@ export class FlattenedEncrypt {
94
96
  if (this._cek && (alg === 'dir' || alg === 'ECDH-ES')) {
95
97
  throw new TypeError(`setContentEncryptionKey cannot be called with JWE "alg" (Algorithm) Header ${alg}`);
96
98
  }
99
+ checkKeyType(alg === 'dir' ? enc : alg, key, 'encrypt');
97
100
  let cek;
98
101
  {
99
102
  let parameters;
100
- ({ cek, encryptedKey, parameters } = await encryptKeyManagement(alg, enc, key, this._cek, this._keyManagementParameters));
103
+ const k = await normalizeKey(key, alg);
104
+ ({ cek, encryptedKey, parameters } = await encryptKeyManagement(alg, enc, k, this._cek, this._keyManagementParameters));
101
105
  if (parameters) {
102
106
  if (options && unprotected in options) {
103
107
  if (!this._unprotectedHeader) {
@@ -4,8 +4,10 @@ import { JOSENotSupported, JWEInvalid } from '../../util/errors.js';
4
4
  import generateCek from '../../lib/cek.js';
5
5
  import isDisjoint from '../../lib/is_disjoint.js';
6
6
  import encryptKeyManagement from '../../lib/encrypt_key_management.js';
7
- import { encode as base64url } from '../../runtime/base64url.js';
7
+ import { encode as base64url } from '../../lib/base64url.js';
8
8
  import validateCrit from '../../lib/validate_crit.js';
9
+ import normalizeKey from '../../lib/normalize_key.js';
10
+ import checkKeyType from '../../lib/check_key_type.js';
9
11
  class IndividualRecipient {
10
12
  parent;
11
13
  unprotectedHeader;
@@ -170,9 +172,12 @@ export class GeneralEncrypt {
170
172
  target.header = flattened.header;
171
173
  continue;
172
174
  }
173
- const { encryptedKey, parameters } = await encryptKeyManagement(recipient.unprotectedHeader?.alg ||
175
+ const alg = recipient.unprotectedHeader?.alg ||
174
176
  this._protectedHeader?.alg ||
175
- this._unprotectedHeader?.alg, enc, recipient.key, cek, { p2c });
177
+ this._unprotectedHeader?.alg;
178
+ checkKeyType(alg === 'dir' ? enc : alg, recipient.key, 'encrypt');
179
+ const k = await normalizeKey(recipient.key, alg);
180
+ const { encryptedKey, parameters } = await encryptKeyManagement(alg, enc, k, cek, { p2c });
176
181
  target.encrypted_key = base64url(encryptedKey);
177
182
  if (recipient.unprotectedHeader || parameters)
178
183
  target.header = { ...recipient.unprotectedHeader, ...parameters };
@@ -1,16 +1,26 @@
1
- import digest from '../runtime/digest.js';
2
- import { encode as base64url } from '../runtime/base64url.js';
1
+ import digest from '../lib/digest.js';
2
+ import { encode as base64url } from '../lib/base64url.js';
3
3
  import { JOSENotSupported, JWKInvalid } from '../util/errors.js';
4
4
  import { encoder } from '../lib/buffer_utils.js';
5
- import isObject from '../lib/is_object.js';
5
+ import isKeyLike from '../lib/is_key_like.js';
6
+ import { isJWK } from '../lib/is_jwk.js';
7
+ import { exportJWK } from '../key/export.js';
8
+ import invalidKeyInput from '../lib/invalid_key_input.js';
6
9
  const check = (value, description) => {
7
10
  if (typeof value !== 'string' || !value) {
8
11
  throw new JWKInvalid(`${description} missing or invalid`);
9
12
  }
10
13
  };
11
- export async function calculateJwkThumbprint(jwk, digestAlgorithm) {
12
- if (!isObject(jwk)) {
13
- throw new TypeError('JWK must be an object');
14
+ export async function calculateJwkThumbprint(key, digestAlgorithm) {
15
+ let jwk;
16
+ if (isJWK(key)) {
17
+ jwk = key;
18
+ }
19
+ else if (isKeyLike(key)) {
20
+ jwk = await exportJWK(key);
21
+ }
22
+ else {
23
+ throw new TypeError(invalidKeyInput(key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));
14
24
  }
15
25
  digestAlgorithm ??= 'sha256';
16
26
  if (digestAlgorithm !== 'sha256' &&
@@ -46,8 +56,8 @@ export async function calculateJwkThumbprint(jwk, digestAlgorithm) {
46
56
  const data = encoder.encode(JSON.stringify(components));
47
57
  return base64url(await digest(digestAlgorithm, data));
48
58
  }
49
- export async function calculateJwkThumbprintUri(jwk, digestAlgorithm) {
59
+ export async function calculateJwkThumbprintUri(key, digestAlgorithm) {
50
60
  digestAlgorithm ??= 'sha256';
51
- const thumbprint = await calculateJwkThumbprint(jwk, digestAlgorithm);
61
+ const thumbprint = await calculateJwkThumbprint(key, digestAlgorithm);
52
62
  return `urn:ietf:params:oauth:jwk-thumbprint:sha-${digestAlgorithm.slice(-3)}:${thumbprint}`;
53
63
  }
@@ -60,9 +60,6 @@ class LocalJWKSet {
60
60
  case 'ES256':
61
61
  candidate = jwk.crv === 'P-256';
62
62
  break;
63
- case 'ES256K':
64
- candidate = jwk.crv === 'secp256k1';
65
- break;
66
63
  case 'ES384':
67
64
  candidate = jwk.crv === 'P-384';
68
65
  break;
@@ -70,10 +67,8 @@ class LocalJWKSet {
70
67
  candidate = jwk.crv === 'P-521';
71
68
  break;
72
69
  case 'Ed25519':
73
- candidate = jwk.crv === 'Ed25519';
74
- break;
75
70
  case 'EdDSA':
76
- candidate = jwk.crv === 'Ed25519' || jwk.crv === 'Ed448';
71
+ candidate = jwk.crv === 'Ed25519';
77
72
  break;
78
73
  }
79
74
  }
@@ -1,5 +1,4 @@
1
- import fetchJwks from '../runtime/fetch_jwks.js';
2
- import { JWKSNoMatchingKey } from '../util/errors.js';
1
+ import { JOSEError, JWKSNoMatchingKey, JWKSTimeout } from '../util/errors.js';
3
2
  import { createLocalJWKSet } from './local.js';
4
3
  import isObject from '../lib/is_object.js';
5
4
  function isCloudflareWorkers() {
@@ -10,9 +9,32 @@ function isCloudflareWorkers() {
10
9
  let USER_AGENT;
11
10
  if (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {
12
11
  const NAME = 'jose';
13
- const VERSION = 'v5.10.0';
12
+ const VERSION = 'v6.0.1';
14
13
  USER_AGENT = `${NAME}/${VERSION}`;
15
14
  }
15
+ export const customFetch = Symbol();
16
+ async function fetchJwks(url, options) {
17
+ const response = await (options?.[customFetch] || fetch)(url, {
18
+ method: 'GET',
19
+ signal: options.signal,
20
+ redirect: 'manual',
21
+ headers: options.headers,
22
+ }).catch((err) => {
23
+ if (err.name === 'TimeoutError') {
24
+ throw new JWKSTimeout();
25
+ }
26
+ throw err;
27
+ });
28
+ if (response.status !== 200) {
29
+ throw new JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');
30
+ }
31
+ try {
32
+ return await response.json();
33
+ }
34
+ catch {
35
+ throw new JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');
36
+ }
37
+ }
16
38
  export const jwksCache = Symbol();
17
39
  function isFreshJwksCache(input, cacheMaxAge) {
18
40
  if (typeof input !== 'object' || input === null) {
@@ -44,7 +66,7 @@ class RemoteJWKSet {
44
66
  throw new TypeError('url must be an instance of URL');
45
67
  }
46
68
  this._url = new URL(url.href);
47
- this._options = { agent: options?.agent, headers: options?.headers };
69
+ this._options = { headers: options?.headers };
48
70
  this._timeoutDuration =
49
71
  typeof options?.timeoutDuration === 'number' ? options?.timeoutDuration : 5000;
50
72
  this._cooldownDuration =
@@ -94,7 +116,14 @@ class RemoteJWKSet {
94
116
  headers.set('User-Agent', USER_AGENT);
95
117
  this._options.headers = Object.fromEntries(headers.entries());
96
118
  }
97
- this._pendingFetch ||= fetchJwks(this._url, this._timeoutDuration, this._options)
119
+ if (!headers.has('accept')) {
120
+ headers.set('accept', 'application/json');
121
+ headers.append('accept', 'application/jwk-set+json');
122
+ }
123
+ this._pendingFetch ||= fetchJwks(this._url.href, {
124
+ headers,
125
+ signal: AbortSignal.timeout(this._timeoutDuration),
126
+ })
98
127
  .then((json) => {
99
128
  this._local = createLocalJWKSet(json);
100
129
  if (this._cache) {
@@ -145,4 +174,3 @@ export function createRemoteJWKSet(url, options) {
145
174
  });
146
175
  return remoteJWKSet;
147
176
  }
148
- export const experimental_jwksCache = jwksCache;
@@ -1,10 +1,11 @@
1
- import { encode as base64url } from '../../runtime/base64url.js';
2
- import sign from '../../runtime/sign.js';
1
+ import { encode as base64url } from '../../lib/base64url.js';
2
+ import sign from '../../lib/sign.js';
3
3
  import isDisjoint from '../../lib/is_disjoint.js';
4
4
  import { JWSInvalid } from '../../util/errors.js';
5
5
  import { encoder, decoder, concat } from '../../lib/buffer_utils.js';
6
- import { checkKeyTypeWithJwk } from '../../lib/check_key_type.js';
6
+ import checkKeyType from '../../lib/check_key_type.js';
7
7
  import validateCrit from '../../lib/validate_crit.js';
8
+ import normalizeKey from '../../lib/normalize_key.js';
8
9
  export class FlattenedSign {
9
10
  _payload;
10
11
  _protectedHeader;
@@ -52,7 +53,7 @@ export class FlattenedSign {
52
53
  if (typeof alg !== 'string' || !alg) {
53
54
  throw new JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');
54
55
  }
55
- checkKeyTypeWithJwk(alg, key, 'sign');
56
+ checkKeyType(alg, key, 'sign');
56
57
  let payload = this._payload;
57
58
  if (b64) {
58
59
  payload = encoder.encode(base64url(payload));
@@ -65,7 +66,8 @@ export class FlattenedSign {
65
66
  protectedHeader = encoder.encode('');
66
67
  }
67
68
  const data = concat(protectedHeader, encoder.encode('.'), payload);
68
- const signature = await sign(alg, key, data);
69
+ const k = await normalizeKey(key, alg);
70
+ const signature = await sign(alg, k, data);
69
71
  const jws = {
70
72
  signature: base64url(signature),
71
73
  payload: '',
@@ -1,14 +1,13 @@
1
- import { decode as base64url } from '../../runtime/base64url.js';
2
- import verify from '../../runtime/verify.js';
1
+ import { decode as base64url } from '../../lib/base64url.js';
2
+ import verify from '../../lib/verify.js';
3
3
  import { JOSEAlgNotAllowed, JWSInvalid, JWSSignatureVerificationFailed } from '../../util/errors.js';
4
4
  import { concat, encoder, decoder } from '../../lib/buffer_utils.js';
5
5
  import isDisjoint from '../../lib/is_disjoint.js';
6
6
  import isObject from '../../lib/is_object.js';
7
- import { checkKeyTypeWithJwk } from '../../lib/check_key_type.js';
7
+ import checkKeyType from '../../lib/check_key_type.js';
8
8
  import validateCrit from '../../lib/validate_crit.js';
9
9
  import validateAlgorithms from '../../lib/validate_algorithms.js';
10
- import { isJWK } from '../../lib/is_jwk.js';
11
- import { importJWK } from '../../key/import.js';
10
+ import normalizeKey from '../../lib/normalize_key.js';
12
11
  export async function flattenedVerify(jws, key, options) {
13
12
  if (!isObject(jws)) {
14
13
  throw new JWSInvalid('Flattened JWS must be an object');
@@ -73,14 +72,8 @@ export async function flattenedVerify(jws, key, options) {
73
72
  if (typeof key === 'function') {
74
73
  key = await key(parsedProt, jws);
75
74
  resolvedKey = true;
76
- checkKeyTypeWithJwk(alg, key, 'verify');
77
- if (isJWK(key)) {
78
- key = await importJWK(key, alg);
79
- }
80
- }
81
- else {
82
- checkKeyTypeWithJwk(alg, key, 'verify');
83
75
  }
76
+ checkKeyType(alg, key, 'verify');
84
77
  const data = concat(encoder.encode(jws.protected ?? ''), encoder.encode('.'), typeof jws.payload === 'string' ? encoder.encode(jws.payload) : jws.payload);
85
78
  let signature;
86
79
  try {
@@ -89,7 +82,8 @@ export async function flattenedVerify(jws, key, options) {
89
82
  catch {
90
83
  throw new JWSInvalid('Failed to base64url decode the signature');
91
84
  }
92
- const verified = await verify(alg, key, signature, data);
85
+ const k = await normalizeKey(key, alg);
86
+ const verified = await verify(alg, k, signature, data);
93
87
  if (!verified) {
94
88
  throw new JWSSignatureVerificationFailed();
95
89
  }
@@ -116,7 +110,7 @@ export async function flattenedVerify(jws, key, options) {
116
110
  result.unprotectedHeader = jws.header;
117
111
  }
118
112
  if (resolvedKey) {
119
- return { ...result, key };
113
+ return { ...result, key: k };
120
114
  }
121
115
  return result;
122
116
  }
@@ -1,4 +1,4 @@
1
- import * as base64url from '../runtime/base64url.js';
1
+ import * as base64url from '../lib/base64url.js';
2
2
  import { decoder } from '../lib/buffer_utils.js';
3
3
  import { JWTInvalid } from '../util/errors.js';
4
4
  import jwtPayload from '../lib/jwt_claims_set.js';
@@ -1,6 +1,5 @@
1
- import { toSPKI as exportPublic } from '../runtime/asn1.js';
2
- import { toPKCS8 as exportPrivate } from '../runtime/asn1.js';
3
- import keyToJWK from '../runtime/key_to_jwk.js';
1
+ import { toSPKI as exportPublic, toPKCS8 as exportPrivate } from '../lib/asn1.js';
2
+ import keyToJWK from '../lib/key_to_jwk.js';
4
3
  export async function exportSPKI(key) {
5
4
  return exportPublic(key);
6
5
  }
@@ -1,45 +1,4 @@
1
- import crypto from './webcrypto.js';
2
1
  import { JOSENotSupported } from '../util/errors.js';
3
- import random from './random.js';
4
- export async function generateSecret(alg, options) {
5
- let length;
6
- let algorithm;
7
- let keyUsages;
8
- switch (alg) {
9
- case 'HS256':
10
- case 'HS384':
11
- case 'HS512':
12
- length = parseInt(alg.slice(-3), 10);
13
- algorithm = { name: 'HMAC', hash: `SHA-${length}`, length };
14
- keyUsages = ['sign', 'verify'];
15
- break;
16
- case 'A128CBC-HS256':
17
- case 'A192CBC-HS384':
18
- case 'A256CBC-HS512':
19
- length = parseInt(alg.slice(-3), 10);
20
- return random(new Uint8Array(length >> 3));
21
- case 'A128KW':
22
- case 'A192KW':
23
- case 'A256KW':
24
- length = parseInt(alg.slice(1, 4), 10);
25
- algorithm = { name: 'AES-KW', length };
26
- keyUsages = ['wrapKey', 'unwrapKey'];
27
- break;
28
- case 'A128GCMKW':
29
- case 'A192GCMKW':
30
- case 'A256GCMKW':
31
- case 'A128GCM':
32
- case 'A192GCM':
33
- case 'A256GCM':
34
- length = parseInt(alg.slice(1, 4), 10);
35
- algorithm = { name: 'AES-GCM', length };
36
- keyUsages = ['encrypt', 'decrypt'];
37
- break;
38
- default:
39
- throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
40
- }
41
- return crypto.subtle.generateKey(algorithm, options?.extractable ?? false, keyUsages);
42
- }
43
2
  function getModulusLengthOption(options) {
44
3
  const modulusLength = options?.modulusLength ?? 2048;
45
4
  if (typeof modulusLength !== 'number' || modulusLength < 2048) {
@@ -98,27 +57,16 @@ export async function generateKeyPair(alg, options) {
98
57
  keyUsages = ['sign', 'verify'];
99
58
  break;
100
59
  case 'Ed25519':
101
- algorithm = { name: 'Ed25519' };
102
- keyUsages = ['sign', 'verify'];
103
- break;
104
60
  case 'EdDSA': {
105
61
  keyUsages = ['sign', 'verify'];
106
- const crv = options?.crv ?? 'Ed25519';
107
- switch (crv) {
108
- case 'Ed25519':
109
- case 'Ed448':
110
- algorithm = { name: crv };
111
- break;
112
- default:
113
- throw new JOSENotSupported('Invalid or unsupported crv option provided');
114
- }
62
+ algorithm = { name: 'Ed25519' };
115
63
  break;
116
64
  }
117
65
  case 'ECDH-ES':
118
66
  case 'ECDH-ES+A128KW':
119
67
  case 'ECDH-ES+A192KW':
120
68
  case 'ECDH-ES+A256KW': {
121
- keyUsages = ['deriveKey', 'deriveBits'];
69
+ keyUsages = ['deriveBits'];
122
70
  const crv = options?.crv ?? 'P-256';
123
71
  switch (crv) {
124
72
  case 'P-256':
@@ -128,11 +76,10 @@ export async function generateKeyPair(alg, options) {
128
76
  break;
129
77
  }
130
78
  case 'X25519':
131
- case 'X448':
132
- algorithm = { name: crv };
79
+ algorithm = { name: 'X25519' };
133
80
  break;
134
81
  default:
135
- throw new JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448');
82
+ throw new JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, and X25519');
136
83
  }
137
84
  break;
138
85
  }
@@ -0,0 +1,40 @@
1
+ import { JOSENotSupported } from '../util/errors.js';
2
+ export async function generateSecret(alg, options) {
3
+ let length;
4
+ let algorithm;
5
+ let keyUsages;
6
+ switch (alg) {
7
+ case 'HS256':
8
+ case 'HS384':
9
+ case 'HS512':
10
+ length = parseInt(alg.slice(-3), 10);
11
+ algorithm = { name: 'HMAC', hash: `SHA-${length}`, length };
12
+ keyUsages = ['sign', 'verify'];
13
+ break;
14
+ case 'A128CBC-HS256':
15
+ case 'A192CBC-HS384':
16
+ case 'A256CBC-HS512':
17
+ length = parseInt(alg.slice(-3), 10);
18
+ return crypto.getRandomValues(new Uint8Array(length >> 3));
19
+ case 'A128KW':
20
+ case 'A192KW':
21
+ case 'A256KW':
22
+ length = parseInt(alg.slice(1, 4), 10);
23
+ algorithm = { name: 'AES-KW', length };
24
+ keyUsages = ['wrapKey', 'unwrapKey'];
25
+ break;
26
+ case 'A128GCMKW':
27
+ case 'A192GCMKW':
28
+ case 'A256GCMKW':
29
+ case 'A128GCM':
30
+ case 'A192GCM':
31
+ case 'A256GCM':
32
+ length = parseInt(alg.slice(1, 4), 10);
33
+ algorithm = { name: 'AES-GCM', length };
34
+ keyUsages = ['encrypt', 'decrypt'];
35
+ break;
36
+ default:
37
+ throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
38
+ }
39
+ return crypto.subtle.generateKey(algorithm, options?.extractable ?? false, keyUsages);
40
+ }
@@ -1,6 +1,6 @@
1
- import { decode as decodeBase64URL } from '../runtime/base64url.js';
2
- import { fromSPKI, fromPKCS8, fromX509 } from '../runtime/asn1.js';
3
- import asKeyObject from '../runtime/jwk_to_key.js';
1
+ import { decode as decodeBase64URL } from '../lib/base64url.js';
2
+ import { fromSPKI, fromPKCS8, fromX509 } from '../lib/asn1.js';
3
+ import toCryptoKey from '../lib/jwk_to_key.js';
4
4
  import { JOSENotSupported } from '../util/errors.js';
5
5
  import isObject from '../lib/is_object.js';
6
6
  export async function importSPKI(spki, alg, options) {
@@ -21,11 +21,13 @@ export async function importPKCS8(pkcs8, alg, options) {
21
21
  }
22
22
  return fromPKCS8(pkcs8, alg, options);
23
23
  }
24
- export async function importJWK(jwk, alg) {
24
+ export async function importJWK(jwk, alg, options) {
25
25
  if (!isObject(jwk)) {
26
26
  throw new TypeError('JWK must be an object');
27
27
  }
28
- alg || (alg = jwk.alg);
28
+ let ext;
29
+ alg ??= jwk.alg;
30
+ ext ??= options?.extractable ?? jwk.ext;
29
31
  switch (jwk.kty) {
30
32
  case 'oct':
31
33
  if (typeof jwk.k !== 'string' || !jwk.k) {
@@ -38,7 +40,7 @@ export async function importJWK(jwk, alg) {
38
40
  }
39
41
  case 'EC':
40
42
  case 'OKP':
41
- return asKeyObject({ ...jwk, alg });
43
+ return toCryptoKey({ ...jwk, alg, ext });
42
44
  default:
43
45
  throw new JOSENotSupported('Unsupported "kty" (Key Type) Parameter value');
44
46
  }
@@ -1,6 +1,6 @@
1
- import encrypt from '../runtime/encrypt.js';
2
- import decrypt from '../runtime/decrypt.js';
3
- import { encode as base64url } from '../runtime/base64url.js';
1
+ import encrypt from './encrypt.js';
2
+ import decrypt from './decrypt.js';
3
+ import { encode as base64url } from '../lib/base64url.js';
4
4
  export async function wrap(alg, key, cek, iv) {
5
5
  const jweAlgorithm = alg.slice(0, 7);
6
6
  const wrapped = await encrypt(jweAlgorithm, cek, key, iv, new Uint8Array(0));
@@ -1,32 +1,25 @@
1
- import bogusWebCrypto from './bogus.js';
2
- import crypto, { isCryptoKey } from './webcrypto.js';
3
- import { checkEncCryptoKey } from '../lib/crypto_key.js';
4
- import invalidKeyInput from '../lib/invalid_key_input.js';
5
- import { types } from './is_key_like.js';
1
+ import { checkEncCryptoKey } from './crypto_key.js';
6
2
  function checkKeySize(key, alg) {
7
3
  if (key.algorithm.length !== parseInt(alg.slice(1, 4), 10)) {
8
4
  throw new TypeError(`Invalid key size for alg: ${alg}`);
9
5
  }
10
6
  }
11
7
  function getCryptoKey(key, alg, usage) {
12
- if (isCryptoKey(key)) {
13
- checkEncCryptoKey(key, alg, usage);
14
- return key;
15
- }
16
8
  if (key instanceof Uint8Array) {
17
9
  return crypto.subtle.importKey('raw', key, 'AES-KW', true, [usage]);
18
10
  }
19
- throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));
11
+ checkEncCryptoKey(key, alg, usage);
12
+ return key;
20
13
  }
21
- export const wrap = async (alg, key, cek) => {
14
+ export async function wrap(alg, key, cek) {
22
15
  const cryptoKey = await getCryptoKey(key, alg, 'wrapKey');
23
16
  checkKeySize(cryptoKey, alg);
24
- const cryptoKeyCek = await crypto.subtle.importKey('raw', cek, ...bogusWebCrypto);
17
+ const cryptoKeyCek = await crypto.subtle.importKey('raw', cek, { hash: 'SHA-256', name: 'HMAC' }, true, ['sign']);
25
18
  return new Uint8Array(await crypto.subtle.wrapKey('raw', cryptoKeyCek, cryptoKey, 'AES-KW'));
26
- };
27
- export const unwrap = async (alg, key, encryptedKey) => {
19
+ }
20
+ export async function unwrap(alg, key, encryptedKey) {
28
21
  const cryptoKey = await getCryptoKey(key, alg, 'unwrapKey');
29
22
  checkKeySize(cryptoKey, alg);
30
- const cryptoKeyCek = await crypto.subtle.unwrapKey('raw', encryptedKey, cryptoKey, 'AES-KW', ...bogusWebCrypto);
23
+ const cryptoKeyCek = await crypto.subtle.unwrapKey('raw', encryptedKey, cryptoKey, 'AES-KW', { hash: 'SHA-256', name: 'HMAC' }, true, ['sign']);
31
24
  return new Uint8Array(await crypto.subtle.exportKey('raw', cryptoKeyCek));
32
- };
25
+ }