The Java Developers Almanac 1.4


Order this book from Amazon.

   
Home > List of Packages > java.security  [30 examples]

e194. Listing All Available Cryptographic Services

The providers of cryptographic services such as key generation algorithms, register their services with the Security class. A service is represented by a name of the form:
    
service-type.service-implementation

An example of a service entry is SecureRandom.SHA1PRNG.
    // This method returns all available services types
    public static String[] getServiceTypes() {
        Set result = new HashSet();
    
        // All all providers
        Provider[] providers = Security.getProviders();
        for (int i=0; i<providers.length; i++) {
            // Get services provided by each provider
            Set keys = providers[i].keySet();
            for (Iterator it=keys.iterator(); it.hasNext(); ) {
                String key = (String)it.next();
                key = key.split(" ")[0];
    
                if (key.startsWith("Alg.Alias.")) {
                    // Strip the alias
                    key = key.substring(10);
                }
                int ix = key.indexOf('.');
                result.add(key.substring(0, ix));
            }
        }
        return (String[])result.toArray(new String[result.size()]);
    }
    
    // This method returns the available implementations for a service type
    public static String[] getCryptoImpls(String serviceType) {
        Set result = new HashSet();
    
        // All all providers
        Provider[] providers = Security.getProviders();
        for (int i=0; i<providers.length; i++) {
            // Get services provided by each provider
            Set keys = providers[i].keySet();
            for (Iterator it=keys.iterator(); it.hasNext(); ) {
                String key = (String)it.next();
                key = key.split(" ")[0];
    
                if (key.startsWith(serviceType+".")) {
                    result.add(key.substring(serviceType.length()+1));
                } else if (key.startsWith("Alg.Alias."+serviceType+".")) {
                    // This is an alias
                    result.add(key.substring(serviceType.length()+11));
                }
            }
        }
        return (String[])result.toArray(new String[result.size()]);
    }
Here's a sample list of service types:
    AlgorithmParameterGenerator
    AlgorithmParameters
    CertPathBuilder
    CertPathValidator
    CertStore
    CertificateFactory
    Cipher
    GssApiMechanism
    KeyAgreement
    KeyFactory
    KeyGenerator
    KeyManagerFactory
    KeyPairGenerator
    KeyStore
    Mac
    MessageDigest
    SSLContext
    SecretKeyFactory
    SecureRandom
    Signature
    TrustManagerFactory

 Related Examples
e193. Printing Security System Trace Messages
e195. Listing All Available Secure Random Number Generators
e196. Generating a Secure Random Number

See also: Key Store    Message Digests    Permissions    Policy Files    Public and Private Keys    Signatures   


© 2002 Addison-Wesley.