package org.ripple.power.ui.btc;
import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import org.ripple.power.txns.btc.ECKey;
import org.ripple.power.txns.btc.SignatureException;
import org.ripple.power.ui.UIRes;
import org.ripple.power.ui.view.ButtonPane;
import org.ripple.power.ui.view.log.ErrorLog;
public class VerifyDialog extends JDialog implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private final JTextField addressField;
private final JTextArea messageField;
private final JScrollPane scrollPane;
private final JTextField signatureField;
public VerifyDialog(JDialog parent) {
super(parent, "Verify Message", Dialog.ModalityType.DOCUMENT_MODAL);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
addressField = new JTextField("", 34);
JPanel addressPane = new JPanel();
addressPane.add(new JLabel("Address ", JLabel.RIGHT));
addressPane.add(addressField);
messageField = new JTextArea(6, 70);
messageField.setLineWrap(true);
messageField.setWrapStyleWord(true);
messageField.setFont(addressField.getFont());
scrollPane = new JScrollPane(messageField);
JPanel messagePane = new JPanel();
messagePane.add(new JLabel("Message ", JLabel.RIGHT));
messagePane.add(scrollPane);
signatureField = new JTextField("", 70);
JPanel signaturePane = new JPanel();
signaturePane.add(new JLabel("Signature ", JLabel.RIGHT));
signaturePane.add(signatureField);
JPanel buttonPane = new ButtonPane(this, 10, new String[] { "Verify",
"verify" }, new String[] { "Done", "done" });
JPanel contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
contentPane.setOpaque(true);
contentPane.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
contentPane.add(addressPane);
contentPane.add(Box.createVerticalStrut(15));
contentPane.add(messagePane);
contentPane.add(Box.createVerticalStrut(15));
contentPane.add(signaturePane);
contentPane.add(Box.createVerticalStrut(15));
contentPane.add(buttonPane);
setContentPane(contentPane);
}
public static void showDialog(JDialog parent) {
try {
JDialog dialog = new VerifyDialog(parent);
dialog.pack();
dialog.setLocationRelativeTo(parent);
dialog.setVisible(true);
} catch (Exception exc) {
ErrorLog.get().logException("Exception while displaying dialog", exc);
}
}
@Override
public void actionPerformed(ActionEvent ae) {
try {
String action = ae.getActionCommand();
switch (action) {
case "verify":
String message = messageField.getText();
String address = addressField.getText();
String signature = signatureField.getText();
if (address.length() == 0) {
UIRes.showErrorMessage(this, "Error",
"You must enter the signing address");
} else if (message.length() == 0) {
UIRes.showErrorMessage(this, "Error",
"You must enter the message text to verify");
} else if (signature.length() == 0) {
UIRes.showErrorMessage(this, "Error",
"You must enter the message signature");
} else {
if (ECKey.verifyMessage(address, message, signature)) {
UIRes.showErrorMessage(this, "Valid Signature",
"The signature is valid");
} else {
UIRes.showErrorMessage(this, "Invalid Signature",
"The signature is not valid");
}
}
break;
case "done":
setVisible(false);
dispose();
break;
}
} catch (SignatureException exc) {
UIRes.showErrorMessage(this, "Invalid Signature",
"The signature is not valid");
} catch (Exception exc) {
ErrorLog.get().logException("Exception while processing action event",
exc);
}
}
}