1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.xnet.tests.support;
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Principal;
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.Certificate;
51cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.security.cert.CertificateEncodingException;
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Enumeration;
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Hashtable;
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector;
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLPeerUnverifiedException;
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLSessionBindingEvent;
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLSessionBindingListener;
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLSessionContext;
141cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport javax.security.cert.CertificateException;
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.cert.X509Certificate;
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLSession;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.TestCertUtils;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class mySSLSession implements SSLSession {
22f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private byte[] idData;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private String nameHost = null;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private int namePort = -1;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Hashtable table;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private boolean invalidateDone = false;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Certificate[] certs = null;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private X509Certificate[] xCerts = null;
30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public mySSLSession(String host, int port, byte[] id) {
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        certs = null;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        xCerts = null;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        nameHost = host;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        namePort = port;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        idData = id;
37f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        table = new Hashtable();
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
39f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public mySSLSession(X509Certificate[] xc) {
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        certs = TestCertUtils.getCertChain();
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        xCerts = xc;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
451cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    public mySSLSession(Certificate[] xc) throws CertificateEncodingException, CertificateException {
461cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        certs = xc;
471cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        xCerts = new X509Certificate[xc.length];
481cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        int i = 0;
491cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        for (Certificate cert : xc) {
501cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            xCerts[i++] = X509Certificate.getInstance(cert.getEncoded());
511cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        }
521cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    }
53f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
541cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    public mySSLSession() {
551cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    }
56f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getApplicationBufferSize() {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return 1234567;
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
60f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getCipherSuite() {
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return "SuiteName";
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
64f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public long getCreationTime() {
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return 1000l;
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public byte[] getId() {
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return idData;
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
72f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public long getLastAccessedTime() {
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return 2000l;
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Certificate[] getLocalCertificates() {
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return null;
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
80f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Principal getLocalPrincipal() {
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return null;
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
84f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getPacketBufferSize() {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return 12345;
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
88f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException {
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (certs == null) {
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new SSLPeerUnverifiedException("peer not authenticated");
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } else {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return certs;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
96f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if(xCerts == null) {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new SSLPeerUnverifiedException("peer not authenticated");
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } else {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return xCerts;
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
104f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getPeerHost() {
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return nameHost;
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
108f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getPeerPort() {
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return namePort;
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
112f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Principal getPeerPrincipal() throws SSLPeerUnverifiedException {
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return null;
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
116f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getProtocol() {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return "ProtocolName";
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
120f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public SSLSessionContext getSessionContext() {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return null;
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
124f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void putValue(String s, Object obj) {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if(s == null || obj == null)
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException("arguments can not be null");
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object obj1 = table.put(s, obj);
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if(obj1 instanceof SSLSessionBindingListener) {
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SSLSessionBindingEvent sslsessionbindingevent = new SSLSessionBindingEvent(this, s);
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ((SSLSessionBindingListener)obj1).valueUnbound(sslsessionbindingevent);
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if(obj instanceof SSLSessionBindingListener) {
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SSLSessionBindingEvent sslsessionbindingevent1 = new SSLSessionBindingEvent(this, s);
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ((SSLSessionBindingListener)obj).valueBound(sslsessionbindingevent1);
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
138f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void removeValue(String s) {
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if(s == null)
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException("argument can not be null");
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object obj = table.remove(s);
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if(obj instanceof SSLSessionBindingListener) {
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SSLSessionBindingEvent sslsessionbindingevent = new SSLSessionBindingEvent(this, s);
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ((SSLSessionBindingListener)obj).valueUnbound(sslsessionbindingevent);
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Object getValue(String s) {
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if(s == null) {
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException("argument can not be null");
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } else {
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return table.get(s);
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
156f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String[] getValueNames() {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Vector vector = new Vector();
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration enumeration = table.keys();
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (enumeration.hasMoreElements()) {
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            vector.addElement(enumeration.nextElement());
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String as[] = new String[vector.size()];
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        vector.copyInto(as);
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return as;
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
167f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void invalidate() {
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        invalidateDone = true;
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
171f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean isValid() {
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return invalidateDone;
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
177