Skip to content

Releases: panva/jose

v6.0.1

22 Feb 15:19

Choose a tag to compare

Fixes

  • types: update build to include extensions in type imports (9b96672)

v6.0.0

22 Feb 14:49

Choose a tag to compare

⚠ BREAKING CHANGES

  • The PEMImportOptions type interface is renamed to KeyImportOptions.
  • all builds and bundles now use ES2022 as target
  • createRemoteJWKSet now uses fetch, because of that its Node.js only options.agent property has been removed and new fetch-related options were added
  • drop support for Ed448 and X448
  • drop support for JWK key_ops and CryptoKey usages "(un)wrapKey" and "deriveKey"
  • resolved keys returned as part of verify/decrypt operations (when get key functions are used) are always normalized to either Uint8Array / CryptoKey depending on what's more efficient for the executed operation
  • Key "Type" Generics are removed
  • CJS-style require is now only possible when require(esm) support is present in the Node.js runtime
  • private KeyObject instances can no longer be used for verify operations
  • private KeyObject instances can no longer be used for encryption operations
  • generateSecret, generateKeyPair, importPKCS8, importSPKI, importJWK, and importX509 now yield a CryptoKey instead of a KeyObject in Node.js
  • drop support for Node.js 18.x and earlier
  • runtime-specific npm releases (jose-browser-runtime, jose-node-cjs-runtime, and jose-node-esm-runtime) are no longer maintained or supported
  • removed secp256k1 JWS support
  • removed deprecated experimental APIs
  • removed RSA1_5 JWE support

Features

  • enable CryptoKey and KeyObject inputs in JWK thumbprint functions (6fc9c44)
  • JSON Web Key is now an allowed input everywhere (ebda967)

Refactor

  • always use infered CryptoKey (c4abaa2)
  • backport the Ed25519 JWS Algorithm Identifier support (7a94cb9)
  • drop support for Ed448 and X448 (2fae1c4)
  • drop support for JWK key_ops and CryptoKey usages "(un)wrapKey" and "deriveKey" (ef918be)
  • ensure export functions continue to work with KeyObject inputs (28e9e68)
  • hardcode the cryptoRuntime export since it is now always WebCryptoAPI (e00f273)
  • JWK import extractable default for public keys is now true (64dcebe)
  • PEM import extractable default for public keys is now true (4e9f114)
  • removed deprecated APIs (5352083)
  • removed secp256k1 JWS support (e2b58a5)
  • restructure src/lib and src/runtime now that runtime is fixed (9b236ce)
  • target is now ES2022 everywhere (aa590d5)
  • update importJWK args to align with other import functions (355a2dd)
  • WebCryptoAPI is now the only crypto used (161de46)

v5.10.0

17 Feb 15:07

Choose a tag to compare

Features

  • support fully specified Ed25519 algorithm identifier (c39f57d)

v5.9.6

20 Oct 20:59

Choose a tag to compare

Reverts

  • Revert "refactor(build): simplify package exports" (2ef3a52)

v5.9.4

11 Oct 12:38

Choose a tag to compare

Refactor

  • types: update error definitions (510c5ca)

v5.9.3

22 Sep 21:02

Choose a tag to compare

Refactor

  • use as Type for type assertions instead of <Type> (c4dc24d)

v5.9.2

14 Sep 07:53

Choose a tag to compare

Refactor

  • types: remove index signatures from JWK interfaces (ccf0cda)

v5.9.1

13 Sep 16:57

Choose a tag to compare

Fixes

  • types: add missing index signature on the convenience JWK types (90a93dc)

v5.9.0

13 Sep 14:50

Choose a tag to compare

Features

  • allow JWK objects as "key" input to sign and verify (c6302ea)

This method of passing private or public keys does not yield the same performance as passing a CryptoKey or KeyObject instances, its main purpose is for convenience or for when you're not going to be re-using the same set of keys for the operation, in which case you should use one of the import key methods to obtain a CryptoKey or KeyObject.

Example Signing

const alg = "RS256";
const jwk = {
  kty: "RSA",
  n: "whYOFK2Ocbbpb_zVypi9SeKiNUqKQH0zTKN1-6fpCTu6ZalGI82s7XK3tan4dJt90ptUPKD2zvxqTzFNfx4HHHsrYCf2-FMLn1VTJfQazA2BvJqAwcpW1bqRUEty8tS_Yv4hRvWfQPcc2Gc3-_fQOOW57zVy-rNoJc744kb30NjQxdGp03J2S3GLQu7oKtSDDPooQHD38PEMNnITf0pj-KgDPjymkMGoJlO3aKppsjfbt_AH6GGdRghYRLOUwQU-h-ofWHR3lbYiKtXPn5dN24kiHy61e3VAQ9_YAZlwXC_99GGtw_NpghFAuM4P1JDn0DppJldy3PGFC0GfBCZASw",
  e: "AQAB",
  d: "VuVE_KEP6323WjpbBdAIv7HGahGrgGANvbxZsIhm34lsVOPK0XDegZkhAybMZHjRhp-gwVxX5ChC-J3cUpOBH5FNxElgW6HizD2Jcq6t6LoLYgPSrfEHm71iHg8JsgrqfUnGYFzMJmv88C6WdCtpgG_qJV1K00_Ly1G1QKoBffEs-v4fAMJrCbUdCz1qWto-PU-HLMEo-krfEpGgcmtZeRlDADh8cETMQlgQfQX2VWq_aAP4a1SXmo-j0cvRU4W5Fj0RVwNesIpetX2ZFz4p_JmB5sWFEj_fC7h5z2lq-6Bme2T3BHtXkIxoBW0_pYVnASC8P2puO5FnVxDmWuHDYQ",
  p: "07rgXd_tLUhVRF_g1OaqRZh5uZ8hiLWUSU0vu9coOaQcatSqjQlIwLW8UdKv_38GrmpIfgcEVQjzq6rFBowUm9zWBO9Eq6enpasYJBOeD8EMeDK-nsST57HjPVOCvoVC5ZX-cozPXna3iRNZ1TVYBY3smn0IaxysIK-zxESf4pM",
  q: "6qrE9TPhCS5iNR7QrKThunLu6t4H_8CkYRPLbvOIt2MgZyPLiZCsvdkTVSOX76QQEXt7Y0nTNua69q3K3Jhf-YOkPSJsWTxgrfOnjoDvRKzbW3OExIMm7D99fVBODuNWinjYgUwGSqGAsb_3TKhtI-Gr5ls3fn6B6oEjVL0dpmk",
  dp: "mHqjrFdgelT2OyiFRS3dAAPf3cLxJoAGC4gP0UoQyPocEP-Y17sQ7t-ygIanguubBy65iDFLeGXa_g0cmSt2iAzRAHrDzI8P1-pQl2KdWSEg9ssspjBRh_F_AiJLLSPRWn_b3-jySkhawtfxwO8Kte1QsK1My765Y0zFvJnjPws",
  dq: "KmjaV4YcsVAUp4z-IXVa5htHWmLuByaFjpXJOjABEUN0467wZdgjn9vPRp-8Ia8AyGgMkJES_uUL_PDDrMJM9gb4c6P4-NeUkVtreLGMjFjA-_IQmIMrUZ7XywHsWXx0c2oLlrJqoKo3W-hZhR0bPFTYgDUT_mRWjk7wV6wl46E",
  qi: "iYltkV_4PmQDfZfGFpzn2UtYEKyhy-9t3Vy8Mw2VHLAADKGwJvVK5ficQAr2atIF1-agXY2bd6KV-w52zR8rmZfTr0gobzYIyqHczOm13t7uXJv2WygY7QEC2OGjdxa2Fr9RnvS99ozMa5nomZBqTqT7z5QV33czjPRCjvg6FcE",
};

const jwt = await new jose.SignJWT({ "urn:example:claim": true })
  .setProtectedHeader({ alg })
  .setIssuedAt()
  .setIssuer("urn:example:issuer")
  .setAudience("urn:example:audience")
  .setExpirationTime("2h")
  .sign(jwk);

console.log(jwt);

Example Verification

const alg = "RS256";
const jwk = {
  kty: "RSA",
  n: "whYOFK2Ocbbpb_zVypi9SeKiNUqKQH0zTKN1-6fpCTu6ZalGI82s7XK3tan4dJt90ptUPKD2zvxqTzFNfx4HHHsrYCf2-FMLn1VTJfQazA2BvJqAwcpW1bqRUEty8tS_Yv4hRvWfQPcc2Gc3-_fQOOW57zVy-rNoJc744kb30NjQxdGp03J2S3GLQu7oKtSDDPooQHD38PEMNnITf0pj-KgDPjymkMGoJlO3aKppsjfbt_AH6GGdRghYRLOUwQU-h-ofWHR3lbYiKtXPn5dN24kiHy61e3VAQ9_YAZlwXC_99GGtw_NpghFAuM4P1JDn0DppJldy3PGFC0GfBCZASw",
  e: "AQAB",
};

const jwt =
  "eyJhbGciOiJSUzI1NiJ9.eyJ1cm46ZXhhbXBsZTpjbGFpbSI6dHJ1ZSwiaWF0IjoxNjY5MDU2NDg4LCJpc3MiOiJ1cm46ZXhhbXBsZTppc3N1ZXIiLCJhdWQiOiJ1cm46ZXhhbXBsZTphdWRpZW5jZSJ9.gXrPZ3yM_60dMXGE69dusbpzYASNA-XIOwsb5D5xYnSxyj6_D6OR_uR_1vqhUm4AxZxcrH1_-XJAve9HCw8az_QzHcN-nETt-v6stCsYrn6Bv1YOc-mSJRZ8ll57KVqLbCIbjKwerNX5r2_Qg2TwmJzQdRs-AQDhy-s_DlJd8ql6wR4n-kDZpar-pwIvz4fFIN0Fj57SXpAbLrV6Eo4Byzl0xFD8qEYEpBwjrMMfxCZXTlAVhAq6KCoGlDTwWuExps342-0UErEtyIqDnDGcrfNWiUsoo8j-29IpKd-w9-C388u-ChCxoHz--H8WmMSZzx3zTXsZ5lXLZ9IKfanDKg";

const { payload, protectedHeader } = await jose.jwtVerify(jwt, jwk, {
  issuer: "urn:example:issuer",
  audience: "urn:example:audience",
});

console.log(protectedHeader);
console.log(payload);

v5.8.0

26 Aug 11:43

Choose a tag to compare

Features

  • add subpath module exports (72ecff6)

Refactor

  • omit LocalJWKSet export since it's no longer needed for RemoteJWKSet (c502731)