Java tutorial
import java.awt.Dimension; import java.security.Provider; import java.security.Security; import java.util.HashSet; import java.util.Set; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeSelectionModel; public class ListAlgorithmsBC extends JFrame { private void getNodes(DefaultMutableTreeNode providerNode, Provider provider, Set<Provider.Service> used, String title, String target) { DefaultMutableTreeNode node = new DefaultMutableTreeNode(title); for (Provider.Service service : provider.getServices()) { if (!used.contains(service) && target.equalsIgnoreCase(service.getType())) { used.add(service); DefaultMutableTreeNode algNode = new DefaultMutableTreeNode(service.getAlgorithm()); node.add(algNode); algNode.add(new DefaultMutableTreeNode("class : " + service.getClassName())); } } if (node.getChildCount() != 0) { providerNode.add(node); } } private ListAlgorithmsBC() { super("JCE Algorithms"); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); DefaultMutableTreeNode root = new DefaultMutableTreeNode("Providers"); DefaultTreeModel treeModel = new DefaultTreeModel(root); for (Provider provider : java.security.Security.getProviders()) { DefaultMutableTreeNode providerNode = new DefaultMutableTreeNode(provider); root.add(providerNode); Set<Provider.Service> used = new HashSet<Provider.Service>(); getNodes(providerNode, provider, used, "Cipher", "cipher"); getNodes(providerNode, provider, used, "Key Agreement", "keyagreement"); getNodes(providerNode, provider, used, "Key Generator", "keygenerator"); getNodes(providerNode, provider, used, "Key Pair Generator", "keypairgenerator"); getNodes(providerNode, provider, used, "Key Factory", "keyfactory"); getNodes(providerNode, provider, used, "Secret Key Factory", "secretkeyfactory"); getNodes(providerNode, provider, used, "Mac", "mac"); getNodes(providerNode, provider, used, "Message Digest", "messagedigest"); getNodes(providerNode, provider, used, "Signature", "signature"); getNodes(providerNode, provider, used, "Algorithm Paramater", "algorithmparameters"); getNodes(providerNode, provider, used, "Algorithm Paramater Generator", "algorithmparametergenerator"); getNodes(providerNode, provider, used, "Key Store", "keystore"); getNodes(providerNode, provider, used, "Secure Random", "securerandom"); getNodes(providerNode, provider, used, "Certificate Factory", "certificatefactory"); getNodes(providerNode, provider, used, "Certificate Store", "certstore"); getNodes(providerNode, provider, used, "Key Manager Factory", "KeyManagerFactory"); getNodes(providerNode, provider, used, "Trust Manager Factory", "TrustManagerFactory"); getNodes(providerNode, provider, used, "SSL Context", "SSLContext"); getNodes(providerNode, provider, used, "Sasl Server Factory", "SaslServerFactory"); getNodes(providerNode, provider, used, "Sasl Client Factory", "SaslClientFactory"); { DefaultMutableTreeNode node = new DefaultMutableTreeNode("Other"); for (Provider.Service service : provider.getServices()) { if (!used.contains(service)) { DefaultMutableTreeNode serviceNode = new DefaultMutableTreeNode( service.getType() + " : " + service.getAlgorithm()); node.add(serviceNode); serviceNode.add(new DefaultMutableTreeNode("class : " + service.getClassName())); } } if (node.getChildCount() != 0) providerNode.add(node); } } JTree tree = new JTree(treeModel); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setEditable(false); JScrollPane pane = new JScrollPane(tree); pane.setPreferredSize(new Dimension(200, 200)); getContentPane().add(pane); pack(); } public static void main(String[] args) { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); new ListAlgorithmsBC().setVisible(true); } }