1
10package org.jstk.crypt;
11
12import java.util.*;
13import java.io.*;
14import java.security.*;
15import javax.crypto.SecretKey;
16import javax.crypto.KeyGenerator;
17
18import org.jstk.*;
19
20public class GenKPCommand extends JSTKCommandAdapter{
21 private static HashMap defaults = new HashMap();
22 static {
23 defaults.put("algorithm", "DSA");
24 defaults.put("keysize", "512");
25 defaults.put("action", "discard");
26 defaults.put("file", "my.keypair");
27 }
28 public String briefDescription(){
29 return "generates a key-pair ( for asymmetric algorithms )";
30 }
31 public String optionsDescription(){
32 return
33 " -algorithm <alg> : Algorithm for secret key generator.[" +
34 defaults.get("algorithm") + "]\n" +
35 " -keysize <keysize> : Key size (in bits).[" +
36 defaults.get("keysize") + "]\n" +
37 " -action <action> : what to do with the key?(print|save|discard).[" +
38 defaults.get("action") + "]\n" +
39 " -file <filename> : where to save the serialized key-pair?[" +
40 defaults.get("file") + "]\n" +
41 " -provider <provider>: provider name for KeyPairGenerator.\n";
42 }
43
44 public String[] useForms(){
45 String[] forms = {
46 "[-algorithm <alg> -keysize <keysize>] [-action\n" +
47 "\t(print|discard)] [-provider <provider>]",
48 "[-algorithm <alg> -keysize <keysize>] [-action save\n" +
49 "\t[-file <filename>]] [-provider <provider>]"
50 };
51 return forms;
52 }
53
54 public String[] sampleUses(){
55 String[] uses = {
56 "",
57 "-algorithm DESede action -print",
58 "-action save -file test1.key"
59 };
60 return uses;
61 }
62 public Object execute(JSTKArgs args) throws JSTKException{
63 try {
64 args.setDefaults(defaults);
65 String providerName = args.get("provider");
66 String algorithm = args.get("algorithm");
67 String keysizeString = args.get("keysize");
68 int keysize = Integer.parseInt(keysizeString);
69 String action = args.get("action");
70
71 KeyPairGenerator kpg;
72 if (providerName != null)
73 kpg = KeyPairGenerator.getInstance(algorithm, providerName);
74 else
75 kpg = KeyPairGenerator.getInstance(algorithm);
76
77 kpg.initialize(keysize);
78 KeyPair kp = kpg.generateKeyPair();
79
80 if (action.equals("discard")){
81 return new JSTKResult(kp, true, "Public and Private key pair generated");
82 } else if (action.equals("save")){ String fileName = args.get("file");
84 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName));
85 oos.writeObject(kp);
86 oos.close();
87 return new JSTKResult(kp, true, "KeyPair written to file: " + fileName);
88 } else if (action.equals("print")){
89 return new JSTKResult(kp, true, KeyUtil.format(kp.getPublic(), "PublicKey") +
90 KeyUtil.format(kp.getPrivate(), "PrivateKey"));
91 }
92 return new JSTKResult(null, false, "unknown action: " + action);
93 } catch (Exception exc){
94 throw new JSTKException("GenKCommand.execute() failed", exc);
95 }
96 }
97
98 public static void main(String[] args) throws Exception {
99 JSTKOptions opts = new JSTKOptions();
00 opts.parse(args, 0);
01 GenKPCommand genKPCmd = new GenKPCommand();
02 JSTKResult result = (JSTKResult)genKPCmd.execute(opts);
03 System.out.println(result.getText());
04 System.exit(result.isSuccess()? 0 : 1);
05 }
06}