1
10package org.jstk.crypt;
11
12import java.util.*;
13import java.security.Security;
14import java.security.Provider;
15
16import org.jstk.*;
17
18public class ListPCommand extends JSTKCommandAdapter{
19 public String briefDescription(){
20 return "lists cryptographic providers and services offered";
21 }
22 public String optionsDescription(){
23 return
24 " -provider <provider>: limit to this provider name.\n" +
25 " -info : print provider info.\n" +
26 " -props : print provider properties.\n" +
27 " -csinfo : print cryptographic services.\n";
28 }
29
30 public String[] useForms(){
31 String[] useForms = { "[-provider <provider>] [-info] [-props] [-csinfo]" };
32 return useForms;
33 }
34 public String[] sampleUses(){
35 String[] uses = {
36 "",
37 "-info",
38 "-csinfo",
39 "-props",
40 "-info -props -csinfo",
41 "-provider SunJCE -props",
42 "-provider SunJCE -csinfo"
43 };
44 return uses;
45 }
46
47 private String formText(String left, String right, int maxLeftLen){
48 StringBuffer sb = new StringBuffer();
49 sb.append(left);
50 int blanksNeeded = maxLeftLen - left.length();
51 while (blanksNeeded-- > 0)
52 sb.append(" ");
53 if (left.length() > 0)
54 sb.append(" : " + right);
55 else
56 sb.append(" " + right);
57 return sb.toString();
58 }
59
60 private void appendProvider(SecurityInfo.ProviderInfo provider,
61 boolean info, boolean props, boolean csinfo){
62
63 if (info) result.appendText("Provider Info:: \n" + provider.info + "\n");
65
66 if (props){ result.appendText("Provider Properties::\n");
68
72 Enumeration propNames = provider.props.propertyNames();
73 int idx = 0;
74 while (propNames.hasMoreElements()){
75 String key = (String)propNames.nextElement();
76 String value = provider.props.getProperty(key);
77 String left = "[" + idx + "] " + key;
78 result.appendText(formText(left, value, 32) + "\n");
79 ++idx;
80 }
81 result.appendText("---------------------------------------------------------------\n");
82 }
83
84 if (csinfo){ result.appendText("Cryptographic Services::\n");
86
90
91 Iterator itr = provider.svcmap.entrySet().iterator();
92 int idx = 0;
93 while (itr.hasNext()){
94 Map.Entry ent = (Map.Entry)itr.next();
95 String key = (String)ent.getKey();
96 Vector algs = (Vector)ent.getValue();
97
98 for (int i = 0; i < algs.size(); i++){
99 SecurityInfo.AlgInfo ai = (SecurityInfo.AlgInfo)algs.elementAt(i);
00 String left = "";
01 if (i == 0)
02 left = "[" + idx + "] " + key;
03 result.appendText(formText(left, ai.toString(), 20) + "\n");
04 if (ai.props != null){
05 Enumeration propNames = ai.props.propertyNames();
06 while (propNames.hasMoreElements()){
07 String key1 = (String)propNames.nextElement();
08 String value1 = ai.props.getProperty(key1);
09 result.appendText(formText("", key1 + " = " + value1, 24) + "\n");
10 }
11 }
12 }
13 ++idx;
14 }
15 result.appendText("---------------------------------------------------------------\n");
16 }
17 }
18
19 public Object execute(JSTKArgs args) throws JSTKException{
20 String providerName = (String)args.get("provider");
21 boolean info = Boolean.valueOf((String)args.get("info")).booleanValue();
22 boolean props = Boolean.valueOf((String)args.get("props")).booleanValue();
23 boolean csinfo = Boolean.valueOf((String)args.get("csinfo")).booleanValue();
24
25 try {
26 SecurityInfo si = new SecurityInfo();
27 result = new JSTKResult(si, true, "");
28 for (int i = 0; i < si.providers.length; i++){
29 if ((providerName == null)||(si.providers[i].name.matches(providerName))){
30 result.appendText("Provider[" + i + "]:: " +
31 si.providers[i].name + " " + si.providers[i].version + "\n");
32 appendProvider(si.providers[i], info, props, csinfo);
33 }
34 }
35 return result;
36 } catch (Exception exc){
37 throw new JSTKException("ListPCommand execution failed", exc);
38 }
39 }
40
41 public static void main(String[] args) throws Exception {
42 JSTKOptions opts = new JSTKOptions();
43 opts.parse(args, 0);
44 ListPCommand listPCmd = new ListPCommand();
45 JSTKResult result = (JSTKResult)listPCmd.execute(opts);
46 System.out.println(result.getText());
47 }
48}