Module 
Package org.xnio.sasl

Class SaslUtils

java.lang.Object
org.xnio.sasl.SaslUtils

public final class SaslUtils extends Object
Utility methods for handling SASL authentication using NIO-style programming methods.
Author:
David M. Lloyd
  • Field Details

    • EMPTY_BYTES

      public static final byte[] EMPTY_BYTES
      A zero-length byte array, useful for sending and receiving empty SASL messages.
  • Method Details

    • getSaslServerFactories

      public static Iterator<SaslServerFactory> getSaslServerFactories(ClassLoader classLoader, boolean includeGlobal)
      Returns an iterator of all of the registered SaslServerFactorys where the order is based on the order of the Provider registration and/or class path order. Class path providers are listed before global providers; in the event of a name conflict, the class path provider is preferred.
      Parameters:
      classLoader - the class loader to use
      includeGlobal - true to include globally registered providers, false to exclude them
      Returns:
      the Iterator of SaslServerFactorys
    • getSaslServerFactories

      public static Iterator<SaslServerFactory> getSaslServerFactories()
      Returns an iterator of all of the registered SaslServerFactorys where the order is based on the order of the Provider registration and/or class path order.
      Returns:
      the Iterator of SaslServerFactorys
    • getSaslClientFactories

      public static Iterator<SaslClientFactory> getSaslClientFactories(ClassLoader classLoader, boolean includeGlobal)
      Returns an iterator of all of the registered SaslClientFactorys where the order is based on the order of the Provider registration and/or class path order. Class path providers are listed before global providers; in the event of a name conflict, the class path provider is preferred.
      Parameters:
      classLoader - the class loader to use
      includeGlobal - true to include globally registered providers, false to exclude them
      Returns:
      the Iterator of SaslClientFactorys
    • getSaslClientFactories

      public static Iterator<SaslClientFactory> getSaslClientFactories()
      Returns an iterator of all of the registered SaslClientFactorys where the order is based on the order of the Provider registration and/or class path order.
      Returns:
      the Iterator of SaslClientFactorys
    • evaluateChallenge

      public static boolean evaluateChallenge(SaslClient client, ByteBuffer destination, ByteBuffer source) throws SaslException
      Evaluate a sasl challenge. If the result is false then the negotiation is not yet complete and the data written into the destination buffer needs to be sent to the server as a response. If the result is true then negotiation was successful and no response needs to be sent to the server.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message. The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      client - the SASL client to use to evaluate the challenge message
      destination - the destination buffer into which the response message should be written, if any
      source - the source buffer from which the challenge message should be read
      Returns:
      true if negotiation is complete and successful, false otherwise
      Throws:
      SaslException - if negotiation failed or another error occurred
    • evaluateChallenge

      public static byte[] evaluateChallenge(SaslClient client, ByteBuffer source) throws SaslException
      Evaluate a sasl challenge. If the result is non-null then the negotiation is not yet complete and the data returned needs to be sent to the server as a response. If the result is null then negotiation was successful and no response needs to be sent to the server.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message. The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      client - the SASL client to use to evaluate the challenge message
      source - the source buffer from which the challenge message should be read
      Returns:
      null if negotiation is complete and successful, or the response otherwise
      Throws:
      SaslException - if negotiation failed or another error occurred
    • evaluateResponse

      public static boolean evaluateResponse(SaslServer server, ByteBuffer destination, ByteBuffer source) throws SaslException
      Evaluate a sasl response. If the result is false then the negotiation is not yet complete and the data written into the destination buffer needs to be sent to the server as a response. If the result is true then negotiation was successful and no response needs to be sent to the client (other than a successful completion message, depending on the protocol).

      The source buffer should have its position and remaining length set to encompass exactly one SASL message. The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      server - the SASL server to use to evaluate the response message
      destination - the destination buffer into which the response message should be written, if any
      source - the source buffer from which the response message should be read
      Returns:
      true if negotiation is complete and successful, false otherwise
      Throws:
      SaslException - if negotiation failed or another error occurred
    • evaluateResponse

      public static byte[] evaluateResponse(SaslServer server, ByteBuffer source) throws SaslException
      Evaluate a sasl response. If the result is non-null then the negotiation is not yet complete and the data returned needs to be sent to the server as a response. If the result is null then negotiation was successful and no response needs to be sent to the client (other than a successful completion message, depending on the protocol).

      The source buffer should have its position and remaining length set to encompass exactly one SASL message. The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      server - the SASL server to use to evaluate the response message
      source - the source buffer from which the response message should be read
      Returns:
      true if negotiation is complete and successful, false otherwise
      Throws:
      SaslException - if negotiation failed or another error occurred
    • wrap

      public static void wrap(SaslClient client, ByteBuffer destination, ByteBuffer source) throws SaslException
      Wrap a message. Wrapping occurs from the source buffer to the destination idea.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message (without the length field). The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      client - the SASL client to wrap with
      destination - the buffer into which bytes should be written
      source - the buffers from which bytes should be read
      Throws:
      SaslException - if a SASL error occurs
      See Also:
    • wrap

      public static byte[] wrap(SaslClient client, ByteBuffer source) throws SaslException
      Wrap a message. Wrapping occurs from the source buffer to the destination idea.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message (without the length field). The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      client - the SASL client to wrap with
      source - the buffers from which bytes should be read
      Returns:
      the wrap result
      Throws:
      SaslException - if a SASL error occurs
      See Also:
    • wrap

      public static void wrap(SaslServer server, ByteBuffer destination, ByteBuffer source) throws SaslException
      Wrap a message. Wrapping occurs from the source buffer to the destination idea.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message (without the length field). The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      server - the SASL server to wrap with
      destination - the buffer into which bytes should be written
      source - the buffers from which bytes should be read
      Throws:
      SaslException - if a SASL error occurs
      See Also:
    • wrap

      public static byte[] wrap(SaslServer server, ByteBuffer source) throws SaslException
      Wrap a message. Wrapping occurs from the source buffer to the destination idea.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message (without the length field). The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      server - the SASL server to wrap with
      source - the buffers from which bytes should be read
      Returns:
      the wrap result
      Throws:
      SaslException - if a SASL error occurs
      See Also:
    • unwrap

      public static void unwrap(SaslClient client, ByteBuffer destination, ByteBuffer source) throws SaslException
      Unwrap a message. Unwrapping occurs from the source buffer to the destination idea.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message (without the length field). The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      client - the SASL client to unwrap with
      destination - the buffer into which bytes should be written
      source - the buffers from which bytes should be read
      Throws:
      SaslException - if a SASL error occurs
      See Also:
    • unwrap

      public static byte[] unwrap(SaslClient client, ByteBuffer source) throws SaslException
      Unwrap a message. Unwrapping occurs from the source buffer to the destination idea.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message (without the length field). The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      client - the SASL client to unwrap with
      source - the buffers from which bytes should be read
      Returns:
      the wrap result
      Throws:
      SaslException - if a SASL error occurs
      See Also:
    • unwrap

      public static void unwrap(SaslServer server, ByteBuffer destination, ByteBuffer source) throws SaslException
      Unwrap a message. Unwrapping occurs from the source buffer to the destination idea.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message (without the length field). The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      server - the SASL server to unwrap with
      destination - the buffer into which bytes should be written
      source - the buffers from which bytes should be read
      Throws:
      SaslException - if a SASL error occurs
      See Also:
    • unwrap

      public static byte[] unwrap(SaslServer server, ByteBuffer source) throws SaslException
      Unwrap a message. Unwrapping occurs from the source buffer to the destination idea.

      The source buffer should have its position and remaining length set to encompass exactly one SASL message (without the length field). The SASL message itself does not encode any length information so it is up to the protocol implementer to ensure that the message is properly framed.

      Parameters:
      server - the SASL server to unwrap with
      source - the buffers from which bytes should be read
      Returns:
      the wrap result
      Throws:
      SaslException - if a SASL error occurs
      See Also:
    • createPropertyMap

      public static Map<String,Object> createPropertyMap(OptionMap optionMap, boolean secure)
      Create a SASL property map from an XNIO option map.
      Parameters:
      optionMap - the option map
      secure - true if the channel is secure, false otherwise
      Returns:
      the property map