Class Base58

  • All Implemented Interfaces:
    BinaryDecoder, BinaryEncoder, Decoder, Encoder

    public class Base58
    extends BaseNCodec
    Provides Base58 encoding and decoding as commonly used in cryptocurrency and blockchain applications.

    Base58 is a binary-to-text encoding scheme that uses a 58-character alphabet to encode data. It avoids characters that can be confused (0/O, I/l, +/) and is commonly used in Bitcoin and other blockchain systems.

    Encoding and decoding produce results when EOF is signaled.

    Decoding rejects input longer than a configurable maximum (DEFAULT_MAX_DECODE_LENGTH encoded bytes by default, see Base58.Builder.setMaxDecodeLength(int)). Encoding rejects binary input longer than DEFAULT_MAX_ENCODE_LENGTH bytes by default; configure it with Base58.Builder.setMaxEncodeLength(int). These limits apply to the total input across all chunks in an operation. Memory usage is proportional to the accumulated input and conversion output. Encoded output can exceed the decode limit; configure both limits appropriately for larger trusted values.

    This class is thread-safe for read operations but the Context object used during encoding/decoding should not be shared between threads.

    The Base58 alphabet is:

     123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
     

    This excludes: 0, I, O, and l.

    Since:
    1.22.0
    See Also:
    Base58InputStream, Base58OutputStream, The Base58 Encoding Scheme draft-msporny-base58-03
    • Constructor Detail

      • Base58

        public Base58()
        Constructs a Base58 codec used for encoding and decoding.
      • Base58

        public Base58​(Base58.Builder builder)
        Constructs a Base58 codec used for encoding and decoding with custom configuration.
        Parameters:
        builder - The builder with custom configuration.
    • Method Detail

      • builder

        public static Base58.Builder builder()
        Creates a new Builder.

        To configure a new instance, use a Base58.Builder. For example:

         Base58 base58 = Base58.builder()
           .setMaxEncodeLength(4096)
           .get()
         
        Returns:
        A new Builder.
      • getEncodedLength

        public long getEncodedLength​(byte[] array)
        Gets the number of Base58 characters needed to encode the supplied array.

        The length depends on the input bytes, including leading zeros. This method observes the configured maximum encode length.

        Overrides:
        getEncodedLength in class BaseNCodec
        Parameters:
        array - The binary input to encode.
        Returns:
        The number of Base58 characters that encoding the array produces.
        Throws:
        java.lang.IllegalArgumentException - Thrown if the input exceeds the configured maximum encode length.
        Since:
        1.23.0
      • isInAlphabet

        protected boolean isInAlphabet​(byte value)
        Tests whether the octet is in the Base58 alphabet.
        Specified by:
        isInAlphabet in class BaseNCodec
        Parameters:
        value - The value to test.
        Returns:
        true if the value is defined in the Base58 alphabet false otherwise.