View Source Changelog
1.11.10 (2024-04-17)
1.11.9 (2024-04-08)
- Fixes
 
1.11.8 (2024-04-07)
- Fixes
- Removes use of 
dynamic()type spec so OTP 24 and OTP 25 are still supported for now. 
 - Removes use of 
 
1.11.7 (2024-04-07)
- Security Patches
- CVE-2023-50966: Add 
jose:pbes2_count_maximum/0. By default, the maximum iterations are set to 10,000 and it will raise an error ifp2cis larger than this value. 
 - CVE-2023-50966: Add 
 - Changes
- Declare Poison as an optional dependency, thanks to [@lnikkila][https://github.com/lnikkila]; see #144.
 - Ensure 
jiffy:encode/1returns a binary, thanks to @ssepml; see #145. - Various type spec additions and dialyzer/dialyxir integrations, thanks to @whatyouhide and @maennchen.
 - Doc updates and fixes, thanks to @aymanosman and @adamu; see #158 and #159.
 
 
1.11.6 (2023-07-18)
- Fixes
 
1.11.5 (2022-12-16)
- Fixes
- Remove dependency on 
parse_transformforjose_base64andjose_base64url. 
 - Remove dependency on 
 
1.11.4 (2022-12-15)
- Enhancements
- Add support for native 
cryptooperations for Ed25519 and Ed448, thanks to @brettbeatty; see #123. - Add support for native 
cryptooperations for ChaCha20-Poly1305 and XChaCha20-Poly1305, when available. - Add support for 
libsodiumoperations for XChaCha20-Poly1305, when available. - Add support for 
thoasJSON encode/decode, thanks to @michaelklishin; see #126. - Add support for 
ES256Kwhich uses thesecp256k1curve andRS1signatures (see 291dbb8). - Add support for ECDH-1PU 
JOSE.JWK.box_encrypt_ecdh_1puand ECDH-ESJOSE.JWK.box_encrypt_ecdh_esand document the deprecatedJOSE.JWK.box_encrypt. - Add support for ECDH-SS 
JOSE.JWK.box_encrypt_ecdh_ss. - Hide 
ktyfield when inspecting%JOSE.JWK{}strict, thanks to @spencerdcarlson; see #139 
 - Add support for native 
 - Fixes
- Version mismatch causing 
rebar3to constantly try to update; see #122. - Fix Ed25519 and Ed448 key DER/PEM encode/decode for OTP 25.
 - Fix Ed25519ctx, Ed25519ph, Ed448, and Ed448ph when dealing with contexts so the implementation matches IETF RFC 8032.
 - Drop direct usage of 
crypto:hmac/4, thanks to @thalesmg; see #136 - Replace incorrect usage of 
-include_libwith-include, thanks to @Richiban; see #140 - Update the CI jobs so they actually run the Elixir tests, thanks to @moogle19; see #137
 - Change the 
masterbranch tomain. 
 - Version mismatch causing 
 
1.11.3 (2022-08-28) - unreleased
- This version was never actually released, but was referenced for a while on the 
masterbranch (see 43d3db4). 
1.11.2 (2021-08-06)
- Fixes
- Add compatability with OTP 24
 
 
1.11.1 (2020-12-23)
- Fixes
- Fix compatibility with older OTP versions
 - Fix AES detection on OTP 23
 - Fix AES GCM bugs on OTP 23
 
 
1.11.0 (2020-11-24)
- Fixes
- Add compatability layer to fix deprecated 
cryptofunctions. - Use 
:extra_applicationsinstead of:applications(bumps Elixir requirement to~> 1.4). - Conditionally compile 
Poisonmodules used for testing. 
 - Add compatability layer to fix deprecated 
 
1.10.1 (2020-01-08)
- Fixes
- Add PEM/DER compatibility layer for PKCS-8 incompatibilities with various versions of OTP, 
crypto, andpublic_key; see #82 
 - Add PEM/DER compatibility layer for PKCS-8 incompatibilities with various versions of OTP, 
 
1.10.0 (2020-01-03)
Enhancements
- Remove base64url dependency and include embedded version.
 - Add support for 
C20PandXC20Pencryption based on draft-amringer-jose-chacha (ChaCha20/Poly1305 and XChaCha20/Poly1305). - Add support for ECDH-ES keywrapping for AES-GCM, ChaCha20/Poly1305, and XChaCha20/Poly1305.
 - Add support for PBES2 keywrapping for AES-GCM, ChaCha20/Poly1305, and XChaCha20/Poly1305.
 - Add support for 
ECDH-1PUencryption based on draft-madden-jose-ecdh-1pu. - Add support for reading/writing DER format (or PKCS8 format).
 
Fixes
1.9.0 (2018-12-31)
Enhancements
- Add support for Jason JSON encoding and decoding.
 - Add support for Poison 4.x and lexical ordering.
 - Use 
public_keyovercutkeyfor RSA key generation if available. - Drop support for older versions of OTP (19+ now required).
 - Relicense library under MIT license.
 
Fixes
- Add macro so the application compiles without warnings after 
erlang:get_stacktrace/0has been deprecated. - Extra sanity check for RSA padding modes when falling back.
 
- Add macro so the application compiles without warnings after 
 
1.8.4 (2017-05-18)
- Enhancements
- Add support for reading and writing PEM files for Ed25519, Ed448, X25519, and X448 keys based on draft-ietf-curdle-pkix.
 - Add support for ojson adapter for encoding/decoding JSON.
 
 
1.8.3 (2017-03-30)
- Fixes
- Regression fix from 1.8.2 for OTP-17 (thanks to @alexandrejbr, see #35 and #36)
 
 
1.8.2 (2017-03-15)
Enhancements
Fixes
- Fix cross-platform issues with EC signatures (specifically S and R sizes, thanks to @alexandrejbr, see #32)
 - Typo in documentation for 
JOSE.encode/1(thanks to @DaveLampton, see #31) 
Tests
- Tested against OTP 19.3, Elixir 1.4.x, and Poison 3.x
 
1.8.1 (2017-02-02)
- Fixes
- Parentheses to remove ambiguity on Elixir 1.4 #26, thanks @alexandrubagu
 
 
1.8.0 (2016-08-08)
Enhancements
- ChaCha20/Poly1305 encryption and one-time message authentication functions are experimentally supported based on RFC 7539.
 
Fixes
Examples of new functionality:
iex> # Encrypt
iex> jwe = %{"alg" => "dir", "enc" => "ChaCha20/Poly1305"}
iex> jwk = JOSE.JWE.generate_key(jwe) |> JOSE.JWK.to_map |> elem(1)
%{"alg" => "dir", "enc" => "ChaCha20/Poly1305", "k" => "EffEuY2nbShIVtizmek8AuR7ftSuY2e8XRxGjMc8QAc", "kty" => "oct", "use" => "enc"}
iex> plain_text = "message to encrypt"
iex> encrypted = JOSE.JWK.block_encrypt(plain_text, jwk) |> JOSE.JWE.compact |> elem(1)
"eyJhbGciOiJkaXIiLCJlbmMiOiJDaGFDaGEyMC9Qb2x5MTMwNSJ9..lbsERynEgQS8CRXZ.D_kt8ChsaYWX9gL9tJlJ2n0E.y0o_TYjGlaB9sEEcA9o12A"
iex> # Decrypt
iex> plain_text == JOSE.JWK.block_decrypt(encrypted, jwk) |> elem(0)
true
iex> # Sign
iex> jws = %{"alg" => "Poly1305"}
iex> jwk = JOSE.JWS.generate_key(jws) |> JOSE.JWK.to_map |> elem(1)
%{"alg" => "Poly1305", "k" => "2X-OZVLA41Wy7mAjqWRaZyOw8FLyL3O3_f8d16D_-tQ", "kty" => "oct", "use" => "sig"}
iex> message = "message to sign"
iex> signed = JOSE.JWK.sign(message, jwk) |> JOSE.JWS.compact |> elem(1)
"eyJhbGciOiJQb2x5MTMwNSIsIm5vbmNlIjoicGExU1dlQzJVQzhwZlQ1NCJ9.bWVzc2FnZSB0byBzaWdu.IUI-PvN5bh_9jX-MeDtetw"
iex> # Verify
iex> JOSE.JWK.verify_strict(signed, ["Poly1305"], jwk) |> elem(0)
true1.7.9 (2016-07-13)
- Fixes
- Fixed JSON encoding bug in 
jose_json_poison_compat_encoderfor projects using Poison as the JSON encoder where Erlang loads Elixir as a dependency. 
 - Fixed JSON encoding bug in 
 
1.7.8 (2016-07-08)
Enhancements
- Updated EdDSA tests to comply with draft 04 of draft-ietf-jose-cfrg-curves-04.
 
Fixes
- Fixed compression encoding bug for 
{"zip":"DEF"}operations (thanks to @amadden734 see potatosalad/ruby-jose#3) 
- Fixed compression encoding bug for 
 
1.7.7 (2016-06-30)
- Enhancements
- Improved handling of RSA private keys in SMF (Straightforward Method) form to CRT (Chinese Remainder Theorem) form, see #19  This is especially useful for keys produced by Java programs using the 
RSAPrivateKeySpecAPI as mentioned in Section 9.3 of RFC 7517. - Updated EdDSA operations to comply with draft 02 of draft-ietf-jose-cfrg-curves-02.
 
 - Improved handling of RSA private keys in SMF (Straightforward Method) form to CRT (Chinese Remainder Theorem) form, see #19  This is especially useful for keys produced by Java programs using the 
 
Example RSA SMF to CRT usage:
%% The following map of an RSA secret key is in SMF (Straightforward Method) form.
%% Notice that we only have d, e, and n for this secret key.
JWK = jose_jwk:from(#{
  <<"d">> => <<"WSAGFGM7fSyYn5NyBL0dp3kjHjQ3djjhQoOAFasoyeE">>,
  <<"e">> => <<"AQAB">>,
  <<"kty">> => <<"RSA">>,
  <<"n">> => <<"0PM6Aooi_KYkDA1r-S24SauFpfTRc5kiPLF3a1EhuY8">>
}).
%% If we convert it back to a map, it is now in CRT (Chinese Remainder Theorem) form.
%% Notice that the dp, dq, p, q, and qi have been restored.
element(2, jose_jwk:to_map(JWK)) =:= #{
  <<"d">> => <<"WSAGFGM7fSyYn5NyBL0dp3kjHjQ3djjhQoOAFasoyeE">>,
  <<"dp">> => <<"G00J545ym1bqC9hnFDo3aQ">>,
  <<"dq">> => <<"tt0FvEZgKli6IL4rVKx3cw">>,
  <<"e">> => <<"AQAB">>,
  <<"kty">> => <<"RSA">>,
  <<"n">> => <<"0PM6Aooi_KYkDA1r-S24SauFpfTRc5kiPLF3a1EhuY8">>,
  <<"p">> => <<"9O5YQ0w6PIpDl6c6yqwyKQ">>,
  <<"q">> => <<"2mScgy86M3q6b301UAU09w">>,
  <<"qi">> => <<"Wrp0SgcGgTT5WmeuHD6Sqw">>
}.1.7.6 (2016-06-29)
- Fixes
- Compatibility fixes for OTP 19 and Elixir 1.3
 
 
1.7.5 (2016-05-13)
- Fixes
- Removed leftover development file accidentally included in last release.
 
 
1.7.4 (2016-05-13)
Enhancements
- More detailed documentation on key generation.
 
Fixes
1.7.3 (2016-03-17)
- Fixes
JOSE.JWT.encrypt/2now usesJOSE.JWK.block_encryptor/1properly.
 
1.7.2 (2016-03-16)
- Enhancements
- Better support for lists of terms.
 - Added merge functions:
 - Added signer, verifier, and block_encryptor functions:
 - Support for 
"alg","enc", and"use"on keys. 
 
Examples of new functionality:
iex> # Let's generate a 64 byte octet key
iex> jwk = JOSE.JWK.generate_key({:oct, 64}) |> JOSE.JWK.to_map |> elem(1)
%{"k" => "FXSy7PufOayusvfyKQzdxCegm7yWIMp1b0LD13v57Nq2wF_B-fcr7LDOkufDikmFFsVYWLgrA2zEB--_qqDn3g", "kty" => "oct"}
iex> # Based on the key's size and type, a default signer (JWS) can be determined
iex> JOSE.JWK.signer(jwk)
%{"alg" => "HS512"}
iex> # A list of algorithms for which this key type can be verified against can also be determined
iex> JOSE.JWK.verifier(jwk)
["HS256", "HS384", "HS512"]
iex> # Based on the key's size and type, a default enctypro (JWE) can be determined
iex> JOSE.JWK.block_encryptor(jwk)
%{"alg" => "dir", "enc" => "A256CBC-HS512"}
iex> # Keys can be generated based on the signing algorithm (JWS)
iex> JOSE.JWS.generate_key(%{"alg" => "HS256"}) |> JOSE.JWK.to_map |> elem(1)
%{"alg" => "HS256", "k" => "UuP3Tw2xbGV5N3BGh34cJNzzC2R1zU7i4rOnF9A8nqY", "kty" => "oct", "use" => "sig"}
iex> # Keys can be generated based on the encryption algorithm (JWE)
iex> JOSE.JWE.generate_key(%{"alg" => "dir", "enc" => "A128GCM"}) |> JOSE.JWK.to_map |> elem(1)
%{"alg" => "dir", "enc" => "A128GCM", "k" => "8WNdBjXXwg6QTwrrOnvEPw", "kty" => "oct", "use" => "enc"}
iex> # Example of merging a map into an existing JWS (also works with JWE, JWK, and JWT)
iex> jws = JOSE.JWS.from(%{"alg" => "HS256"})
iex> JOSE.JWS.merge(jws, %{"typ" => "JWT"}) |> JOSE.JWS.to_map |> elem(1)
%{"alg" => "HS256", "typ" => "JWT"}1.7.1 (2016-03-08)
- Enhancements
- New Edwards-curve Digital Signature Algorithm (EdDSA) version 04 is out, update test vectors and remove support for 32 byte secrets for Ed448 and Ed448ph.
 
 
1.7.0 (2016-03-01)
Enhancements
- Add support for libdecaf NIF which provides support for;
Ed25519Ed25519phEd448Ed448phX25519X448
 
- Add support for libdecaf NIF which provides support for;
 Fixes
- Return 56 bytes instead of 57 bytes when converting between edwards448 and curve448.
 - EdDSA related refactoring/cleanup.
 
1.6.1 (2016-02-05)
- Enhancements
- Add support for NIF version of keccakf1600 library with 
jose_sha3_keccakf1600_nif(version 2 and up) for even faster SHA-3 operations. 
 - Add support for NIF version of keccakf1600 library with 
 
1.6.0 (2016-01-20)
Enhancements
- Add 
Ed448andEd448phstandards from draft-irtf-cfrg-eddsa. - Add support for keccakf1600 library with 
jose_sha3_keccakf1600for faster SHA-3 operations. - Many, many more tests.
 
- Add 
 Fixes
- Fix pure Erlang implementation of SHA-3 algorithms.
 
1.5.2 (2016-01-19)
Enhancements
- Documentation of the encryption algorithms, specifically 
JOSE.JWE. 
- Documentation of the encryption algorithms, specifically 
 Fixes
- Corrected optional callbacks issue for Elixir.
 - More consistent behavior for ECDH related encryption and decryption.
 
1.5.1 (2016-01-16)
- Fixes
- Corrected formatting on some of the documentation.
 - Fixed optional callbacks for 
jose_jwk_kty:sign/3 
 
1.5.0 (2016-01-16)
- Enhancements
 
1.4.2 (2015-11-30)
Enhancements
- Support PKCS#8 formatted private key PEM files. See #13
 
Fixes
- Add missing guards in 
jose_jws:sign/4#11 - Add missing guards in 
jose_jwe:block_encrypt/5 
- Add missing guards in 
 
1.4.1 (2015-11-18)
Enhancements
- Added 
JOSE.JWS.peek_signature/1for inspecting the signature parts of a signed binary. JOSE.JWS.compact/1andJOSE.JWS.expand/1now work with signed lists.- First pass at documenting all of the major 
JOSEmodules.JOSE.JWEstill needs more examples. Closes #7 
- Added 
 Fixes
- Fix infinite loop on 
JOSE.JWE.key_decrypt/3when no"enc"has been specified. - Fix various functions on 
JOSE.JWEthat would fail due toJOSE.JWE.from_record/1on wrong terms. 
- Fix infinite loop on 
 
1.4.0 (2015-11-17)
- Enhancements
- Added 
JOSE.unsecured_signing/0andJOSE.unsecured_signing/1for disabling the"none"algorithm due to the unsecured signing vulnerability and in relation to #10 - Added 
JOSE.JWK.verify_strict/3,JOSE.JWS.verify_strict/3, andJOSE.JWT.verify_strict/3for whitelisting which signing algorithms are allowed for verification. - Added 
JOSE.JWT.peek_payload/1andJOSE.JWT.peek_protected/1for inspecting the payload and protected parts of a signature. 
 - Added 
 
1.3.0 (2015-09-22)
Enhancements
octkey management (seeJOSE.JWK.from_oct/1,2)- Key generation functions for 
EC,RSA, andoctkeys (seeJOSE.JWK.generate_key/1) - Add 
JOSE.JWK.box_encrypt/2which generates an ephemeral private key based on the given key curve. - Add support for detecting OTP version 18 and up with optional_callbacks.
 - Document key generation under 
examples/KEY-GENERATION.md - jiffy and jsone JSON support
 - Begin documenting the Elixir API (thanks to #8)
 - Add support for 
jose_jws:peek/1andjose_jwt:peek/1 - Preparations for future upstream OTP crypto changes.
- Improved detection of AES CBC, ECB, and GCM support.
 - Improved detection of RSAES-OAEP, RSAES-PKCS1-v1_5, RSASSA-PKCS1-v1_5, and RSASSA-PSS support.
 - Implemented fallback RSAES-PKCS1-v1_5 and RSASSA-PKCS1-v1_5 algorithms.
 - Improved selection of encryptor for oct keys.
 - Improved algorithm support detection for jose_jwa.
 
 
Fixes
- Remove "sph" from jose_jws (removed from JWS Unencoded Payload Option).
 
Tests
- Only run 1 in 10 for AES GCM and 1 in 5 for AES KW CAVP test vectors to speed up tests.
 - Additional tests for RSAES-PKCS1-v1_5 and RSASSA-PKCS1-v1_5 algorithms.
 
1.2.0 (2015-08-14)
Enhancements
- Add RSA PKCS-1 algorithms to support detection.
 - Add support for 
crypto_fallbackoption to enable/disable non-native cryptographic algorithms. - Add support for 
json_moduleoption for encoding/decoding of JSON. 
Fixes
- Fix AES GCM algorithm for non 96-bit IV values.
 - Allow RSA OAEP to specify Seed on encrypt.
 
Tests
- NIST and EMC test vectors for AES, PKCS-1, and PKCS-5.
 - Concat KDF, PBKDF1, and PKCS-7 Padding informal verification.
 - AES Key Wrap informal verification with NIST test vectors.
 
1.1.3 (2015-08-10)
- Fixes
- Missed a case where jose was not starting automatically (see 1.1.2).
 
 
1.1.2 (2015-08-10)
- Enhancements
- Automatically start jose if one of the fallback algorithms is required.
 
 
1.1.1 (2015-08-07)
- Fixes
- Fix bit sizes for A128CBC-HS256, A192CBC-HS384, and A256CBC-HS512 algorithms.
 - Don't precompute the GHASH table (speeds up AES GCM fallback on OTP 17).
 - Use case statement instead of map pattern matching for block_decrypt (fixes map pattern matching bug on OTP 17).
 - Allow mostly empty EC keys to be converted back to JSON.
 - Add jose_jwk_props property test for full algorithm range of encryption and decryption.
 
 
1.1.0 (2015-08-06)
Enhancements
- Detect supported 
cryptoAES ciphers and use fallbacks when necessary. - Detect EC key mode (to support OTP 17.5).
 - Mostly pure Erlang implementation of AES GCM and GHASH functions.
 - Add 
JOSE.JWAmodule for Elixir. 
- Detect supported 
 Fixes
- All tests now pass on OTP 17.5 and OTP 18.
 - Fallback to non-native crypto implementations for OTP 17.5.
 
1.0.1 (2015-08-05)
- Dependencies
- Use 
base64urlpackage from hex.pm 
 - Use 
 
1.0.0 (2015-08-05)
Initial Release
Algorithm Support
- JSON Web Encryption (JWE) RFC 7516
"alg"RFC 7518 Section 4RSA1_5RSA-OAEPRSA-OAEP-256A128KWA192KWA256KWdirECDH-ESECDH-ES+A128KWECDH-ES+A192KWECDH-ES+A256KWA128GCMKWA192GCMKWA256GCMKWPBES2-HS256+A128KWPBES2-HS384+A192KWPBES2-HS512+A256KW
"enc"RFC 7518 Section 5A128CBC-HS256A192CBC-HS384A256CBC-HS512A128GCMA192GCMA256GCM
"zip"RFC 7518 Section 7.3DEF
 - JSON Web Key (JWK) RFC 7517
"alg"RFC 7518 Section 6ECRSAoct
 - JSON Web Signature (JWS) RFC 7515
"alg"RFC 7518 Section 3HS256HS384HS512RS256RS384RS512ES256ES384ES512PS256PS384PS512none
 
- JSON Web Encryption (JWE) RFC 7516