package org.ovirt.engine.core.engineencryptutils; import java.util.Vector; import java.util.HashMap; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.KeyStore; import java.security.Key; public class StoreUtils { private static class CLIParse { private Vector argv = new Vector(); private HashMap argsMap = new HashMap(); private int argvIndex = 0; public CLIParse(String[] args) { for (int i = 0; i < args.length; i++) { if (args[i].startsWith("-")) { int ix = args[i].indexOf("="); String key = (ix > 0) ? args[i].substring(1, ix) : args[i].substring(1); String value = (ix > 0) ? args[i].substring(ix + 1) : ""; argsMap.put(key.toLowerCase(), value); } else { argv.addElement(args[i]); } } } public boolean hasArg(String arg) { return argsMap.containsKey(arg.toLowerCase()); } public String getArg(String arg) { return (String) argsMap.get(arg.toLowerCase()); } public String nextParam() { String strReturn = null; if (argvIndex < argv.size()) { strReturn = (String) argv.elementAt(argvIndex++); } return strReturn; } } private static byte[] pvk(String keystore, String password, String alias) { byte[] bReturn = null; FileInputStream input = null; try { KeyStore ks = KeyStore.getInstance("jks"); input = new FileInputStream(keystore); ks.load(input, password.toCharArray()); Key key = ks.getKey(alias, password.toCharArray()); bReturn = key.getEncoded(); } catch (Exception e) { e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { //ignore } } } return bReturn; } private static void printUsage() { System.out.println("Usage:"); System.out.println("EncryptionUtils -[enc|dec] -store=path/to/keystore-file -pass=keystore-pass -string='string to be enc/decrypted' [-alias='cert alias']"); } private static boolean validate(CLIParse parser) { boolean fOK = true; if ((!parser.hasArg("enc")) && (!parser.hasArg("dec")) && (!parser.hasArg("pvk"))) { System.out.println("What do you wish me to do? -please specify -enc or -dec."); fOK = false; } if ((parser.hasArg("enc") || parser.hasArg("dec")) && (!parser.hasArg("string"))) { System.out.println("Can't find a string to work with :( -please specify -string='something'."); fOK = false; } if ((!parser.hasArg("store")) || (!new File(parser.getArg("store")).exists())) { System.out.println("Can't find a keystore to work with :( -please specify -store with the correct keystore path."); fOK = false; } if (!parser.hasArg("pass")) { System.out.println("Can't find a keystore pass :( -please specify -pass with the correct keystore password."); fOK = false; } if (!fOK) { printUsage(); } return fOK; } public static void main(String[] args) { try { CLIParse parser = new CLIParse(args); if (parser.hasArg("?") || parser.hasArg("help") || args.length == 0) { printUsage(); return; } if (!validate(parser)) { return; } String alias = "engine"; if (parser.hasArg("alias")) { alias = parser.getArg("alias"); } if (parser.hasArg("enc")) { System.out.println( EncryptionUtils.encrypt( parser.getArg("string"), parser.getArg("store"), parser.getArg("pass"), alias ).trim().replace("\r\n", "") ); } else if (parser.hasArg("dec")) { System.out.println( EncryptionUtils.decrypt( parser.getArg("string"), parser.getArg("store"), parser.getArg("pass"), alias ) ); } else if (parser.hasArg("pvk")) { System.out.write( pvk( parser.getArg("store"), parser.getArg("pass"), alias ) ); } } catch (Exception e) { System.out.println("Operation failed!"); } } }