Package org.opensaml.xmlsec.algorithm
Class AlgorithmRegistry
- java.lang.Object
-
- org.opensaml.xmlsec.algorithm.AlgorithmRegistry
-
public class AlgorithmRegistry extends Object
A registry ofAlgorithmDescriptorinstances, to support various use cases for working with algorithm URIs.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classAlgorithmRegistry.SignatureAlgorithmIndexClass used as index key for signature algorithm lookup.
-
Field Summary
Fields Modifier and Type Field Description private Map<String,AlgorithmDescriptor>descriptorsMap of registered algorithm descriptors.private Map<String,DigestAlgorithm>digestAlgorithmsIndex of digest type to AlgorithmDescriptor.private org.slf4j.LoggerlogLogger.private Set<String>runtimeSupportedSet containing algorithms which are supported by the runtime environment.private Map<AlgorithmRegistry.SignatureAlgorithmIndex,SignatureAlgorithm>signatureAlgorithmsIndex of (KeyType,DigestType) to AlgorithmDescriptor.private Map<AlgorithmDescriptor.AlgorithmType,Set<String>>typesIndex of registered AlgorithmType to algorithm URI.
-
Constructor Summary
Constructors Constructor Description AlgorithmRegistry()Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private booleancheckCipherSupportedKeyLength(AlgorithmDescriptor descriptor)Check if the key length of the specifiedCipher-based algorithm, if known, is supported by the current runtime.private booleancheckRuntimeSupports(AlgorithmDescriptor descriptor)Evaluate whether the algorithm is supported by the current runtime environment.private booleancheckSpecialCasesRuntimeSupport(AlgorithmDescriptor descriptor)Check for special cases of runtime support which failed the initial simple service class load check.voidclear()Clear all registered algorithms.private voiddeindex(AlgorithmDescriptor descriptor)Remove the algorithm descriptor from the indexes which support the various lookup methods available via the registry's API.voidderegister(String uri)Deregister an algorithm.voidderegister(AlgorithmDescriptor descriptor)Deregister an algorithm.AlgorithmDescriptorget(String algorithmURI)Get the algorithm descriptor instance associated with the specified algorithm URI.DigestAlgorithmgetDigestAlgorithm(String digestMethod)Lookup a digest method algorithm descriptor by the JCA digest method ID.Set<AlgorithmDescriptor>getRegisteredByType(AlgorithmDescriptor.AlgorithmType type)Get the set ofAlgorithmDescriptorregistered for the given type.Set<String>getRegisteredURIsByType(AlgorithmDescriptor.AlgorithmType type)Get the set of algorithm URIs registered for the given type.SignatureAlgorithmgetSignatureAlgorithm(String keyType, String digestMethod)Lookup a signature algorithm descriptor by the JCA key algorithm and digest method IDs.private voidindex(AlgorithmDescriptor descriptor)Add the algorithm descriptor to the indexes which support the various lookup methods available via the registry's API.booleanisRuntimeSupported(String algorithmURI)Retrieve indication of whether the runtime environment supports the algorithm.voidregister(AlgorithmDescriptor descriptor)Register an algorithm.
-
-
-
Field Detail
-
log
private org.slf4j.Logger log
Logger.
-
descriptors
private Map<String,AlgorithmDescriptor> descriptors
Map of registered algorithm descriptors.
-
types
private Map<AlgorithmDescriptor.AlgorithmType,Set<String>> types
Index of registered AlgorithmType to algorithm URI.
-
runtimeSupported
private Set<String> runtimeSupported
Set containing algorithms which are supported by the runtime environment.
-
digestAlgorithms
private Map<String,DigestAlgorithm> digestAlgorithms
Index of digest type to AlgorithmDescriptor.
-
signatureAlgorithms
private Map<AlgorithmRegistry.SignatureAlgorithmIndex,SignatureAlgorithm> signatureAlgorithms
Index of (KeyType,DigestType) to AlgorithmDescriptor.
-
-
Method Detail
-
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
@Nullable public SignatureAlgorithm getSignatureAlgorithm(@Nonnull String keyType, @Nonnull String digestMethod)
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
-
getRegisteredURIsByType
@Nonnull @NonnullElements @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 @NonnullElements @Unmodifiable @NotLive public Set<AlgorithmDescriptor> getRegisteredByType(@Nonnull AlgorithmDescriptor.AlgorithmType type)
Get the set ofAlgorithmDescriptorregistered 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(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(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(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(AlgorithmDescriptor descriptor) throws NoSuchAlgorithmException
Check if the key length of the specifiedCipher-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(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
-
-