1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author Alexander Y. Kleymenov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23519bb724dc701bd0f59a4c27f72d4b589f382fadNarayan Kamathpackage org.apache.harmony.tests.javax.security.cert; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.Test; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestSuite; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.targets.security.cert.CertificateFactoryTestX509; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Principal; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PublicKey; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 420c1fd5ae392a0d28481cd5680f0dce25e04409b5Alex Klyubinimport java.security.Signature; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SignatureException; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider.Service; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateFactory; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Calendar; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.GregorianCalendar; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.logging.Logger; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.cert.Certificate; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.cert.CertificateEncodingException; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.cert.CertificateException; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.cert.CertificateExpiredException; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.cert.CertificateNotYetValidException; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.cert.X509Certificate; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grobimport junit.framework.Test; 6150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grobimport junit.framework.TestCase; 6250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grobimport junit.framework.TestSuite; 6350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grobimport tests.targets.security.cert.CertificateFactoryTestX509; 6450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class X509CertificateTest extends TestCase { 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Testing data was generated by using of classes 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // from org.apache.harmony.security.asn1 package encoded 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // by org.apache.harmony.misc.Base64 class. 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String base64cert = "-----BEGIN CERTIFICATE-----\n" 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a" 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF" 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE" 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD" 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B" 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG" 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY" 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG" 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB" 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw" 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE" 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h" 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd" 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1" 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP" 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n" 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "-----END CERTIFICATE-----"; 91f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 9250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob /* 9350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob * a self-signed certificate 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 9550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob private static final String selfSignedCert = "-----BEGIN CERTIFICATE-----\n" + 9650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "MIIDPzCCAqigAwIBAgIBADANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJBTjEQ" + 9750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "MA4GA1UECBMHQW5kcm9pZDEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5k" + 9850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "cm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBh" + 9950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "bmRyb2lkLmNvbTAeFw0wOTAzMjAxNzAwMDZaFw0xMjAzMTkxNzAwMDZaMHkxCzAJ" + 10050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "BgNVBAYTAkFOMRAwDgYDVQQIEwdBbmRyb2lkMRAwDgYDVQQKEwdBbmRyb2lkMRAw" + 10150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMSIwIAYJKoZIhvcNAQkB" + 10250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "FhNhbmRyb2lkQGFuZHJvaWQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB" + 10350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "gQCqQkDtkiEXmV8O5EK4y2Y9YyoWNDx70z4fqD+9muuzJGuM5NovMbxhBycuKHF3" + 10450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "WK60iXzrsAYkB1c8VHHbcUEFqz2fBdLKyxy/nYohlo8TYSVpEjt3vfc0sgmp4FKU" + 10550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "RDHO2z3rZPHWysV9L9ZvjeQpiwaYipU9epdBmvFmxQmCDQIDAQABo4HWMIHTMB0G" + 10650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "A1UdDgQWBBTnm32QKeqQC38IQXZOQSPoQyypAzCBowYDVR0jBIGbMIGYgBTnm32Q" + 10750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "KeqQC38IQXZOQSPoQyypA6F9pHsweTELMAkGA1UEBhMCQU4xEDAOBgNVBAgTB0Fu" + 10850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "ZHJvaWQxEDAOBgNVBAoTB0FuZHJvaWQxEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNV" + 10950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "BAMTB0FuZHJvaWQxIjAgBgkqhkiG9w0BCQEWE2FuZHJvaWRAYW5kcm9pZC5jb22C" + 11050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "AQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAUmDApQu+r5rglS1WF" + 11150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "BKXE3R2LasFvbBwdw2E0MAc0TWqLVW91VW4VWMX4r+C+c7rZpYXXtRqFRCuI/czL" + 11250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "0e1GaUP/Wa6bXBcm2u7Iv2dVAaAOELmFSVTZeR57Lm9lT9kQLp24kmNndIsiDW3T" + 11350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "XZ4pY/k2kxungOKx8b8pGYE9Bw==\n" + 11450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "-----END CERTIFICATE-----"; 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private java.security.cert.X509Certificate cert; 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private javax.security.cert.X509Certificate tbt_cert; 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private java.security.cert.X509Certificate javaCert; 121f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Provider myProvider; 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private javax.security.cert.X509Certificate javaxCert; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private java.security.cert.Certificate javaSSCert; 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Provider mySSProvider; 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Certificate javaxSSCert; 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132d5a055e559219904a95f6a32114e22d5fb943bd5Jorg Pleumann @Override 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() throws Exception { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteArrayInputStream bais = new ByteArrayInputStream(base64cert 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getBytes()); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory cf = CertificateFactory.getInstance("X.509"); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.cert = (java.security.cert.X509Certificate) cf 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .generateCertificate(bais); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.tbt_cert = X509Certificate.getInstance(cert.getEncoded()); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // non self signed cert 14350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob this.javaCert = (java.security.cert.X509Certificate)cf 14450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .generateCertificate(new ByteArrayInputStream(selfSignedCert.getBytes())); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.javaxCert = X509Certificate.getInstance(javaCert.getEncoded()); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myProvider = cf.getProvider(); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.addProvider(myProvider); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // self signed cert 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.javaSSCert = cf.generateCertificate(new ByteArrayInputStream( 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project selfSignedCert.getBytes())); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.javaxSSCert = X509Certificate.getInstance(javaCert 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getEncoded()); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mySSProvider = cf.getProvider(); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.addProvider(mySSProvider); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (java.security.cert.CertificateException e) { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test pass.. 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.cert = null; 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.warning("Error in test setup: Certificate type not supported"); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (javax.security.cert.CertificateException e) { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test pass.. 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.cert = null; 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.warning("Error in test setup: Certificate type not supported"); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * X509Certificate() constructor testing. 172229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * {@link X509Certificate#X509Certificate() } 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 174fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project public void testConstructor() { 175fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project //Direct constructor, check if it throws an exception 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Certificate cert = new MyCertificate(); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getInstance(InputStream inStream) method testing. 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetInstance1() { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteArrayInputStream bais = new ByteArrayInputStream(cert 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getEncoded()); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Certificate.getInstance(bais); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (java.security.cert.CertificateEncodingException e) { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected CertificateEncodingException was thrown."); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateEncodingException e) { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected CertificateEncodingException was thrown."); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateException e) { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test pass.. 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-756 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Certificate.getInstance((InputStream) null); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected CertificateException"); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateException e) { 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected; 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getInstance(byte[] certData) method testing. 213f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws CertificateEncodingException 214f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws java.security.cert.CertificateEncodingException 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetInstance2() throws java.security.cert.CertificateEncodingException, CertificateEncodingException { 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean certificateException = false; 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Certificate c = null; 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = X509Certificate.getInstance(cert.getEncoded()); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (java.security.cert.CertificateEncodingException e) { 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected CertificateEncodingException was thrown."); 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateException e) { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test pass.. 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project certificateException = true; 232f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 234f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (! certificateException) { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(c); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(Arrays.equals(c.getEncoded(),cert.getEncoded() )); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 240fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project try { 241fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project X509Certificate.getInstance(new byte[]{(byte) 1 }); 242fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project } catch (CertificateException e) { 243fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project //ok 244fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project } 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-756 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Certificate.getInstance((byte[]) null); 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected CertificateException"); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateException e) { 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected; 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 253f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * checkValidity() method testing. 258f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws CertificateNotYetValidException 259f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws CertificateExpiredException 260f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws java.security.cert.CertificateExpiredException 261f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws java.security.cert.CertificateNotYetValidException 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCheckValidity1() throws CertificateExpiredException, CertificateNotYetValidException, java.security.cert.CertificateExpiredException, java.security.cert.CertificateNotYetValidException { 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Date date = new Date(); 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Date nb_date = tbt_cert.getNotBefore(); 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Date na_date = tbt_cert.getNotAfter(); 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tbt_cert.checkValidity(); 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("CertificateExpiredException expected", date 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .compareTo(na_date) > 0); 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("CertificateNotYetValidException expected", date 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .compareTo(nb_date) < 0); 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateExpiredException e) { 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Unexpected CertificateExpiredException was thrown", 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project date.compareTo(na_date) > 0); 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateNotYetValidException e) { 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Unexpected CertificateNotYetValidException was thrown", 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project date.compareTo(nb_date) < 0); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 285f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tbt_cert.checkValidity(); 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateExpiredException e) { 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 291f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cert.checkValidity(); 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (java.security.cert.CertificateExpiredException e) { 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 296f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 297f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * checkValidity(Date date) method testing. 302f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws CertificateNotYetValidException 303f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws CertificateExpiredException 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCheckValidity2() throws CertificateNotYetValidException, CertificateExpiredException { 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 311a698d224635ccfe3f141ccf627221271aa53bf69Kenny Root Date[] date = new Date[8]; 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Calendar calendar = Calendar.getInstance(); 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < date.length; i++) { 314a698d224635ccfe3f141ccf627221271aa53bf69Kenny Root calendar.set(i * 500, Calendar.JANUARY, 1); 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project date[i] = calendar.getTime(); 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Date nb_date = tbt_cert.getNotBefore(); 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Date na_date = tbt_cert.getNotAfter(); 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < date.length; i++) { 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tbt_cert.checkValidity(date[i]); 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("CertificateExpiredException expected", date[i] 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .compareTo(na_date) > 0); 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("CertificateNotYetValidException expected", date[i] 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .compareTo(nb_date) < 0); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateExpiredException e) { 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Unexpected CertificateExpiredException was thrown", 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project date[i].compareTo(na_date) > 0); 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateNotYetValidException e) { 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Unexpected CertificateNotYetValidException " 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "was thrown", date[i].compareTo(nb_date) < 0); 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 334f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Calendar calendarNow = Calendar.getInstance(); 336f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tbt_cert.checkValidity(calendarNow.getTime()); 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateExpiredException e) { 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 342f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Calendar calendarPast = GregorianCalendar.getInstance(); 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project calendarPast.clear(); 345f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tbt_cert.checkValidity(calendarPast.getTime()); 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateNotYetValidException e) { 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 351f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getVersion() method testing. 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetVersion() { 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The version is not correct.", tbt_cert.getVersion(), 2); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getSerialNumber() method testing. 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetSerialNumber() { 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The serial number is not correct.", tbt_cert 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getSerialNumber(), cert.getSerialNumber()); 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getIssuerDN() method testing. 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetIssuerDN() { 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.warning("testGetIssuerDN: error in test setup."); 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The issuer DN is not correct.", tbt_cert.getIssuerDN(), 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cert.getIssuerDN()); 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getSubjectDN() method testing. 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetSubjectDN() { 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The subject DN is not correct.", tbt_cert.getSubjectDN(), 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cert.getSubjectDN()); 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getNotBefore() method testing. 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetNotBefore() { 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The NotBefore date is not correct.", tbt_cert 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getNotBefore(), cert.getNotBefore()); 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getNotAfter() method testing. 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetNotAfter() { 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The NotAfter date is not correct.", tbt_cert 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getNotAfter(), cert.getNotAfter()); 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getSigAlgName() method testing. 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetSigAlgName() { 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The name of signature algorithm is not correct.", 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tbt_cert.getSigAlgName(), cert.getSigAlgName()); 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getSigAlgOID() method testing. 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetSigAlgOID() { 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The name of OID of signature algorithm is not correct.", 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tbt_cert.getSigAlgOID(), cert.getSigAlgOID()); 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getSigAlgParams() method testing. 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetSigAlgParams() { 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.cert == null) { 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The requested certificate type is not available. 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test can not be applied. 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("The byte array with encoded algorithm parameters " 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "is not correct.", Arrays.equals(tbt_cert.getSigAlgParams(), 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cert.getSigAlgParams())); 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The stub class used for testing of non abstract methods. 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private class MyCertificate extends X509Certificate { 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public MyCertificate() { 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 479f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkValidity() throws CertificateExpiredException, 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateNotYetValidException { 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkValidity(Date arg0) 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateExpiredException, 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateNotYetValidException { 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Principal getIssuerDN() { 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Date getNotAfter() { 498fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project return null; 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Date getNotBefore() { 503fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project return null; 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public BigInteger getSerialNumber() { 508fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project return null; 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getSigAlgName() { 513fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project return null; 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getSigAlgOID() { 518fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project return null; 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getSigAlgParams() { 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Principal getSubjectDN() { 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getVersion() { 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getEncoded() throws CertificateEncodingException { 538fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project return null; 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PublicKey getPublicKey() { 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 548fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project return null; 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void verify(PublicKey key) throws CertificateException, 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchAlgorithmException, InvalidKeyException, 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchProviderException, SignatureException { 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void verify(PublicKey key, String sigProvider) 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException, NoSuchAlgorithmException, 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InvalidKeyException, NoSuchProviderException, 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SignatureException { 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 564f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public class MyModifiablePublicKey implements PublicKey { 566f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private PublicKey key; 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean modifiedAlgo; 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String algo; 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String format; 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean modifiedFormat; 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean modifiedEncoding; 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private byte[] encoding; 574f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public MyModifiablePublicKey(PublicKey k) { 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.key = k; 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getAlgorithm() { 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (modifiedAlgo) { 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return algo; 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return key.getAlgorithm(); 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getFormat() { 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (modifiedFormat) { 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this.format; 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return key.getFormat(); 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 594f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getEncoded() { 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (modifiedEncoding) { 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this.encoding; 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return key.getEncoded(); 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 603f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getSerVerUID() { 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return key.serialVersionUID; 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 609f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setAlgorithm(String myAlgo) { 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project modifiedAlgo = true; 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.algo = myAlgo; 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 614f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setFormat(String myFormat) { 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project modifiedFormat = true; 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project format = myFormat; 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 619f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEncoding(byte[] myEncoded) { 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project modifiedEncoding = true; 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project encoding = myEncoded; 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 625f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 627f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws CertificateEncodingException 628229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * {@link Certificate#getEncoded()} 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetEncoded() 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateEncodingException, java.security.cert.CertificateException { 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // cert = DER encoding of the ASN1.0 structure 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(Arrays.equals(cert.getEncoded(), tbt_cert.getEncoded())); 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(Arrays.equals(javaxCert.getEncoded(), tbt_cert.getEncoded())); 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 636f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 638229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * {@link Certificate#getPublicKey()} 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetPublicKey() { 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PublicKey key = javaxCert.getPublicKey(); 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(key); 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(javaxCert.getPublicKey(), javaCert.getPublicKey()); 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(key.getAlgorithm(),"RSA"); 645f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key = javaxSSCert.getPublicKey(); 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(key); 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(key.getAlgorithm(),"RSA"); 649f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //assertTrue(mySSProvider.containsKey(key)); 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 653f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 655f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws SignatureException 656f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws NoSuchProviderException 657f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws NoSuchAlgorithmException 658f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws InvalidKeyException 659f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws CertificateException 660229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * {@link Certificate#verify(PublicKey)} 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 6626a6b612286976cc185c898803fe51e4e062bd9ebBrett Chabot // Side Effect: Destroys MD5 provider, hurts succeeding tests 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testVerifyPublicKey() throws InvalidKeyException, 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchAlgorithmException, NoSuchProviderException, 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SignatureException, CertificateException { 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Preconditions 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(javaxCert.getPublicKey()); 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(javaxSSCert.getPublicKey()); 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //precondition for self signed certificates 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /*assertEquals(((X509Certificate) javaxSSCert).getIssuerDN().getName(), 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ((X509Certificate) javaxSSCert).getSubjectDN());*/ 673f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // must always evaluate true for self signed 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // here not self signed: 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project javaxCert.verify(javaxCert.getPublicKey()); 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SignatureException e) { 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PublicKey k = javaxCert.getPublicKey(); 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyModifiablePublicKey changedEncoding = new MyModifiablePublicKey(k); 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project changedEncoding 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .setEncoding(new byte[javaxCert.getEncoded().length - 1]); 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project javaxCert.verify(tbt_cert.getPublicKey()); 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeyException e) { 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project javaxCert.verify(null); 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project javaxCert.verify(changedEncoding); 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Exception expected"); 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 707f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 708fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // following test doesn't work because the algorithm is derived from 709fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // somewhere else. 710fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project 711fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // MyModifiablePublicKey changedAlgo = new MyModifiablePublicKey(k); 712fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // changedAlgo.setAlgorithm("MD5withBla"); 713fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project 714fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // try { 715fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // javaxCert.verify(changedAlgo); 716fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // fail("Exception expected"); 717fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // } catch (SignatureException e) { 718fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // // ok 719fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // } 720f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 721fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // Security.removeProvider(mySSProvider.getName()); 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 723fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // try { 724fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // javaxSSCert.verify(javaxSSCert.getPublicKey()); 725fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // } catch (NoSuchProviderException e) { 726fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // // ok 727fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // } 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 729fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // Security.addProvider(mySSProvider); 730f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // must always evaluate true for self signed 732fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project // javaxSSCert.verify(javaxSSCert.getPublicKey()); 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 734f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 736f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws SignatureException 737f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws NoSuchProviderException 738f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws NoSuchAlgorithmException 739f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws java.security.cert.CertificateException 740f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws InvalidKeyException 741f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 742f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws CertificateException 743229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * {@link Certificate#verify(PublicKey, String)} 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 745dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer public void testVerifyPublicKeyString() throws Exception { 746f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project javaxCert.verify(javaxCert.getPublicKey(), myProvider.getName()); 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // myProvider.getService(type, algorithm) 754dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer // Keep track of the original position so the provider can be 755dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer // reinserted in the same spot later. 756dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer Provider[] providers = Security.getProviders(); 757dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer int i = 0; 758dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer for (; i < providers.length; i++) { 759dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer if (providers[i] == myProvider) { 760dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer break; 761dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer } 762dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer } 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.removeProvider(myProvider.getName()); 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project javaxCert.verify(javaxCert.getPublicKey(), myProvider.getName()); 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchProviderException e) { 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 770dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer 771dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer // Note: The position is 1-based, that is, 1 is most preferred, 772dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer // followed by 2, and so on 773dd90ad0a24b486f50dc13fe81a0a6f7f26bd950dNicholas Sauer Security.insertProviderAt(myProvider, i + 1); 774f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 7750c1fd5ae392a0d28481cd5680f0dce25e04409b5Alex Klyubin // Find the Provider which offers MD5withRSA for the certificate's 7760c1fd5ae392a0d28481cd5680f0dce25e04409b5Alex Klyubin // public key. 7770c1fd5ae392a0d28481cd5680f0dce25e04409b5Alex Klyubin Signature signature = Signature.getInstance("MD5withRSA"); 7780c1fd5ae392a0d28481cd5680f0dce25e04409b5Alex Klyubin signature.initVerify(javaxSSCert.getPublicKey()); 7790c1fd5ae392a0d28481cd5680f0dce25e04409b5Alex Klyubin Provider provider = signature.getProvider(); 780f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // self signed cert: should verify with provider 78250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 78350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob javaxSSCert.verify(javaxSSCert.getPublicKey(), 7840c1fd5ae392a0d28481cd5680f0dce25e04409b5Alex Klyubin provider.getName()); 78550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (SignatureException e) { 78650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("blu"); 78750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Test suite() { 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new TestSuite(X509CertificateTest.class); 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 795