finished last of the compile errors
[org.ibex.crypto.git] / src / org / ibex / net / ssl / SwingVerifyCallback.java
1 package org.ibex.net.ssl;
2
3 import javax.swing.*;
4
5 import java.awt.*;
6
7 import org.ibex.net.SSL;
8 import org.ibex.crypto.*;
9
10 public class SwingVerifyCallback extends JDialog implements SSL.VerifyCallback {
11     private Component owner;
12     
13     public SwingVerifyCallback(Component owner) {
14         this.owner = owner;
15     }
16     /*
17         super(owner,"Certificate Verification",true);
18         setModal(true);
19         
20         JTextPane tp = new JTextPane();
21         doc = tp.getStyledDocument();
22         JScrollPane sp = new JScrollPane();
23         sp.setPreferredSize(new Dimension(400,300));
24         sp.setViewportView(tp);
25         sp.setAutoscrolls(false);
26
27         this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
28         JComponent bottom = new JPanel(new FlowLayout(FlowLayout.RIGHT));
29         JButton accept = new JButton("Accept");
30         JButton reject = new JButton("Reject");
31         accept.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
32             accepted = true; 
33             hide();
34         }});
35         reject.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
36             accepted = false; 
37             hide();
38         }});
39         bottom.add(accept);
40         bottom.add(reject);
41         getContentPane().add(BorderLayout.CENTER,sp);
42         getContentPane().add(BorderLayout.SOUTH,bottom);
43         pack();
44     }*/
45     
46     public static String prettyFingerprint(byte[] fp) {
47         StringBuffer sb = new StringBuffer(fp.length*3);
48         for(int i=0;i<fp.length;i++) {
49             if(i>0) sb.append(":");
50             sb.append("0123456789abcdef".charAt((fp[i] & 0xf0) >>> 4));
51             sb.append("0123456789abcdef".charAt((fp[i] & 0x0f) >>> 0));
52         }
53         return sb.toString();
54     }
55     
56     public synchronized boolean checkCerts(X509.Certificate[] certs, String hostname, SSL.Exn exn) {
57         final boolean[] ret = new boolean[1];
58         JTextArea ta = new JTextArea();
59         ta.append("Subject: " + certs[0].subject + "\n");
60         ta.append("Issuer: " + certs[0].issuer + "\n");
61         ta.append("Start Date: " + certs[0].startDate + "\n");
62         ta.append("End Date: " + certs[0].endDate + "\n");
63         ta.append("MD5: " + prettyFingerprint(certs[0].getMD5Fingerprint()) + "\n");
64         ta.append("SHA1: " + prettyFingerprint(certs[0].getSHA1Fingerprint()) + "\n");
65         ta.setEditable(false);
66         ta.setOpaque(false);
67         JScrollPane sp = new JScrollPane(ta);
68         sp.setPreferredSize(new Dimension(300,150));
69         final Object[] messages = new Object[] {
70                 "The SSL Certificate the server presented could not be verified.",
71                 exn.getMessage(),
72                 sp,
73         };
74         Runnable r = new Runnable() { public void run() {
75             int n = JOptionPane.showOptionDialog(
76                     owner,
77                     messages,
78                     "Confirm Server Certificate",
79                     0,
80                     JOptionPane.WARNING_MESSAGE,
81                     null, 
82                     new Object[] { "Accept", "Reject" },
83                     "Accept");
84             ret[0] = n == 0;
85                     
86         } };
87         if(SwingUtilities.isEventDispatchThread()) {
88             r.run();
89         } else {
90             try {
91                 SwingUtilities.invokeAndWait(r);
92             } catch(Exception e) {
93                 e.printStackTrace();
94             }
95         }
96         return ret[0];
97     }
98
99 }