Search in sources :

Example 16 with SecureDESKey

use of org.jpos.security.SecureDESKey in project jPOS by jpos.

the class Console method exec.

public void exec(PrintStream outPS, PrintStream errPS, String[] args) {
    JCESecurityModule sm = new JCESecurityModule();
    Logger logger = new Logger();
    logger.addListener(new SimpleLogListener(outPS));
    sm.setLogger(logger, "jce-security-module");
    Properties cfgProps = new Properties();
    SimpleConfiguration cfg = new SimpleConfiguration(cfgProps);
    String commandName = null;
    // 10 is Maximum number of paramters for a command
    String[] commandParams = new String[10];
    outPS.println("Welcome to JCE Security Module console commander!");
    if (args.length == 0) {
        outPS.println("Usage: Console [-options] command [commandparameters...]");
        outPS.println("\nwhere options include:");
        outPS.println("    -lmk <filename>");
        outPS.println("                  to specify the Local Master Keys file");
        outPS.println("    -rebuildlmk   to rebuild new Local Master Keys");
        outPS.println("                  WARNING: old Local Master Keys gets overwritten");
        outPS.println("    -jce <provider classname>");
        outPS.println("                  to specify a JavaTM Cryptography Extension 1.2.1 provider");
        outPS.println("\nWhere command include: ");
        outPS.println("    GC <keyLength>");
        outPS.println("                  to generate a clear key component.");
        outPS.println("    FK <keyLength> <keyType> <component1> <component2> <component3>");
        outPS.println("                  to form a key from three clear components.");
        outPS.println("                  and returns the key encrypted under LMK");
        outPS.println("                  Odd parity is be forced before encryption under LMK");
        outPS.println("    CK <keyLength> <keyType> <KEYunderLMK>");
        outPS.println("                  to generate a key check value for a key encrypted under LMK.");
        outPS.println("    IK <keyLength> <keyType> <KEYunderKEK> ");
        outPS.println("       <kekLength> <kekType> <KEKunderLMK> <KEKcheckValue>");
        outPS.println("                  to import a key from encryption under KEK (eg. ZMK,TMK) to encryption under LMK");
        outPS.println("                  Odd parity is be forced before encryption under LMK");
        outPS.println("    KE <keyLength> <keyType> <KEYunderLMK> <KEYcheckValue> ");
        outPS.println("       <kekLength> <kekType> <KEKunderLMK> <KEKcheckValue> ");
        outPS.println("                  to translate (export) a key from encryption under LMK");
        outPS.println("                  to encryption under KEK (eg. ZMK,TMK)");
    } else {
        int argsCounter = 0;
        for (int j = 0; j < 10; j++) {
            if (argsCounter < args.length && args[argsCounter].toLowerCase().compareTo("-lmk") == 0) {
                argsCounter++;
                cfgProps.setProperty("lmk", args[argsCounter++]);
            }
            if (argsCounter < args.length && args[argsCounter].toLowerCase().compareTo("-jce") == 0) {
                argsCounter++;
                cfgProps.setProperty("provider", args[argsCounter++]);
            }
            if (argsCounter < args.length && args[argsCounter].toLowerCase().compareTo("-rebuildlmk") == 0) {
                argsCounter++;
                cfgProps.setProperty("rebuildlmk", "true");
            }
        }
        if (argsCounter < args.length) {
            commandName = args[argsCounter++];
            int i = 0;
            while (argsCounter < args.length) {
                commandParams[i++] = args[argsCounter++];
            }
        }
        // Configure JCE Security Module
        try {
            sm.setConfiguration(cfg);
        } catch (ConfigurationException e) {
            e.printStackTrace(errPS);
            return;
        }
        // Execute Command
        if (commandName != null) {
            try {
                short keyLength = (short) Integer.parseInt(commandParams[0]);
                if (commandName.toUpperCase().compareTo("GC") == 0) {
                    String clearKeyComponenetHexString = sm.generateClearKeyComponent(keyLength);
                } else if (commandName.toUpperCase().compareTo("FK") == 0) {
                    SecureDESKey KEYunderLMK = sm.formKEYfromThreeClearComponents(keyLength, commandParams[1].toUpperCase(), commandParams[2], commandParams[3], commandParams[4]);
                } else if (commandName.toUpperCase().compareTo("CK") == 0) {
                    byte[] keyCheckValue = sm.generateKeyCheckValue(new SecureDESKey(keyLength, commandParams[1].toUpperCase(), commandParams[2], ""));
                } else if (commandName.toUpperCase().compareTo("IK") == 0) {
                    SecureDESKey KEKunderLMK = new SecureDESKey((short) Integer.parseInt(commandParams[3]), commandParams[4].toUpperCase(), commandParams[5], commandParams[6]);
                    sm.importKey(keyLength, commandParams[1].toUpperCase(), ISOUtil.hex2byte(commandParams[2]), KEKunderLMK, true);
                } else if (commandName.toUpperCase().compareTo("KE") == 0) {
                    SecureDESKey KEKunderLMK = new SecureDESKey((short) Integer.parseInt(commandParams[4]), commandParams[5].toUpperCase(), commandParams[6], commandParams[7]);
                    SecureDESKey KEYunderLMK = new SecureDESKey(keyLength, commandParams[1].toUpperCase(), commandParams[2], commandParams[3]);
                    sm.exportKey(KEYunderLMK, KEKunderLMK);
                } else {
                    System.err.println("Unknown command: " + commandName);
                }
            } catch (SMException e) {
                e.printStackTrace(errPS);
            } catch (java.lang.NumberFormatException e) {
                errPS.println("Invalid KeyLength");
            }
        } else {
            errPS.println("No command specified");
        }
    }
}
Also used : SMException(org.jpos.security.SMException) Logger(org.jpos.util.Logger) Properties(java.util.Properties) SimpleLogListener(org.jpos.util.SimpleLogListener) ConfigurationException(org.jpos.core.ConfigurationException) SimpleConfiguration(org.jpos.core.SimpleConfiguration) SecureDESKey(org.jpos.security.SecureDESKey)

Aggregations

SecureDESKey (org.jpos.security.SecureDESKey)16 Test (org.junit.Test)13 EncryptedPIN (org.jpos.security.EncryptedPIN)4 ConfigurationException (org.jpos.core.ConfigurationException)2 Properties (java.util.Properties)1 SimpleConfiguration (org.jpos.core.SimpleConfiguration)1 SMException (org.jpos.security.SMException)1 LogEvent (org.jpos.util.LogEvent)1 Logger (org.jpos.util.Logger)1 SimpleLogListener (org.jpos.util.SimpleLogListener)1