package com.dicarlo;
import ietf.params.xml.ns.keyprov.pskc.BinaryDataType;
import ietf.params.xml.ns.keyprov.pskc.DeviceInfoType;
import ietf.params.xml.ns.keyprov.pskc.KeyContainerType;
import ietf.params.xml.ns.keyprov.pskc.KeyDataType;
import ietf.params.xml.ns.keyprov.pskc.KeyPackageType;
import ietf.params.xml.ns.keyprov.pskc.KeyType;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.regex.Pattern;
import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;
import javax.swing.border.LineBorder;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.stream.StreamSource;
import org.apache.log4j.Logger;
import org.dyno.visual.swing.layouts.Bilateral;
import org.dyno.visual.swing.layouts.Constraints;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.layouts.Leading;
import org.jdamico.pskcbuilder.dataobjects.AlgorithmParameters;
import org.jdamico.pskcbuilder.dataobjects.Data;
import org.jdamico.pskcbuilder.dataobjects.DeviceInfo;
import org.jdamico.pskcbuilder.dataobjects.KeyPackage;
import org.jdamico.pskcbuilder.dataobjects.ResponseFormat;
import org.jdamico.pskcbuilder.dataobjects.Secret;
import org.jdamico.pskcbuilder.utils.Constants;
import org.w3._2001._04.xmlenc_.EncryptedDataType;
import com.sun.org.apache.xml.internal.security.utils.Base64;
/*
AUTHOR
MARCO DI CARLO
Jose Damico
* Eclipse Public License - v 1.0 (http://www.eclipse.org/legal/epl-v10.html)
*/
//VS4E -- DO NOT REMOVE THIS LINE!
public class MainWindow extends JFrame {
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger("trace");
private ResourceBundle rb = ResourceBundle.getBundle("MyResources",
Locale.getDefault());
String iconApplication = "/keyspair.png";
String iconApplicationsmall = "/keyspairsmall.png";
String iconLoading = "/loading.gif";
String iconFlagItaly = "/flag_italy.gif";
String iconFlagUk = "/flag_uk.gif";
String iconFlagChina = "/flag_china.gif";
String iconOk = "/ok.png";
String iconKo = "/ko.png";
private byte[] publicKeyBytes = null;
private byte[] privateKeyBytes = null;
private byte[] halfkey1 = null;
private byte[] halfkey2 = null;
private PublicKey publicKey = null;
private PrivateKey privateKey = null;
private String base64PublicKey = "";
private JPanel panelTitle;
private JLabel labelTitle;
private JPanel panelAction;
private JLabel labelIcon;
private JButton buttonClose;
private JPanel panelButtons;
private JFrame parent = null;
private JMenu menuAbout;
private JMenu menuFile;
private JMenu menuLanguage;
private JMenuBar menuBar;
private JTextPane jTextResults;
private JScrollPane jScrollPane0;
javax.swing.JMenuItem menuVersion = null;
javax.swing.JMenuItem menuEncrypt = null;
javax.swing.JMenuItem menuDecrypt = null;
javax.swing.JMenuItem menuTest = null;
javax.swing.JMenuItem menuItalian = null;
javax.swing.JMenuItem menuEnglish = null;
javax.swing.JMenuItem menuChinese = null;
private JProgressBar progressBar;
private boolean encryptMode = true;
private boolean testMode = false;
private boolean statusFileIn = false;
private boolean statusFileOut = false;
private boolean statusPublicKey = false;
private boolean statusPrivateKey1 = false;
private boolean statusPrivateKey2 = false;
private boolean statusFileInD = false;
private boolean statusFileOutD = false;
// START COMPONENT FOR ENCRYPTION
private JPanel panelEncrypt;
private JTextField textFileIn;
// private JTextField textFileOut;
private JTextField textPublicKey;
private JLabel labelFileIn;
// private JLabel labelFileOut;
private JLabel labelPublicKey;
private JButton buttonFileIn;
// private JButton buttonFileOut;
private JButton buttonPublicKey;
private JLabel labelStatusFileIn;
// private JLabel labelStatusFileOut;
private JLabel labelStatusPublicKey;
private JCheckBox checkBoxTest;
// END COMPONENT FOR ENCRYPTION
// START COMPONENT FOR DECRYPTION
private JPanel panelDecrypt;
private JTextField textFileInD;
private JTextField textFileOutD;
private JTextField textPrivateKey1;
private JLabel labelFileInD;
private JLabel labelFileOutD;
private JLabel labelPrivateKey1;
private JButton buttonFileInD;
private JButton buttonFileOutD;
private JButton buttonPrivateKey1;
private JLabel labelStatusFileInD;
private JLabel labelStatusFileOutD;
private JLabel labelStatusPrivateKey1;
// END COMPONENT FOR DECRYPTION
// START COMPONENT FOR TEST
private JPanel panelTest;
private JTextField textFileInT;
private JLabel labelStatusFileInT;
private JButton buttonFileInT;
private JLabel labelFileInT;
// END COMPONENT FOR TEST
private JButton buttonExecute;
private JLabel labelPrivateKey2;
private JTextField textPrivateKey2;
private JButton buttonPrivateKey2;
private JLabel labelStatusPrivateKey2;
private JLabel labelWait;
private JLabel labelProgress;
public MainWindow() {
initComponents();
}
private void initComponents() {
setResizable(false);
setLayout(new GroupLayout());
add(getPanelTitle(), new Constraints(new Bilateral(12, 12, 0),
new Leading(7, 57, 10, 10)));
add(getPanelButtons(), new Constraints(new Leading(12, 584, 12, 12),
new Leading(230, 65, 10, 10)));
add(getProgressBar(), new Constraints(new Bilateral(12, 12, 10),
new Leading(214, 12, 12)));
add(getPanelAction(), new Constraints(new Bilateral(12, 12, 0),
new Leading(70, 140, 10, 10)));
setJMenuBar(getJMenuBar());
setSize(608, 324);
}
private JCheckBox getCheckBoxTest() {
if (checkBoxTest == null) {
checkBoxTest = new JCheckBox();
checkBoxTest.setText(rb.getString("title.testBefore"));
checkBoxTest.setSelected(true);
}
return checkBoxTest;
}
// START COMPONENT FOR ENCRYPTION
private JLabel getLabelPublicKey() {
if (labelPublicKey == null) {
labelPublicKey = new JLabel();
labelPublicKey.setText(rb.getString("title.publickey"));
}
return labelPublicKey;
}
private JTextField getTextPublicKey() {
if (textPublicKey == null) {
textPublicKey = new JTextField();
textPublicKey.setEditable(false);
}
return textPublicKey;
}
private JButton getButtonPublicKey() {
if (buttonPublicKey == null) {
buttonPublicKey = new JButton();
buttonPublicKey.setText("....");
buttonPublicKey
.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "key file";
}
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
} else {
String path = file.getAbsolutePath()
.toLowerCase();
return path.toLowerCase().endsWith(
".key");
}
}
});
if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (file != null) {
if (file.exists()
&& file.getAbsolutePath()
.toLowerCase()
.endsWith(".key")
&& file.isFile()) {
labelStatusPublicKey
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconOk)));
textPublicKey.setText(file
.getAbsolutePath());
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
publicKeyBytes = new byte[(int) file
.length()];
fis.read(publicKeyBytes);
publicKey = KeyFactory
.getInstance("RSA")
.generatePublic(
new X509EncodedKeySpec(
Base64.decode(publicKeyBytes)));
fis.close();
fis = null;
base64PublicKey = new String(
publicKeyBytes);
} catch (Exception e) {
e.printStackTrace();
base64PublicKey = "";
publicKey = null;
publicKeyBytes = null;
textPublicKey.setText("");
labelStatusPublicKey
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconKo)));
JOptionPane.showMessageDialog(
parent,
rb.getString("msg.invalidpublickey"),
rb.getString("title.error"),
JOptionPane.ERROR_MESSAGE);
} finally {
try {
if (fis != null)
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
statusPublicKey = (publicKey != null);
// if(statusFileOut&&statusFileIn&&statusPublicKey){
if (statusFileIn && statusPublicKey) {
buttonExecute.setEnabled(true);
} else {
buttonExecute.setEnabled(false);
}
} else {
labelStatusPublicKey
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconKo)));
textPublicKey.setText("");
statusPublicKey = false;
buttonExecute.setEnabled(false);
}
}
}
repaint();
}
}));
}
return buttonPublicKey;
}
private JLabel getLabelStatusPublicKey() {
if (labelStatusPublicKey == null) {
labelStatusPublicKey = new JLabel();
labelStatusPublicKey.setIcon(new ImageIcon(getClass().getResource(
"/ko.png")));
statusPublicKey = false;
}
return labelStatusPublicKey;
}
private JLabel getLabelFileIn() {
if (labelFileIn == null) {
labelFileIn = new JLabel();
labelFileIn.setText(rb.getString("title.filein"));
}
return labelFileIn;
}
private JTextField getTextFileIn() {
if (textFileIn == null) {
textFileIn = new JTextField();
textFileIn.setEditable(false);
}
return textFileIn;
}
private JButton getButtonFileIn() {
if (buttonFileIn == null) {
buttonFileIn = new JButton();
buttonFileIn.setText("....");
buttonFileIn
.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
fileChooser
.addChoosableFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
} else {
return f.getName()
.toLowerCase()
.endsWith(".csv");
}
}
@Override
public String getDescription() {
return "CSV files";
}
});
if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (file != null) {
if (file.exists()) {
labelStatusFileIn
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconOk)));
textFileIn.setText(file
.getAbsolutePath());
statusFileIn = true;
// if(statusFileOut&&statusFileIn&&statusPublicKey){
if (statusFileIn && statusPublicKey) {
buttonExecute.setEnabled(true);
} else {
buttonExecute.setEnabled(false);
}
} else {
labelStatusFileIn
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconKo)));
textFileIn.setText("");
statusFileIn = false;
buttonExecute.setEnabled(false);
}
}
}
repaint();
}
}));
}
return buttonFileIn;
}
private JLabel getLabelStatusFileIn() {
if (labelStatusFileIn == null) {
labelStatusFileIn = new JLabel();
labelStatusFileIn.setIcon(new javax.swing.ImageIcon(getClass()
.getResource(iconKo)));
statusFileIn = false;
}
return labelStatusFileIn;
}
private JPanel getPanelEncrypt() {
if (panelEncrypt == null) {
panelEncrypt = new JPanel();
panelEncrypt.setBorder(BorderFactory.createBevelBorder(
BevelBorder.LOWERED, null, null, null, null));
panelEncrypt.setLayout(new GroupLayout());
panelEncrypt.add(getTextFileIn(), new Constraints(new Leading(91,
319, 10, 10), new Leading(5, 24, 10, 10)));
panelEncrypt.add(getButtonFileIn(), new Constraints(new Leading(
413, 12, 12), new Leading(3, 12, 12)));
panelEncrypt.add(getLabelStatusFileIn(), new Constraints(
new Leading(465, 12, 12), new Leading(5, 12, 12)));
panelEncrypt.add(getLabelFileIn(), new Constraints(new Leading(4,
73, 10, 10), new Leading(12, 12, 12)));
panelEncrypt.add(getTextPublicKey(), new Constraints(new Leading(
91, 319, 12, 12), new Leading(44, 24, 10, 10)));
panelEncrypt.add(getButtonPublicKey(), new Constraints(new Leading(
414, 10, 10), new Leading(44, 10, 10)));
panelEncrypt.add(getLabelStatusPublicKey(), new Constraints(
new Leading(465, 12, 12), new Leading(44, 10, 10)));
panelEncrypt.add(getLabelPublicKey(), new Constraints(new Leading(
4, 80, 12, 12), new Leading(47, 12, 12)));
panelEncrypt.add(getCheckBoxTest(), new Constraints(new Leading(4,
12, 12), new Leading(81, 12, 12)));
}
return panelEncrypt;
}
// START COMPONENT FOR DECRYPTION
private JLabel getLabelPrivateKey2() {
if (labelPrivateKey2 == null) {
labelPrivateKey2 = new JLabel();
labelPrivateKey2.setText(rb.getString("title.privatekey2"));
}
return labelPrivateKey2;
}
private JTextField getTextPrivateKey2() {
if (textPrivateKey2 == null) {
textPrivateKey2 = new JTextField();
textPrivateKey2.setEditable(false);
textPrivateKey2.setText("");
}
return textPrivateKey2;
}
private JButton getButtonPrivateKey2() {
if (buttonPrivateKey2 == null) {
buttonPrivateKey2 = new JButton();
buttonPrivateKey2.setText("....");
buttonPrivateKey2
.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "key file";
}
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
} else {
String path = file.getAbsolutePath()
.toLowerCase();
return path.toLowerCase().endsWith(
".key");
}
}
});
if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (file != null) {
if (file.exists()
&& file.getAbsolutePath()
.toLowerCase()
.endsWith(".key")
&& file.isFile()) {
textPrivateKey2.setText(file
.getAbsolutePath());
String filePK1 = textPrivateKey1
.getText();
String filePK2 = textPrivateKey2
.getText();
if (!"".equals(filePK1)
&& !"".equals(filePK2)) {
FileInputStream fis1 = null;
FileInputStream fis2 = null;
try {
fis1 = new FileInputStream(
new File(filePK1));
fis2 = new FileInputStream(
new File(filePK2));
halfkey1 = new byte[(int) new File(
filePK1).length()];
halfkey2 = new byte[(int) new File(
filePK2).length()];
fis1.read(halfkey1);
fis2.read(halfkey2);
byte[] b1 = Base64
.decode(halfkey1);
byte[] b2 = Base64
.decode(halfkey2);
privateKeyBytes = new byte[halfkey1.length
+ halfkey2.length];
for (int i = 0; i < b1.length; i++) {
privateKeyBytes[i] = b1[i];
}
for (int i = 0; i < b2.length; i++) {
privateKeyBytes[i
+ b1.length] = b2[i];
}
privateKey = KeyFactory
.getInstance("RSA")
.generatePrivate(
new PKCS8EncodedKeySpec(
privateKeyBytes));
fis1.close();
fis2.close();
fis1 = null;
fis2 = null;
labelStatusPrivateKey1
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconOk)));
labelStatusPrivateKey2
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconOk)));
} catch (Exception e) {
e.printStackTrace();
privateKey = null;
privateKeyBytes = null;
textPrivateKey1.setText("");
textPrivateKey2.setText("");
labelStatusPrivateKey1
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconKo)));
labelStatusPrivateKey2
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconKo)));
JOptionPane.showMessageDialog(
parent,
rb.getString("msg.invalidprivatekey"),
rb.getString("title.error"),
JOptionPane.ERROR_MESSAGE);
} finally {
try {
if (fis1 != null)
fis1.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (fis2 != null)
fis2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
statusPrivateKey1 = (privateKey != null);
statusPrivateKey2 = statusPrivateKey1;
if (statusFileOut && statusFileIn
&& statusPrivateKey1
&& statusPrivateKey2) {
buttonExecute.setEnabled(true);
} else {
buttonExecute.setEnabled(false);
}
} else {
statusPrivateKey1 = false;
statusPrivateKey2 = false;
labelStatusPrivateKey1
.setIcon(null);
labelStatusPrivateKey2
.setIcon(null);
}
if (statusFileOutD && statusFileInD
&& statusPrivateKey1
&& statusPrivateKey2) {
buttonExecute.setEnabled(true);
} else {
buttonExecute.setEnabled(false);
}
} else {
labelStatusPrivateKey1
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconKo)));
textPrivateKey1.setText("");
statusPrivateKey1 = false;
buttonExecute.setEnabled(false);
}
}
}
repaint();
}
}));
}
return buttonPrivateKey2;
}
private JLabel getLabelStatusPrivateKey2() {
if (labelStatusPrivateKey2 == null) {
labelStatusPrivateKey2 = new JLabel();
labelStatusPrivateKey2.setIcon(new ImageIcon(getClass()
.getResource("/ko.png")));
}
return labelStatusPrivateKey2;
}
private JLabel getLabelPrivateKey1() {
if (labelPrivateKey1 == null) {
labelPrivateKey1 = new JLabel();
labelPrivateKey1.setText(rb.getString("title.privatekey1"));
}
return labelPrivateKey1;
}
private JTextField getTextPrivateKey1() {
if (textPrivateKey1 == null) {
textPrivateKey1 = new JTextField();
textPrivateKey1.setEditable(false);
}
return textPrivateKey1;
}
private JButton getButtonPrivateKey1() {
if (buttonPrivateKey1 == null) {
buttonPrivateKey1 = new JButton();
buttonPrivateKey1.setText("....");
buttonPrivateKey1
.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "key file";
}
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
} else {
String path = file.getAbsolutePath()
.toLowerCase();
return path.toLowerCase().endsWith(
".key");
}
}
});
if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (file != null) {
if (file.exists()
&& file.getAbsolutePath()
.toLowerCase()
.endsWith(".key")
&& file.isFile()) {
textPrivateKey1.setText(file
.getAbsolutePath());
String filePK1 = textPrivateKey1
.getText();
String filePK2 = textPrivateKey2
.getText();
if (!"".equals(filePK1)
&& !"".equals(filePK2)) {
FileInputStream fis1 = null;
FileInputStream fis2 = null;
try {
fis1 = new FileInputStream(
new File(filePK1));
fis2 = new FileInputStream(
new File(filePK2));
halfkey1 = new byte[(int) new File(
filePK1).length()];
halfkey2 = new byte[(int) new File(
filePK2).length()];
fis1.read(halfkey1);
fis2.read(halfkey2);
byte[] b1 = Base64
.decode(halfkey1);
byte[] b2 = Base64
.decode(halfkey2);
privateKeyBytes = new byte[halfkey1.length
+ halfkey2.length];
for (int i = 0; i < b1.length; i++) {
privateKeyBytes[i] = b1[i];
}
for (int i = 0; i < b2.length; i++) {
privateKeyBytes[i
+ b1.length] = b2[i];
}
/*
* privateKeyBytes = new
* byte[halfkey1
* .length+halfkey2.length];
* for(int
* i=0;i<halfkey1.length;i++){
* privateKeyBytes
* [i]=halfkey1[i]; } for(int
* i=0;i<halfkey2.length;i++){
* privateKeyBytes
* [i+halfkey1.length
* ]=halfkey2[i]; }
*/
privateKey = KeyFactory
.getInstance("RSA")
.generatePrivate(
new PKCS8EncodedKeySpec(
privateKeyBytes));
fis1.close();
fis2.close();
fis1 = null;
fis2 = null;
labelStatusPrivateKey1
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconOk)));
labelStatusPrivateKey2
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconOk)));
} catch (Exception e) {
e.printStackTrace();
privateKey = null;
privateKeyBytes = null;
textPrivateKey1.setText("");
textPrivateKey2.setText("");
labelStatusPrivateKey1
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconKo)));
labelStatusPrivateKey2
.setIcon(new javax.swing.ImageIcon(
getClass()
.getResource(
iconKo)));
JOptionPane.showMessageDialog(
parent,
rb.getString("msg.invalidprivatekey"),
rb.getString("title.error"),
JOptionPane.ERROR_MESSAGE);
} finally {
try {
if (fis1 != null)
fis1.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (fis2 != null)
fis2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
statusPrivateKey1 = (privateKey != null);
statusPrivateKey2 = statusPrivateKey1;
if (statusFileOut && statusFileIn
&& statusPrivateKey1
&& statusPrivateKey2) {
buttonExecute.setEnabled(true);
} else {
buttonExecute.setEnabled(false);
}
} else {
statusPrivateKey1 = false;
statusPrivateKey2 = false;
labelStatusPrivateKey1
.setIcon(null);
labelStatusPrivateKey2
.setIcon(null);
}
if (statusFileOutD && statusFileInD
&& statusPrivateKey1
&& statusPrivateKey2) {
buttonExecute.setEnabled(true);
} else {
buttonExecute.setEnabled(false);
}
} else {
labelStatusPrivateKey1
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconKo)));
textPrivateKey1.setText("");
statusPrivateKey1 = false;
buttonExecute.setEnabled(false);
}
}
}
repaint();
}
}));
}
return buttonPrivateKey1;
}
private JLabel getLabelStatusPrivateKey1() {
if (labelStatusPrivateKey1 == null) {
labelStatusPrivateKey1 = new JLabel();
labelStatusPrivateKey1.setIcon(new ImageIcon(getClass()
.getResource("/ko.png")));
statusPrivateKey1 = false;
}
return labelStatusPrivateKey1;
}
private JLabel getLabelFileOutD() {
if (labelFileOutD == null) {
labelFileOutD = new JLabel();
labelFileOutD.setText(rb.getString("title.fileout"));
}
return labelFileOutD;
}
private JTextField getTextFileOutD() {
if (textFileOutD == null) {
textFileOutD = new JTextField();
textFileOutD.setEditable(false);
}
return textFileOutD;
}
private JButton getButtonFileOutD() {
if (buttonFileOutD == null) {
buttonFileOutD = new JButton();
buttonFileOutD.setText("....");
buttonFileOutD
.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
fileChooser
.addChoosableFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
} else {
return f.getName()
.toLowerCase()
.endsWith(".xml");
}
}
@Override
public String getDescription() {
return "XML files";
}
});
if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (file != null) {
if (!file.isDirectory()
&& !"".equals(file
.getAbsolutePath())) {
labelStatusFileOutD
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconOk)));
textFileOutD.setText(file
.getAbsolutePath());
statusFileOutD = true;
if (statusFileOutD && statusFileInD
&& statusPrivateKey1) {
buttonExecute.setEnabled(true);
} else {
buttonExecute.setEnabled(false);
}
} else {
labelStatusFileOutD
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconKo)));
textFileOutD.setText("");
statusFileOutD = false;
buttonExecute.setEnabled(false);
}
}
}
repaint();
}
}));
}
return buttonFileOutD;
}
private JLabel getLabelStatusFileOutD() {
if (labelStatusFileOutD == null) {
labelStatusFileOutD = new JLabel();
labelStatusFileOutD.setIcon(new ImageIcon(getClass().getResource(
"/ko.png")));
statusFileOutD = false;
}
return labelStatusFileOutD;
}
private JLabel getLabelFileInD() {
if (labelFileInD == null) {
labelFileInD = new JLabel();
labelFileInD.setText(rb.getString("title.filein"));
}
return labelFileInD;
}
private JTextField getTextFileInD() {
if (textFileInD == null) {
textFileInD = new JTextField();
textFileInD.setEditable(false);
}
return textFileInD;
}
private JButton getButtonFileInD() {
if (buttonFileInD == null) {
buttonFileInD = new JButton();
buttonFileInD.setText("....");
buttonFileInD
.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
fileChooser
.addChoosableFileFilter(new FileNameExtensionFilter(
"XML Ciphered files", "xml",
"ciphered"));
if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (file != null) {
if (file.exists()) {
labelStatusFileInD
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconOk)));
textFileInD.setText(file
.getAbsolutePath());
statusFileInD = true;
if (statusFileOutD && statusFileInD
&& statusPrivateKey1) {
buttonExecute.setEnabled(true);
} else {
buttonExecute.setEnabled(false);
}
} else {
labelStatusFileInD
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconKo)));
textFileInD.setText("");
statusFileInD = false;
buttonExecute.setEnabled(false);
}
}
}
repaint();
}
}));
}
return buttonFileInD;
}
private JLabel getLabelStatusFileInD() {
if (labelStatusFileInD == null) {
labelStatusFileInD = new JLabel();
labelStatusFileInD.setIcon(new javax.swing.ImageIcon(getClass()
.getResource(iconKo)));
statusFileInD = false;
}
return labelStatusFileInD;
}
private JPanel getPanelDecrypt() {
if (panelDecrypt == null) {
panelDecrypt = new JPanel();
panelDecrypt.setBorder(BorderFactory.createBevelBorder(
BevelBorder.LOWERED, null, null, null, null));
panelDecrypt.setLayout(new GroupLayout());
panelDecrypt.add(getTextFileInD(), new Constraints(new Leading(91,
319, 12, 12), new Leading(4, 24, 12, 12)));
panelDecrypt.add(getButtonFileInD(), new Constraints(new Leading(
413, 12, 12), new Leading(3, 12, 12)));
panelDecrypt.add(getLabelStatusFileInD(), new Constraints(
new Leading(465, 12, 12), new Leading(4, 12, 12)));
panelDecrypt.add(getLabelFileInD(), new Constraints(new Leading(12,
47, 12, 12), new Leading(8, 12, 12)));
panelDecrypt.add(getTextFileOutD(), new Constraints(new Leading(91,
319, 12, 12), new Leading(30, 24, 12, 12)));
panelDecrypt.add(getLabelFileOutD(), new Constraints(new Leading(
12, 50, 12, 12), new Leading(36, 12, 12)));
panelDecrypt.add(getButtonFileOutD(), new Constraints(new Leading(
413, 12, 12), new Leading(30, 12, 12)));
panelDecrypt.add(getLabelStatusFileOutD(), new Constraints(
new Leading(465, 12, 12), new Leading(30, 12, 12)));
panelDecrypt.add(getLabelPrivateKey2(), new Constraints(
new Leading(12, 76, 12, 12), new Leading(94, 12, 12)));
panelDecrypt.add(getTextPrivateKey1(), new Constraints(new Leading(
91, 319, 12, 12), new Leading(62, 24, 44, 48)));
panelDecrypt.add(getTextPrivateKey2(), new Constraints(new Leading(
91, 319, 12, 12), new Leading(88, 24, 12, 12)));
panelDecrypt.add(getButtonPrivateKey1(), new Constraints(
new Leading(413, 12, 12), new Leading(62, 12, 12)));
panelDecrypt.add(getLabelStatusPrivateKey1(), new Constraints(
new Leading(465, 12, 12), new Leading(62, 12, 12)));
panelDecrypt.add(getLabelPrivateKey1(), new Constraints(
new Leading(12, 76, 12, 12), new Leading(67, 12, 12)));
panelDecrypt.add(getButtonPrivateKey2(), new Constraints(
new Leading(413, 12, 12), new Leading(89, 12, 12)));
panelDecrypt.add(getLabelStatusPrivateKey2(), new Constraints(
new Leading(465, 24, 12, 12), new Leading(90, 12, 12)));
panelDecrypt.setVisible(false);
}
return panelDecrypt;
}
// START COMPONENT FOR TEST
private JLabel getLabelFileInT() {
if (labelFileInT == null) {
labelFileInT = new JLabel();
labelFileInT.setText(rb.getString("title.filein"));
}
return labelFileInT;
}
private JTextField getTextFileInT() {
if (textFileInT == null) {
textFileInT = new JTextField();
textFileInT.setEditable(false);
}
return textFileInT;
}
private JButton getButtonFileInT() {
if (buttonFileInT == null) {
buttonFileInT = new JButton();
buttonFileInT.setText("....");
buttonFileInT
.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
fileChooser
.addChoosableFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
} else {
return f.getName()
.toLowerCase()
.endsWith(".csv");
}
}
@Override
public String getDescription() {
return "CSV files";
}
});
if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (file != null) {
if (file.exists()) {
labelStatusFileInT
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconOk)));
textFileInT.setText(file
.getAbsolutePath());
labelStatusFileIn
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconOk)));
textFileIn.setText(file
.getAbsolutePath());
buttonExecute.setEnabled(true);
} else {
labelStatusFileInT
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconKo)));
textFileInT.setText("");
labelStatusFileIn
.setIcon(new javax.swing.ImageIcon(
getClass().getResource(
iconKo)));
textFileIn.setText("");
buttonExecute.setEnabled(false);
}
}
}
repaint();
}
}));
}
return buttonFileInT;
}
private JLabel getLabelStatusFileInT() {
if (labelStatusFileInT == null) {
labelStatusFileInT = new JLabel();
labelStatusFileInT.setIcon(new javax.swing.ImageIcon(getClass()
.getResource(iconKo)));
}
return labelStatusFileInT;
}
private JScrollPane getJScrollPane0() {
if (jScrollPane0 == null) {
jScrollPane0 = new JScrollPane();
jScrollPane0.setViewportView(getTextResults());
}
return jScrollPane0;
}
private JTextPane getTextResults() {
if (jTextResults == null) {
jTextResults = new JTextPane();
jTextResults.setText("");
jTextResults.setEditable(false);
}
return jTextResults;
}
private JPanel getPanelTest() {
if (panelTest == null) {
panelTest = new JPanel();
panelTest.setBorder(BorderFactory.createBevelBorder(
BevelBorder.LOWERED, null, null, null, null));
panelTest.setLayout(new GroupLayout());
panelTest.add(getTextFileInT(), new Constraints(new Leading(91,
319, 10, 10), new Leading(5, 24, 10, 10)));
panelTest.add(getButtonFileInT(), new Constraints(new Leading(413,
10, 10), new Leading(4, 12, 12)));
panelTest.add(getLabelStatusFileInT(), new Constraints(new Leading(
465, 12, 12), new Leading(5, 12, 12)));
panelTest.add(getLabelFileInT(), new Constraints(new Leading(4, 73,
10, 10), new Leading(12, 12, 12)));
panelTest.add(getJScrollPane0(), new Constraints(new Leading(5,
484, 12, 12), new Leading(36, 80, 10, 10)));
}
return panelTest;
}
private JProgressBar getProgressBar() {
if (progressBar == null) {
progressBar = new JProgressBar(0, 100);
progressBar.setVisible(false);
}
return progressBar;
}
public JMenuBar getJMenuBar() {
if (menuBar == null) {
menuBar = new JMenuBar();
menuBar.add(getMenuFile());
menuBar.add(getMenuLanguage());
menuBar.add(getMenuAbout());
}
return menuBar;
}
private JMenu getMenuFile() {
if (menuFile == null) {
menuFile = new JMenu();
menuFile.setText(rb.getString("title.file"));
menuFile.setMnemonic('F');
menuFile.add(getMenuEncrypt());
menuFile.add(getMenuDecrypt());
menuFile.add(getMenuTest());
}
return menuFile;
}
private JMenu getMenuLanguage() {
if (menuLanguage == null) {
menuLanguage = new JMenu();
menuLanguage.setText(rb.getString("title.language"));
menuLanguage.setMnemonic('L');
menuLanguage.add(getMenuItalian());
menuLanguage.add(getMenuEnglish());
menuLanguage.add(getMenuChinese());
}
return menuLanguage;
}
private JMenuItem getMenuItalian() {
if (menuItalian == null) {
menuItalian = new javax.swing.JMenuItem("Italiano", new ImageIcon(
this.getClass().getResource(iconFlagItaly)));
menuItalian.setMnemonic('I');
menuItalian.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Locale.setDefault(Locale.ITALIAN);
reloadLocale();
}
}));
}
return menuItalian;
}
private JMenuItem getMenuEnglish() {
if (menuEnglish == null) {
menuEnglish = new javax.swing.JMenuItem("English", new ImageIcon(
this.getClass().getResource(iconFlagUk)));
menuEnglish.setMnemonic('E');
menuEnglish.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Locale.setDefault(Locale.ENGLISH);
reloadLocale();
}
}));
}
return menuEnglish;
}
private JMenuItem getMenuChinese() {
if (menuChinese == null) {
menuChinese = new javax.swing.JMenuItem("中国的", new ImageIcon(this
.getClass().getResource(iconFlagChina)));
menuChinese.setMnemonic('C');
menuChinese.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Locale.setDefault(Locale.CHINESE);
reloadLocale();
}
}));
}
return menuChinese;
}
public void reloadLocale() {
rb = ResourceBundle.getBundle("MyResources", Locale.getDefault());
menuFile.setText(rb.getString("title.file"));
menuLanguage.setText(rb.getString("title.language"));
menuEncrypt.setText(rb.getString("title.encrypt"));
menuDecrypt.setText(rb.getString("title.decrypt"));
menuTest.setText(rb.getString("title.test"));
menuAbout.setText(rb.getString("title.about"));
menuVersion.setText(rb.getString("title.version"));
buttonClose.setText(rb.getString("button.close"));
labelTitle.setText(rb.getString("title"));
labelPublicKey.setText(rb.getString("title.publickey"));
// labelFileOut.setText(rb.getString("title.fileout"));
labelFileIn.setText(rb.getString("title.filein"));
checkBoxTest.setText(rb.getString("title.testBefore"));
labelFileInT.setText(rb.getString("title.filein"));
if (testMode) {
parent.setTitle(rb.getString("title") + " - ["
+ rb.getString("title.test") + "]");
buttonExecute.setText(rb.getString("title.test"));
buttonExecute.setMnemonic('T');
} else {
if (encryptMode) {
parent.setTitle(rb.getString("title") + " - ["
+ rb.getString("title.encrypt") + "]");
buttonExecute.setText(rb.getString("title.encrypt"));
buttonExecute.setMnemonic('C');
} else {
parent.setTitle(rb.getString("title") + " - ["
+ rb.getString("title.decrypt") + "]");
buttonExecute.setText(rb.getString("title.decrypt"));
buttonExecute.setMnemonic('D');
}
}
repaint();
}
private JMenuItem getMenuEncrypt() {
if (menuEncrypt == null) {
menuEncrypt = new javax.swing.JMenuItem(
rb.getString("title.encrypt"));
menuEncrypt.setMnemonic('C');
menuEncrypt.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clearPane(jTextResults);
encryptMode = true;
testMode = false;
parent.setTitle(rb.getString("title") + " - ["
+ rb.getString("title.encrypt") + "]");
panelEncrypt.setVisible(true);
panelDecrypt.setVisible(false);
panelTest.setVisible(false);
buttonExecute.setText(rb.getString("title.encrypt"));
buttonExecute.setMnemonic('C');
buttonExecute.setEnabled(false);
textPublicKey.setText("");
statusPublicKey = false;
labelStatusPublicKey.setIcon(new javax.swing.ImageIcon(
getClass().getResource(iconKo)));
textFileIn.setText("");
statusFileIn = false;
labelStatusFileIn.setIcon(new javax.swing.ImageIcon(
getClass().getResource(iconKo)));
// textFileOut.setText("");
statusFileOut = false;
// labelStatusFileOut.setIcon(new
// javax.swing.ImageIcon(getClass().getResource(iconKo)));
publicKey = null;
publicKeyBytes = null;
base64PublicKey = "";
test = false;
}
}));
}
return menuEncrypt;
}
private JMenuItem getMenuDecrypt() {
if (menuDecrypt == null) {
menuDecrypt = new javax.swing.JMenuItem(
rb.getString("title.decrypt"));
menuDecrypt.setMnemonic('D');
menuDecrypt.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clearPane(jTextResults);
encryptMode = false;
testMode = false;
parent.setTitle(rb.getString("title") + " - ["
+ rb.getString("title.decrypt") + "]");
panelEncrypt.setVisible(false);
panelDecrypt.setVisible(true);
panelTest.setVisible(false);
buttonExecute.setText(rb.getString("title.decrypt"));
buttonExecute.setMnemonic('D');
buttonExecute.setEnabled(false);
textPrivateKey1.setText("");
statusPrivateKey1 = false;
labelStatusPrivateKey1.setIcon(new javax.swing.ImageIcon(
getClass().getResource(iconKo)));
textPrivateKey2.setText("");
statusPrivateKey2 = false;
labelStatusPrivateKey2.setIcon(new javax.swing.ImageIcon(
getClass().getResource(iconKo)));
textFileInD.setText("");
statusFileInD = false;
labelStatusFileInD.setIcon(new javax.swing.ImageIcon(
getClass().getResource(iconKo)));
textFileOutD.setText("");
statusFileOutD = false;
labelStatusFileOutD.setIcon(new javax.swing.ImageIcon(
getClass().getResource(iconKo)));
privateKey = null;
privateKeyBytes = null;
halfkey1 = null;
halfkey2 = null;
test = false;
}
}));
}
return menuDecrypt;
}
private JMenuItem getMenuTest() {
if (menuTest == null) {
menuTest = new javax.swing.JMenuItem(rb.getString("title.test"));
menuTest.setMnemonic('T');
menuTest.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clearPane(jTextResults);
testMode = true;
encryptMode = false;
parent.setTitle(rb.getString("title") + " - ["
+ rb.getString("title.test") + "]");
panelEncrypt.setVisible(false);
panelDecrypt.setVisible(false);
panelTest.setVisible(true);
buttonExecute.setText(rb.getString("title.test"));
buttonExecute.setMnemonic('T');
buttonExecute.setEnabled(false);
textFileInT.setText("");
labelStatusFileInT.setIcon(new javax.swing.ImageIcon(
getClass().getResource(iconKo)));
publicKey = null;
publicKeyBytes = null;
privateKey = null;
privateKeyBytes = null;
halfkey1 = null;
halfkey2 = null;
test = true;
}
}));
}
return menuTest;
}
private JMenu getMenuAbout() {
if (menuAbout == null) {
menuAbout = new JMenu();
menuAbout.setText(rb.getString("title.about"));
menuAbout.setMnemonic('A');
menuAbout.add(getMenuVersion());
}
return menuAbout;
}
private JMenuItem getMenuVersion() {
if (menuVersion == null) {
menuVersion = new javax.swing.JMenuItem(
rb.getString("title.version"));
menuVersion.setMnemonic('V');
menuVersion.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
AboutWindow frame = new AboutWindow(parent, true);
frame.setIcon();
frame.setVisible(true);
}
}));
}
return menuVersion;
}
private JPanel getPanelButtons() {
if (panelButtons == null) {
panelButtons = new JPanel();
panelButtons.setBorder(BorderFactory.createBevelBorder(
BevelBorder.LOWERED, null, null, null, null));
panelButtons.setLayout(new GroupLayout());
panelButtons.add(getButtonExecute(), new Constraints(new Leading(
67, 115, 10, 10), new Leading(5, 53, 12, 12)));
panelButtons.add(getButtonClose(), new Constraints(new Leading(389,
115, 10, 10), new Leading(5, 53, 12, 12)));
panelButtons.add(getLabelWait(), new Constraints(new Leading(266,
10, 10), new Leading(26, 12, 12)));
panelButtons.add(getLabelProgress(), new Constraints(new Leading(
218, 10, 10), new Leading(3, 10, 10)));
}
return panelButtons;
}
private JButton getButtonExecute() {
if (buttonExecute == null) {
buttonExecute = new JButton();
buttonExecute.setFont(new Font("Serif", Font.BOLD, 16));
buttonExecute.setText(rb.getString("title.encrypt"));
buttonExecute.setMnemonic('C');
buttonExecute.setEnabled(false);
buttonExecute
.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent evt) {
new Thread() {
@Override
public void run() {
if (testMode) {
mapSerialSeed.clear();
clearPane(jTextResults);
// jTextResults.setText("");
testFile();
} else {
mapSerialSeed.clear();
clearPane(jTextResults);
// jTextResults.setText("");
if (encryptMode) {
// if(statusFileIn&&statusFileOut&&statusPublicKey){
if (statusFileIn && statusPublicKey) {
if (checkBoxTest.isSelected()) {
test = true;
panelEncrypt
.setVisible(false);
panelTest.setVisible(true);
textFileInT
.setText(textFileIn
.getText());
repaint();
testFile();
repaint();
if (serialDuplicated == true
|| errorReadingLine == true
|| errorVerifying == true) {
return;
} else {
panelEncrypt.setVisible(true);
panelTest.setVisible(false);
reloadPublicKey();
test = false;
encryptFile();
}
} else {
test = false;
encryptFile();
}
} else {
}
} else {
if (statusFileInD && statusFileOutD
&& statusPrivateKey1
&& statusPrivateKey2) {
decryptFile();
} else {
}
}
}
}
}.start();
}
}));
}
return buttonExecute;
}
private JButton getButtonClose() {
if (buttonClose == null) {
buttonClose = new JButton();
buttonClose.setText(rb.getString("button.close"));
buttonClose.setMnemonic('C');
buttonClose.setFont(new Font("Serif", Font.BOLD, 16));
buttonClose.setHorizontalAlignment(SwingConstants.CENTER);
buttonClose.addActionListener((new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
}));
}
return buttonClose;
}
private JLabel getLabelWait() {
if (labelWait == null) {
labelWait = new JLabel();
labelWait.setIcon(new javax.swing.ImageIcon(getClass().getResource(
iconLoading)));
labelWait.setVisible(false);
}
return labelWait;
}
private JLabel getLabelIcon() {
if (labelIcon == null) {
labelIcon = new JLabel();
// jLabel0.setText("jLabel0");
labelIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource(
iconApplicationsmall)));
}
return labelIcon;
}
private JLabel getLabelProgress() {
if (labelProgress == null) {
labelProgress = new JLabel();
labelProgress.setForeground(new Color(0, 0, 255));
labelProgress.setFont(new Font("Serif", Font.BOLD, 16));
labelProgress.setText("jLabel0");
labelProgress.setVisible(false);
}
return labelProgress;
}
private JPanel getPanelAction() {
if (panelAction == null) {
panelAction = new JPanel();
panelAction.setBorder(new LineBorder(Color.black, 1, false));
panelAction.setLayout(new GroupLayout());
panelAction.add(getLabelIcon(), new Constraints(new Leading(8, 53,
18, 18), new Leading(30, 54, 12, 12)));
panelAction.add(getPanelEncrypt(), new Constraints(new Bilateral(
67, 12, 0), new Leading(5, 126, 10, 10)));
panelAction.add(getPanelDecrypt(), new Constraints(new Bilateral(
67, 12, 0), new Leading(5, 126, 10, 10)));
panelAction.add(getPanelTest(), new Constraints(new Bilateral(67,
12, 0), new Leading(5, 126, 10, 10)));
}
return panelAction;
}
private JLabel getLabelTitle() {
if (labelTitle == null) {
labelTitle = new JLabel();
labelTitle.setText(rb.getString("title"));
labelTitle.setBackground(Color.white);
labelTitle.setFont(new Font("Serif", Font.BOLD, 30));
labelTitle.setLayout(new GroupLayout());
labelTitle.setHorizontalAlignment(SwingConstants.CENTER);
labelTitle.setVerticalAlignment(SwingConstants.CENTER);
}
return labelTitle;
}
private JPanel getPanelTitle() {
if (panelTitle == null) {
panelTitle = new JPanel();
panelTitle.setBackground(Color.white);
panelTitle.setBorder(new LineBorder(Color.black, 1, false));
panelTitle.setLayout(new GroupLayout());
panelTitle.add(getLabelTitle(), new Constraints(new Bilateral(12,
12, 0), new Leading(7, 44, 10, 10)));
}
return panelTitle;
}
private static void installLnF() {
try {
String lnfClassname = PREFERRED_LOOK_AND_FEEL;
if (lnfClassname == null)
lnfClassname = UIManager.getCrossPlatformLookAndFeelClassName();
UIManager.setLookAndFeel(lnfClassname);
} catch (Exception e) {
System.err.println("Cannot install " + PREFERRED_LOOK_AND_FEEL
+ " on this platform:" + e.getMessage());
}
}
public void setIcon() {
setTitle(rb.getString("title") + " - [" + rb.getString("title.encrypt")
+ "]");
Dimension dim = this.getToolkit().getScreenSize();
int screenWidth = dim.width;
int screenHeight = dim.height;
setLocation((screenWidth - this.getWidth()) / 2,
(screenHeight - this.getHeight()) / 2);
InputStream imgStream = null;
try {
imgStream = this.getClass().getResourceAsStream(iconApplication);
BufferedImage bi = ImageIO.read(imgStream);
ImageIcon myImg = new ImageIcon(bi);
this.setIconImage(myImg.getImage());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (imgStream != null) {
imgStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
repaint();
parent = this;
}
private void appendToPane(JTextPane tp, String msg, Color c) {
if (tp != null) {
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY,
StyleConstants.Foreground, c);
aset = sc.addAttribute(aset, StyleConstants.FontFamily,
"Lucida Console");
aset = sc.addAttribute(aset, StyleConstants.Alignment,
StyleConstants.ALIGN_JUSTIFIED);
int len = tp.getDocument().getLength();
tp.setCaretPosition(len);
tp.setCharacterAttributes(aset, false);
tp.replaceSelection(msg);
try {
tp.getStyledDocument().insertString(len, msg, aset);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}
private void clearPane(JTextPane tp) {
if (tp != null) {
int len = tp.getDocument().getLength();
try {
tp.getStyledDocument().remove(0, len);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}
private void createTestKeys() {
try {
labelProgress.setText(rb.getString("msg.creatingtestkeys"));
BlumBlumShub random = new BlumBlumShub(4096);
byte b[] = random.randBytes(4096);
random.setSeed(b);
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(RSA_KEY_LENGTH, random);
KeyPair keyPair = keyGen.genKeyPair();
publicKey = keyPair.getPublic();
privateKey = keyPair.getPrivate();
publicKeyBytes = privateKey.getEncoded();
base64PublicKey = Base64.encode(publicKeyBytes);
} catch (Exception e) {
e.printStackTrace();
}
}
private void readTestKeys() {
ByteArrayOutputStream bos = null;
InputStream fispbk = null;
InputStream fisprk1 = null;
InputStream fisprk2 = null;
try {
bos = new ByteArrayOutputStream();
fispbk = this.getClass().getResourceAsStream("/public.key");
fisprk1 = this.getClass().getResourceAsStream("/private1.key");
fisprk2 = this.getClass().getResourceAsStream("/private2.key");
int b = fispbk.read();
while (b > -1) {
bos.write(b);
b = fispbk.read();
}
bos.flush();
byte[] key = bos.toByteArray();
bos.close();
bos = new ByteArrayOutputStream();
b = fisprk1.read();
while (b > -1) {
bos.write(b);
b = fisprk1.read();
}
bos.flush();
byte[] halfkey1 = bos.toByteArray();
bos.close();
bos = new ByteArrayOutputStream();
b = fisprk2.read();
while (b > -1) {
bos.write(b);
b = fisprk2.read();
}
bos.flush();
byte[] halfkey2 = bos.toByteArray();
bos.close();
publicKey = KeyFactory.getInstance("RSA").generatePublic(
new X509EncodedKeySpec(Base64.decode(key)));
base64PublicKey = new String(key);
byte[] b1 = Base64.decode(halfkey1);
byte[] b2 = Base64.decode(halfkey2);
byte[] privateKeyBytes = new byte[halfkey1.length + halfkey2.length];
for (int i = 0; i < b1.length; i++) {
privateKeyBytes[i] = b1[i];
}
for (int i = 0; i < b2.length; i++) {
privateKeyBytes[i + b1.length] = b2[i];
}
privateKey = KeyFactory.getInstance("RSA").generatePrivate(
new PKCS8EncodedKeySpec(privateKeyBytes));
bos.close();
fispbk.close();
fisprk1.close();
fisprk2.close();
bos = null;
fispbk = null;
fisprk1 = null;
fisprk2 = null;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bos != null)
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (fispbk != null)
fispbk.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (fisprk1 != null)
fisprk1.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (fisprk2 != null)
fisprk2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void testFile() {
buttonExecute.setEnabled(false);
serialDuplicated = false;
errorReadingLine = false;
errorVerifying = false;
String fileBin = null;
String fileXml = null;
try {
String srcFileName = textFileInT.getText();
fileBin = srcFileName + "_test.xml.ciphered.bin";
fileXml = srcFileName + "_test.xml";
test = true;
appendToPane(jTextResults, rb.getString("msg.creatingtestkeys")
+ "\n", Color.BLUE);
// createTestKeys();
readTestKeys();
if (!encrypt(srcFileName)) {
appendToPane(jTextResults, rb.getString("msg.ciphererror")
+ "\n", Color.RED);
JOptionPane.showMessageDialog(parent,
rb.getString("msg.ciphererror"),
rb.getString("title.error"), JOptionPane.ERROR_MESSAGE);
return;
} else {
appendToPane(jTextResults, rb.getString("msg.cipherok") + "\n",
Color.BLUE);
}
if (serialDuplicated) {
JOptionPane.showMessageDialog(parent,
rb.getString("msg.doublederror"),
rb.getString("title.error"), JOptionPane.ERROR_MESSAGE);
return;
}
if (errorReadingLine) {
JOptionPane.showMessageDialog(parent,
rb.getString("msg.lineerror"),
rb.getString("title.error"), JOptionPane.ERROR_MESSAGE);
return;
}
if (!decrypt(fileBin, fileXml)) {
JOptionPane.showMessageDialog(parent,
rb.getString("msg.deciphererror"),
rb.getString("title.error"), JOptionPane.ERROR_MESSAGE);
return;
}
if (!verifyResults(fileXml)) {
appendToPane(jTextResults,
rb.getString("msg.testError") + "\n", Color.RED);
JOptionPane.showMessageDialog(parent,
rb.getString("msg.testError"),
rb.getString("title.error"), JOptionPane.ERROR_MESSAGE);
errorVerifying = true;
return;
} else {
appendToPane(jTextResults, rb.getString("msg.testOK") + "\n",
Color.BLUE);
JOptionPane.showMessageDialog(parent,
rb.getString("msg.testOK"),
rb.getString("title.ok"),
JOptionPane.INFORMATION_MESSAGE);
}
} finally {
if (fileBin != null&&new File(fileBin).exists())
new File(fileBin).delete();
if (fileXml != null&&new File(fileXml).exists())
new File(fileXml).delete();
}
buttonExecute.setEnabled(true);
}
private void encryptFile() {
String srcFileName = textFileIn.getText();
if (encrypt(srcFileName)) {
JOptionPane.showMessageDialog(parent, rb.getString("msg.cipherok"),
rb.getString("title.ok"), JOptionPane.INFORMATION_MESSAGE);
appendToPane(jTextResults, rb.getString("msg.cipherok") + "\n",
Color.BLUE);
} else {
JOptionPane.showMessageDialog(parent,
rb.getString("msg.ciphererror"),
rb.getString("title.error"), JOptionPane.ERROR_MESSAGE);
appendToPane(jTextResults, rb.getString("msg.ciphererror") + "\n",
Color.RED);
}
}
private synchronized boolean encrypt(String srcFileName) {
boolean retval = false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String dateFormatted = sdf.format(new java.util.Date(System
.currentTimeMillis()));
ArrayList<String> listSerial = new ArrayList<String>();
progressBar.setVisible(true);
progressBar.setMaximum(0);
progressBar.setMaximum(100);
progressBar.setValue(0);
labelProgress.setText(rb.getString("msg.formattingkeys") + " 0%");
labelProgress.setVisible(true);
labelWait.setVisible(true);
buttonClose.setEnabled(false);
buttonExecute.setEnabled(false);
if (buttonFileIn != null) {
buttonFileIn.setEnabled(false);
}
if (buttonPublicKey != null) {
buttonPublicKey.setEnabled(false);
}
menuFile.setEnabled(false);
menuAbout.setEnabled(false);
menuLanguage.setEnabled(false);
String fileXml = srcFileName + dateFormatted + ".xml";
String fileBin = srcFileName + dateFormatted + ".xml.ciphered.bin";
if (test) {
fileXml = srcFileName + "_test.xml";
fileBin = srcFileName + "_test.xml.ciphered.bin";
}
repaint();
long fileLen = new File(srcFileName).length();
long counter = 0;
int progressValue = 0;
int prevProgressValue = 0;
FileReader fr = null;
BufferedReader in = null;
FileOutputStream outputWriter = null;
InputStream inputReader = null;
CipherOutputStream cos = null;
try {
outputWriter = new FileOutputStream(fileXml);
fr = new FileReader(srcFileName);
in = new BufferedReader(fr);
String string;
long i = 0;
AlgorithmParameters ap = new AlgorithmParameters(
new ResponseFormat("6", "DECIMAL"),
Constants.ALGO_TYPE_TOTP);
// String separator=";";
outputWriter.write(getXmlHeader().getBytes("UTF8"));
outputWriter.flush();
while ((string = in.readLine()) != null) {
try {
if(!"".equals(string.trim())){
String[] serialkey = getSerialKey(string.trim());
String lineserial = serialkey[0];
String linekey = serialkey[1];
if (!listSerial.contains(lineserial)) {
if (test) {
mapSerialSeed.put(lineserial, linekey);
}
DeviceInfo di = new DeviceInfo("xyzw", lineserial);
byte[] byteSeed = keyGetByteCiphered(linekey);
String data = Base64.encode(byteSeed);
Data d = new Data(new Secret(data), "60", "0");
// Data d = new Data(new Secret(linekey), "60", "0");
org.jdamico.pskcbuilder.dataobjects.Key k = new org.jdamico.pskcbuilder.dataobjects.Key(
"1", "urn:ietf:params:xml:ns:keyprov:pskc:"
+ Constants.ALGO_TYPE_TOTP, "xyzw", d,
ap);
KeyPackage kp = new KeyPackage(di, k);
outputWriter.write(getObj2XmlStr(kp, i)
.getBytes("UTF8"));
outputWriter.flush();
listSerial.add(lineserial);
} else {
logger.error("Error: element(" + (i + 1) + ") file("
+ srcFileName + ") serial(" + lineserial
+ ") duplicate");
appendToPane(
jTextResults,
"(" + (i + 1) + ")[" + lineserial + "] "
+ rb.getString("msg.doublederror")
+ "\n", Color.RED);
// jTextResults.append("("+(i +
// 1)+")["+lineserial+"] "+rb.getString("msg.doublederror")+"\n");
serialDuplicated = true;
}
}
} catch (Exception e) {
e.printStackTrace();
logger.error("Error: element(" + (i + 1) + ") file("
+ srcFileName + ")", e);
appendToPane(
jTextResults,
"(" + (i + 1) + ") "
+ rb.getString("msg.lineerror") + "\n",
Color.RED);
// jTextResults.append("("+(i +
// 1)+") "+rb.getString("msg.lineerror")+"\n");
errorReadingLine = true;
}
counter += string.length();
progressValue = (int) ((counter * 100) / fileLen);
if (progressValue != prevProgressValue) {
progressBar.setValue(progressValue);
labelProgress.setText(rb.getString("msg.formattingkeys")
+ " " + progressValue + "%");
prevProgressValue = progressValue;
// System.out.println(prevProgressValue+"%");
repaint();
}
i++;
}
outputWriter.write(getXmlFooter().getBytes("UTF8"));
outputWriter.flush();
outputWriter.close();
in.close();
fr.close();
in = null;
fr = null;
outputWriter = null;
progressBar.setValue(100);
labelProgress.setText(rb.getString("msg.formattingkeys") + "100%");
repaint();
progressBar.setMaximum(0);
progressBar.setMaximum(100);
progressBar.setValue(0);
labelProgress.setText(rb.getString("msg.ciphering") + " 0%");
labelProgress.setVisible(true);
labelWait.setVisible(true);
buttonClose.setEnabled(false);
buttonExecute.setEnabled(false);
buttonPublicKey.setEnabled(false);
menuFile.setEnabled(false);
menuAbout.setEnabled(false);
menuLanguage.setEnabled(false);
repaint();
fileLen = new File(srcFileName).length();
outputWriter = null;
inputReader = null;
// System.out.println("srcFileName ----- "+srcFileName);
// System.out.println("destFileName ----- "+destFileName);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
/*
* SecureRandom random = SecureRandom.getInstance("SHA1PRNG",
* "SUN"); byte[] b = random.generateSeed(AES_KEY_LENGTH);
* random.setSeed(b);
*/
BlumBlumShub random = new BlumBlumShub(1024);
byte b[] = random.randBytes(1024);
random.setSeed(b);
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(AES_KEY_LENGTH, random);
SecretKey secretAesKey = keyGen.generateKey();
byte[] aesKey = secretAesKey.getEncoded();
byte[] iv = new byte[16];
// SecureRandom.getInstance("SHA1PRNG").nextBytes(iv);
random = new BlumBlumShub(1024);
iv = random.randBytes(16);
counter = 0;
progressValue = 0;
prevProgressValue = 0;
outputWriter = new FileOutputStream(fileBin);
inputReader = new FileInputStream(fileXml);
byte[] cipherText = null;
cipherText = cipher.doFinal(aesKey);
outputWriter.write(cipherText);
outputWriter.flush();
outputWriter.write(END_OF_KEY.getBytes("UTF-8"));
outputWriter.flush();
cipherText = null;
cipherText = cipher.doFinal(iv);
outputWriter.write(cipherText);
outputWriter.flush();
// outputWriter.write(iv);
// outputWriter.flush();
outputWriter.write(END_OF_KEY.getBytes("UTF-8"));
outputWriter.flush();
cipher = Cipher.getInstance("AES");
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
encryptAES(secretAesKey, paramSpec, inputReader, outputWriter,
fileLen);
outputWriter.close();
inputReader.close();
outputWriter = null;
inputReader = null;
progressBar.setVisible(false);
labelProgress.setVisible(false);
labelWait.setVisible(false);
retval = true;
} catch (Exception e) {
e.printStackTrace();
logger.debug("Error: file(" + srcFileName + ")", e);
} finally {
try {
if (cos != null)
cos.close();
if (in != null)
in.close();
if (fr != null)
fr.close();
if (outputWriter != null)
outputWriter.close();
if (inputReader != null)
inputReader.close();
} catch (Exception e) {
e.printStackTrace();
}
progressBar.setVisible(false);
labelProgress.setVisible(false);
labelWait.setVisible(false);
buttonClose.setEnabled(true);
buttonExecute.setEnabled(true);
if (buttonFileIn != null) {
buttonFileIn.setEnabled(true);
}
if (buttonPublicKey != null) {
buttonPublicKey.setEnabled(true);
}
menuFile.setEnabled(true);
menuAbout.setEnabled(true);
menuLanguage.setEnabled(true);
new File(fileXml).delete();
}
return retval;
}
private void decryptFile() {
String srcFileName = textFileInD.getText();
String destFileName = textFileOutD.getText();
// String destFile = textFileOutD.getText()+".bin";
test = false;
if (decrypt(srcFileName, destFileName)) {
appendToPane(jTextResults, rb.getString("msg.decipherok") + "\n",
Color.BLUE);
JOptionPane.showMessageDialog(parent,
rb.getString("msg.decipherok"), rb.getString("title.ok"),
JOptionPane.INFORMATION_MESSAGE);
} else {
appendToPane(jTextResults,
rb.getString("msg.deciphererror") + "\n", Color.RED);
JOptionPane.showMessageDialog(parent,
rb.getString("msg.deciphererror"),
rb.getString("title.error"), JOptionPane.ERROR_MESSAGE);
}
}
private synchronized boolean decrypt(String srcFileName, String destFileName) {
boolean retval = false;
progressBar.setVisible(true);
progressBar.setMaximum(0);
progressBar.setMaximum(100);
progressBar.setValue(0);
labelProgress.setText(rb.getString("msg.deciphering") + " 0%");
labelProgress.setVisible(true);
labelWait.setVisible(true);
buttonClose.setEnabled(false);
buttonExecute.setEnabled(false);
if (buttonFileInD != null) {
buttonFileInD.setEnabled(false);
}
if (buttonFileOutD != null) {
buttonFileOutD.setEnabled(false);
}
if (buttonPrivateKey1 != null) {
buttonPrivateKey1.setEnabled(false);
}
if (buttonPrivateKey2 != null) {
buttonPrivateKey2.setEnabled(false);
}
menuFile.setEnabled(false);
menuAbout.setEnabled(false);
menuLanguage.setEnabled(false);
repaint();
OutputStream outputWriter = null;
InputStream inputReader = null;
byte[] arrayByte = new byte[0];
byte[] arrayByte1 = new byte[0];
try {
outputWriter = new FileOutputStream(destFileName);
inputReader = new FileInputStream(srcFileName);
boolean loop = true;
int b;
while ((b = inputReader.read()) != -1 && loop) {
arrayByte = appendByteArray(arrayByte, (byte) b);
loop = !checkSeq(arrayByte);
if (!loop)
break;
}
int keylen = arrayByte.length - seq.length;
byte[] aesKeyEncoded = new byte[keylen];
for (int i = 0; i < aesKeyEncoded.length; i++) {
aesKeyEncoded[i] = arrayByte[i];
}
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] aesKey = cipher.doFinal(aesKeyEncoded);
SecretKey secretAesKey = new SecretKeySpec(aesKey, 0,
aesKey.length, "AES");
loop = true;
while ((b = inputReader.read()) != -1 && loop) {
arrayByte1 = appendByteArray(arrayByte1, (byte) b);
loop = !checkSeq(arrayByte1);
if (!loop)
break;
}
keylen = arrayByte1.length - seq.length;
byte[] ivEncoded = new byte[keylen];
for (int i = 0; i < aesKeyEncoded.length; i++) {
ivEncoded[i] = arrayByte1[i];
}
byte[] iv = cipher.doFinal(ivEncoded);
/*
* byte[] iv = new byte[16];
*
* for(int i=0;i<16;i++){ iv[i]=arrayByte[i+keylen]; }
*/
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
long fileLen = new File(srcFileName).length() - arrayByte.length
- arrayByte1.length;
decryptAES(secretAesKey, paramSpec, inputReader, outputWriter,
fileLen);
outputWriter.close();
inputReader.close();
// bos.close();
outputWriter = null;
inputReader = null;
retval = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// if (bos != null)
// bos.close();
if (outputWriter != null)
outputWriter.close();
if (inputReader != null)
inputReader.close();
} catch (Exception e) {
e.printStackTrace();
}
progressBar.setVisible(false);
labelProgress.setVisible(false);
labelWait.setVisible(false);
buttonClose.setEnabled(true);
buttonExecute.setEnabled(true);
if (buttonFileInD != null) {
buttonFileInD.setEnabled(true);
}
if (buttonFileOutD != null) {
buttonFileOutD.setEnabled(true);
}
if (buttonPrivateKey1 != null) {
buttonPrivateKey1.setEnabled(true);
}
if (buttonPrivateKey2 != null) {
buttonPrivateKey2.setEnabled(true);
}
menuFile.setEnabled(true);
menuAbout.setEnabled(true);
menuLanguage.setEnabled(true);
}
return retval;
}
private synchronized boolean verifyResults(String fileXml) {
boolean retval = false;
// 50 MB
if (new File(fileXml).length() < 52428800L) {
retval=verifySmallXML(fileXml);
} else {
retval=verifyLargeXML(fileXml);
}
return retval;
}
private synchronized boolean verifySmallXML(String fileXml) {
boolean retval = true;
JAXBContext jc;
java.io.InputStream is = null;
try {
int progressValue=0;
int prevProgressValue=0;
progressBar.setVisible(true);
progressBar.setMaximum(0);
progressBar.setMaximum(100);
progressBar.setValue(0);
labelProgress.setVisible(true);
labelProgress.setText(rb.getString("msg.verification") + " 0%");
repaint();
jc = JAXBContext.newInstance("ietf.params.xml.ns.keyprov.pskc");
Unmarshaller u = jc.createUnmarshaller();
is = new java.io.FileInputStream(fileXml);
Object o = u.unmarshal(is);
javax.xml.bind.JAXBElement<KeyContainerType> f = (javax.xml.bind.JAXBElement<KeyContainerType>) o;
KeyContainerType keyContainer = (KeyContainerType) f.getValue();
List<KeyPackageType> listPackages = keyContainer.getKeyPackage();
if (listPackages != null && listPackages.size() > 0) {
for (int i = 0; i < listPackages.size(); i++) {
KeyPackageType KeyPackage = listPackages.get(i);
DeviceInfoType deviceInfo = KeyPackage.getDeviceInfo();
KeyType key = KeyPackage.getKey();
KeyDataType KeyData = key.getData();
BinaryDataType binaryDataType = KeyData.getSecret();
EncryptedDataType encryptedDataType = binaryDataType
.getEncryptedValue();
String seed = encryptedDataType.getCipherData()
.getCipherValue();
String serial = deviceInfo.getSerialNo();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] cipherData = cipher.doFinal(Base64.decode(seed));
String decodedseed = new String(cipherData);
String seedOrigin = mapSerialSeed.remove(serial);
if (seedOrigin == null) {
retval = false;
appendToPane(
jTextResults,
"(1)[" + serial + "] "
+ rb.getString("msg.testNotFound")
+ "\n", Color.RED);
} else {
if (!seedOrigin.equals(decodedseed)) {
retval = false;
appendToPane(
jTextResults,
"["
+ serial
+ "] "
+ rb.getString("msg.testSeedNotMatch")
+ "\n", Color.RED);
}
}
progressValue = (int) ((i * 100) / listPackages.size());
if (progressValue != prevProgressValue) {
progressBar.setValue(progressValue);
labelProgress.setText(rb.getString("msg.verification")
+ " " + progressValue + "%");
prevProgressValue = progressValue;
// System.out.println(prevProgressValue+"%");
repaint();
}
// System.out.println(serial+"\n"+decodedseed+"\n\n\n");
}
}
if (mapSerialSeed.size() > 0) {
retval = false;
Object[] object = mapSerialSeed.keySet().toArray();
for (int i = 0; i < object.length; i++) {
appendToPane(
jTextResults,
"(2)[" + object[i] + "] "
+ rb.getString("msg.testNotFound") + "\n",
Color.RED);
}
}
// System.out.println("OK");
} catch (Exception e) {
e.printStackTrace();
retval = false;
} finally {
try {
if (is != null)
is.close();
} catch (Exception e) {
}
}
progressBar.setVisible(false);
labelProgress.setVisible(false);
repaint();
return retval;
}
private synchronized boolean verifyLargeXML(String fileXml) {
boolean retval = true;
JAXBContext jc;
XMLStreamReader xsr = null;
try {
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource xml = new StreamSource(fileXml);
xsr = xif.createXMLStreamReader(xml);
xsr.nextTag();
int progressValue=0;
int prevProgressValue=0;
progressBar.setVisible(true);
progressBar.setMaximum(0);
progressBar.setMaximum(100);
progressBar.setValue(0);
labelProgress.setVisible(true);
labelProgress.setText(rb.getString("msg.verification") + " 0%");
repaint();
int counter=0;
int len=mapSerialSeed.size();
while (xsr.hasNext()) {
if (xsr.isStartElement()) {
if (xsr.getLocalName().equals("KeyPackage")) {
jc = JAXBContext.newInstance(KeyPackageType.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<KeyPackageType> jb = unmarshaller
.unmarshal(xsr, KeyPackageType.class);
xsr.close();
KeyPackageType KeyPackage = jb.getValue();
KeyType key = KeyPackage.getKey();
KeyDataType KeyData = key.getData();
BinaryDataType binaryDataType = KeyData.getSecret();
EncryptedDataType encryptedDataType = binaryDataType
.getEncryptedValue();
String seed = encryptedDataType.getCipherData()
.getCipherValue();
DeviceInfoType deviceInfo = KeyPackage.getDeviceInfo();
String serial = deviceInfo.getSerialNo();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] cipherData = cipher.doFinal(Base64.decode(seed));
String decodedseed = new String(cipherData);
String seedOrigin = mapSerialSeed.remove(serial);
if (seedOrigin == null) {
retval = false;
appendToPane(jTextResults, "(1)[" + serial + "] "
+ rb.getString("msg.testNotFound") + "\n",
Color.RED);
} else {
if (!seedOrigin.equals(decodedseed)) {
retval = false;
appendToPane(jTextResults, "[" + serial + "] "
+ rb.getString("msg.testSeedNotMatch")
+ "\n", Color.RED);
}
}
progressValue = (int) ((counter * 100) / len);
if (progressValue != prevProgressValue) {
progressBar.setValue(progressValue);
labelProgress.setText(rb.getString("msg.verification")
+ " " + progressValue + "%");
prevProgressValue = progressValue;
// System.out.println(prevProgressValue+"%");
repaint();
}
counter++;
}
}
xsr.next();
}
if (mapSerialSeed.size() > 0) {
retval = false;
Object[] object = mapSerialSeed.keySet().toArray();
for (int i = 0; i < object.length; i++) {
appendToPane(
jTextResults,
"(2)[" + object[i] + "] "
+ rb.getString("msg.testNotFound") + "\n",
Color.RED);
}
}
progressBar.setValue(100);
labelProgress.setText(rb.getString("msg.verification") + " 100%");
repaint();
} catch (Exception e) {
e.printStackTrace();
retval = false;
} finally {
try {
if (xsr != null)
xsr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
progressBar.setVisible(false);
labelProgress.setVisible(false);
repaint();
return retval;
}
private void reloadPublicKey() {
File file = new File(textPublicKey.getText());
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
publicKeyBytes = new byte[(int) file.length()];
fis.read(publicKeyBytes);
publicKey = KeyFactory.getInstance("RSA").generatePublic(
new X509EncodedKeySpec(Base64.decode(publicKeyBytes)));
fis.close();
fis = null;
base64PublicKey = new String(publicKeyBytes);
} catch (Exception e) {
e.printStackTrace();
base64PublicKey = "";
publicKey = null;
publicKeyBytes = null;
textPublicKey.setText("");
labelStatusPublicKey.setIcon(new javax.swing.ImageIcon(getClass()
.getResource(iconKo)));
JOptionPane.showMessageDialog(parent,
rb.getString("msg.invalidpublickey"),
rb.getString("title.error"), JOptionPane.ERROR_MESSAGE);
} finally {
try {
if (fis != null)
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private synchronized void encryptAES(SecretKey key,
AlgorithmParameterSpec paramSpec, InputStream in, OutputStream out,
long fileLen) throws NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException,
InvalidAlgorithmParameterException, IOException {
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, key, paramSpec);
CipherOutputStream cos = null;
try {
cos = new CipherOutputStream(out, c);
int count = 0;
byte[] buffer = new byte[1024];
long counter = 0;
int progressValue = 0;
int prevProgressValue = 0;
while ((count = in.read(buffer)) >= 0) {
counter = counter + count;
cos.write(buffer, 0, count);
progressValue = (int) ((counter * 100) / fileLen);
if (progressValue != prevProgressValue) {
progressBar.setValue(progressValue);
labelProgress.setText(rb.getString("msg.ciphering") + " "
+ progressValue + "%");
prevProgressValue = progressValue;
repaint();
}
}
cos.flush();
} finally {
if (cos != null)
cos.close();
}
}
private synchronized void decryptAES(SecretKey key,
AlgorithmParameterSpec paramSpec, InputStream in, OutputStream out,
long fileLen) throws NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException,
InvalidAlgorithmParameterException, IOException {
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, key, paramSpec);
CipherOutputStream cos = null;
try {
cos = new CipherOutputStream(out, c);
int count = 0;
byte[] buffer = new byte[1024];
long counter = 0;
int progressValue = 0;
int prevProgressValue = 0;
while ((count = in.read(buffer)) >= 0) {
counter = counter + count;
cos.write(buffer, 0, count);
progressValue = (int) ((counter * 100) / fileLen);
if (progressValue != prevProgressValue) {
progressBar.setValue(progressValue);
labelProgress.setText(rb.getString("msg.deciphering") + " "
+ progressValue + "%");
prevProgressValue = progressValue;
repaint();
}
}
cos.flush();
} finally {
if (cos != null)
cos.close();
}
}
private byte[] keyGetByteCiphered(String value) {
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// byte[]byteSeed = cipher.doFinal(linekey.getBytes());
// byte[]byteSeed =
// cipher.doFinal(formatKey(value.getBytes("UTF8")));
byte[] byteSeed = cipher.doFinal(value.getBytes("UTF8"));
cipher.doFinal();
cipher.getIV();
cipher = null;
return byteSeed;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/*
* public synchronized byte[] hexStringToByteArray(String s) throws
* Exception { int len = s.length(); byte[] data = new byte[len / 2]; for
* (int i = 0; i < len; i += 2) data[i / 2] = (byte)
* ((Character.digit(s.charAt(i), 16) << 4) + Character .digit(s.charAt(i +
* 1), 16)); return data; }
*
* public String byteArrayToHexString(byte[] raw) throws
* UnsupportedEncodingException { final byte[] HEX_CHAR_TABLE = { (byte)
* '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte)
* '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte)
* 'c', (byte) 'd', (byte) 'e', (byte) 'f' };
*
* byte[] hex = new byte[2 * raw.length]; int index = 0;
*
* for (byte b : raw) { int v = b & 0xFF; hex[index++] = HEX_CHAR_TABLE[v
* >>> 4]; hex[index++] = HEX_CHAR_TABLE[v & 0xF]; } return new String(hex,
* "ASCII"); }
*/
private synchronized String[] getSerialKey(String string) throws Exception {
// possibili separatori SPACE ;,:| TAB
if (string.contains(";")) {
return getSerialKey(string.split(";"));
} else if (string.contains(",")) {
return getSerialKey(string.split(","));
} else if (string.contains(":")) {
return getSerialKey(string.split(":"));
} else if (string.contains("|")) {
return getSerialKey(string.split("\\|"));
} else if (string.contains("\t")) {
return getSerialKey(string.split("\t"));
} else if (string.contains(" ")) {
return getSerialKey(string.split(" "));
} else {
return getSerialKey(string.split("\\W"));
}
}
private synchronized String[] getSerialKey(String[] stringArray)
throws Exception {
Pattern hexdecimal = Pattern.compile("^[0-9A-F]+$");
String serial = "";
String key = "";
String[] serialKey = null;
if (stringArray.length > 0) {
for (int i = 0; i < stringArray.length; i++) {
String value = stringArray[i];
if (value.length() > 20 && "".equals(key)) {
key = value;
}
if (hexdecimal.matcher(value.toUpperCase()).matches()
&& "".equals(serial) && value.length() <= 20) {
serial = value;
}
}
serialKey = new String[2];
serialKey[0] = serial;
serialKey[1] = key;
}
return serialKey;
}
private synchronized String getXmlHeader() {
StringBuffer sb = new StringBuffer();
/*
* sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); sb.append(
* "<KeyContainer Version=\"1.0\" xmlns=\"urn:ietf:params:xml:ns:keyprov:pskc\">\n"
* );
*/
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
sb.append("<KeyContainer xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns=\"urn:ietf:params:xml:ns:keyprov:pskc\" xmlns:xenc=\"http://www.w3.org/2001/04/xmlenc#\" id=\"KC0001\" Version=\"1.0\">\n");
sb.append("<EncryptionKey><ds:X509Data><ds:X509Certificate>"
+ base64PublicKey
+ "</ds:X509Certificate></ds:X509Data></EncryptionKey>\n");
return sb.toString();
}
private synchronized String getXmlFooter() {
StringBuffer sb = new StringBuffer();
sb.append("</KeyContainer>");
return sb.toString();
}
private synchronized String getObj2XmlStr(KeyPackage kp, long i) {
StringBuffer sb = new StringBuffer();
sb.append("<KeyPackage>\n");
sb.append("<DeviceInfo>\n");
sb.append("<Manufacturer>" + kp.getDeviceInfo().getManufacturer()
+ "</Manufacturer>\n");
sb.append("<SerialNo>" + kp.getDeviceInfo().getSerialNo()
+ "</SerialNo>\n");
sb.append("</DeviceInfo>\n");
sb.append("<Key Id=\"" + (i + 1) + "\" Algorithm=\""
+ kp.getKey().getAlgorithm() + "\">\n");
sb.append("<Issuer>" + kp.getKey().getIssuer() + "</Issuer>\n");
sb.append("<AlgorithmParameters>\n");
sb.append("<ResponseFormat Length=\""
+ kp.getKey().getAlgorithmParameters().getResponseFormat()
.getLength()
+ "\" Encoding=\""
+ kp.getKey().getAlgorithmParameters().getResponseFormat()
.getEncoding() + "\"/>\n");
sb.append("</AlgorithmParameters>\n");
sb.append("<Data>\n");
sb.append("<Secret><EncryptedValue><xenc:EncryptionMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#rsa_1_5\"/><xenc:CipherData><xenc:CipherValue>"
+ kp.getKey().getData().getSecret().getPlainValue()
+ "</xenc:CipherValue></xenc:CipherData></EncryptedValue></Secret>\n");
String sAlgoType = kp.getKey().getAlgorithmParameters().getAlgoType() == Constants.ALGO_TYPE_HOTP ? "Counter"
: "Time";
sb.append("<" + sAlgoType + "><PlainValue>"
+ kp.getKey().getData().getCounter() + "</PlainValue></"
+ sAlgoType + ">\n");
sb.append("<TimeInterval><PlainValue>"
+ kp.getKey().getData().getTimeInterval()
+ "</PlainValue></TimeInterval>\n");
// "<TimeDrift><PlainValue>"+kp.getKeyPackageList().get(i).getKey().getData().getTimeInterval()+"</PlainValue></TimeDrift>\n"
// +
sb.append("</Data>\n");
sb.append("</Key>\n");
sb.append("</KeyPackage>\n");
return sb.toString();
}
private static final int AES_KEY_LENGTH = 128;
private static final int RSA_KEY_LENGTH = 4096;
private boolean test = false;
private boolean serialDuplicated = false;
private boolean errorReadingLine = false;
private boolean errorVerifying = false;
private HashMap<String, String> mapSerialSeed = new HashMap<String, String>();
/**
* Main entry of the class. Note: This class is only created so that you can
* easily preview the result at runtime. It is not expected to be managed by
* the designer. You can modify it as you like.
*/
public static void main(String[] args) {
try {
seq = END_OF_KEY.getBytes("UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
installLnF();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MainWindow frame = new MainWindow();
frame.setDefaultCloseOperation(MainWindow.EXIT_ON_CLOSE);
// frame.setTitle("MainWindow");
frame.getContentPane().setPreferredSize(frame.getSize());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setIcon();
}
});
}
public static String END_OF_KEY = "=,uytnnnnnnnnnneereee,c------";
public static byte[] seq = null;
private static final String PREFERRED_LOOK_AND_FEEL = "javax.swing.plaf.metal.MetalLookAndFeel";
public byte[] appendByteArray(byte[] array, byte b) {
byte[] c = new byte[array.length + 1];
for (int i = 0; i < array.length; i++) {
c[i] = array[i];
}
c[array.length] = b;
return c;
}
public boolean checkSeq(byte[] data) {
boolean found = true;
if (seq.length < data.length && data.length > 0) {
int indexData = data.length - seq.length;
for (int i = 0; i < seq.length; i++) {
if (seq[i] != data[indexData]) {
found = false;
break;
}
indexData++;
}
} else {
found = false;
}
return found;
}
}