Package org.opensaml.xmlsec.algorithm

# Class AlgorithmRegistry

java.lang.Object
org.opensaml.xmlsec.algorithm.AlgorithmRegistry

public class AlgorithmRegistry extends Object
A registry of `AlgorithmDescriptor` instances, to support various use cases for working with algorithm URIs.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`protected class`
`AlgorithmRegistry.SignatureAlgorithmIndex`
Class used as index key for signature algorithm lookup.

## Field Summary

Fields
Modifier and Type
Field
Description
`private Map<String,AlgorithmDescriptor>`
`descriptors`
Map of registered algorithm descriptors.
`private Map<String,DigestAlgorithm>`
`digestAlgorithms`
Index of digest type to AlgorithmDescriptor.
`private org.slf4j.Logger`
`log`
Logger.
`private Set<String>`
`runtimeSupported`
Set containing algorithms which are supported by the runtime environment.
`private Map<AlgorithmRegistry.SignatureAlgorithmIndex,SignatureAlgorithm>`
`signatureAlgorithms`
Index of (KeyType,DigestType) to AlgorithmDescriptor.
`private Map<AlgorithmDescriptor.AlgorithmType,Set<String>>`
`types`
Index of registered AlgorithmType to algorithm URI.

## Constructor Summary

Constructors
Constructor
Description
`AlgorithmRegistry()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`private boolean`
`checkCipherSupportedKeyLength(AlgorithmDescriptor descriptor)`
Check if the key length of the specified `Cipher`-based algorithm, if known, is supported by the current runtime.
`private boolean`
`checkRuntimeSupports(AlgorithmDescriptor descriptor)`
Evaluate whether the algorithm is supported by the current runtime environment.
`private boolean`
`checkSpecialCasesRuntimeSupport(AlgorithmDescriptor descriptor)`
Check for special cases of runtime support which failed the initial simple service class load check.
`void`
`clear()`
Clear all registered algorithms.
`private void`
`deindex(AlgorithmDescriptor descriptor)`
Remove the algorithm descriptor from the indexes which support the various lookup methods available via the registry's API.
`void`
`deregister(String uri)`
Deregister an algorithm.
`void`
`deregister(AlgorithmDescriptor descriptor)`
Deregister an algorithm.
`AlgorithmDescriptor`
`get(String algorithmURI)`
Get the algorithm descriptor instance associated with the specified algorithm URI.
`DigestAlgorithm`
`getDigestAlgorithm(String digestMethod)`
Lookup a digest method algorithm descriptor by the JCA digest method ID.
`Set<AlgorithmDescriptor>`
`getRegisteredByType(AlgorithmDescriptor.AlgorithmType type)`
Get the set of `AlgorithmDescriptor` registered for the given type.
`Set<String>`
`getRegisteredURIsByType(AlgorithmDescriptor.AlgorithmType type)`
Get the set of algorithm URIs registered for the given type.
`SignatureAlgorithm`
`getSignatureAlgorithm(String keyType, String digestMethod)`
Deprecated.
Use instead `getSignatureAlgorithms(String, String)`
`Set<SignatureAlgorithm>`
`getSignatureAlgorithms(String keyType, String digestMethod)`
Lookup signature algorithm descriptors by the JCA key algorithm and digest method IDs.
`private void`
`index(AlgorithmDescriptor descriptor)`
Add the algorithm descriptor to the indexes which support the various lookup methods available via the registry's API.
`boolean`
`isRuntimeSupported(String algorithmURI)`
Retrieve indication of whether the runtime environment supports the algorithm.
`void`
`register(AlgorithmDescriptor descriptor)`
Register an algorithm.

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

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

## Field Details

### log

@Nonnull private org.slf4j.Logger log
Logger.

### descriptors

@Nonnull private Map<String,AlgorithmDescriptor> descriptors
Map of registered algorithm descriptors.

### types

@Nonnull private Map<AlgorithmDescriptor.AlgorithmType,Set<String>> types
Index of registered AlgorithmType to algorithm URI.

### runtimeSupported

@Nonnull private Set<String> runtimeSupported
Set containing algorithms which are supported by the runtime environment.

### digestAlgorithms

@Nonnull private Map<String,DigestAlgorithm> digestAlgorithms
Index of digest type to AlgorithmDescriptor.

### signatureAlgorithms

@Nonnull private Map<AlgorithmRegistry.SignatureAlgorithmIndex,SignatureAlgorithm> signatureAlgorithms
Index of (KeyType,DigestType) to AlgorithmDescriptor.

## Constructor Details

### AlgorithmRegistry

public AlgorithmRegistry()
Constructor.

## Method Details

### get

@Nullable public AlgorithmDescriptor get(@Nullable String algorithmURI)
Get the algorithm descriptor instance associated with the specified algorithm URI.

Parameters:
  `algorithmURI` - the algorithm URI to resolve
Returns:
  the resolved algorithm descriptor or null

### isRuntimeSupported

public boolean isRuntimeSupported(@Nullable String algorithmURI)
Retrieve indication of whether the runtime environment supports the algorithm.

This evaluation is performed dynamically when the algorithm is registered.

Parameters:
  `algorithmURI` - the algorithm URI to evaluate
Returns:
  true if the algorithm is supported by the current runtime environment, false otherwise

### clear

public void clear()
Clear all registered algorithms.

### register

public void register(@Nonnull AlgorithmDescriptor descriptor)
Register an algorithm.

Parameters:
  `descriptor` - the algorithm

### deregister

public void deregister(@Nonnull AlgorithmDescriptor descriptor)
Deregister an algorithm.

Parameters:
  `descriptor` - the algorithm

### deregister

public void deregister(@Nonnull String uri)
Deregister an algorithm.

Parameters:
  `uri` - the algorithm URI

### getDigestAlgorithm

@Nullable public DigestAlgorithm getDigestAlgorithm(@Nonnull String digestMethod)
Lookup a digest method algorithm descriptor by the JCA digest method ID.

Parameters:
  `digestMethod` - the JCA digest method ID.
Returns:
  the algorithm descriptor, or null

### getSignatureAlgorithm

@Deprecated @Nullable public SignatureAlgorithm getSignatureAlgorithm(@Nonnull String keyType, @Nonnull String digestMethod)
Deprecated.
Use instead `getSignatureAlgorithms(String, String)`
Lookup a signature algorithm descriptor by the JCA key algorithm and digest method IDs.

Parameters:
  `keyType` - the JCA key algorithm ID.
  `digestMethod` - the JCA digest method ID.
Returns:
  the algorithm descriptor, or null

### getSignatureAlgorithms

@Nonnull public Set<SignatureAlgorithm> getSignatureAlgorithms(@Nonnull String keyType, @Nonnull String digestMethod)
Lookup signature algorithm descriptors by the JCA key algorithm and digest method IDs.

Parameters:
  `keyType` - the JCA key algorithm ID.
  `digestMethod` - the JCA digest method ID.
Returns:
  the list of matching algorithm descriptors, possibly empty

### getRegisteredURIsByType

@Nonnull @Unmodifiable @NotLive public Set<String> getRegisteredURIsByType(@Nonnull AlgorithmDescriptor.AlgorithmType type)
Get the set of algorithm URIs registered for the given type.

Parameters:
  `type` - the algorithm type
Returns:
  the set of URIs for the given type, may be empty

### getRegisteredByType

@Nonnull @Unmodifiable @NotLive public Set<AlgorithmDescriptor> getRegisteredByType(@Nonnull AlgorithmDescriptor.AlgorithmType type)
Get the set of `AlgorithmDescriptor` registered for the given type.

Parameters:
  `type` - the algorithm type
Returns:
  the set of descriptors for the given type, may be empty

### index

private void index(@Nonnull AlgorithmDescriptor descriptor)
Add the algorithm descriptor to the indexes which support the various lookup methods available via the registry's API.

Parameters:
  `descriptor` - the algorithm

### deindex

private void deindex(@Nonnull AlgorithmDescriptor descriptor)
Remove the algorithm descriptor from the indexes which support the various lookup methods available via the registry's API.

Parameters:
  `descriptor` - the algorithm

### checkRuntimeSupports

private boolean checkRuntimeSupports(@Nonnull AlgorithmDescriptor descriptor)
Evaluate whether the algorithm is supported by the current runtime environment.

Parameters:
  `descriptor` - the algorithm
Returns:
  true if runtime supports the algorithm, false otherwise

### checkCipherSupportedKeyLength

private boolean checkCipherSupportedKeyLength(@Nonnull AlgorithmDescriptor descriptor) throws NoSuchAlgorithmException
Check if the key length of the specified `Cipher`-based algorithm, if known, is supported by the current runtime.

Parameters:
  `descriptor` - the algorithm
Returns:
  true if key length supported, false otherwise
Throws:
  `NoSuchAlgorithmException` - if the associated JCA algorithm is not supported by the runtime

### checkSpecialCasesRuntimeSupport

private boolean checkSpecialCasesRuntimeSupport(@Nonnull AlgorithmDescriptor descriptor)
Check for special cases of runtime support which failed the initial simple service class load check.

Parameters:
  `descriptor` - the algorithm
Returns:
  true if algorithm is supported by the runtime environment, false otherwise