cologne.eck.peafactory.gui.Menu.java Source code

Java tutorial

Introduction

Here is the source code for cologne.eck.peafactory.gui.Menu.java

Source

package cologne.eck.peafactory.gui;

/*
 * Peafactory - Production of Password Encryption Archives
 * Copyright (C) 2015  Axel von dem Bruch
 * 
 * This library is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU General Public License as published 
 * by the Free Software Foundation; either version 2 of the License, 
 * or (at your option) any later version.
 * This library is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 * or FITNESS FOR A PARTICULAR PURPOSE. 
 * See the GNU General Public License for more details.
 * See:  http://www.gnu.org/licenses/gpl-2.0.html
 * You should have received a copy of the GNU General Public License 
 * along with this library.
 */

/**
 * Menu of MainView. 
 * All setting for pea production. 
 */

import javax.swing.JMenuBar;

import java.awt.*;
import java.awt.event.*;
import java.util.ResourceBundle;

import javax.swing.*;
import javax.swing.border.EtchedBorder;

import cologne.eck.peafactory.PeaFactory;
import cologne.eck.peafactory.crypto.CipherStuff;
import cologne.eck.peafactory.crypto.HashStuff;
import cologne.eck.peafactory.crypto.KeyDerivation;
import cologne.eck.peafactory.crypto.kdf.BcryptKDF;
import cologne.eck.peafactory.crypto.kdf.CatenaKDF;
import cologne.eck.peafactory.crypto.kdf.PomeloKDF;
import cologne.eck.peafactory.crypto.kdf.ScryptKDF;
import cologne.eck.peafactory.peagen.FileModifier;
import cologne.eck.peafactory.peas.gui.PasswordGeneratorDialog;

import org.bouncycastle.crypto.engines.AESEngine;
import org.bouncycastle.crypto.engines.AESFastEngine;
import org.bouncycastle.crypto.engines.Shacal2Engine;
import org.bouncycastle.crypto.engines.TwofishEngine;
import org.bouncycastle.crypto.engines.SerpentEngine;
import org.bouncycastle.crypto.engines.ThreefishEngine;
import org.bouncycastle.crypto.digests.Blake2bDigest;
import org.bouncycastle.crypto.digests.RIPEMD320Digest;
import org.bouncycastle.crypto.digests.SHA384Digest;
import org.bouncycastle.crypto.digests.SHA3Digest;
import org.bouncycastle.crypto.digests.WhirlpoolDigest;//512 bit
import org.bouncycastle.crypto.digests.SkeinDigest;//512
import org.bouncycastle.crypto.digests.SHA512Digest;//512
//import org.bouncycastle.crypto.digests.RIPEMD256Digest;//256 bit

@SuppressWarnings("serial")
public class Menu extends JMenuBar implements ActionListener {

    private static int securityLevel = 3;//standard 1-5

    private static ResourceBundle languageBundle;// = PeaFactory.getLanguagesBundle();

    public Menu(ResourceBundle _languageBundle) {

        languageBundle = _languageBundle;

        setBorder(new EtchedBorder());
        setMinimumSize(new Dimension(200, 50));

        JMenu menu = new JMenu(languageBundle.getString("menu"));
        menu.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        menu.setMnemonic(KeyEvent.VK_M);
        this.add(menu);

        JMenuItem newItem = new JMenuItem(languageBundle.getString("new_project"));
        newItem.setActionCommand("newProject");
        newItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        newItem.setMnemonic(KeyEvent.VK_N);
        newItem.addActionListener(this);
        menu.add(newItem);
        /*      
              JMenuItem newBlankItem = new JMenuItem(languageBundle.getString("blank_check"));
              newBlankItem.setActionCommand("newBlankProject");
              newBlankItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
              newBlankItem.setMnemonic(KeyEvent.VK_B);
              newBlankItem.addActionListener(this);
              menu.add(newBlankItem);*/

        JMenuItem randomItem = new JMenuItem(languageBundle.getString("random_password"));
        randomItem.setActionCommand("randomPassword");
        randomItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        randomItem.setMnemonic(KeyEvent.VK_R);
        randomItem.addActionListener(this);
        menu.add(randomItem);

        JMenuItem quitItem = new JMenuItem(languageBundle.getString("quit"));
        quitItem.setActionCommand("quit");
        quitItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        quitItem.setMnemonic(KeyEvent.VK_B);
        quitItem.addActionListener(this);
        menu.add(quitItem);

        JMenu setMenu = new JMenu(languageBundle.getString("settings"));
        setMenu.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setMenu.setMnemonic(KeyEvent.VK_S);
        this.add(setMenu);

        JMenuItem setPeaSettings = new JMenuItem(languageBundle.getString("general_pea_settings"));
        setPeaSettings.setActionCommand("generalPeaSettings");
        setPeaSettings.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setPeaSettings.setMnemonic(KeyEvent.VK_T);
        setPeaSettings.addActionListener(this);
        setMenu.add(setPeaSettings);

        JMenu setLevel = new JMenu(languageBundle.getString("set_security_level"));
        setLevel.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setLevel.setMnemonic(KeyEvent.VK_L);
        setMenu.add(setLevel);

        JMenuItem setThoughtless = new JMenuItem(languageBundle.getString("thoughtless"));
        setThoughtless.setActionCommand("setThoughtless");
        setThoughtless.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setThoughtless.setMnemonic(KeyEvent.VK_T);
        setThoughtless.addActionListener(this);
        setLevel.add(setThoughtless);

        JMenuItem setLow = new JMenuItem(languageBundle.getString("low"));
        setLow.setActionCommand("setLow");
        setLow.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setLow.setMnemonic(KeyEvent.VK_L);
        setLow.addActionListener(this);
        setLevel.add(setLow);

        JMenuItem setStandard = new JMenuItem(languageBundle.getString("standard"));
        setStandard.setActionCommand("setStandard");
        setStandard.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setStandard.setMnemonic(KeyEvent.VK_S);
        setStandard.addActionListener(this);
        setLevel.add(setStandard);

        JMenuItem setHigh = new JMenuItem(languageBundle.getString("high"));
        setHigh.setActionCommand("setHigh");
        setHigh.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setHigh.setMnemonic(KeyEvent.VK_H);
        setHigh.addActionListener(this);
        setLevel.add(setHigh);

        JMenuItem setParanoid = new JMenuItem(languageBundle.getString("paranoid"));
        setParanoid.setActionCommand("setParanoid");
        setParanoid.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setParanoid.setMnemonic(KeyEvent.VK_P);
        setParanoid.addActionListener(this);
        setLevel.add(setParanoid);

        JMenu cryptMenu = new JMenu(languageBundle.getString("set_crypt"));
        cryptMenu.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        cryptMenu.setMnemonic(KeyEvent.VK_C);
        setMenu.add(cryptMenu);

        JMenu setKeyDerivation = new JMenu(languageBundle.getString("set_kdf"));
        setKeyDerivation.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setKeyDerivation.setMnemonic(KeyEvent.VK_K);
        cryptMenu.add(setKeyDerivation);

        JMenuItem setDragonfly = new JMenuItem(languageBundle.getString("set_dragonfly"));
        setDragonfly.setActionCommand("setDragonfly");
        setDragonfly.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setDragonfly.setMnemonic(KeyEvent.VK_D);
        setDragonfly.addActionListener(this);
        setKeyDerivation.add(setDragonfly);

        JMenuItem setButterfly = new JMenuItem(languageBundle.getString("set_butterfly"));
        setButterfly.setActionCommand("setButterfly");
        setButterfly.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setButterfly.setMnemonic(KeyEvent.VK_U);
        setButterfly.addActionListener(this);
        setKeyDerivation.add(setButterfly);

        JMenuItem setScrypt = new JMenuItem(languageBundle.getString("set_scrypt"));
        setScrypt.setActionCommand("setScrypt");
        setScrypt.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setScrypt.setMnemonic(KeyEvent.VK_S);
        setScrypt.addActionListener(this);
        setKeyDerivation.add(setScrypt);

        JMenuItem setPomelo = new JMenuItem(languageBundle.getString("set_pomelo"));
        setPomelo.setActionCommand("setPomelo");
        setPomelo.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setPomelo.setMnemonic(KeyEvent.VK_P);
        setPomelo.addActionListener(this);
        setKeyDerivation.add(setPomelo);

        JMenuItem setBcrypt = new JMenuItem(languageBundle.getString("set_bcrypt"));
        setBcrypt.setActionCommand("setBcrypt");
        setBcrypt.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setBcrypt.setMnemonic(KeyEvent.VK_B);
        setBcrypt.addActionListener(this);
        setKeyDerivation.add(setBcrypt);

        JMenu setKDFParams = new JMenu(languageBundle.getString("set_params"));
        setKDFParams.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setKDFParams.setMnemonic(KeyEvent.VK_P);
        setKeyDerivation.add(setKDFParams);

        JMenuItem setCatenaParameters = new JMenuItem(languageBundle.getString("set_catena_params"));
        setCatenaParameters.setActionCommand("setCatenaParameters");
        setCatenaParameters.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setCatenaParameters.setMnemonic(KeyEvent.VK_P);
        setCatenaParameters.addActionListener(this);
        setKDFParams.add(setCatenaParameters);

        JMenuItem setScryptParameters = new JMenuItem(languageBundle.getString("set_scrypt_params"));
        setScryptParameters.setActionCommand("setScryptParameters");
        setScryptParameters.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setScryptParameters.setMnemonic(KeyEvent.VK_S);
        setScryptParameters.addActionListener(this);
        setKDFParams.add(setScryptParameters);

        JMenuItem setPomeloParameters = new JMenuItem(languageBundle.getString("set_pomelo_params"));
        setPomeloParameters.setActionCommand("setPomeloParameters");
        setPomeloParameters.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setPomeloParameters.setMnemonic(KeyEvent.VK_P);
        setPomeloParameters.addActionListener(this);
        setKDFParams.add(setPomeloParameters);

        JMenuItem setBcryptParameters = new JMenuItem(languageBundle.getString("set_bcrypt_params"));
        setBcryptParameters.setActionCommand("setBcryptParameters");
        setBcryptParameters.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setBcryptParameters.setMnemonic(KeyEvent.VK_B);
        setBcryptParameters.addActionListener(this);
        setKDFParams.add(setBcryptParameters);

        JMenu setCipherAlgo = new JMenu(languageBundle.getString("set_cipher"));
        setCipherAlgo.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setCipherAlgo.setMnemonic(KeyEvent.VK_C);
        cryptMenu.add(setCipherAlgo);

        JMenuItem setTwofish = new JMenuItem(languageBundle.getString("set_twofish"));
        setTwofish.setActionCommand("setTwofish");
        setTwofish.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setTwofish.setMnemonic(KeyEvent.VK_T);
        setTwofish.addActionListener(this);
        setCipherAlgo.add(setTwofish);

        JMenuItem setAES256 = new JMenuItem(languageBundle.getString("set_aes"));
        setAES256.setActionCommand("setAES");
        setAES256.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setAES256.setMnemonic(KeyEvent.VK_A);
        setAES256.addActionListener(this);
        setCipherAlgo.add(setAES256);

        JMenuItem setShacal2 = new JMenuItem(languageBundle.getString("set_shacal2"));
        setShacal2.setActionCommand("setShacal2");
        setShacal2.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setShacal2.setMnemonic(KeyEvent.VK_H);
        setShacal2.addActionListener(this);
        setCipherAlgo.add(setShacal2);

        JMenuItem setSerpent = new JMenuItem(languageBundle.getString("set_serpent"));
        setSerpent.setActionCommand("setSerpent");
        setSerpent.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setSerpent.setMnemonic(KeyEvent.VK_S);
        setSerpent.addActionListener(this);
        setCipherAlgo.add(setSerpent);

        JMenuItem setThreefish256 = new JMenuItem(languageBundle.getString("set_threefish256"));
        setThreefish256.setActionCommand("setThreefish256");
        setThreefish256.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setThreefish256.setMnemonic(KeyEvent.VK_H);
        setThreefish256.addActionListener(this);
        setCipherAlgo.add(setThreefish256);

        JMenuItem setThreefish512 = new JMenuItem(languageBundle.getString("set_threefish512"));
        setThreefish512.setActionCommand("setThreefish512");
        setThreefish512.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setThreefish512.setMnemonic(KeyEvent.VK_R);
        setThreefish512.addActionListener(this);
        setCipherAlgo.add(setThreefish512);

        JMenuItem setThreefish1024 = new JMenuItem(languageBundle.getString("set_threefish1024"));
        setThreefish1024.setActionCommand("setThreefish1024");
        setThreefish1024.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setThreefish1024.setMnemonic(KeyEvent.VK_E);
        setThreefish1024.addActionListener(this);
        setCipherAlgo.add(setThreefish1024);

        JMenuItem setAESFast = new JMenuItem(languageBundle.getString("set_aes_fast"));
        setAESFast.setActionCommand("setAESFast");
        setAESFast.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setAESFast.setMnemonic(KeyEvent.VK_F);
        setAESFast.addActionListener(this);
        setCipherAlgo.add(setAESFast);

        JMenu setHashAlgo = new JMenu(languageBundle.getString("set_hash"));
        setHashAlgo.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setHashAlgo.setMnemonic(KeyEvent.VK_H);
        cryptMenu.add(setHashAlgo);

        JMenuItem setBLAKE512 = new JMenuItem(languageBundle.getString("set_blake512"));
        setBLAKE512.setActionCommand("setBlake512");
        setBLAKE512.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setBLAKE512.setMnemonic(KeyEvent.VK_B);
        setBLAKE512.addActionListener(this);
        setHashAlgo.add(setBLAKE512);

        JMenuItem setSkein512 = new JMenuItem(languageBundle.getString("set_skein512"));
        setSkein512.setActionCommand("setSkein512");
        setSkein512.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setSkein512.setMnemonic(KeyEvent.VK_S);
        setSkein512.addActionListener(this);
        setHashAlgo.add(setSkein512);

        JMenuItem setWhirlpool = new JMenuItem(languageBundle.getString("set_whirlpool"));
        setWhirlpool.setActionCommand("setWhirlpool");
        setWhirlpool.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setWhirlpool.setMnemonic(KeyEvent.VK_W);
        setWhirlpool.addActionListener(this);
        setHashAlgo.add(setWhirlpool);

        JMenuItem setKeccak = new JMenuItem(languageBundle.getString("set_sha3") + " (Keccak)");
        setKeccak.setActionCommand("setKeccak");
        setKeccak.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setKeccak.setMnemonic(KeyEvent.VK_K);
        setKeccak.addActionListener(this);
        setHashAlgo.add(setKeccak);

        JMenuItem setSHA512 = new JMenuItem(languageBundle.getString("set_sha512"));
        setSHA512.setActionCommand("setSha512");
        setSHA512.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setSHA512.setMnemonic(KeyEvent.VK_H);
        setSHA512.addActionListener(this);
        setHashAlgo.add(setSHA512);

        JMenuItem setSHA384 = new JMenuItem(languageBundle.getString("set_sha384"));
        setSHA384.setActionCommand("setSha384");
        setSHA384.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setSHA384.setMnemonic(KeyEvent.VK_A);
        setSHA384.addActionListener(this);
        setHashAlgo.add(setSHA384);

        JMenuItem setRipemd320 = new JMenuItem(languageBundle.getString("set_ripemd320"));
        setRipemd320.setActionCommand("setRipemd320");
        setRipemd320.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setRipemd320.setMnemonic(KeyEvent.VK_R);
        setRipemd320.addActionListener(this);
        setHashAlgo.add(setRipemd320);

        /*      JMenuItem setRipemd256 = new JMenuItem(languageBundle.getString("set_ripemd256"));
              setRipemd256.setActionCommand("setRipemd256"); 
              setRipemd256.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
              setRipemd256.setMnemonic(KeyEvent.VK_I);
              setRipemd256.addActionListener(this);
              setHashAlgo.add(setRipemd256); */

        JMenuItem keyboardItem = new JMenuItem(languageBundle.getString("keyboard"));
        keyboardItem.setActionCommand("keyboard");
        keyboardItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        keyboardItem.setMnemonic(KeyEvent.VK_K);
        keyboardItem.addActionListener(this);
        setMenu.add(keyboardItem);

        JMenuItem pswGeneratorItem = new JMenuItem(languageBundle.getString("psw_generator"));
        pswGeneratorItem.setActionCommand("psw_generator");
        pswGeneratorItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        pswGeneratorItem.setMnemonic(KeyEvent.VK_P);
        pswGeneratorItem.addActionListener(this);
        setMenu.add(pswGeneratorItem);

        JMenuItem setImageParameters = new JMenuItem(languageBundle.getString("set_image_params"));
        setImageParameters.setActionCommand("setImageParameters");
        setImageParameters.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setImageParameters.setMnemonic(KeyEvent.VK_I);
        setImageParameters.addActionListener(this);
        setMenu.add(setImageParameters);

        JMenu setLanguage = new JMenu(languageBundle.getString("set_language"));
        setLanguage.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setLanguage.setMnemonic(KeyEvent.VK_L);
        setMenu.add(setLanguage);

        JMenuItem setDE = new JMenuItem(languageBundle.getString("set_de"));
        setDE.setActionCommand("setDE");
        setDE.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setDE.setMnemonic(KeyEvent.VK_D);
        setDE.addActionListener(this);
        setLanguage.add(setDE);

        JMenuItem setEN = new JMenuItem(languageBundle.getString("set_en"));
        setEN.setActionCommand("setEN");
        setEN.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        setEN.setMnemonic(KeyEvent.VK_E);
        setEN.addActionListener(this);
        setLanguage.add(setEN);

        JMenu helpMenu = new JMenu(languageBundle.getString("help"));
        helpMenu.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        helpMenu.setMnemonic(KeyEvent.VK_H);
        this.add(helpMenu);

        JMenuItem noteItem = new JMenuItem(languageBundle.getString("notes_description"));
        noteItem.setActionCommand("notes");
        noteItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        noteItem.setMnemonic(KeyEvent.VK_N);
        noteItem.addActionListener(this);
        helpMenu.add(noteItem);

        JMenuItem editorItem = new JMenuItem(languageBundle.getString("editor_description"));
        editorItem.setActionCommand("editor");
        editorItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        editorItem.setMnemonic(KeyEvent.VK_E);
        editorItem.addActionListener(this);
        helpMenu.add(editorItem);

        JMenuItem imageItem = new JMenuItem(languageBundle.getString("image_description"));
        imageItem.setActionCommand("image");
        imageItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        imageItem.setMnemonic(KeyEvent.VK_I);
        imageItem.addActionListener(this);
        helpMenu.add(imageItem);

        JMenuItem fileItem = new JMenuItem(languageBundle.getString("file_description"));
        fileItem.setActionCommand("file");
        fileItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        fileItem.setMnemonic(KeyEvent.VK_F);
        fileItem.addActionListener(this);
        helpMenu.add(fileItem);

        JMenuItem keyboardInfoItem = new JMenuItem("Info: " + languageBundle.getString("keyboard"));
        keyboardInfoItem.setActionCommand("keyboard_info");
        keyboardInfoItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        keyboardInfoItem.setMnemonic(KeyEvent.VK_K);
        keyboardInfoItem.addActionListener(this);
        helpMenu.add(keyboardInfoItem);
        JMenuItem howToItem = new JMenuItem(languageBundle.getString("how_to_use"));
        howToItem.setActionCommand("howToUse");
        howToItem.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        howToItem.setMnemonic(KeyEvent.VK_U);
        howToItem.addActionListener(this);
        helpMenu.add(howToItem);

        JMenuItem problemHelp = new JMenuItem(languageBundle.getString("problem_help"));
        problemHelp.setActionCommand("problemHelp");
        problemHelp.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        problemHelp.setMnemonic(KeyEvent.VK_P);
        problemHelp.addActionListener(this);
        helpMenu.add(problemHelp);

        JMenuItem aboutLicense = new JMenuItem(languageBundle.getString("about_license"));
        aboutLicense.setActionCommand("aboutLicense");
        aboutLicense.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        aboutLicense.setMnemonic(KeyEvent.VK_L);
        aboutLicense.addActionListener(this);
        helpMenu.add(aboutLicense);
    }

    @Override
    public void actionPerformed(ActionEvent ape) {

        //JComponent source = (JComponent) ape.getSource();
        String command = ape.getActionCommand();

        //Menu
        if (command.equals("newProject")) {
            ProjectSelection proj = new ProjectSelection();
            Point p = MainView.getFrameLocation();
            proj.setLocation((int) p.getX() + 100, (int) p.getY() + 60);
            proj.setVisible(true);
        } else if (command.equals("randomPassword")) {
            PasswordGeneratorDialog pg = new PasswordGeneratorDialog(PeaFactory.getFrame());
            pg.setVisible(true);
        } else if (command.equals("keyboard")) {
            int input = JOptionPane.showConfirmDialog(PeaFactory.getFrame(),
                    languageBundle.getString("add_keyboard"), " ", JOptionPane.YES_NO_OPTION);
            if (input == 0) {
                FileModifier.setSetKeyboard(true);
            } else {
                FileModifier.setSetKeyboard(false);
            }
        } else if (command.equals("psw_generator")) {
            int input = JOptionPane.showConfirmDialog(PeaFactory.getFrame(),
                    languageBundle.getString("add_psw_generator"), " ", JOptionPane.YES_NO_OPTION);
            if (input == 0) {
                FileModifier.setPswGenerator(true);
            } else {
                FileModifier.setPswGenerator(false);
            }
        } else if (command.equals("quit")) {
            System.exit(0);

        } else if (command.equals("generalPeaSettings")) {

            @SuppressWarnings("unused")
            GeneralPeaSettings imageSetting = new GeneralPeaSettings();

        } else if (command.equals("setThoughtless")) {
            securityLevel = 1;
            setSecurityLevel(1);
        } else if (command.equals("setLow")) {
            securityLevel = 2;
            setSecurityLevel(2);
        } else if (command.equals("setStandard")) {
            securityLevel = 3;
            setSecurityLevel(3);
        } else if (command.equals("setHigh")) {
            securityLevel = 4;
            setSecurityLevel(4);
        } else if (command.equals("setParanoid")) {
            securityLevel = 5;
            setSecurityLevel(5);

        } else if (command.equals("setBcrypt")) {
            setSecurityLevel(securityLevel);
            KeyDerivation.setKdf(new BcryptKDF());
        } else if (command.equals("setScrypt")) {
            setSecurityLevel(securityLevel);
            KeyDerivation.setKdf(new ScryptKDF());
        } else if (command.equals("setDragonfly")) {
            setSecurityLevel(securityLevel);
            CatenaKDF.setVersionID("Dragonfly-Full");
            KeyDerivation.setKdf(new CatenaKDF());
        } else if (command.equals("setButterfly")) {
            setSecurityLevel(securityLevel);
            CatenaKDF.setVersionID("Butterfly-Full");
            KeyDerivation.setKdf(new CatenaKDF());
        } else if (command.equals("setPomelo")) {
            setSecurityLevel(securityLevel);
            KeyDerivation.setKdf(new PomeloKDF());

        } else if (command.equals("setBcryptParameters")) {

            @SuppressWarnings("unused")
            BcryptSetting bcryptSetting = new BcryptSetting();

        } else if (command.equals("setPomeloParameters")) {

            @SuppressWarnings("unused")
            PomeloSetting pomeloSetting = new PomeloSetting();

        } else if (command.equals("setScryptParameters")) {

            @SuppressWarnings("unused")
            ScryptSetting scryptSetting = new ScryptSetting();

        } else if (command.equals("setCatenaParameters")) {

            @SuppressWarnings("unused")
            CatenaSetting catenaSetting = new CatenaSetting();

        } else if (command.equals("setImageParameters")) {

            @SuppressWarnings("unused")
            ImageSetting imageSetting = new ImageSetting();

        } else if (command.equals("setShacal2")) {
            CipherStuff.setCipherAlgo(new Shacal2Engine());
        } else if (command.equals("setThreefish256")) {
            CipherStuff.setCipherAlgo(new ThreefishEngine(256));
        } else if (command.equals("setThreefish512")) {
            CipherStuff.setCipherAlgo(new ThreefishEngine(512));
        } else if (command.equals("setThreefish1024")) {
            CipherStuff.setCipherAlgo(new ThreefishEngine(1024));
        } else if (command.equals("setTwofish")) {
            CipherStuff.setCipherAlgo(new TwofishEngine());
        } else if (command.equals("setSerpent")) {
            CipherStuff.setCipherAlgo(new SerpentEngine());
        } else if (command.equals("setAES")) {
            CipherStuff.setCipherAlgo(new AESEngine());
        } else if (command.equals("setAESFast")) {
            CipherStuff.setCipherAlgo(new AESFastEngine());

            // hash function:
        } else if (command.equals("setWhirlpool")) {
            HashStuff.setHashAlgo(new WhirlpoolDigest());
        } else if (command.equals("setKeccak")) {
            HashStuff.setHashAlgo(new SHA3Digest());
        } else if (command.equals("setSha512")) {
            HashStuff.setHashAlgo(new SHA512Digest());
        } else if (command.equals("setSha384")) {
            HashStuff.setHashAlgo(new SHA384Digest());
        } else if (command.equals("setSkein512")) {
            HashStuff.setHashAlgo(new SkeinDigest(512, 512));
        } else if (command.equals("setBlake512")) {
            HashStuff.setHashAlgo(new Blake2bDigest());
            //      } else if (command.equals("setRipemd256")) {
            //         HashStuff.setHashAlgo( new RIPEMD256Digest() );          
        } else if (command.equals("setRipemd320")) {
            HashStuff.setHashAlgo(new RIPEMD320Digest());

        } else if (command.equals("setDE")) {
            PeaFactory.setI18n("de");
        } else if (command.equals("setEN")) {
            PeaFactory.setI18n("en");

        } else if (command.equals("notes")) {
            @SuppressWarnings("unused")
            InfoDialog info = new InfoDialog(languageBundle.getString("notes_description"), null, "notes");
        } else if (command.equals("editor")) {
            @SuppressWarnings("unused")
            InfoDialog info = new InfoDialog(languageBundle.getString("editor_description"), null, "editor");
        } else if (command.equals("image")) {
            @SuppressWarnings("unused")
            InfoDialog info = new InfoDialog(languageBundle.getString("image_description"), null, "image");
        } else if (command.equals("keyboard_info")) {
            @SuppressWarnings("unused")
            InfoDialog info = new InfoDialog("Onscreen Keyboard", null, "keyboard");
        } else if (command.equals("file")) {
            @SuppressWarnings("unused")
            InfoDialog info = new InfoDialog(languageBundle.getString("file_description"), null, "file");

        } else if (command.equals("problemHelp")) {
            JOptionPane pane = new JOptionPane(languageBundle.getString("problem_help_dialog"),
                    JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_OPTION, null, null);//new ImageIcon(PswDialogView.getImage()), null);
            pane.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
            //pane.setIconImage(PswDialogView.getImage());
            pane.setVisible(true);
            //pane.showMessageDialog(null, languageBundle.getString("problem_help_dialog"), null, JOptionPane.PLAIN_MESSAGE);
        } else if (command.equals("howToUse")) {
            JOptionPane.showMessageDialog(PeaFactory.getFrame(), languageBundle.getString("how_to_use_dialog"),
                    null, JOptionPane.PLAIN_MESSAGE);
        } else if (command.equals("aboutLicense")) {
            JOptionPane.showMessageDialog(PeaFactory.getFrame(), languageBundle.getString("about_license_dialog"),
                    null, JOptionPane.PLAIN_MESSAGE);
        }
    }

    //
    // this will set the Level for all KDF schemes
    protected void setSecurityLevel(int securityLevel) {
        if (securityLevel == 1) {
            //// ca. 40ms
            BcryptKDF.setRounds(6);

            CatenaKDF.setGarlicDragonfly(14);
            CatenaKDF.setLambdaDragonfly(2);
            CatenaKDF.setGarlicButterfly(12);
            CatenaKDF.setLambdaButterfly(4);

            PomeloKDF.setMemoryCost(10);
            PomeloKDF.setTimeCost(0);

            ScryptKDF.setcPUFactor(4096);
            ScryptKDF.setMemoryFactor(8);
            ScryptKDF.setParallelFactor(1);

        }
        if (securityLevel == 2) {
            //// ca. 120ms
            BcryptKDF.setRounds(10);

            CatenaKDF.setGarlicDragonfly(16);
            CatenaKDF.setLambdaDragonfly(2);
            CatenaKDF.setGarlicButterfly(13);
            CatenaKDF.setLambdaButterfly(4);

            PomeloKDF.setMemoryCost(14);
            PomeloKDF.setTimeCost(0);

            ScryptKDF.setcPUFactor(16384);
            ScryptKDF.setMemoryFactor(8);
            ScryptKDF.setParallelFactor(1);
        }
        if (securityLevel == 3) {
            //// ca. 450ms
            BcryptKDF.setRounds(12);

            CatenaKDF.setGarlicDragonfly(18);
            CatenaKDF.setLambdaDragonfly(2);
            CatenaKDF.setGarlicButterfly(14);
            CatenaKDF.setLambdaButterfly(4);

            PomeloKDF.setMemoryCost(15);
            PomeloKDF.setTimeCost(0);

            ScryptKDF.setcPUFactor(16384);
            ScryptKDF.setMemoryFactor(32);
            ScryptKDF.setParallelFactor(1);
        }
        if (securityLevel == 4) {
            //// ca. 1,4s (bei 13: 800ms)
            BcryptKDF.setRounds(14);

            CatenaKDF.setGarlicDragonfly(20);
            CatenaKDF.setLambdaDragonfly(2);
            CatenaKDF.setGarlicButterfly(15);
            CatenaKDF.setLambdaButterfly(4);

            PomeloKDF.setMemoryCost(18);
            PomeloKDF.setTimeCost(0);

            ScryptKDF.setcPUFactor(16384);
            ScryptKDF.setMemoryFactor(64);
            ScryptKDF.setParallelFactor(1);
        }
        if (securityLevel == 5) {
            //// ca. 5,5s (bei 15: 2,7s, bei 17: 11s)
            BcryptKDF.setRounds(16);

            CatenaKDF.setGarlicDragonfly(22);
            CatenaKDF.setLambdaDragonfly(2);
            CatenaKDF.setGarlicButterfly(17);
            CatenaKDF.setLambdaButterfly(4);

            PomeloKDF.setMemoryCost(20);
            PomeloKDF.setTimeCost(1);

            ScryptKDF.setcPUFactor(16384);
            ScryptKDF.setMemoryFactor(256);
            ScryptKDF.setParallelFactor(1);
        }
        // the instances of KeyDerivation must be updated with the new parameters
        updateKDF();
    }

    // Set a new instance of the current instance
    private void updateKDF() {
        if (KeyDerivation.getKdf() instanceof ScryptKDF) {
            KeyDerivation.setKdf(new ScryptKDF());
        } else if (KeyDerivation.getKdf() instanceof BcryptKDF) {
            KeyDerivation.setKdf(new BcryptKDF());
        } else if (KeyDerivation.getKdf() instanceof CatenaKDF) {
            KeyDerivation.setKdf(new CatenaKDF());
        } else if (KeyDerivation.getKdf() instanceof PomeloKDF) {
            KeyDerivation.setKdf(new PomeloKDF());
        }
    }
}