Skip to content

4.0.0

Compare
Choose a tag to compare
@ssg ssg released this 10 Nov 23:03
· 31 commits to main since this release

Breaking changes

  • This version is built with .NET 6 SDK.
  • Benchmark now uses BenchmarkDotNet.
  • Changed interface names from Encoder to Coder to signify encoding and
    decoding functionality better.
  • Removed obsolete methods.
  • Simple (aka allocating) versions of Decode() will now return byte[]'s instead of Span<byte>'s for correct
    ownership semantics. It's even possible that some copying may be avoided in certain scenarios.
  • Base16.TryDecode() doesn't throw on invalid input, but returns false instead.
  • Base32.Decode() throws separate exceptions for encountered failures.

New features

  • Added Bech32 flavor to Base32
  • Added RFC 1924 (IPv6) flavor to Base85 along with
    EncodeIpv6 and DecodeIpv6 functions https://tools.ietf.org/html/rfc1924
  • Added Base58.Bitcoin.EncodeCheck() and Base58.Bitcoin.TryDecodeCheck() methods.
  • Added Base58.Bitcoin.EncodeCb58() and Base58.Bitcoin.TryDecodeCb58() methods.

Improvements

  • Added more buffer overflow detection to Base32 coder
  • Removed all unsafe code. New Span-based optimizations make the code come close to unsafe perf.
  • Removed slow and hard to read optimizations like bit shift operations for multiplication and division
    where compiler almost always does a better job of optimizing.

Fixes

  • Fixed output buffer was too small error for certain Base58 cases.
  • Avoid redundant memory copy operations