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