cargo : base64 @ 0.22.1
RELEASE-NOTES.md
272 lines · markdown
# 0.22.1- Correct the symbols used for the predefined `alphabet::BIN_HEX`.# 0.22.0- `DecodeSliceError::OutputSliceTooSmall` is now conservative rather than precise. That is, the error will only occur if the decoded output _cannot_ fit, meaning that `Engine::decode_slice` can now be used with exactly-sized output slices. As part of this, `Engine::internal_decode` now returns `DecodeSliceError` instead of `DecodeError`, but that is not expected to affect any external callers.- `DecodeError::InvalidLength` now refers specifically to the _number of valid symbols_ being invalid (i.e. `len % 4 == 1`), rather than just the number of input bytes. This avoids confusing scenarios when based on interpretation you could make a case for either `InvalidLength` or `InvalidByte` being appropriate.- Decoding is somewhat faster (5-10%)# 0.21.7- Support getting an alphabet's contents as a str via `Alphabet::as_str()`# 0.21.6- Improved introductory documentation and example# 0.21.5- Add `Debug` and `Clone` impls for the general purpose Engine# 0.21.4- Make `encoded_len` `const`, allowing the creation of arrays sized to encode compile-time-known data lengths# 0.21.3- Implement `source` instead of `cause` on Error types- Roll back MSRV to 1.48.0 so Debian can continue to live in a time warp- Slightly faster chunked encoding for short inputs- Decrease binary size# 0.21.2- Rollback MSRV to 1.57.0 -- only dev dependencies need 1.60, not the main code# 0.21.1- Remove the possibility of panicking during decoded length calculations- `DecoderReader` no longer sometimes erroneously ignores padding [#226](https://github.com/marshallpierce/rust-base64/issues/226)## Breaking changes- `Engine.internal_decode` return type changed- Update MSRV to 1.60.0# 0.21.0## Migration### Functions| < 0.20 function | 0.21 equivalent ||-------------------------|-------------------------------------------------------------------------------------|| `encode()` | `engine::general_purpose::STANDARD.encode()` or `prelude::BASE64_STANDARD.encode()` || `encode_config()` | `engine.encode()` || `encode_config_buf()` | `engine.encode_string()` || `encode_config_slice()` | `engine.encode_slice()` || `decode()` | `engine::general_purpose::STANDARD.decode()` or `prelude::BASE64_STANDARD.decode()` || `decode_config()` | `engine.decode()` || `decode_config_buf()` | `engine.decode_vec()` || `decode_config_slice()` | `engine.decode_slice()` |The short-lived 0.20 functions were the 0.13 functions with `config` replaced with `engine`.### PaddingIf applicable, use the preset engines `engine::STANDARD`, `engine::STANDARD_NO_PAD`, `engine::URL_SAFE`,or `engine::URL_SAFE_NO_PAD`.The `NO_PAD` ones require that padding is absent when decoding, and the others require thatcanonical padding is present .If you need the < 0.20 behavior that did not care about padding, or want to recreate < 0.20.0's predefined `Config`sprecisely, see the following table.| 0.13.1 Config | 0.20.0+ alphabet | `encode_padding` | `decode_padding_mode` ||-----------------|------------------|------------------|-----------------------|| STANDARD | STANDARD | true | Indifferent || STANDARD_NO_PAD | STANDARD | false | Indifferent || URL_SAFE | URL_SAFE | true | Indifferent || URL_SAFE_NO_PAD | URL_SAFE | false | Indifferent |# 0.21.0-rc.1- Restore the ability to decode into a slice of precisely the correct length with `Engine.decode_slice_unchecked`.- Add `Engine` as a `pub use` in `prelude`.# 0.21.0-beta.2## Breaking changes- Re-exports of preconfigured engines in `engine` are removed in favor of `base64::prelude::...` that are better suited to those who wish to `use` the entire path to a name.# 0.21.0-beta.1## Breaking changes- `FastPortable` was only meant to be an interim name, and shouldn't have shipped in 0.20. It is now `GeneralPurpose` to make its intended usage more clear.- `GeneralPurpose` and its config are now `pub use`'d in the `engine` module for convenience.- Change a few `from()` functions to be `new()`. `from()` causes confusing compiler errors because of confusion with `From::from`, and is a little misleading because some of those invocations are not very cheap as one would usually expect from a `from` call.- `encode*` and `decode*` top level functions are now methods on `Engine`.- `DEFAULT_ENGINE` was replaced by `engine::general_purpose::STANDARD`- Predefined engine consts `engine::general_purpose::{STANDARD, STANDARD_NO_PAD, URL_SAFE, URL_SAFE_NO_PAD}` - These are `pub use`d into `engine` as well- The `*_slice` decode/encode functions now return an error instead of panicking when the output slice is too small - As part of this, there isn't now a public way to decode into a slice _exactly_ the size needed for inputs that aren't multiples of 4 tokens. If adding up to 2 bytes to always be a multiple of 3 bytes for the decode buffer is a problem, file an issue.## Other changes- `decoded_len_estimate()` is provided to make it easy to size decode buffers correctly.# 0.20.0## Breaking changes- Update MSRV to 1.57.0- Decoding can now either ignore padding, require correct padding, or require no padding. The default is to require correct padding. - The `NO_PAD` config now requires that padding be absent when decoding.## 0.20.0-alpha.1### Breaking changes- Extended the `Config` concept into the `Engine` abstraction, allowing the user to pick different encoding / decoding implementations. - What was formerly the only algorithm is now the `FastPortable` engine, so named because it's portable (works on any CPU) and relatively fast. - This opens the door to a portable constant-time implementation ([#153](https://github.com/marshallpierce/rust-base64/pull/153), presumably `ConstantTimePortable`?) for security-sensitive applications that need side-channel resistance, and CPU-specific SIMD implementations for more speed. - Standard base64 per the RFC is available via `DEFAULT_ENGINE`. To use different alphabets or other settings ( padding, etc), create your own engine instance.- `CharacterSet` is now `Alphabet` (per the RFC), and allows creating custom alphabets. The corresponding tables that were previously code-generated are now built dynamically.- Since there are already multiple breaking changes, various functions are renamed to be more consistent and discoverable.- MSRV is now 1.47.0 to allow various things to use `const fn`.- `DecoderReader` now owns its inner reader, and can expose it via `into_inner()`. For symmetry, `EncoderWriter` can do the same with its writer.- `encoded_len` is now public so you can size encode buffers precisely.# 0.13.1- More precise decode buffer sizing, avoiding unnecessary allocation in `decode_config`.# 0.13.0- Config methods are const- Added `EncoderStringWriter` to allow encoding directly to a String- `EncoderWriter` now owns its delegate writer rather than keeping a reference to it (though refs still work) - As a consequence, it is now possible to extract the delegate writer from an `EncoderWriter` via `finish()`, which returns `Result<W>` instead of `Result<()>`. If you were calling `finish()` explicitly, you will now need to use `let _ = foo.finish()` instead of just `foo.finish()` to avoid a warning about the unused value.- When decoding input that has both an invalid length and an invalid symbol as the last byte, `InvalidByte` will be emitted instead of `InvalidLength` to make the problem more obvious.# 0.12.2- Add `BinHex` alphabet# 0.12.1- Add `Bcrypt` alphabet# 0.12.0- A `Read` implementation (`DecoderReader`) to let users transparently decoded data from a b64 input source- IMAP's modified b64 alphabet- Relaxed type restrictions to just `AsRef<[ut8]>` for main `encode*`/`decode*` functions- A minor performance improvement in encoding# 0.11.0- Minimum rust version 1.34.0- `no_std` is now supported via the two new features `alloc` and `std`.# 0.10.1- Minimum rust version 1.27.2- Fix bug in streaming encoding ([#90](https://github.com/marshallpierce/rust-base64/pull/90)): if the underlying writer didn't write all the bytes given to it, the remaining bytes would not be retried later. See the docs on `EncoderWriter::write`.- Make it configurable whether or not to return an error when decoding detects excess trailing bits.# 0.10.0- Remove line wrapping. Line wrapping was never a great conceptual fit in this library, and other features (streaming encoding, etc) either couldn't support it or could support only special cases of it with a great increase in complexity. Line wrapping has been pulled out into a [line-wrap](https://crates.io/crates/line-wrap) crate, so it's still available if you need it. - `Base64Display` creation no longer uses a `Result` because it can't fail, which means its helper methods for common configs that `unwrap()` for you are no longer needed- Add a streaming encoder `Write` impl to transparently base64 as you write.- Remove the remaining `unsafe` code.- Remove whitespace stripping to simplify `no_std` support. No out of the box configs use it, and it's trivial to do yourself if needed: `filter(|b| !b" \n\t\r\x0b\x0c".contains(b)`.- Detect invalid trailing symbols when decoding and return an error rather than silently ignoring them.# 0.9.3- Update safemem# 0.9.2- Derive `Clone` for `DecodeError`.# 0.9.1- Add support for `crypt(3)`'s base64 variant.# 0.9.0- `decode_config_slice` function for no-allocation decoding, analogous to `encode_config_slice`- Decode performance optimization# 0.8.0- `encode_config_slice` function for no-allocation encoding# 0.7.0- `STANDARD_NO_PAD` config- `Base64Display` heap-free wrapper for use in format strings, etc# 0.6.0- Decode performance improvements- Use `unsafe` in fewer places- Added fuzzers# 0.5.2- Avoid usize overflow when calculating length- Better line wrapping performance# 0.5.1- Temporarily disable line wrapping- Add Apache 2.0 license# 0.5.0- MIME support, including configurable line endings and line wrapping- Removed `decode_ws`- Renamed `Base64Error` to `DecodeError`# 0.4.1- Allow decoding a `AsRef<[u8]>` instead of just a `&str`# 0.4.0- Configurable padding- Encode performance improvements# 0.3.0- Added encode/decode functions that do not allocate their own storage- Decode performance improvements- Extraneous padding bytes are no longer ignored. Now, an error will be returned.