1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @author Alexander Y. Kleymenov 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.java.security.cert; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayInputStream; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyFactory; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.NoSuchAlgorithmException; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.PublicKey; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertPath; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertificateFactory; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.X509CRL; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.X509Certificate; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.X509EncodedKeySpec; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Collection; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.luni.util.Base64; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * X.509 CertificateFactory provider implementation test.<br> 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See RFC 3280 (http://www.ietf.org/rfc/rfc3280.txt) for 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * more information on X.509, and 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.ietf.org/rfc/rfc2315.txt 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * for more information on PKCS #7. 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The testing data was generated by use of classes from 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * org.apache.harmony.security.x509 package. 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class CertificateFactory_ImplTest extends TestCase { 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Base64 encoded PKCS7 SignedObject containing two X.509 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Certificates and CRLs. 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String pkcs7so = 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MIIHDwYJKoZIhvcNAQcCoIIHADCCBvwCAQExADALBgkqhkiG9w0BBwGg" 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ggUuMIICkzCCAlOgAwIBAgICAiswCQYHKoZIzjgEAzAdMRswGQYDVQQK" 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ExJDZXJ0aWZpY2F0ZSBJc3N1ZXIwIxcNMDYwOTA1MDk1MzA2WhgSMjMz" 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "NjEwMTMwMjUxMjcuODFaMB0xGzAZBgNVBAoTEkNlcnRpZmljYXRlIElz" 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "c3VlcjCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu" 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "7OTn9hG3UjzvRADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeB" 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "O4AdNG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD" 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "9tPFHsMCNVQTWhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvM" 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "spK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jrqgvlX" 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "TAs9B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqL" 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "VHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4Vrl" 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "nwaSi2ZegHtVJWQBTDv+z0kqA4GFAAKBgQDyCA7AK6Kep2soxt8tIsWW" 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "kafbYdueAkeBNnm46H0OteFa80HMuJjKJ0LjlPrdjFMARKyW/GATtQhg" 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "hY/MrINAHmKcX5QjL1DkuJKDNggLHqj5D6efsWmLKwLvmviWLzWtjh7Y" 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "GBZeLt0ezu2q49aKcOzkkDsCSsMz09u9284L6qMeMBwwGgYDVR0RAQH/" 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "BBAwDoEMcmZjQDgyMi5OYW1lMAkGByqGSM44BAMDLwAwLAIUWo0C+R8P" 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "J8LGSLsCRqJ8SOOO0SoCFGvO6mpNdzOKiwlYwfpF/Xyi7s3vMIICkzCC" 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "AlOgAwIBAgICAiswCQYHKoZIzjgEAzAdMRswGQYDVQQKExJDZXJ0aWZp" 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "Y2F0ZSBJc3N1ZXIwIxcNMDYwOTA1MDk1MzA2WhgSMjMzNjEwMTMwMjUx" 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MjcuODFaMB0xGzAZBgNVBAoTEkNlcnRpZmljYXRlIElzc3VlcjCCAbgw" 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn9hG3Ujzv" 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "RADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4AdNG/yZmC3" 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCNVQT" 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "WhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvw" 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "WBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jrqgvlXTAs9B4JnUVlX" 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "jrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4r" 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "s6Z1kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtV" 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "JWQBTDv+z0kqA4GFAAKBgQDyCA7AK6Kep2soxt8tIsWWkafbYdueAkeB" 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "Nnm46H0OteFa80HMuJjKJ0LjlPrdjFMARKyW/GATtQhghY/MrINAHmKc" 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "X5QjL1DkuJKDNggLHqj5D6efsWmLKwLvmviWLzWtjh7YGBZeLt0ezu2q" 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "49aKcOzkkDsCSsMz09u9284L6qMeMBwwGgYDVR0RAQH/BBAwDoEMcmZj" 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "QDgyMi5OYW1lMAkGByqGSM44BAMDLwAwLAIUWo0C+R8PJ8LGSLsCRqJ8" 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "SOOO0SoCFGvO6mpNdzOKiwlYwfpF/Xyi7s3voYIBsjCB1jCBlwIBATAJ" 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "BgcqhkjOOAQDMBUxEzARBgNVBAoTCkNSTCBJc3N1ZXIXDTA2MDkwNTA5" 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "NTMwN1oXDTA2MDkwNTA5NTQ0N1owQTA/AgICKxcNMDYwOTA1MDk1MzA4" 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "WjAqMAoGA1UdFQQDCgEBMBwGA1UdGAQVGBMyMDA2MDkwNTA5NTMwNy43" 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MThaoA8wDTALBgNVHRQEBAICEVwwCQYHKoZIzjgEAwMvADAsAhR/l5kI" 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "bTkuJe9HjcpZ4Ff4Ifv9xwIUIXBlDKsNFlgYdWWTxzrrJOHyMuUwgdYw" 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "gZcCAQEwCQYHKoZIzjgEAzAVMRMwEQYDVQQKEwpDUkwgSXNzdWVyFw0w" 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "NjA5MDUwOTUzMDdaFw0wNjA5MDUwOTU0NDdaMEEwPwICAisXDTA2MDkw" 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "NTA5NTMwOFowKjAKBgNVHRUEAwoBATAcBgNVHRgEFRgTMjAwNjA5MDUw" 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "OTUzMDcuNzE4WqAPMA0wCwYDVR0UBAQCAhFcMAkGByqGSM44BAMDLwAw" 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "LAIUf5eZCG05LiXvR43KWeBX+CH7/ccCFCFwZQyrDRZYGHVlk8c66yTh" 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "8jLlMQA="; 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Base64 encoded PkiPath object containing 2 X.509 certificates. 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String pkiPath = 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MIIFMDCCApQwggJToAMCAQICAgIrMAkGByqGSM44BAMwHTEbMBkGA1UE" 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ChMSQ2VydGlmaWNhdGUgSXNzdWVyMCMXDTA2MDkwNTExMDAyM1oYEjIz" 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MzYxMDEzMTQwNDE4LjEyWjAdMRswGQYDVQQKExJDZXJ0aWZpY2F0ZSBJ" 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "c3N1ZXIwggG4MIIBLAYHKoZIzjgEATCCAR8CgYEA/X9TgR11EilS30qc" 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "Luzk5/YRt1I870QAwx4/gLZRJmlFXUAiUftZPY1Y+r/F9bow9subVWzX" 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "gTuAHTRv8mZgt2uZUKWkn5/oBHsQIsJPu6nX/rfGG/g7V+fGqKYVDwT7" 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "g/bTxR7DAjVUE1oWkTL2dfOuK2HXKu/yIgMZndFIAccCFQCXYFCPFSML" 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "zLKSuYKi64QL8Fgc9QKBgQD34aCF1ps93su8q1w2uFe5eZSvu/o66oL5" 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "V0wLPQeCZ1FZV4661FlP5nEHEIGAtEkWcSPoTCgWE7fPCTKMyKbhPBZ6" 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "i1R8jSjgo64eK7OmdZFuo38L+iE1YvH7YnoBJDvMpPG+qFGQiaiD3+Fa" 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "5Z8GkotmXoB7VSVkAUw7/s9JKgOBhQACgYEA8ggOwCuinqdrKMbfLSLF" 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "lpGn22HbngJHgTZ5uOh9DrXhWvNBzLiYyidC45T63YxTAESslvxgE7UI" 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "YIWPzKyDQB5inF+UIy9Q5LiSgzYICx6o+Q+nn7FpiysC75r4li81rY4e" 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "2BgWXi7dHs7tquPWinDs5JA7AkrDM9PbvdvOC+qjHjAcMBoGA1UdEQEB" 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "/wQQMA6BDHJmY0A4MjIuTmFtZTAJBgcqhkjOOAQDAzAAMC0CFQCAUA72" 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "3BIXNluugYcScXeb9vx5vAIUYreCA5ljANvzSsD0ofI+xph4//IwggKU" 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MIICU6ADAgECAgICKzAJBgcqhkjOOAQDMB0xGzAZBgNVBAoTEkNlcnRp" 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ZmljYXRlIElzc3VlcjAjFw0wNjA5MDUxMTAwMjNaGBIyMzM2MTAxMzE0" 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MDQxOC4xMlowHTEbMBkGA1UEChMSQ2VydGlmaWNhdGUgSXNzdWVyMIIB" 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "uDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdS" 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "PO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/Jm" 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "YLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1" 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuE" 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "C/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdR" 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "WVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOu" 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "HiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6A" 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "e1UlZAFMO/7PSSoDgYUAAoGBAPIIDsArop6nayjG3y0ixZaRp9th254C" 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "R4E2ebjofQ614VrzQcy4mMonQuOU+t2MUwBErJb8YBO1CGCFj8ysg0Ae" 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "YpxflCMvUOS4koM2CAseqPkPp5+xaYsrAu+a+JYvNa2OHtgYFl4u3R7O" 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "7arj1opw7OSQOwJKwzPT273bzgvqox4wHDAaBgNVHREBAf8EEDAOgQxy" 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ZmNAODIyLk5hbWUwCQYHKoZIzjgEAwMwADAtAhUAgFAO9twSFzZbroGH" 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "EnF3m/b8ebwCFGK3ggOZYwDb80rA9KHyPsaYeP/y"; 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Base64 encoded X.509 CRL. 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String x509crl = 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MIHWMIGWAgEBMAkGByqGSM44BAMwFTETMBEGA1UEChMKQ1JMIElzc3Vl" 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "chcNMDYwOTA1MDk1MzA4WhcNMDYwOTA1MDk1NDQ4WjBAMD4CAgIrFw0w" 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "NjA5MDUwOTUzMDhaMCkwCgYDVR0VBAMKAQEwGwYDVR0YBBQYEjIwMDYw" 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "OTA1MDk1MzA4Ljg5WqAPMA0wCwYDVR0UBAQCAhFcMAkGByqGSM44BAMD" 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MAAwLQIUJ1KAJumw8mOpGXT/FS5K9WwOBRICFQCR+ez59x9GH3sKoByC" 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "IooeR20Q3Q=="; 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Base64 encoded X.509 Certificate. 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String x509cert = 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MIICkzCCAlOgAwIBAgICAiswCQYHKoZIzjgEAzAdMRswGQYDVQQKExJD" 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ZXJ0aWZpY2F0ZSBJc3N1ZXIwIxcNMDYwOTA4MDU1NzUxWhgSMjMzNjEx" 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MTAxMTM4NTUuNjJaMB0xGzAZBgNVBAoTEkNlcnRpZmljYXRlIElzc3Vl" 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "cjCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn" 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "9hG3UjzvRADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4Ad" 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "NG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPF" 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "HsMCNVQTWhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5" 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jrqgvlXTAs9" 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyN" 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "KOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4VrlnwaS" 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "i2ZegHtVJWQBTDv+z0kqA4GFAAKBgQDyCA7AK6Kep2soxt8tIsWWkafb" 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "YdueAkeBNnm46H0OteFa80HMuJjKJ0LjlPrdjFMARKyW/GATtQhghY/M" 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "rINAHmKcX5QjL1DkuJKDNggLHqj5D6efsWmLKwLvmviWLzWtjh7YGBZe" 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "Lt0ezu2q49aKcOzkkDsCSsMz09u9284L6qMeMBwwGgYDVR0RAQH/BBAw" 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "DoEMcmZjQDgyMi5OYW1lMAkGByqGSM44BAMDLwAwLAIUO+JWKWai/8Si" 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "2oEfhKSobLttYeYCFFO5YVDvtnmVVnvQTtUvrPpsaxJR"; 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Base64 encoded Private Key used for data signing. 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * This data is not directly used in the test, but it could be 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * useful in future in case of implementation of additional 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * testing data structures. 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String b64PrivateKeySpec = 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s" 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7" 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P2" 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "08UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yy" 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "krmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdM" 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "Cz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotU" 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "fI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWf" 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "BpKLZl6Ae1UlZAFMO/7PSSoEFgIUS24w346zv1ic3wsLOHzxQnf9aX0="; 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Base64 encoded Public Key for signature verification. 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String b64PublicKeySpec = 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2" 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00" 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208Ue" 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "wwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmC" 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0H" 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "gmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o" 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKL" 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "Zl6Ae1UlZAFMO/7PSSoDgYUAAoGBAPIIDsArop6nayjG3y0ixZaRp9th" 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "254CR4E2ebjofQ614VrzQcy4mMonQuOU+t2MUwBErJb8YBO1CGCFj8ys" 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "g0AeYpxflCMvUOS4koM2CAseqPkPp5+xaYsrAu+a+JYvNa2OHtgYFl4u" 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "3R7O7arj1opw7OSQOwJKwzPT273bzgvq"; 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The name of the algorithm used for Certificate/CRL signing. 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String publicKeyAlgorithm = "DSA"; 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The public key to verify generated Certificates and CRLs. 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static PublicKey publicKey; 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static { 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes X509EncodedKeySpec publicKeySpec = 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new X509EncodedKeySpec( 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Base64.decode(b64PublicKeySpec.getBytes("UTF-8"))); 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes KeyFactory keyFactory = 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes KeyFactory.getInstance(publicKeyAlgorithm); 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes publicKey = keyFactory.generatePublic(publicKeySpec); 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NoSuchAlgorithmException e) { 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // provider is not installed, will not verify the generated data 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes publicKey = null; 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // problems with a representation of the key 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes publicKey = null; 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // array contains allowed PEM delimiters 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String[][] good = { 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGIN\n", "\n-----END"}, 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGIN-----\n", "\n-----END-----"}, 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGIN PEM ENCODED DATA STRUCTURE-----\n", "\n-----END-----"}, 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGIN MEANINGLESS SEPARATOR\n", "\n-----END PEM"}, 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // array contains not allowed PEM delimiters 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String[][] bad = { 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"----BEGI\n", "\n-----END"}, 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGI\n", "\n----END"}, 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGI\n", "\n-----END"}, 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGIN\n", "\n-----EN"}, 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGIN", "\n-----END"}, 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {"-----BEGIN\n", "-----END"}, 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // array contains bad PEM encoded content. 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String[] bad_content = { 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MIIHDwYJ", "ABCD", "\r\n\r\n", "\n\r", "" 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * generateCRLs method testing. 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Generates CRLs on the base of PKCS7 SignedData Object 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateCRLs() throws Exception { 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Testing the CRLs generation on the base of PKCS7 SignedData object 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream( 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Base64.decode(pkcs7so.getBytes("UTF-8"))); 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection crls = factory.generateCRLs(bais); 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Factory returned null on correct PKCS7 data", crls); 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of collection differs from expected", 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, crls.size()); 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator i = crls.iterator(); i.hasNext();) { 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509CRL) i.next()).verify(publicKey); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * generateCRL/generateCertificate method testing. 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tries to generates single CRL/Certificate 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * on the base of PKCS7 SignedData Object. 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateCRL() throws Exception { 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream( 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Base64.decode(pkcs7so.getBytes("UTF-8"))); 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCRL(bais); 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream(Base64.decode(pkcs7so.getBytes("UTF-8"))); 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertificate(bais); 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Generates CRLs on the base of PEM encoding. 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateBase64CRL() throws Exception { 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais; 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<good.length; i++) { 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[i][0] + x509crl + good[i][1]).getBytes("UTF-8")); 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes X509CRL crl = (X509CRL) factory.generateCRL(bais); 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Factory returned null on correct data", crl); 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes crl.verify(publicKey); 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<bad_content.length; i++) { 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[0][0] + bad_content[i] + good[0][1]).getBytes("UTF-8")); 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCRL(bais); 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // e.printStackTrace(); 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<bad.length; i++) { 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (bad[i][0] + x509crl + bad[i][1]).getBytes("UTF-8")); 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCRL(bais); 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void verifyCRLs(Collection crls) throws Exception { 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator it = crls.iterator(); it.hasNext();) { 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509CRL) it.next()).verify(publicKey); 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void verifyCertificates(Collection certs) throws Exception { 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator it = certs.iterator(); it.hasNext();) { 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509Certificate) it.next()).verify(publicKey); 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * generateCRLs method testing. 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Generates CRLs on the base of consequent 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * PEM X.509(ASN.1)/X.509(ASN.1)/PKCS7 forms. 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateBase64CRLs() throws Exception { 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ------------------------ Test Data ----------------------------- 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // encoding describing codes 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int pem_x509 = 0, asn_x509 = 1, pem_pkcs = 2, asn_pkcs = 3, 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bad = 4, npe_bad = 5, npe_bad2 = 6, num_of_variants = 7; 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // error code, marks sequences as throwing exceptions 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int error = 999; 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test sequences 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int[][] sequences = { 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {pem_x509, pem_x509}, 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {pem_x509, asn_x509}, 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {pem_x509, asn_x509, pem_x509}, 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {asn_x509, asn_x509}, 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {asn_x509, pem_x509}, 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {asn_x509, pem_x509, asn_x509}, 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // -1 means that only 1 (-(-1)) CRL will be generated 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // on the base of this encodings sequence 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-1, pem_x509, pem_pkcs}, 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-1, pem_x509, bad}, 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, pem_x509, npe_bad2}, 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, pem_x509, npe_bad}, 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-2, pem_pkcs, pem_x509}, // 2 CRLs are expected 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-2, pem_pkcs, bad}, 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-2, pem_pkcs, npe_bad}, 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-2, pem_pkcs, npe_bad2}, 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-1, asn_x509, pem_pkcs}, 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-1, asn_x509, bad}, 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, asn_x509, npe_bad}, 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, asn_x509, npe_bad2}, 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // exception is expected 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-error, bad}, 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-error, bad, asn_x509}, 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-error, npe_bad}, 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-error, npe_bad2}, 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // actual encodings 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[][] data = new byte[num_of_variants][]; 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[pem_x509] = (good[0][0] + x509crl + good[0][1] + "\n").getBytes("UTF-8"); 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[asn_x509] = Base64.decode(x509crl.getBytes("UTF-8")); 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[pem_pkcs] = (good[0][0] + pkcs7so + good[0][1] + "\n").getBytes("UTF-8"); 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[asn_pkcs] = Base64.decode(pkcs7so.getBytes("UTF-8")); 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[bad] = new byte[] {0, 1, 1, 1, 1, 1, 0, 1}; 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[npe_bad] = new byte[] {0, 1, 1, 1, 1, 1, 1, 0}; 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[npe_bad2] = new byte[] {48, 0, 3, 4, 5, 6, 7}; 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // -------------------------- Test -------------------------------- 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Tests CRL generation on the base of sequences of heterogeneous 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // data format 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<sequences.length; i++) { // for each of the sequences.. 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected size og generated CRL collection 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int expected_size = (sequences[i][0] < 0) 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ? -sequences[i][0] 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes : sequences[i].length; 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // compute the size of the encoding described by sequence 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int encoding_size = 0; 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //System.out.print("Sequence:"); 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int j=0; j<sequences[i].length; j++) { 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //System.out.print(" "+sequences[i][j]); 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (sequences[i][j] >= 0) { 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoding_size += data[sequences[i][j]].length; 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //System.out.println(""); 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // create the encoding of described sequence 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] encoding = new byte[encoding_size]; 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int position = 0; 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int j=0; j<sequences[i].length; j++) { 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (sequences[i][j] >= 0) { 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy( 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[sequences[i][j]], 0, // from 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoding, position, // to 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[sequences[i][j]].length); // length 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes position += data[sequences[i][j]].length; 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (expected_size == error) { // exception throwing test 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCRLs(new ByteArrayInputStream(encoding)); 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection crls = 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCRLs(new ByteArrayInputStream(encoding)); 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Factory returned null on correct data", crls); 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of collection differs from expected", 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expected_size, crls.size()); 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes verifyCRLs(crls); 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * generateCertificates method testing. 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Generates Certificates on the base of consequent 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * PEM X.509(ASN.1)/X.509(ASN.1)/PKCS7 forms. 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateBase64Certificates() throws Exception { 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ------------------------ Test Data ----------------------------- 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // encoding describing codes 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int pem_x509 = 0, asn_x509 = 1, pem_pkcs = 2, asn_pkcs = 3, 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bad = 4, bad1 = 5, bad2 = 6, num_of_variants = 7; 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // error code, marks sequences as throwing exceptions 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int error = 999; 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test sequences 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int[][] sequences = { 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {pem_x509, pem_x509}, 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {pem_x509, asn_x509}, 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {pem_x509, asn_x509, pem_x509}, 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {asn_x509, asn_x509}, 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {asn_x509, pem_x509}, 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {asn_x509, pem_x509, asn_x509}, 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // -1 means that only 1 (-(-1)) Certificate will be generated 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // on the base of this encodings sequence 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, pem_x509, pem_pkcs}, 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, pem_x509, bad}, 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-2, pem_pkcs, pem_x509}, // 2 Certificates are expected 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-2, pem_pkcs, bad}, 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-2, pem_pkcs, bad1}, 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-2, pem_pkcs, bad2}, 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, asn_x509, pem_pkcs}, 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, asn_x509, bad}, 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, asn_x509, bad1}, 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, pem_x509, bad1}, 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, asn_x509, bad2}, 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // {-1/*-error*/, pem_x509, bad2}, 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // exception is expected 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-error, bad}, 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-error, bad, asn_x509}, 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-error, bad1}, 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes {-error, bad2}, 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // actual encodings 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[][] data = new byte[num_of_variants][]; 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[pem_x509] = (good[0][0] + x509cert + good[0][1] + "\n").getBytes("UTF-8"); 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[asn_x509] = Base64.decode(x509cert.getBytes("UTF-8")); 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[pem_pkcs] = (good[0][0] + pkcs7so + good[0][1] + "\n").getBytes("UTF-8"); 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[asn_pkcs] = Base64.decode(pkcs7so.getBytes("UTF-8")); 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[bad] = new byte[] {0, 1, 1, 1, 1, 1, 0, 1}; 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[bad1] = new byte[] {0, 1, 1, 1, 1, 1, 1, 0}; 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[bad2] = new byte[] {48, 0, 3, 4, 5, 6, 7}; 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // -------------------------- Test -------------------------------- 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Tests Certificate generation on the base of sequences of heterogeneous 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // data format 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<sequences.length; i++) { // for each of the sequences.. 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected size og generated Certificate collection 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int expected_size = (sequences[i][0] < 0) 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ? -sequences[i][0] 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes : sequences[i].length; 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // compute the size of the encoding described by sequence 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int encoding_size = 0; 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //System.out.print("Sequence:"); 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int j=0; j<sequences[i].length; j++) { 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //System.out.print(" "+sequences[i][j]); 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (sequences[i][j] >= 0) { 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoding_size += data[sequences[i][j]].length; 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //System.out.println(""); 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // create the encoding of described sequence 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] encoding = new byte[encoding_size]; 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int position = 0; 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int j=0; j<sequences[i].length; j++) { 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (sequences[i][j] >= 0) { 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy( 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[sequences[i][j]], 0, // from 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoding, position, // to 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes data[sequences[i][j]].length); // length 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes position += data[sequences[i][j]].length; 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (expected_size == error) { // exception throwing test 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertificates(new ByteArrayInputStream(encoding)); 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection certs = 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertificates(new ByteArrayInputStream(encoding)); 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Factory returned null on correct data", certs); 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of collection differs from expected", 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expected_size, certs.size()); 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes verifyCertificates(certs); 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Generates CRLs/Certificates on the base of PEM PKCS7 encoding. 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateBase64PKCS7() throws Exception { 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais; 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<good.length; i++) { 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[i][0] + pkcs7so + good[i][1]).getBytes("UTF-8")); 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection crls = factory.generateCRLs(bais); 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Factory returned null on correct PKCS7 data", crls); 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of collection differs from expected", 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, crls.size()); 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator it = crls.iterator(); it.hasNext();) { 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509CRL) it.next()).verify(publicKey); 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[i][0] + pkcs7so + good[i][1]).getBytes("UTF-8")); 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection certs = factory.generateCertificates(bais); 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Factory returned null on correct PKCS7 data", certs); 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of collection differs from expected", 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, certs.size()); 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator it = certs.iterator(); it.hasNext();) { 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509Certificate) it.next()).verify(publicKey); 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<bad_content.length; i++) { 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[0][0] + bad_content[i] + good[0][1]).getBytes("UTF-8")); 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertificates(bais); 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[0][0] + bad_content[i] + good[0][1]).getBytes("UTF-8")); 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCRLs(bais); 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<bad.length; i++) { 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (bad[i][0] + pkcs7so + bad[i][1]).getBytes("UTF-8")); 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCRLs(bais); 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (bad[i][0] + pkcs7so + bad[i][1]).getBytes("UTF-8")); 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertificates(bais); 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Generates CertPaths on the base of PEM PkiPath/PKCS7 encoding. 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateBase64CertPath() throws Exception { 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais; 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes List certificates; 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<good.length; i++) { 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[i][0] + pkiPath + good[i][1]).getBytes("UTF-8")); 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes certificates = factory.generateCertPath(bais).getCertificates(); 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of the list differs from expected", 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, certificates.size()); 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator it = certificates.iterator(); it.hasNext();) { 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509Certificate) it.next()).verify(publicKey); 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[i][0] + pkiPath + good[i][1]).getBytes("UTF-8")); 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes certificates = 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais, "PkiPath").getCertificates(); 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of the list differs from expected", 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, certificates.size()); 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator it = certificates.iterator(); it.hasNext();) { 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509Certificate) it.next()).verify(publicKey); 655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[i][0] + pkcs7so + good[i][1]).getBytes("UTF-8")); 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes certificates = 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais, "PKCS7").getCertificates(); 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of the list differs from expected", 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, certificates.size()); 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator it = certificates.iterator(); it.hasNext();) { 669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509Certificate) it.next()).verify(publicKey); 670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // testing empty PkiPath structure (ASN.1 such as 0x30, 0x00) 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[0][0] + "MAB=" + good[0][1]).getBytes("UTF-8")); // "MABCDEFG" 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of the list differs from expected", 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 0, factory.generateCertPath(bais, "PkiPath") 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getCertificates().size()); 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // testing with bad PEM content 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<bad_content.length; i++) { 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[0][0] + bad_content[i] + good[0][1]).getBytes("UTF-8")); 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais); 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[0][0] + bad_content[i] + good[0][1]).getBytes("UTF-8")); 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais, "PkiPath"); 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (good[0][0] + bad_content[i] + good[0][1]).getBytes("UTF-8")); 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais, "PKCS7"); 699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i=0; i<bad.length; i++) { 704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (bad[i][0] + pkiPath + bad[i][1]).getBytes("UTF-8")); 706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais); 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (bad[i][0] + pkiPath + bad[i][1]).getBytes("UTF-8")); 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais, "PkiPath"); 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream( 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (bad[i][0] + pkcs7so + bad[i][1]).getBytes("UTF-8")); 718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais, "PKCS7"); 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { } 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * generateCertificates method testing. 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateCertificates() throws Exception { 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Testing the Certificates generation 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // on the base of PKCS7 SignedData object 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream( 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Base64.decode(pkcs7so.getBytes("UTF-8"))); 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection certs = factory.generateCertificates(bais); 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Factory returned null on correct PKCS7 data", certs); 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of collection differs from expected", 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, certs.size()); 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator i = certs.iterator(); i.hasNext();) { 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509Certificate) i.next()).verify(publicKey); 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * generateCertificates method testing. 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGenerateCertPath() throws Exception { 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory factory = CertificateFactory.getInstance("X.509"); 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Testing the CertPath generation 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // on the base of PKCS7 SignedData object 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream( 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Base64.decode(pkcs7so.getBytes("UTF-8"))); 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection certPath = 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes factory.generateCertPath(bais, "PKCS7").getCertificates(); 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of collection differs from expected", 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, certPath.size()); 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (publicKey != null) { 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // verify the signatures 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator i = certPath.iterator(); i.hasNext();) { 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((X509Certificate) i.next()).verify(publicKey); 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // testing empty PkiPath structure (ASN.1 such as 0x30, 0x00) 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream(new byte[] {(byte) 0x30, 0x00}); 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The size of the list differs from expected", 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 0, factory.generateCertPath(bais, "PkiPath") 776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getCertificates().size()); 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 780