public static void main(String[] args) throws MalformedURLException { os = System.getProperty("os.name"); boolean testMode = false; if (args.length > 0) { if (args[0] != null) { if (args[0].equals("-r")) { System.out.println("Rescue mode only works for PEAs, not for PeaFactory..."); } else if (args[0].equals("-t")) { System.out.println("#####---TEST MODE---#####"); testMode = true; } else { System.out.println("Unknown argument: " + args[0]); } } } if (testMode == true) { new TestMode().runInTestMode(); } // i18n: language = defaultLocale.getLanguage(); // get default language currentLocale = new Locale(language); // set default language as language // File file = new File("src" + File.separator + "config" + File.separator + "i18n"); File file = new File("config" + File.separator + "i18n"); URL[] urls = {file.toURI().toURL()}; ClassLoader loader = new URLClassLoader(urls); languageBundle = ResourceBundle.getBundle("LanguagesBundle", currentLocale, loader); // DEFAULT HASH FUNCTION: if (HashStuff.getHashAlgo() == null) { // needed for RandomPasswordDialog HashStuff.setHashAlgo(DEFAULT_HASH); } EventQueue.invokeLater( new Runnable() { public void run() { try { PswDialogView.setUI(); // select the kind of pea ProjectSelection proj = new ProjectSelection(); proj.setLocation(100, 100); proj.setVisible(true); frame = MainView.getInstance(); } catch (Exception e) { e.printStackTrace(); } } }); }
public static final void createFile() { // ===================== // initialize (order!) // if (HashStuff.getHashAlgo() == null) { HashStuff.setHashAlgo(DEFAULT_HASH); // default } if (CipherStuff.isBound() == true) { Attachments.generateAndSetProgramRandomBytes(); Attachments.generateAndSetFileIdentifier(); KeyDerivation.setSalt(Attachments.getProgramRandomBytes()); } else { // use default values for fileIdentifier and programRandomBytes // calculate default salt and update via setAttachedSalt: // xor the salt with attachedSalt (will be attached to the content) Attachments.setFileIdentifier("PFACTORY".getBytes(UTF_8)); // 8 byte // 129 byte string to initialize the salt: String fixedSaltString = "PEAFACTORY - PRODUCTION OF PASSWORD ENCRYPTED ARCHIVES - FIXED STRING USED TO INITIALIZE THE SALT FOR THE KEY DERIVATION FUNCTION"; String saltString = fixedSaltString.substring(0, KeyDerivation.getSaltSize()); Attachments.setProgramRandomBytes(saltString.getBytes(UTF_8)); KeyDerivation.setSalt(saltString.getBytes(UTF_8)); byte[] attachedSalt = new RandomStuff().createRandomBytes(Attachments.getProgramRandomBytesSize()); KeyDerivation.setAttachedAndUpdateSalt(attachedSalt); } // DEFAULT CIPHER ALGO: if (CipherStuff.getCipherAlgo() == null) { CipherStuff.setCipherAlgo(DEFAULT_CIPHER); } // DEFAULT KEY DERIVATION FUNCTION if (KeyDerivation.getKdf() == null) { KeyDerivation.setKdf(DEFAULT_KDF); } // ====================================== // get password from pswField and check: // char[] pswInputChars = MainView.getPsw(); MainView.resetPsw(); char[] pswInputChars2 = MainView.getPsw2(); MainView.resetPsw2(); if ((pswInputChars2.length == 0) && (pswInputChars.length != 0)) { JOptionPane.showMessageDialog( null, languageBundle.getString("password2_is_null"), null, JOptionPane.PLAIN_MESSAGE); return; } else if (pswInputChars.length != pswInputChars2.length) { JOptionPane.showMessageDialog( null, languageBundle.getString("different_password"), null, JOptionPane.PLAIN_MESSAGE); return; } boolean pswEqual = true; // prevent timing attacks: for (int i = 0; i < pswInputChars.length; i++) { if (pswInputChars[i] != pswInputChars2[i]) { pswEqual = false; } } if (pswEqual == false) { JOptionPane.showMessageDialog( null, languageBundle.getString("different_password"), null, JOptionPane.PLAIN_MESSAGE); return; } int inputLength = pswInputChars.length; Arrays.fill(pswInputChars2, '\0'); // Warning for insecure password if ((inputLength == 0) && (MainView.isBlankPea() == false)) { // allow null-passwords with warning JOptionPane.showMessageDialog( frame, languageBundle.getString("no_password_warning"), "Warning", JOptionPane.WARNING_MESSAGE); pswInputChars = "no password".toCharArray(); } else if (inputLength < 12 && MainView.isBlankPea() == false) { JOptionPane.showMessageDialog( null, languageBundle.getString("short_password_warning"), null, JOptionPane.PLAIN_MESSAGE); } // ============= // derive key: // byte[] keyMaterial = null; if (MainView.isBlankPea() == false) { // if true: no need to derive key keyMaterial = PswDialogBase.deriveKeyFromPsw(pswInputChars); if (keyMaterial == null) { JOptionPane.showMessageDialog( frame, languageBundle.getString("program_bug") + ": \n (keyMaterial is null)", "Error", JOptionPane.ERROR_MESSAGE); return; } } MainView.progressBar.setValue(35); MainView.progressBar.paint(MainView.progressBar.getGraphics()); // ================= // generate jar file: // // long start = System.currentTimeMillis(); // Startpunkt new JarStuff().generateJarFile(keyMaterial); // System.out.println("generateJarFile - Zeit in ms: \n" + (System.currentTimeMillis() - // start));//Messpunkt String fileOrDirectory = (MainView.getOpenedFileName() == null) ? languageBundle.getString("directory") : languageBundle.getString("file"); if (MainView.isBlankPea() == true) { fileOrDirectory = languageBundle.getString("directory"); // for all peas } if (DataType.getCurrentType() instanceof FileType) { fileOrDirectory = languageBundle.getString("file"); } String peaFileName = JarStuff.getJarFileName() .substring(0, (JarStuff.getJarFileName().length() - 4)); // extract ".jar" String peaPath = System.getProperty("user.dir") + File.separator + "peas"; // show informations about created pea: int input = JOptionPane.showConfirmDialog( frame, languageBundle.getString("new_pea_info") + "\n" + DataType.getCurrentType().getDescription() + "\n\n" + languageBundle.getString("new_pea_type_info") + " " + fileOrDirectory + " \n " + " - " + peaFileName + " -\n" + languageBundle.getString("new_pea_location_info") + "\n " + " " + peaPath + "\n\n" + languageBundle.getString("open_directory") + "\n ", "Pea info", JOptionPane.YES_NO_OPTION); if (input == JOptionPane.YES_OPTION) { // 0 String error = OperatingSystemStuff.openFileManager(peaPath); if (error != null) { JOptionPane.showMessageDialog( frame, languageBundle.getString("desktop_error") + "\n\n " + error, languageBundle.getString("error"), JOptionPane.ERROR_MESSAGE); } } else { // do not open folder peas: // } }