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 Summary

Fields
Modifier and Type
Field
Description
`static final byte[]`
`EMPTY_BYTES`
A zero-length byte array, useful for sending and receiving empty SASL messages.

## Method Summary

Modifier and Type
Method
Description
`static Map<String,Object>`
`createPropertyMap(OptionMap optionMap, boolean secure)`
Create a SASL property map from an XNIO option map.
`static byte[]`
`evaluateChallenge(SaslClient client, ByteBuffer source)`
Evaluate a sasl challenge.
`static boolean`
`evaluateChallenge(SaslClient client, ByteBuffer destination, ByteBuffer source)`
Evaluate a sasl challenge.
`static byte[]`
`evaluateResponse(SaslServer server, ByteBuffer source)`
Evaluate a sasl response.
`static boolean`
`evaluateResponse(SaslServer server, ByteBuffer destination, ByteBuffer source)`
Evaluate a sasl response.
`static Iterator<SaslClientFactory>`
`getSaslClientFactories()`
Returns an iterator of all of the registered `SaslClientFactory`s where the order is based on the order of the Provider registration and/or class path order.
`static Iterator<SaslClientFactory>`
`getSaslClientFactories(ClassLoader classLoader, boolean includeGlobal)`
Returns an iterator of all of the registered `SaslClientFactory`s where the order is based on the order of the Provider registration and/or class path order.
`static Iterator<SaslServerFactory>`
`getSaslServerFactories()`
Returns an iterator of all of the registered `SaslServerFactory`s where the order is based on the order of the Provider registration and/or class path order.
`static Iterator<SaslServerFactory>`
`getSaslServerFactories(ClassLoader classLoader, boolean includeGlobal)`
Returns an iterator of all of the registered `SaslServerFactory`s where the order is based on the order of the Provider registration and/or class path order.
`static byte[]`
`unwrap(SaslClient client, ByteBuffer source)`
Unwrap a message.
`static void`
`unwrap(SaslClient client, ByteBuffer destination, ByteBuffer source)`
Unwrap a message.
`static byte[]`
`unwrap(SaslServer server, ByteBuffer source)`
Unwrap a message.
`static void`
`unwrap(SaslServer server, ByteBuffer destination, ByteBuffer source)`
Unwrap a message.
`static byte[]`
`wrap(SaslClient client, ByteBuffer source)`
Wrap a message.
`static void`
`wrap(SaslClient client, ByteBuffer destination, ByteBuffer source)`
Wrap a message.
`static byte[]`
`wrap(SaslServer server, ByteBuffer source)`
Wrap a message.
`static void`
`wrap(SaslServer server, ByteBuffer destination, ByteBuffer source)`
Wrap a message.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## 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 `SaslServerFactory`s 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 `SaslServerFactory`s

### getSaslServerFactories

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

Returns:
  the `Iterator` of `SaslServerFactory`s

### getSaslClientFactories

public static Iterator<SaslClientFactory> getSaslClientFactories(ClassLoader classLoader, boolean includeGlobal)
Returns an iterator of all of the registered `SaslClientFactory`s 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 `SaslClientFactory`s

### getSaslClientFactories

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

Returns:
  the `Iterator` of `SaslClientFactory`s

### 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:
  - `SaslClient.wrap(byte[], int, int)`

### 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:
  - `SaslClient.wrap(byte[], int, int)`

### 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:
  - `SaslServer.wrap(byte[], int, int)`

### 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:
  - `SaslServer.wrap(byte[], int, int)`

### 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:
  - `SaslClient.unwrap(byte[], int, int)`

### 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:
  - `SaslClient.unwrap(byte[], int, int)`

### 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:
  - `SaslServer.unwrap(byte[], int, int)`

### 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:
  - `SaslServer.unwrap(byte[], int, int)`

### 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