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,129 +0,0 @@
1
- import { unwrap as aesKw } from '../runtime/aeskw.js';
2
- import * as ECDH from '../runtime/ecdhes.js';
3
- import { decrypt as pbes2Kw } from '../runtime/pbes2kw.js';
4
- import { decrypt as rsaEs } from '../runtime/rsaes.js';
5
- import { decode as base64url } from '../runtime/base64url.js';
6
- import normalize from '../runtime/normalize_key.js';
7
- import { JOSENotSupported, JWEInvalid } from '../util/errors.js';
8
- import { bitLength as cekLength } from '../lib/cek.js';
9
- import { importJWK } from '../key/import.js';
10
- import checkKeyType from './check_key_type.js';
11
- import isObject from './is_object.js';
12
- import { unwrap as aesGcmKw } from './aesgcmkw.js';
13
- async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options) {
14
- checkKeyType(alg, key, 'decrypt');
15
- key = (await normalize.normalizePrivateKey?.(key, alg)) || key;
16
- switch (alg) {
17
- case 'dir': {
18
- if (encryptedKey !== undefined)
19
- throw new JWEInvalid('Encountered unexpected JWE Encrypted Key');
20
- return key;
21
- }
22
- case 'ECDH-ES':
23
- if (encryptedKey !== undefined)
24
- throw new JWEInvalid('Encountered unexpected JWE Encrypted Key');
25
- case 'ECDH-ES+A128KW':
26
- case 'ECDH-ES+A192KW':
27
- case 'ECDH-ES+A256KW': {
28
- if (!isObject(joseHeader.epk))
29
- throw new JWEInvalid(`JOSE Header "epk" (Ephemeral Public Key) missing or invalid`);
30
- if (!ECDH.ecdhAllowed(key))
31
- throw new JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');
32
- const epk = await importJWK(joseHeader.epk, alg);
33
- let partyUInfo;
34
- let partyVInfo;
35
- if (joseHeader.apu !== undefined) {
36
- if (typeof joseHeader.apu !== 'string')
37
- throw new JWEInvalid(`JOSE Header "apu" (Agreement PartyUInfo) invalid`);
38
- try {
39
- partyUInfo = base64url(joseHeader.apu);
40
- }
41
- catch {
42
- throw new JWEInvalid('Failed to base64url decode the apu');
43
- }
44
- }
45
- if (joseHeader.apv !== undefined) {
46
- if (typeof joseHeader.apv !== 'string')
47
- throw new JWEInvalid(`JOSE Header "apv" (Agreement PartyVInfo) invalid`);
48
- try {
49
- partyVInfo = base64url(joseHeader.apv);
50
- }
51
- catch {
52
- throw new JWEInvalid('Failed to base64url decode the apv');
53
- }
54
- }
55
- const sharedSecret = await ECDH.deriveKey(epk, key, alg === 'ECDH-ES' ? joseHeader.enc : alg, alg === 'ECDH-ES' ? cekLength(joseHeader.enc) : parseInt(alg.slice(-5, -2), 10), partyUInfo, partyVInfo);
56
- if (alg === 'ECDH-ES')
57
- return sharedSecret;
58
- if (encryptedKey === undefined)
59
- throw new JWEInvalid('JWE Encrypted Key missing');
60
- return aesKw(alg.slice(-6), sharedSecret, encryptedKey);
61
- }
62
- case 'RSA1_5':
63
- case 'RSA-OAEP':
64
- case 'RSA-OAEP-256':
65
- case 'RSA-OAEP-384':
66
- case 'RSA-OAEP-512': {
67
- if (encryptedKey === undefined)
68
- throw new JWEInvalid('JWE Encrypted Key missing');
69
- return rsaEs(alg, key, encryptedKey);
70
- }
71
- case 'PBES2-HS256+A128KW':
72
- case 'PBES2-HS384+A192KW':
73
- case 'PBES2-HS512+A256KW': {
74
- if (encryptedKey === undefined)
75
- throw new JWEInvalid('JWE Encrypted Key missing');
76
- if (typeof joseHeader.p2c !== 'number')
77
- throw new JWEInvalid(`JOSE Header "p2c" (PBES2 Count) missing or invalid`);
78
- const p2cLimit = options?.maxPBES2Count || 10000;
79
- if (joseHeader.p2c > p2cLimit)
80
- throw new JWEInvalid(`JOSE Header "p2c" (PBES2 Count) out is of acceptable bounds`);
81
- if (typeof joseHeader.p2s !== 'string')
82
- throw new JWEInvalid(`JOSE Header "p2s" (PBES2 Salt) missing or invalid`);
83
- let p2s;
84
- try {
85
- p2s = base64url(joseHeader.p2s);
86
- }
87
- catch {
88
- throw new JWEInvalid('Failed to base64url decode the p2s');
89
- }
90
- return pbes2Kw(alg, key, encryptedKey, joseHeader.p2c, p2s);
91
- }
92
- case 'A128KW':
93
- case 'A192KW':
94
- case 'A256KW': {
95
- if (encryptedKey === undefined)
96
- throw new JWEInvalid('JWE Encrypted Key missing');
97
- return aesKw(alg, key, encryptedKey);
98
- }
99
- case 'A128GCMKW':
100
- case 'A192GCMKW':
101
- case 'A256GCMKW': {
102
- if (encryptedKey === undefined)
103
- throw new JWEInvalid('JWE Encrypted Key missing');
104
- if (typeof joseHeader.iv !== 'string')
105
- throw new JWEInvalid(`JOSE Header "iv" (Initialization Vector) missing or invalid`);
106
- if (typeof joseHeader.tag !== 'string')
107
- throw new JWEInvalid(`JOSE Header "tag" (Authentication Tag) missing or invalid`);
108
- let iv;
109
- try {
110
- iv = base64url(joseHeader.iv);
111
- }
112
- catch {
113
- throw new JWEInvalid('Failed to base64url decode the iv');
114
- }
115
- let tag;
116
- try {
117
- tag = base64url(joseHeader.tag);
118
- }
119
- catch {
120
- throw new JWEInvalid('Failed to base64url decode the tag');
121
- }
122
- return aesGcmKw(alg, key, encryptedKey, iv, tag);
123
- }
124
- default: {
125
- throw new JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value');
126
- }
127
- }
128
- }
129
- export default decryptKeyManagement;
@@ -1,89 +0,0 @@
1
- import { wrap as aesKw } from '../runtime/aeskw.js';
2
- import * as ECDH from '../runtime/ecdhes.js';
3
- import { encrypt as pbes2Kw } from '../runtime/pbes2kw.js';
4
- import { encrypt as rsaEs } from '../runtime/rsaes.js';
5
- import { encode as base64url } from '../runtime/base64url.js';
6
- import normalize from '../runtime/normalize_key.js';
7
- import generateCek, { bitLength as cekLength } from '../lib/cek.js';
8
- import { JOSENotSupported } from '../util/errors.js';
9
- import { exportJWK } from '../key/export.js';
10
- import checkKeyType from './check_key_type.js';
11
- import { wrap as aesGcmKw } from './aesgcmkw.js';
12
- async function encryptKeyManagement(alg, enc, key, providedCek, providedParameters = {}) {
13
- let encryptedKey;
14
- let parameters;
15
- let cek;
16
- checkKeyType(alg, key, 'encrypt');
17
- key = (await normalize.normalizePublicKey?.(key, alg)) || key;
18
- switch (alg) {
19
- case 'dir': {
20
- cek = key;
21
- break;
22
- }
23
- case 'ECDH-ES':
24
- case 'ECDH-ES+A128KW':
25
- case 'ECDH-ES+A192KW':
26
- case 'ECDH-ES+A256KW': {
27
- if (!ECDH.ecdhAllowed(key)) {
28
- throw new JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');
29
- }
30
- const { apu, apv } = providedParameters;
31
- let { epk: ephemeralKey } = providedParameters;
32
- ephemeralKey || (ephemeralKey = (await ECDH.generateEpk(key)).privateKey);
33
- const { x, y, crv, kty } = await exportJWK(ephemeralKey);
34
- const sharedSecret = await ECDH.deriveKey(key, ephemeralKey, alg === 'ECDH-ES' ? enc : alg, alg === 'ECDH-ES' ? cekLength(enc) : parseInt(alg.slice(-5, -2), 10), apu, apv);
35
- parameters = { epk: { x, crv, kty } };
36
- if (kty === 'EC')
37
- parameters.epk.y = y;
38
- if (apu)
39
- parameters.apu = base64url(apu);
40
- if (apv)
41
- parameters.apv = base64url(apv);
42
- if (alg === 'ECDH-ES') {
43
- cek = sharedSecret;
44
- break;
45
- }
46
- cek = providedCek || generateCek(enc);
47
- const kwAlg = alg.slice(-6);
48
- encryptedKey = await aesKw(kwAlg, sharedSecret, cek);
49
- break;
50
- }
51
- case 'RSA1_5':
52
- case 'RSA-OAEP':
53
- case 'RSA-OAEP-256':
54
- case 'RSA-OAEP-384':
55
- case 'RSA-OAEP-512': {
56
- cek = providedCek || generateCek(enc);
57
- encryptedKey = await rsaEs(alg, key, cek);
58
- break;
59
- }
60
- case 'PBES2-HS256+A128KW':
61
- case 'PBES2-HS384+A192KW':
62
- case 'PBES2-HS512+A256KW': {
63
- cek = providedCek || generateCek(enc);
64
- const { p2c, p2s } = providedParameters;
65
- ({ encryptedKey, ...parameters } = await pbes2Kw(alg, key, cek, p2c, p2s));
66
- break;
67
- }
68
- case 'A128KW':
69
- case 'A192KW':
70
- case 'A256KW': {
71
- cek = providedCek || generateCek(enc);
72
- encryptedKey = await aesKw(alg, key, cek);
73
- break;
74
- }
75
- case 'A128GCMKW':
76
- case 'A192GCMKW':
77
- case 'A256GCMKW': {
78
- cek = providedCek || generateCek(enc);
79
- const { iv } = providedParameters;
80
- ({ encryptedKey, ...parameters } = await aesGcmKw(alg, key, cek, iv));
81
- break;
82
- }
83
- default: {
84
- throw new JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value');
85
- }
86
- }
87
- return { cek, encryptedKey, parameters };
88
- }
89
- export default encryptKeyManagement;
@@ -1,4 +0,0 @@
1
- export default (b64, descriptor) => {
2
- const newlined = (b64.match(/.{1,64}/g) || []).join('\n');
3
- return `-----BEGIN ${descriptor}-----\n${newlined}\n-----END ${descriptor}-----`;
4
- };
@@ -1,22 +0,0 @@
1
- const isDisjoint = (...headers) => {
2
- const sources = headers.filter(Boolean);
3
- if (sources.length === 0 || sources.length === 1) {
4
- return true;
5
- }
6
- let acc;
7
- for (const header of sources) {
8
- const parameters = Object.keys(header);
9
- if (!acc || acc.size === 0) {
10
- acc = new Set(parameters);
11
- continue;
12
- }
13
- for (const parameter of parameters) {
14
- if (acc.has(parameter)) {
15
- return false;
16
- }
17
- acc.add(parameter);
18
- }
19
- }
20
- return true;
21
- };
22
- export default isDisjoint;
@@ -1,20 +0,0 @@
1
- import { JOSENotSupported } from '../util/errors.js';
2
- import random from '../runtime/random.js';
3
- export function bitLength(alg) {
4
- switch (alg) {
5
- case 'A128GCM':
6
- case 'A128GCMKW':
7
- case 'A192GCM':
8
- case 'A192GCMKW':
9
- case 'A256GCM':
10
- case 'A256GCMKW':
11
- return 96;
12
- case 'A128CBC-HS256':
13
- case 'A192CBC-HS384':
14
- case 'A256CBC-HS512':
15
- return 128;
16
- default:
17
- throw new JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
18
- }
19
- }
20
- export default (alg) => random(new Uint8Array(bitLength(alg) >> 3));
@@ -1,34 +0,0 @@
1
- import { JOSENotSupported } from '../util/errors.js';
2
- function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {
3
- if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {
4
- throw new Err('"crit" (Critical) Header Parameter MUST be integrity protected');
5
- }
6
- if (!protectedHeader || protectedHeader.crit === undefined) {
7
- return new Set();
8
- }
9
- if (!Array.isArray(protectedHeader.crit) ||
10
- protectedHeader.crit.length === 0 ||
11
- protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {
12
- throw new Err('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');
13
- }
14
- let recognized;
15
- if (recognizedOption !== undefined) {
16
- recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);
17
- }
18
- else {
19
- recognized = recognizedDefault;
20
- }
21
- for (const parameter of protectedHeader.crit) {
22
- if (!recognized.has(parameter)) {
23
- throw new JOSENotSupported(`Extension Header Parameter "${parameter}" is not recognized`);
24
- }
25
- if (joseHeader[parameter] === undefined) {
26
- throw new Err(`Extension Header Parameter "${parameter}" is missing`);
27
- }
28
- if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {
29
- throw new Err(`Extension Header Parameter "${parameter}" MUST be integrity protected`);
30
- }
31
- }
32
- return new Set(protectedHeader.crit);
33
- }
34
- export default validateCrit;
@@ -1 +0,0 @@
1
- {"type":"module","sideEffects":false}
@@ -1,6 +0,0 @@
1
- const bogusWebCrypto = [
2
- { hash: 'SHA-256', name: 'HMAC' },
3
- true,
4
- ['sign'],
5
- ];
6
- export default bogusWebCrypto;
@@ -1,47 +0,0 @@
1
- import { encoder, concat, uint32be, lengthAndInput, concatKdf } from '../lib/buffer_utils.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';
6
- export async function deriveKey(publicKey, privateKey, algorithm, keyLength, apu = new Uint8Array(0), apv = new Uint8Array(0)) {
7
- if (!isCryptoKey(publicKey)) {
8
- throw new TypeError(invalidKeyInput(publicKey, ...types));
9
- }
10
- checkEncCryptoKey(publicKey, 'ECDH');
11
- if (!isCryptoKey(privateKey)) {
12
- throw new TypeError(invalidKeyInput(privateKey, ...types));
13
- }
14
- checkEncCryptoKey(privateKey, 'ECDH', 'deriveBits');
15
- const value = concat(lengthAndInput(encoder.encode(algorithm)), lengthAndInput(apu), lengthAndInput(apv), uint32be(keyLength));
16
- let length;
17
- if (publicKey.algorithm.name === 'X25519') {
18
- length = 256;
19
- }
20
- else if (publicKey.algorithm.name === 'X448') {
21
- length = 448;
22
- }
23
- else {
24
- length =
25
- Math.ceil(parseInt(publicKey.algorithm.namedCurve.substr(-3), 10) / 8) <<
26
- 3;
27
- }
28
- const sharedSecret = new Uint8Array(await crypto.subtle.deriveBits({
29
- name: publicKey.algorithm.name,
30
- public: publicKey,
31
- }, privateKey, length));
32
- return concatKdf(sharedSecret, keyLength, value);
33
- }
34
- export async function generateEpk(key) {
35
- if (!isCryptoKey(key)) {
36
- throw new TypeError(invalidKeyInput(key, ...types));
37
- }
38
- return crypto.subtle.generateKey(key.algorithm, true, ['deriveBits']);
39
- }
40
- export function ecdhAllowed(key) {
41
- if (!isCryptoKey(key)) {
42
- throw new TypeError(invalidKeyInput(key, ...types));
43
- }
44
- return (['P-256', 'P-384', 'P-521'].includes(key.algorithm.namedCurve) ||
45
- key.algorithm.name === 'X25519' ||
46
- key.algorithm.name === 'X448');
47
- }
@@ -1,34 +0,0 @@
1
- import { JOSEError, JWKSTimeout } from '../util/errors.js';
2
- const fetchJwks = async (url, timeout, options) => {
3
- let controller;
4
- let id;
5
- let timedOut = false;
6
- if (typeof AbortController === 'function') {
7
- controller = new AbortController();
8
- id = setTimeout(() => {
9
- timedOut = true;
10
- controller.abort();
11
- }, timeout);
12
- }
13
- const response = await fetch(url.href, {
14
- signal: controller ? controller.signal : undefined,
15
- redirect: 'manual',
16
- headers: options.headers,
17
- }).catch((err) => {
18
- if (timedOut)
19
- throw new JWKSTimeout();
20
- throw err;
21
- });
22
- if (id !== undefined)
23
- clearTimeout(id);
24
- if (response.status !== 200) {
25
- throw new JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');
26
- }
27
- try {
28
- return await response.json();
29
- }
30
- catch {
31
- throw new JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');
32
- }
33
- };
34
- export default fetchJwks;
@@ -1,24 +0,0 @@
1
- import crypto, { isCryptoKey } from './webcrypto.js';
2
- import { checkSigCryptoKey } from '../lib/crypto_key.js';
3
- import invalidKeyInput from '../lib/invalid_key_input.js';
4
- import { types } from './is_key_like.js';
5
- import normalize from './normalize_key.js';
6
- export default async function getCryptoKey(alg, key, usage) {
7
- if (usage === 'sign') {
8
- key = await normalize.normalizePrivateKey(key, alg);
9
- }
10
- if (usage === 'verify') {
11
- key = await normalize.normalizePublicKey(key, alg);
12
- }
13
- if (isCryptoKey(key)) {
14
- checkSigCryptoKey(key, alg, usage);
15
- return key;
16
- }
17
- if (key instanceof Uint8Array) {
18
- if (!alg.startsWith('HS')) {
19
- throw new TypeError(invalidKeyInput(key, ...types));
20
- }
21
- return crypto.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);
22
- }
23
- throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array', 'JSON Web Key'));
24
- }
@@ -1,8 +0,0 @@
1
- import { isCryptoKey } from './webcrypto.js';
2
- export default (key) => {
3
- if (isCryptoKey(key)) {
4
- return true;
5
- }
6
- return key?.[Symbol.toStringTag] === 'KeyObject';
7
- };
8
- export const types = ['CryptoKey'];
@@ -1,21 +0,0 @@
1
- import crypto, { isCryptoKey } from './webcrypto.js';
2
- import invalidKeyInput from '../lib/invalid_key_input.js';
3
- import { encode as base64url } from './base64url.js';
4
- import { types } from './is_key_like.js';
5
- const keyToJWK = async (key) => {
6
- if (key instanceof Uint8Array) {
7
- return {
8
- kty: 'oct',
9
- k: base64url(key),
10
- };
11
- }
12
- if (!isCryptoKey(key)) {
13
- throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));
14
- }
15
- if (!key.extractable) {
16
- throw new TypeError('non-extractable CryptoKey cannot be exported as a JWK');
17
- }
18
- const { ext, key_ops, alg, use, ...jwk } = await crypto.subtle.exportKey('jwk', key);
19
- return jwk;
20
- };
21
- export default keyToJWK;
@@ -1,68 +0,0 @@
1
- import { isJWK } from '../lib/is_jwk.js';
2
- import { decode } from './base64url.js';
3
- import importJWK from './jwk_to_key.js';
4
- const exportKeyValue = (k) => decode(k);
5
- let privCache;
6
- let pubCache;
7
- const isKeyObject = (key) => {
8
- return key?.[Symbol.toStringTag] === 'KeyObject';
9
- };
10
- const importAndCache = async (cache, key, jwk, alg, freeze = false) => {
11
- let cached = cache.get(key);
12
- if (cached?.[alg]) {
13
- return cached[alg];
14
- }
15
- const cryptoKey = await importJWK({ ...jwk, alg });
16
- if (freeze)
17
- Object.freeze(key);
18
- if (!cached) {
19
- cache.set(key, { [alg]: cryptoKey });
20
- }
21
- else {
22
- cached[alg] = cryptoKey;
23
- }
24
- return cryptoKey;
25
- };
26
- const normalizePublicKey = (key, alg) => {
27
- if (isKeyObject(key)) {
28
- let jwk = key.export({ format: 'jwk' });
29
- delete jwk.d;
30
- delete jwk.dp;
31
- delete jwk.dq;
32
- delete jwk.p;
33
- delete jwk.q;
34
- delete jwk.qi;
35
- if (jwk.k) {
36
- return exportKeyValue(jwk.k);
37
- }
38
- pubCache || (pubCache = new WeakMap());
39
- return importAndCache(pubCache, key, jwk, alg);
40
- }
41
- if (isJWK(key)) {
42
- if (key.k)
43
- return decode(key.k);
44
- pubCache || (pubCache = new WeakMap());
45
- const cryptoKey = importAndCache(pubCache, key, key, alg, true);
46
- return cryptoKey;
47
- }
48
- return key;
49
- };
50
- const normalizePrivateKey = (key, alg) => {
51
- if (isKeyObject(key)) {
52
- let jwk = key.export({ format: 'jwk' });
53
- if (jwk.k) {
54
- return exportKeyValue(jwk.k);
55
- }
56
- privCache || (privCache = new WeakMap());
57
- return importAndCache(privCache, key, jwk, alg);
58
- }
59
- if (isJWK(key)) {
60
- if (key.k)
61
- return decode(key.k);
62
- privCache || (privCache = new WeakMap());
63
- const cryptoKey = importAndCache(privCache, key, key, alg, true);
64
- return cryptoKey;
65
- }
66
- return key;
67
- };
68
- export default { normalizePublicKey, normalizePrivateKey };
@@ -1,51 +0,0 @@
1
- import random from './random.js';
2
- import { p2s as concatSalt } from '../lib/buffer_utils.js';
3
- import { encode as base64url } from './base64url.js';
4
- import { wrap, unwrap } from './aeskw.js';
5
- import checkP2s from '../lib/check_p2s.js';
6
- import crypto, { isCryptoKey } from './webcrypto.js';
7
- import { checkEncCryptoKey } from '../lib/crypto_key.js';
8
- import invalidKeyInput from '../lib/invalid_key_input.js';
9
- import { types } from './is_key_like.js';
10
- function getCryptoKey(key, alg) {
11
- if (key instanceof Uint8Array) {
12
- return crypto.subtle.importKey('raw', key, 'PBKDF2', false, ['deriveBits']);
13
- }
14
- if (isCryptoKey(key)) {
15
- checkEncCryptoKey(key, alg, 'deriveBits', 'deriveKey');
16
- return key;
17
- }
18
- throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));
19
- }
20
- async function deriveKey(p2s, alg, p2c, key) {
21
- checkP2s(p2s);
22
- const salt = concatSalt(alg, p2s);
23
- const keylen = parseInt(alg.slice(13, 16), 10);
24
- const subtleAlg = {
25
- hash: `SHA-${alg.slice(8, 11)}`,
26
- iterations: p2c,
27
- name: 'PBKDF2',
28
- salt,
29
- };
30
- const wrapAlg = {
31
- length: keylen,
32
- name: 'AES-KW',
33
- };
34
- const cryptoKey = await getCryptoKey(key, alg);
35
- if (cryptoKey.usages.includes('deriveBits')) {
36
- return new Uint8Array(await crypto.subtle.deriveBits(subtleAlg, cryptoKey, keylen));
37
- }
38
- if (cryptoKey.usages.includes('deriveKey')) {
39
- return crypto.subtle.deriveKey(subtleAlg, cryptoKey, wrapAlg, false, ['wrapKey', 'unwrapKey']);
40
- }
41
- throw new TypeError('PBKDF2 key "usages" must include "deriveBits" or "deriveKey"');
42
- }
43
- export const encrypt = async (alg, key, cek, p2c = 2048, p2s = random(new Uint8Array(16))) => {
44
- const derived = await deriveKey(p2s, alg, p2c, key);
45
- const encryptedKey = await wrap(alg.slice(-6), derived, cek);
46
- return { encryptedKey, p2c, p2s: base64url(p2s) };
47
- };
48
- export const decrypt = async (alg, key, encryptedKey, p2c, p2s) => {
49
- const derived = await deriveKey(p2s, alg, p2c, key);
50
- return unwrap(alg.slice(-6), derived, encryptedKey);
51
- };
@@ -1,2 +0,0 @@
1
- import crypto from './webcrypto.js';
2
- export default crypto.getRandomValues.bind(crypto);
@@ -1,37 +0,0 @@
1
- import subtleAlgorithm from './subtle_rsaes.js';
2
- import bogusWebCrypto from './bogus.js';
3
- import crypto, { isCryptoKey } from './webcrypto.js';
4
- import { checkEncCryptoKey } from '../lib/crypto_key.js';
5
- import checkKeyLength from './check_key_length.js';
6
- import invalidKeyInput from '../lib/invalid_key_input.js';
7
- import { types } from './is_key_like.js';
8
- export const encrypt = async (alg, key, cek) => {
9
- if (!isCryptoKey(key)) {
10
- throw new TypeError(invalidKeyInput(key, ...types));
11
- }
12
- checkEncCryptoKey(key, alg, 'encrypt', 'wrapKey');
13
- checkKeyLength(alg, key);
14
- if (key.usages.includes('encrypt')) {
15
- return new Uint8Array(await crypto.subtle.encrypt(subtleAlgorithm(alg), key, cek));
16
- }
17
- if (key.usages.includes('wrapKey')) {
18
- const cryptoKeyCek = await crypto.subtle.importKey('raw', cek, ...bogusWebCrypto);
19
- return new Uint8Array(await crypto.subtle.wrapKey('raw', cryptoKeyCek, key, subtleAlgorithm(alg)));
20
- }
21
- throw new TypeError('RSA-OAEP key "usages" must include "encrypt" or "wrapKey" for this operation');
22
- };
23
- export const decrypt = async (alg, key, encryptedKey) => {
24
- if (!isCryptoKey(key)) {
25
- throw new TypeError(invalidKeyInput(key, ...types));
26
- }
27
- checkEncCryptoKey(key, alg, 'decrypt', 'unwrapKey');
28
- checkKeyLength(alg, key);
29
- if (key.usages.includes('decrypt')) {
30
- return new Uint8Array(await crypto.subtle.decrypt(subtleAlgorithm(alg), key, encryptedKey));
31
- }
32
- if (key.usages.includes('unwrapKey')) {
33
- const cryptoKeyCek = await crypto.subtle.unwrapKey('raw', encryptedKey, key, subtleAlgorithm(alg), ...bogusWebCrypto);
34
- return new Uint8Array(await crypto.subtle.exportKey('raw', cryptoKeyCek));
35
- }
36
- throw new TypeError('RSA-OAEP key "usages" must include "decrypt" or "unwrapKey" for this operation');
37
- };
@@ -1 +0,0 @@
1
- export default 'WebCryptoAPI';
@@ -1,12 +0,0 @@
1
- import { JOSENotSupported } from '../util/errors.js';
2
- export default function subtleRsaEs(alg) {
3
- switch (alg) {
4
- case 'RSA-OAEP':
5
- case 'RSA-OAEP-256':
6
- case 'RSA-OAEP-384':
7
- case 'RSA-OAEP-512':
8
- return 'RSA-OAEP';
9
- default:
10
- throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
11
- }
12
- }
@@ -1,19 +0,0 @@
1
- const timingSafeEqual = (a, b) => {
2
- if (!(a instanceof Uint8Array)) {
3
- throw new TypeError('First argument must be a buffer');
4
- }
5
- if (!(b instanceof Uint8Array)) {
6
- throw new TypeError('Second argument must be a buffer');
7
- }
8
- if (a.length !== b.length) {
9
- throw new TypeError('Input buffers must have the same length');
10
- }
11
- const len = a.length;
12
- let out = 0;
13
- let i = -1;
14
- while (++i < len) {
15
- out |= a[i] ^ b[i];
16
- }
17
- return out === 0;
18
- };
19
- export default timingSafeEqual;
@@ -1,2 +0,0 @@
1
- export default crypto;
2
- export const isCryptoKey = (key) => key instanceof CryptoKey;
@@ -1,3 +0,0 @@
1
- import * as base64url from '../runtime/base64url.js';
2
- export const encode = base64url.encode;
3
- export const decode = base64url.decode;