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 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 used = new HashSet();
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);
}
}