Changelog for base64-1.0
Revision history for base64
1.0.0.0
New epoch time! lots of changes to the API. Please see MIGRATION.md for more info:
- Add support for GHC 9.x
- Bumped bounds to more modern dependency set
- Introduced
Base64newtype, located inData.Base64.Types, as well as ADT for associated alphabets. - Signature for
encodeBase64has changed so that it produces aBase64wrapped value. decodeBase64and its URLsafe variants now consume a value of typeBase64and produces a decoded value of the underlying type.- The old
decodeBase64and its URLsafe variants is now renamed todecodeBase64Untyped*. - Fix for 32-bit systems in which memory barriers were not respected in the encoe loop (see: #56)
- Optimize encode and decode loops to achieve significant speedup across the board.
Thanks to everyone who contributed (especially @sofia-m-a!).
0.4.2.4
- Support for GHC 9.2.x
- Remove dependency on
ghc-byteorder - Bump base lower bound to GHC 8.10.x to make sure endianness is properly support (see: https://gitlab.haskell.org/ghc/ghc/-/issues/20338)
- Bump upper bound for
deepseq
0.4.2.3
- Tighter length calculations in unpadded base64url #35
0.4.2.2
- Add
NFData,Exception, andGenericinstances forBase64Error+@sinceannotations for new instances. (#28) - Doc improvements and add
-XTrustwortyand-XSafeannotations where needed. (#27) - Improve URL canonicity validation and correctness checking (now supports correct checking for unpadded Base64url) (#26)
- Fixed perf regressions in decode
- Test coverage is at 98%
0.4.2.1
-
Security fix: reject non-canonical base64 encoded values - (#25)
-
Perf improvements
0.4.2
- Added support for
Data.ByteString.Short,Data.ByteString.Lazy,Data.Text.Short, andData.Text.Lazy. (#17) - Optimize decode algorithm (now beats
base64-bytestringin every category!) - (#13) - Use
decodeLatin1when decoding to text, so that functions are total - (#13) - Added
decodeWith*variants and aBase64Errortype to handle decoding errors when decoding base64 values - (#13) - Improved error reporting: all offsets are now precisely accurate. - (#13)
- Validations added to head, rejecting invalid corner cases (such as bytestrings of length
l == 1 mod 4, which are never correct) - (#16) - Added
decodeBase64Paddedfor symmetry - (#13)
0.4.1 -- 2020-02-04
- Optimize loops for 32-bit and 64-bit architectures
- Restructure project to be more amenable to swapping head/tail/loops
- Fix module header alignment
0.4.0 -- 2020-01-26
-
With this major version release, we remove the redundant
encodeBase64UnpaddedanddecodeBase64Unpaddedfunctions fromBase64.hs. This is for two reasons:- There is no reason for them to exist, since all std base64 is expected to be padded (in contrast to base64url)
- it was literally redundant with
decodeBase64.
-
Use a specialized
Booltype to give better visual cues regarding which functions add padding
0.3.1.1 -- 2020-01-15
- Make sure benchmark code builds
0.3.1.0 -- 2020-01-08
- Bug fix for
isBase64andisBase64Url- wrong alphabet was used - Added
isValidBase64andisValidBase64Urlfor alphabet conformity. TheisBase64*functions now tell if it's correct base64 now in the sense that it's decodable and valid. - Dropped Cabal version to 2.0 for backcompat with Stack
- Better documentation
0.3.0.0 -- 2020-01-07
- After a discussion with lexilambda, we're making 'encodeBase64' be
ByteString -> Textby default, offeringByteString -> ByteStringas a secondary format. - Add
decodeBase64Lenientto the API for phadej - Fix unpadded decoding bug where garbage was appended to the end of garbage inputs. A cleaner way to do this is to simply encode as Base64 with padding and then strip padding chars until I come up with a workflow specific to unpadded inputs (I used to have this, so I'll have to dig it up)
- Added
isBase64andisBase64Urlto the API - Performance is stable
0.2.0.0 -- 2020-01-05
- After a discussion with phadej, we're doing away with the flags, and splitting the optics out into their own separate library
- Removed unnecessary inline pragmas
0.1.0.0 -- 2020-01-05
- Do away with the typeclasses, and just provide prisms + synonyms
- Continued performance improvements to decoding
- Corrected benchmarks
0.0.1.0 -- 2020-01-03
- First version. Released on an unsuspecting world.
- Preliminary release