Package org.opensaml.xmlsec.algorithm
Class AlgorithmRegistry
- java.lang.Object
-
- org.opensaml.xmlsec.algorithm.AlgorithmRegistry
-
public class AlgorithmRegistry extends Object
A registry ofAlgorithmDescriptor
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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
checkCipherSupportedKeyLength(AlgorithmDescriptor descriptor)
Check if the key length of the specifiedCipher
-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 ofAlgorithmDescriptor
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)
Lookup a signature algorithm descriptor 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.
-
-
-
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 ofAlgorithmDescriptor
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(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
-
-