Implementations are plugged into the Java security frameworks using the java.security.Provider class. Currently, a Provider object stores information about the implementations it supports as a map of String key-value pairs by virtue of inheriting from java.util.Properties and java.util.Hashtable. This architecture has several disadvantages:
* algorithm names are defined to be case insensitive in the Java security model, but keys are indexed case sensitive in the Hashtable for compatibility reasons. This means that Hashtable.get() cannot be relied upon for lookups and a full linear iteration through the Hashtable may be required.
* often multiple entries are required to describe all aspects of an implementation (such as alternative algorithm names and implementation attributes). A separate lookup is required to obtain each of these.
* if behavior (i.e. code) is to be associated with the description of an implementation, methods would have to be added to the provider class in this architecture. It would be preferably to encapsulate the data and the code that describes an implementation in a single object.
The API of the Provider class should be extended to resolve this issues while preserving compatibility with existing applications and providers.
This work is part of Tiger TOO 4635083.