Class Base32Support

java.lang.Object
net.shibboleth.shared.codec.Base32Support

public final class Base32Support extends Object
Helper class for working with Base32.

This helper class specifically addresses that waste of the Apache Codec encode/decode static methods creating new instances of the Base32 for every operation. It also provides the helper method to produce both chunked and unchunked encoded content as strings.

Most importantly this insulates calling code so we can swap in a different Base32 implementation, as commons-codec and many if not most others have a very inconvenient stance on whitespace, which is absolutely necessary to ignore, so changes to the implementation are likely to continue.

As of 9.3, a new system property has been introduced (SANITIZE_WHITESPACE_PROPERTY_NAME) to enable compatibility with newer commons-codec versions being used under this library at the cost of a whitespace removal scan. We do not support use of the library with that version, but the property provides a workaround for that case without incurring additional overhead for the project's own use. A future major update may obviate the need for that workaround.

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final boolean
    Chunk the encoded data into 76-character lines broken by CRLF characters.
    private static final org.apache.commons.codec.binary.Base32
    Encoder used to produce chunked output.
    static final boolean
    Triggers whitespace sanitization of input when decoding, per JSSH-84.
    static final String
    System property name to enable whitespace sanitization on decode for commons-codec 1.23 compatibility.
    static final boolean
    Do not chunk encoded data.
    private static final org.apache.commons.codec.binary.Base32
    Encoder used to produce unchunked output.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    private
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    static byte[]
    decode(String data)
    Decodes (un)chunked Base32 encoded data.
    static String
    encode(byte[] data, boolean chunked)
    Base32 encodes the given binary data.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • SANITIZE_WHITESPACE_PROPERTY_NAME

      @Nonnull @NotEmpty public static final String SANITIZE_WHITESPACE_PROPERTY_NAME
      System property name to enable whitespace sanitization on decode for commons-codec 1.23 compatibility.
      See Also:
    • CHUNKED

      public static final boolean CHUNKED
      Chunk the encoded data into 76-character lines broken by CRLF characters.
      See Also:
    • UNCHUNKED

      public static final boolean UNCHUNKED
      Do not chunk encoded data.
      See Also:
    • sanitize

      public static final boolean sanitize
      Triggers whitespace sanitization of input when decoding, per JSSH-84.
    • CHUNKED_ENCODER

      @Nonnull private static final org.apache.commons.codec.binary.Base32 CHUNKED_ENCODER
      Encoder used to produce chunked output.
    • UNCHUNKED_ENCODER

      @Nonnull private static final org.apache.commons.codec.binary.Base32 UNCHUNKED_ENCODER
      Encoder used to produce unchunked output.
  • Constructor Details

    • Base32Support

      private Base32Support()
      Constructor.
  • Method Details

    • encode

      @Nonnull public static String encode(@Nonnull byte[] data, boolean chunked) throws EncodingException
      Base32 encodes the given binary data.
      Parameters:
      data - data to encode
      chunked - whether the encoded data should be chunked or not
      Returns:
      the base32 encoded data
      Throws:
      EncodingException - when any Exception is thrown from the underlying encoder, or the output is null.
    • decode

      @Nonnull public static byte[] decode(@Nonnull String data) throws DecodingException
      Decodes (un)chunked Base32 encoded data.
      Parameters:
      data - Base32 encoded data
      Returns:
      the decoded data
      Throws:
      DecodingException - when an Exception is thrown from the underlying decoder, or the output is null.