You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/04/10 07:38:38 UTC

svn commit: r392891 [5/5] - in /incubator/harmony/enhanced/classlib/trunk: make/ modules/auth/make/common/ modules/auth/src/test/java/common/tests/ modules/auth/src/test/java/common/tests/api/ modules/auth/src/test/java/common/tests/api/javax/ modules/...

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/CertificateFactoryTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/CertificateFactoryTest.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/CertificateFactoryTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/CertificateFactoryTest.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,588 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.api.java.security.cert;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.NoSuchProviderException;
+import java.security.Provider;
+import java.security.Security;
+import java.security.cert.CRL;
+import java.security.cert.CRLException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Collection;
+
+import tests.support.Support_GetResource;
+import tests.support.resource.Support_Resources;
+
+public class CertificateFactoryTest extends junit.framework.TestCase {
+
+	private static final String BASE_URL = Support_GetResource
+			.getResourceURL("/../internalres/");
+
+	private static final String[] CERTIFICATE_URLS = new String[] {
+			"Bug93891-PEM.cer", "Bug93891-DER.cer", "Bug94404-PKCS7.cer" };
+
+	private static final String[] CRL_URLS = new String[] { "Bug93893-1.crl",
+			"Bug93893-2.crl", "Bug94404-DER.crl" };
+
+	private static final String[] CRLCOLLECTION_URLS = new String[] { "Bug94404-PKCS7.crl" };
+
+	/**
+	 * @tests java.security.cert.CertificateFactory#generateCertificate(java.io.InputStream)
+	 */
+	public void test_generateCertificateLjava_io_InputStream() {
+		// Test 1
+		// Test for method java.security.cert.Certificate
+		// java.security.cert.CertificateFactory.generateCertificate(java.io.InputStream)
+		int i = 0;
+		try {
+			CertificateFactory fact = CertificateFactory.getInstance("X.509");
+			for (; i < CERTIFICATES_ENCODED_X509.length; i++)
+				if (CERTIFICATES_ENCODED_X509[i] != null) {
+					ByteArrayInputStream bais = new ByteArrayInputStream(
+							CERTIFICATES_ENCODED_X509[i].getBytes());
+					X509Certificate cert = (X509Certificate) fact
+							.generateCertificate(bais);
+					
+					// try again with generateCertificates()
+					bais = new ByteArrayInputStream(
+							CERTIFICATES_ENCODED_X509[i].getBytes());
+					cert = (X509Certificate) fact.generateCertificate(bais);
+				}
+		} catch (CertificateException e) {
+			fail("CertificateException in getInstance or generateCertificate["
+					+ i + "]");
+		}
+
+		// Test 2
+		InputStream is = Support_Resources.getStream("hyts_badpem.cer");
+		boolean caughtException = false;
+		try {
+			CertificateFactory fact = CertificateFactory.getInstance("X.509");
+			Certificate cert = fact.generateCertificate(is);
+		} catch (CertificateException e) {
+			caughtException = true;
+		} finally {
+			try {
+				is.close();
+			} catch (IOException e) {
+				// Ignore
+			}
+		}
+		assertTrue("Test2: CertificateException not thrown", caughtException);
+	}
+
+	/**
+	 * @tests java.security.cert.CertificateFactory#generateCertificates(java.io.InputStream)
+	 */
+	public void test_generateCertificatesLjava_io_InputStream() {
+		try {
+			CertificateFactory fact = CertificateFactory.getInstance("X.509");
+			for (int i = 0; i < CERTIFICATE_URLS.length; i++) {
+				URL certUrl = new URL(BASE_URL + CERTIFICATE_URLS[i]);
+				try {
+					InputStream is = certUrl.openStream();
+					Collection certs = fact.generateCertificates(is);
+					assertNotNull("The certificates in \""
+							+ certUrl.toExternalForm()
+							+ "\" were not parsed correctly", certs);
+				} catch (IOException e) {
+					// the certificate could not be found, skip it
+				} catch (CertificateException e) {
+					fail("An exception was thrown while parsing \""
+							+ certUrl.toExternalForm() + "\": "
+							+ e.getMessage());
+				}
+			}
+		} catch (CertificateException e) {
+			fail("Could not instantiate the CertificateFactory for X509: "
+					+ e.getMessage());
+		} catch (MalformedURLException e) {
+			fail("Invalid certificate url: " + e.getMessage());
+		}
+	}
+
+	/**
+	 * @tests java.security.cert.CertificateFactory#generateCRL(java.io.InputStream)
+	 */
+	public void test_generateCRLLjava_io_InputStream() {
+		try {
+			CertificateFactory fact = CertificateFactory.getInstance("X.509");
+			for (int i = 0; i < CRL_URLS.length; i++) {
+				URL certUrl = new URL(BASE_URL + CRL_URLS[i]);
+				try {
+					InputStream is = certUrl.openStream();
+					CRL crl = fact.generateCRL(is);
+					assertNotNull("The CRL in \"" + certUrl.toExternalForm()
+							+ "\" were not parsed correctly", crl);
+				} catch (IOException e) {
+					// the certificate could not be found, skip it
+				} catch (CRLException e) {
+					fail("An exception was thrown while parsing \""
+							+ certUrl.toExternalForm() + "\": "
+							+ e.getMessage());
+				}
+			}// end for 
+		} catch (CertificateException e) {
+			fail("Could not instantiate the CertificateFactory for X509: "
+					+ e.getMessage());
+		} catch (MalformedURLException e) {
+			fail("Invalid certificate url: " + e.getMessage());
+		}
+	}
+
+	/**
+	 * @tests java.security.cert.CertificateFactory#generateCRLs(java.io.InputStream)
+	 */
+	public void test_generateCRLsLjava_io_InputStream() {
+		try {
+			CertificateFactory fact = CertificateFactory.getInstance("X.509");
+			for (int i = 0; i < CRLCOLLECTION_URLS.length; i++) {
+				URL certUrl = new URL(BASE_URL + CRLCOLLECTION_URLS[i]);
+				try {
+					InputStream is = certUrl.openStream();
+					Collection crls = fact.generateCRLs(is);
+					assertTrue("The CRLs in \"" + certUrl.toExternalForm()
+							+ "\" were not parsed correctly", crls != null
+							&& crls.size() > 0);
+				} catch (IOException e) {
+					// the certificate could not be found, skip it
+				} catch (CRLException e) {
+					fail("An exception was thrown while parsing \""
+							+ certUrl.toExternalForm() + "\": "
+							+ e.getMessage());
+				}
+			}
+		} catch (CertificateException e) {
+			fail("Could not instantiate the CertificateFactory for X509: "
+					+ e.getMessage());
+		} catch (MalformedURLException e) {
+			fail("Invalid certificate url: " + e.getMessage());
+		}
+	}
+
+	/**
+	 * @tests java.security.cert.CertificateFactory#getInstance(java.lang.String)
+	 */
+	public void test_getInstanceLjava_lang_String() {
+		// Test for method java.security.cert.CertificateFactory
+		// java.security.cert.CertificateFactory.getInstance(java.lang.String)
+		try {
+			CertificateFactory fact = CertificateFactory.getInstance("X.509");
+			assertTrue("factory is null", fact != null);
+		} catch (CertificateException e) {
+			assertTrue("CertificateException in getInstance", false);
+		}
+	}
+
+	/**
+	 * @tests java.security.cert.CertificateFactory#getInstance(java.lang.String,
+	 *        java.lang.String)
+	 */
+	public void test_getInstanceLjava_lang_StringLjava_lang_String() {
+		// Test for method java.security.cert.CertificateFactory
+		// java.security.cert.CertificateFactory.getInstance(java.lang.String,
+		// java.lang.String)
+		try {
+			Provider[] providers = Security
+					.getProviders("CertificateFactory.X.509");
+			if (providers != null) {
+				for (int i = 0; i < providers.length; i++) {
+					CertificateFactory fact = CertificateFactory.getInstance(
+							"X.509", providers[i].getName());
+					assertNotNull("factory is null", fact);
+				}// end for
+			} else {
+				fail("No providers support CertificateFactory.X.509");
+			}
+		} catch (CertificateException e) {
+			fail("CertificateException in getInstance");
+		} catch (NoSuchProviderException e) {
+			fail("getInstance did not find the provider");
+		}
+
+		// exception case
+		try {
+			CertificateFactory fact = CertificateFactory.getInstance("X.509",
+					"IHaventBeenConfigured");
+			fail("Should have thrown NoSuchProviderException");
+		} catch (NoSuchProviderException e) {
+			// Expected
+		} catch (Exception e) {
+			fail("Should have thrown NoSuchProviderException");
+		}
+	}
+
+	/**
+	 * @tests java.security.cert.CertificateFactory#getProvider()
+	 */
+	public void test_getProvider() {
+		// Test for method java.security.Provider
+		// java.security.cert.CertificateFactory.getProvider()
+		try {
+			Provider p = CertificateFactory.getInstance("X.509").getProvider();
+			assertNotNull("provider is null", p);
+		} catch (CertificateException e) {
+			fail("CertificateException in getInstance");
+		}
+	}
+
+	/**
+	 * Sets up the fixture, for example, open a network connection. This method
+	 * is called before a test is executed.
+	 */
+	protected void setUp() {
+	}
+
+	/**
+	 * Tears down the fixture, for example, close a network connection. This
+	 * method is called after a test is executed.
+	 */
+	protected void tearDown() {
+	}
+
+	static final String[] CERTIFICATES_ENCODED_X509 = new String[17];
+
+	{
+		CERTIFICATES_ENCODED_X509[0] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIICZTCCAdICBQL3AAC2MA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw\n"
+				+ "HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl\n"
+				+ "IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NzAyMjAwMDAwMDBa\n"
+				+ "Fw05ODAyMjAyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv\n"
+				+ "cm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMR8wHQYDVQQKExZTdW4gTWljcm9zeXN0\n"
+				+ "ZW1zLCBJbmMuMSEwHwYDVQQLExhUZXN0IGFuZCBFdmFsdWF0aW9uIE9ubHkxGjAY\n"
+				+ "BgNVBAMTEWFyZ29uLmVuZy5zdW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\n"
+				+ "iQKBgQCofmdY+PiUWN01FOzEewf+GaG+lFf132UpzATmYJkA4AEA/juW7jSi+LJk\n"
+				+ "wJKi5GO4RyZoyimAL/5yIWDV6l1KlvxyKslr0REhMBaD/3Z3EsLTTEf5gVrQS6sT\n"
+				+ "WMoSZAyzB39kFfsB6oUXNtV8+UKKxSxKbxvhQn267PeCz5VX2QIDAQABMA0GCSqG\n"
+				+ "SIb3DQEBAgUAA34AXl3at6luiV/7I9MN5CXYoPJYI8Bcdc1hBagJvTMcmlqL2uOZ\n"
+				+ "H9T5hNMEL9Tk6aI7yZPXcw/xI2K6pOR/FrMp0UwJmdxX7ljV6ZtUZf7pY492UqwC\n"
+				+ "1777XQ9UEZyrKJvF5ntleeO0ayBqLGVKCWzWZX9YsXCpv47FNLZbupE=\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[1] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIICZzCCAdCgAwIBAgIBGzANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY\n"
+				+ "MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT\n"
+				+ "A1BLSTEcMBoGA1UEAxMTRG9EIFBLSSBNZWQgUm9vdCBDQTAeFw05ODA4MDMyMjAy\n"
+				+ "MjlaFw0wODA4MDQyMjAyMjlaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu\n"
+				+ "IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD\n"
+				+ "ExNEb0QgUEtJIE1lZCBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\n"
+				+ "gQDbrM/J9FrJSX+zxFUbsI9Vw5QbguVBIa95rwW/0M8+sM0r5gd+DY6iubm6wnXk\n"
+				+ "CSvbfQlFEDSKr4WYeeGp+d9WlDnQdtDFLdA45tCi5SHjnW+hGAmZnld0rz6wQekF\n"
+				+ "5xQaa5A6wjhMlLOjbh27zyscrorMJ1O5FBOWnEHcRv6xqQIDAQABoy8wLTAdBgNV\n"
+				+ "HQ4EFgQUVrmYR6m9701cHQ3r5kXyG7zsCN0wDAYDVR0TBAUwAwEB/zANBgkqhkiG\n"
+				+ "9w0BAQUFAAOBgQDVX1Y0YqC7vekeZjVxtyuC8Mnxbrz6D109AX07LEIRzNYzwZ0w\n"
+				+ "MTImSp9sEzWW+3FueBIU7AxGys2O7X0qmN3zgszPfSiocBuQuXIYQctJhKjF5KVc\n"
+				+ "VGQRYYlt+myhl2vy6yPzEVCjiKwMEb1Spu0irCf+lFW2hsdjvmSQMtZvOw==\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[2] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIID6TCCA1KgAwIBAgIBGjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY\n"
+				+ "MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT\n"
+				+ "A1BLSTEcMBoGA1UEAxMTRG9EIFBLSSBNZWQgUm9vdCBDQTAeFw05ODA4MDIxNjQ1\n"
+				+ "MzhaFw0wMzA4MDIxNjQ1MzhaMFYxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu\n"
+				+ "IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMREwDwYDVQQD\n"
+				+ "EwhNZWQgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyUcrw1k6QKdB\n"
+				+ "WjgtGOk1AVaqJNI8acDGglhqQQ94QYfqZKuo1wwdnYehrgo5QcGkw9XcjBYegLFs\n"
+				+ "v4NCCwZ2pgsfYJlvHcSGPhT/wROUYEpXKelfXiEeaGhFl8zGcqteI2+EBbOZnFpj\n"
+				+ "Y4y+25dQcjYnrRGMAQ98qGwQtogDiDcCAwEAAaOCAbowggG2MBYGA1UdIAQPMA0w\n"
+				+ "CwYJYIZIAWUCAQsDMB8GA1UdIwQYMBaAFFa5mEepve9NXB0N6+ZF8hu87AjdMAwG\n"
+				+ "A1UdJAQFMAOAAQAwHQYDVR0OBBYEFDM6FOgJZ2GIZSQg7HlwQtemkx72MA4GA1Ud\n"
+				+ "DwEB/wQEAwIBhjB+BgNVHRIEdzB1hnNsZGFwOi8vZHMtMS5jaGFtYi5kaXNhLm1p\n"
+				+ "bC9jbiUzZERvRCUyMFBLSSUyME1lZCUyMFJvb3QlMjBDQSUyY291JTNkUEtJJTIg\n"
+				+ "Y291JTNkRG9EJTJjbyUzZFUuUy4lMjBHb3Zlcm5tZW50JTJjYyUzZFVTMA8GA1Ud\n"
+				+ "EwEB/wQFMAMBAf8wgawGA1UdHwSBpDCBoTCBnqCBm6CBmIaBlWxkYXA6Ly9kcy0x\n"
+				+ "LmNoYW1iLmRpc2EubWlsL2NuJTNkRG9EJTIwUEtJJTIwTWVkJTIwUm9vdCUyMENB\n"
+				+ "JTJjb3UlM2RQS0klMmNvdSUzZERvRCUyY28lM2RVLlMuJTIwR292ZXJubWVudCUy\n"
+				+ "Y2MlM2RVUz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0JTNiYmluYXJ5MA0GCSqG\n"
+				+ "SIb3DQEBBQUAA4GBAFo5/Tu0dsy8tyhJVvxaKFNMfP3LLaspl+Or8oCpncKdpKyj\n"
+				+ "7ZO6uJ0n7oqvEaUThm8jgXSNgyttlYPwoNBxEsTq/lBDV3+y/c61psw3qM2boB1H\n"
+				+ "Oi3xXnRY+etG33TN9yydzrZ52XM0hnJZd4xIfoAgqs4T2rgqg8hx0ydU7o4o\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[3] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIIDVjCCAr+gAwIBAgIBRTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJVUzEY\n"
+				+ "MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT\n"
+				+ "A1BLSTERMA8GA1UEAxMITWVkIENBLTEwHhcNOTgwODAyMTcxMzI5WhcNMDEwODAy\n"
+				+ "MTcxMzI5WjBwMQswCQYDVQQGEwJVUzEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50\n"
+				+ "MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsTA1BLSTENMAsGA1UECxMEVVNBRjEcMBoG\n"
+				+ "A1UEAxMTZHMtMS5jaXN0dy5zYWljLmNvbTCBnTANBgkqhkiG9w0BAQEFAAOBiwAw\n"
+				+ "gYcCgYEA19oJsspSHnWDi1/NTthbLrnicDogg3c63ZHPedU1YD90L1ogkYzxSA2t\n"
+				+ "MgsVZpNejBglE972mXKPqEGDojnDgltRgRLtLqisIs0DSFQrJrhA8egMH/pHAo9H\n"
+				+ "fH0n9rQUYBI3dsLxQkGVUSbB4P83VHi0sQO0dWsq5mEZd9G+MfsCAQOjggEaMIIB\n"
+				+ "FjAWBgNVHSAEDzANMAsGCWCGSAFlAgELAzAfBgNVHSMEGDAWgBQzOhToCWdhiGUk\n"
+				+ "IOx5cELXppMe9jAdBgNVHQ4EFgQUcQaYO8EEjje+VI3vfBIlDC6HNj0wDgYDVR0P\n"
+				+ "AQH/BAQDAgUgMAwGA1UdEwEB/wQCMAAwgZ0GA1UdHwSBlTCBkjCBj6CBjKCBiYaB\n"
+				+ "hmxkYXA6Ly9kcy0xLmNoYW1iLmRpc2EubWlsL2NuJTNkTWVkJTIwQ0ElMmQxJTJj\n"
+				+ "b3UlM2RQS0klMmNvdSUzZERvRCUyY28lM2RVLlMuJTIwR292ZXJubWVudCUyY2Ml\n"
+				+ "M2RVUz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0JTNiYmluYXJ5MA0GCSqGSIb3\n"
+				+ "DQEBBQUAA4GBAEg7AC9bad2KZzyX4cqLU/mv2cbVg6tES2PIeST7nk8CQcv9a8IO\n"
+				+ "3K4uhrKoTsQfqs9p6+6s0VbgH3PKvOAIF4DAp5Yq1zz3fB+hsaFleHqtDNuldm1+\n"
+				+ "3XA2Oqa5aRFkb6Krut0EEOV4c/GEAPOrRGUTzYmOp4SEc8TEaD/75A7R\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[4] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIIDXDCCAsWgAwIBAgIBSjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJVUzEY\n"
+				+ "MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT\n"
+				+ "A1BLSTERMA8GA1UEAxMITWVkIENBLTEwHhcNOTgwODAyMTgwMjQwWhcNMDEwODAy\n"
+				+ "MTgwMjQwWjB0MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50\n"
+				+ "MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsTA1BLSTENMAsGA1UECxMEVVNBRjEgMB4G\n"
+				+ "A1UEAxMXR3VtYnkuSm9zZXBoLjAwMDAwMDUwNDQwgZ8wDQYJKoZIhvcNAQEBBQAD\n"
+				+ "gY0AMIGJAoGBALT/R7bPqs1c1YqXAg5HNpZLgW2HuAc7RCaP06cE4R44GBLw/fQc\n"
+				+ "VRNLn5pgbTXsDnjiZVd8qEgYqjKFQka4/tNhaF7No2tBZB+oYL/eP0IWtP+h/W6D\n"
+				+ "KR5+UvIIdgmx7k3t9jp2Q51JpHhhKEb9WN54trCO9Yu7PYU+LI85jEIBAgMBAAGj\n"
+				+ "ggEaMIIBFjAWBgNVHSAEDzANMAsGCWCGSAFlAgELAzAfBgNVHSMEGDAWgBQzOhTo\n"
+				+ "CWdhiGUkIOx5cELXppMe9jAdBgNVHQ4EFgQUkLBJl+ayKgzOp/wwBX9M1lSkCg4w\n"
+				+ "DgYDVR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwgZ0GA1UdHwSBlTCBkjCBj6CB\n"
+				+ "jKCBiYaBhmxkYXA6Ly9kcy0xLmNoYW1iLmRpc2EubWlsL2NuJTNkTWVkJTIwQ0El\n"
+				+ "MmQxJTJjb3UlM2RQS0klMmNvdSUzZERvRCUyY28lM2RVLlMuJTIwR292ZXJubWVu\n"
+				+ "dCUyY2MlM2RVUz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0JTNiYmluYXJ5MA0G\n"
+				+ "CSqGSIb3DQEBBQUAA4GBAFjapuDHMvIdUeYRyEYdShBR1JZC20tJ3MQnyBQveddz\n"
+				+ "LGFDGpIkRAQU7T/5/ne8lMexyxViC21xOlK9LdbJCbVyywvb9uEm/1je9wieQQtr\n"
+				+ "kjykuB+WB6qTCIslAO/eUmgzfzIENvnH8O+fH7QTr2PdkFkiPIqBJYHvw7F3XDqy\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[5] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIIDlDCCAv2gAwIBAgIBGTANBgkqhkiG9w0BAQUFADBcMQswCQYDVQQGEwJVUzEY\n"
+				+ "MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT\n"
+				+ "A1BLSTEXMBUGA1UEAxMOTWVkIEVtYWlsIENBLTEwHhcNOTgwODAyMTgwNjM0WhcN\n"
+				+ "MDAwODAyMTgwNjM0WjCBmTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD1UuUy4gR292\n"
+				+ "ZXJubWVudDEMMAoGA1UECxMDRG9EMQwwCgYDVQQLEwNQS0kxDTALBgNVBAsTBFVT\n"
+				+ "QUYxIDAeBgNVBAMTF0d1bWJ5Lkpvc2VwaC4wMDAwMDA1MDQ0MSMwIQYJKoZIhvcN\n"
+				+ "AQkBFhRndW1ieUBjaXN0dy5zYWljLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw\n"
+				+ "gYkCgYEAvU4LMoOnF9bmhHvxZz8wCc9eRJ0j4RB0SmVYoq9iPrSJBwROeuxuU8VS\n"
+				+ "JBL/u+RB5t6UJVNjXFmB1wS0foxpOHFQBFWyvWmuOiRUNaRxTVCrO4eG+nmM/U89\n"
+				+ "DKAc9FV4bZ8dPE9PlK9oq0J8Y2DIKz1+gIeM1sTPMnDtFgfGyH8CAwEAAaOCASYw\n"
+				+ "ggEiMBYGA1UdIAQPMA0wCwYJYIZIAWUCAQsDMB8GA1UdIwQYMBaAFJcrSHN/a+aN\n"
+				+ "L5DK1NpJUIvX+bVnMB0GA1UdDgQWBBR50N97AxK0G6U17EP1iu38LiLTBzAOBgNV\n"
+				+ "HQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADCBqQYDVR0fBIGhMIGeMIGboIGYoIGV\n"
+				+ "hoGSbGRhcDovL2RzLTEuY2hhbWIuZGlzYS5taWw6MzkwL2NuJTNkTWVkJTIwRW1h\n"
+				+ "aWwlMjBDQSUyZDElMmNvdSUzZFBLSSUyY291JTNkRG9EJTJjbyUzZFUuUy4lMjBH\n"
+				+ "b3Zlcm5tZW50JTJjYyUzZFVTP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3QlM2Ji\n"
+				+ "aW5hcnkwDQYJKoZIhvcNAQEFBQADgYEAA9z8h7K4v0CuOyvmALNl8TQt0inf0w52\n"
+				+ "JJUvw/3FLA622IHe/vC9VHyIF0ibSEljWeOBuRjoMELAZGXCwRu43o2LDRqHr4Pc\n"
+				+ "WlG0uUtgHTPxbZpaUwueIZCBZg57f7Zhlub7Ag+AjeOybFj3FYqDB7TYqWJgAs/7\n"
+				+ "g5WfNEVAEwc=\n" + "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[6] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIIEEjCCA7ygAwIBAgIIEt4r4gAAAlIwDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNV\n"
+				+ "BAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDETMBEGA1UEChMK\n"
+				+ "V2luZG93cyBOVDEbMBkGA1UECxMSRGlzdHJpYnV0ZWQgU3lzdGVtMTMwMQYDVQQD\n"
+				+ "EypNaWNyb3NvZnQgQ2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0EwHhcN\n"
+				+ "OTcxMTI1MTkwNDIyWhcNOTgxMDE0MTgxMTI4WjBuMQswCQYDVQQGEwJVUzELMAkG\n"
+				+ "A1UECBMCV0ExEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD\n"
+				+ "b3Jwb3JhdGlvbjENMAsGA1UECxMERFNZUzERMA8GA1UEAxMIQ2VydFRlc3QwWzAN\n"
+				+ "BgkqhkiG9w0BAQEFAANKADBHAkB6hKgbYme8gtCf1Vy74KVNLf2o/R1kQVDSZiNm\n"
+				+ "lBSEsHAJSLXuuVdYsKo/hzarr9gGmI/gUzmargY1xJGQYbazAgMBAAGjggIXMIIC\n"
+				+ "EzCBzwYDVR0jBIHHMIHEgBS3hTIRuBZaOibht1DZjnTUg/IiRaGBmaSBljCBkzEL\n"
+				+ "MAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMRMwEQYD\n"
+				+ "VQQKEwpXaW5kb3dzIE5UMRswGQYDVQQLExJEaXN0cmlidXRlZCBTeXN0ZW0xMzAx\n"
+				+ "BgNVBAMTKk1pY3Jvc29mdCBDZXJ0aWZpY2F0ZSBTZXJ2ZXIgVGVzdCBHcm91cCBD\n"
+				+ "QYIQERNhAKoA/oUR0US54igUYzCBvQYDVR0fBIG1MIGyMFagVKBShlBodHRwOi8v\n"
+				+ "Q0VSVFNSVi9DZXJ0U3J2L0NlcnRFbnJvbGwvTWljcm9zb2Z0IENlcnRpZmljYXRl\n"
+				+ "IFNlcnZlciBUZXN0IEdyb3VwIENBLmNybDBYoFagVIZSZmlsZTovL1xcQ0VSVFNS\n"
+				+ "VlxDZXJ0U3J2XENlcnRFbnJvbGxcTWljcm9zb2Z0IENlcnRpZmljYXRlIFNlcnZl\n"
+				+ "ciBUZXN0IEdyb3VwIENBLmNybDAJBgNVHRMEAjAAMHQGCCsGAQUFBwEBBGgwZjBk\n"
+				+ "BggrBgEFBQcwAoZYaHR0cDovL0NFUlRTUlYvQ2VydFNydi9DZXJ0RW5yb2xsL0NF\n"
+				+ "UlRTUlZfTWljcm9zb2Z0IENlcnRpZmljYXRlIFNlcnZlciBUZXN0IEdyb3VwIENB\n"
+				+ "LmNydDANBgkqhkiG9w0BAQQFAANBAFbEj4j/3Nv6WcAvq24C7yw8L0FcyE4dtLLX\n"
+				+ "U+04P0POe/doyTT6UngXNXp9RXpqDSiIHBRTshpvR+N2vweR5qA=\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[7] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIIEYTCCBAugAwIBAgIIFViWmwAAAlowDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNV\n"
+				+ "BAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDETMBEGA1UEChMK\n"
+				+ "V2luZG93cyBOVDEbMBkGA1UECxMSRGlzdHJpYnV0ZWQgU3lzdGVtMTMwMQYDVQQD\n"
+				+ "EypNaWNyb3NvZnQgQ2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0EwHhcN\n"
+				+ "OTcxMTI2MDYzNzE4WhcNOTgxMDE0MTgxMTI4WjCBmjEjMCEGCSqGSIb3DQEJARYU\n"
+				+ "YWxsYW5jQG1pY3Jvc29mdC5jb20xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQ\n"
+				+ "MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u\n"
+				+ "MQ0wCwYDVQQLEwREU1lTMRgwFgYDVQQDEw9BbGxhbiBKLiBDb29wZXIwWzANBgkq\n"
+				+ "hkiG9w0BAQEFAANKADBHAkB1951uZLyJXjSZTc8Z1QnuXvKBAqm2WT4OFaFySF/F\n"
+				+ "WnMbIlAE0pvszDkKZ+N7hBzcc5pVIjezPfZ8cPh//jVPAgMBAAGjggI5MIICNTAL\n"
+				+ "BgNVHQ8EBAMCADgwEwYDVR0lBAwwCgYIKwYBBQUHAwQwgc8GA1UdIwSBxzCBxIAU\n"
+				+ "t4UyEbgWWjom4bdQ2Y501IPyIkWhgZmkgZYwgZMxCzAJBgNVBAYTAlVTMQswCQYD\n"
+				+ "VQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDETMBEGA1UEChMKV2luZG93cyBOVDEb\n"
+				+ "MBkGA1UECxMSRGlzdHJpYnV0ZWQgU3lzdGVtMTMwMQYDVQQDEypNaWNyb3NvZnQg\n"
+				+ "Q2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0GCEBETYQCqAP6FEdFEueIo\n"
+				+ "FGMwgb0GA1UdHwSBtTCBsjBWoFSgUoZQaHR0cDovL0NFUlRTUlYvQ2VydFNydi9D\n"
+				+ "ZXJ0RW5yb2xsL01pY3Jvc29mdCBDZXJ0aWZpY2F0ZSBTZXJ2ZXIgVGVzdCBHcm91\n"
+				+ "cCBDQS5jcmwwWKBWoFSGUmZpbGU6Ly9cXENFUlRTUlZcQ2VydFNydlxDZXJ0RW5y\n"
+				+ "b2xsXE1pY3Jvc29mdCBDZXJ0aWZpY2F0ZSBTZXJ2ZXIgVGVzdCBHcm91cCBDQS5j\n"
+				+ "cmwwCQYDVR0TBAIwADB0BggrBgEFBQcBAQRoMGYwZAYIKwYBBQUHMAKGWGh0dHA6\n"
+				+ "Ly9DRVJUU1JWL0NlcnRTcnYvQ2VydEVucm9sbC9DRVJUU1JWX01pY3Jvc29mdCBD\n"
+				+ "ZXJ0aWZpY2F0ZSBTZXJ2ZXIgVGVzdCBHcm91cCBDQS5jcnQwDQYJKoZIhvcNAQEE\n"
+				+ "BQADQQA1TYsk07tW0dhU6bHPK7NXHUFFiZ2fAtC0epLY9G6yuYb1lozPv5sDnCl1\n"
+				+ "A2fZPgawvAqCvK9xkv5L4j2F+v4U\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[8] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIIEYjCCBAygAwIBAgIIFVsHaQAAAlwwDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNV\n"
+				+ "BAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDETMBEGA1UEChMK\n"
+				+ "V2luZG93cyBOVDEbMBkGA1UECxMSRGlzdHJpYnV0ZWQgU3lzdGVtMTMwMQYDVQQD\n"
+				+ "EypNaWNyb3NvZnQgQ2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0EwHhcN\n"
+				+ "OTcxMTI2MDYzOTU4WhcNOTgxMDE0MTgxMTI4WjCBmjEjMCEGCSqGSIb3DQEJARYU\n"
+				+ "YWxsYW5jQG1pY3Jvc29mdC5jb20xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQ\n"
+				+ "MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u\n"
+				+ "MQ0wCwYDVQQLEwREU1lTMRgwFgYDVQQDEw9BbGxhbiBKLiBDb29wZXIwXDANBgkq\n"
+				+ "hkiG9w0BAQEFAANLADBIAkEA0T1td8kfsJgwm8Qj+jtrq29tqc/DIkIbAPcyygKG\n"
+				+ "1XEUvzQEQumVQx5lCD2LOOJs0eOuv4h6ngvLW+goDaidNQIDAQABo4ICOTCCAjUw\n"
+				+ "CwYDVR0PBAQDAgDAMBMGA1UdJQQMMAoGCCsGAQUFBwMIMIHPBgNVHSMEgccwgcSA\n"
+				+ "FLeFMhG4Flo6JuG3UNmOdNSD8iJFoYGZpIGWMIGTMQswCQYDVQQGEwJVUzELMAkG\n"
+				+ "A1UECBMCV0ExEDAOBgNVBAcTB1JlZG1vbmQxEzARBgNVBAoTCldpbmRvd3MgTlQx\n"
+				+ "GzAZBgNVBAsTEkRpc3RyaWJ1dGVkIFN5c3RlbTEzMDEGA1UEAxMqTWljcm9zb2Z0\n"
+				+ "IENlcnRpZmljYXRlIFNlcnZlciBUZXN0IEdyb3VwIENBghARE2EAqgD+hRHRRLni\n"
+				+ "KBRjMIG9BgNVHR8EgbUwgbIwVqBUoFKGUGh0dHA6Ly9DRVJUU1JWL0NlcnRTcnYv\n"
+				+ "Q2VydEVucm9sbC9NaWNyb3NvZnQgQ2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3Jv\n"
+				+ "dXAgQ0EuY3JsMFigVqBUhlJmaWxlOi8vXFxDRVJUU1JWXENlcnRTcnZcQ2VydEVu\n"
+				+ "cm9sbFxNaWNyb3NvZnQgQ2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0Eu\n"
+				+ "Y3JsMAkGA1UdEwQCMAAwdAYIKwYBBQUHAQEEaDBmMGQGCCsGAQUFBzAChlhodHRw\n"
+				+ "Oi8vQ0VSVFNSVi9DZXJ0U3J2L0NlcnRFbnJvbGwvQ0VSVFNSVl9NaWNyb3NvZnQg\n"
+				+ "Q2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0EuY3J0MA0GCSqGSIb3DQEB\n"
+				+ "BAUAA0EAUPXt2pOY3YwRUHzD7Dtgyx5G7KxKtLan1wFBFjhv406v2Utb+2+wTQlS\n"
+				+ "ulWemcm8eOdG64nspv0oqSJnA8f4xg==\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[9] = null;
+
+		CERTIFICATES_ENCODED_X509[10] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIICiTCCAfICAQAwDQYJKoZIhvcNAQEEBQAwgYwxCzAJBgNVBAYTAlVTMRUwEwYD\n"
+				+ "VQQIEwxOb3J0aCBEYWtvdGExFDASBgNVBAcTC0dyYW5kIEZvcmtzMRYwFAYDVQQK\n"
+				+ "Ew1VTkQgQWVyb3NwYWNlMRgwFgYDVQQDFA9yb290QGNzLnVuZC5lZHUxHjAcBgkq\n"
+				+ "hkiG9w0BCQEWD3Jvb3RAY3MudW5kLmVkdTAeFw05OTAzMDIyMDU4NDRaFw0wOTAy\n"
+				+ "MjcyMDU4NDRaMIGMMQswCQYDVQQGEwJVUzEVMBMGA1UECBMMTm9ydGggRGFrb3Rh\n"
+				+ "MRQwEgYDVQQHEwtHcmFuZCBGb3JrczEWMBQGA1UEChMNVU5EIEFlcm9zcGFjZTEY\n"
+				+ "MBYGA1UEAxQPcm9vdEBjcy51bmQuZWR1MR4wHAYJKoZIhvcNAQkBFg9yb290QGNz\n"
+				+ "LnVuZC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALmlQJg5Nl2VsQZ1\n"
+				+ "/B8fW4YDdk09SlVc7vyWcbcmbWRBJee0jcH448XdRP/m/MXIRsVKyhLA5f01+VPy\n"
+				+ "E2aDkx2WiU4DpqbMbGGAytuXBNudJQmBXjWEFiAGe7dYgDNGKK7Yo1k49Q6qGg9q\n"
+				+ "5did3+ppsyfzbeaiDCH0LO5gegNvAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAJnok\n"
+				+ "1gvj4KC9HeUX/R4Q/f5tbJ2jLeQATIHtUx9QSKSq7IsdY0zz9EnKOsc9pr8JfBTL\n"
+				+ "cAwrxqvl5QuoCFVR2tQq8DtBQY8vp7bEF2CZVoxZJXMIKKiD/Hjb0oypbq5wF0SY\n"
+				+ "xN5DUfG5sShi+vPIAwE62tZ1P1I1N8DQpDYiXkw=\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[11] = null;
+
+		CERTIFICATES_ENCODED_X509[12] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIICWDCCAgICAQAwDQYJKoZIhvcNAQEEBQAwgbYxCzAJBgNVBAYTAlpBMRUwEwYD\n"
+				+ "VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU\n"
+				+ "VGhhd3RlIENvbnN1bHRpbmcgY2MxHzAdBgNVBAsTFkNlcnRpZmljYXRpb24gU2Vy\n"
+				+ "dmljZXMxFzAVBgNVBAMTDnd3dy50aGF3dGUuY29tMSMwIQYJKoZIhvcNAQkBFhR3\n"
+				+ "ZWJtYXN0ZXJAdGhhd3RlLmNvbTAeFw05NjExMTQxNzE1MjVaFw05NjEyMTQxNzE1\n"
+				+ "MjVaMIG2MQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYD\n"
+				+ "VQQHEwlDYXBlIFRvd24xHTAbBgNVBAoTFFRoYXd0ZSBDb25zdWx0aW5nIGNjMR8w\n"
+				+ "HQYDVQQLExZDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzMRcwFQYDVQQDEw53d3cudGhh\n"
+				+ "d3RlLmNvbTEjMCEGCSqGSIb3DQEJARYUd2VibWFzdGVyQHRoYXd0ZS5jb20wXDAN\n"
+				+ "BgkqhkiG9w0BAQEFAANLADBIAkEAmpIl7aR3aSPUUwUrHzpVMrsm3gpI2PzIwMh3\n"
+				+ "9l1h/RszI0/0qC2WRMlfwm5FapohoyjTJ6ZyGUUenICllKyKZwIDAQABMA0GCSqG\n"
+				+ "SIb3DQEBBAUAA0EAfI57WLkOKEyQqyCDYZ6reCukVDmAe7nZSbOyKv6KUvTCiQ5c\n"
+				+ "e5L4y3c/ViKdlou5BcQYAbxA7rwO/vz4m51w4w==\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[13] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIIDGjCCAtgCBDaRW4swCwYHKoZIzjgEAwUAMHMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdGbG9y\n"
+				+ "aWRhMRQwEgYDVQQHEwtHYWluZXN2aWxsZTEQMA4GA1UEChMHVW5rbm93bjEQMA4GA1UECxMHVW5r\n"
+				+ "bm93bjEYMBYGA1UEAxMPUm9iZXJ0IEx5YmFyZ2VyMB4XDTk5MDEwNTAwMjMzOVoXDTk5MDQwNTAw\n"
+				+ "MjMzOVowczELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0Zsb3JpZGExFDASBgNVBAcTC0dhaW5lc3Zp\n"
+				+ "bGxlMRAwDgYDVQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRgwFgYDVQQDEw9Sb2JlcnQg\n"
+				+ "THliYXJnZXIwggG3MIIBLAYHKoZIzjgEATCCAR8CgYEA/X9TgR11EilS30qcLuzk5/YRt1I870QA\n"
+				+ "wx4/gLZRJmlFXUAiUftZPY1Y+r/F9bow9subVWzXgTuAHTRv8mZgt2uZUKWkn5/oBHsQIsJPu6nX\n"
+				+ "/rfGG/g7V+fGqKYVDwT7g/bTxR7DAjVUE1oWkTL2dfOuK2HXKu/yIgMZndFIAccCFQCXYFCPFSML\n"
+				+ "zLKSuYKi64QL8Fgc9QKBgQD34aCF1ps93su8q1w2uFe5eZSvu/o66oL5V0wLPQeCZ1FZV4661FlP\n"
+				+ "5nEHEIGAtEkWcSPoTCgWE7fPCTKMyKbhPBZ6i1R8jSjgo64eK7OmdZFuo38L+iE1YvH7YnoBJDvM\n"
+				+ "pPG+qFGQiaiD3+Fa5Z8GkotmXoB7VSVkAUw7/s9JKgOBhAACgYBMhs/XcF0LAjbuhoAY4EOmxd4U\n"
+				+ "U0w4nSJQ2vKcgpyHU1Sv/tbUr3xEm6Yyx49j1eNp9jVwM1a6NYX8BO8fCSHIiUVvJVFlCcoO7Qb8\n"
+				+ "Px7drfbFAFt8mFE1mjYCuj21ePHhs1DlZKJwu2ElC6GaRwtBk3+oCMDAnLuySd0+fAohdDALBgcq\n"
+				+ "hkjOOAQDBQADLwAwLAIUddbqC3woMcABg/r1GPW9eVNStGwCFCBGySvdXK0i4aLVC4Ptbc3PQFjp\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[14] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIICyzCCAjQCAQAwDQYJKoZIhvcNAQEEBQAwga0xCzAJBgNVBAYTAlVTMREwDwYD\n"
+				+ "VQQIEwhOZXcgWW9yazEWMBQGA1UEBxMNTmV3IFlvcmsgQ2l0eTEcMBoGA1UEChMT\n"
+				+ "Q29sdW1iaWEgVW5pdmVyc2l0eTENMAsGA1UECxMEQWNJUzEfMB0GA1UEAxMWQ29s\n"
+				+ "dW1iaWEgVW5pdmVyc2l0eSBDQTElMCMGCSqGSIb3DQEJARYWY2VydC1hdXRoQGNv\n"
+				+ "bHVtYmlhLmVkdTAeFw05NzA0MjgxNDQxMDNaFw0wMDA0MjgxNDQxMDNaMIGtMQsw\n"
+				+ "CQYDVQQGEwJVUzERMA8GA1UECBMITmV3IFlvcmsxFjAUBgNVBAcTDU5ldyBZb3Jr\n"
+				+ "IENpdHkxHDAaBgNVBAoTE0NvbHVtYmlhIFVuaXZlcnNpdHkxDTALBgNVBAsTBEFj\n"
+				+ "SVMxHzAdBgNVBAMTFkNvbHVtYmlhIFVuaXZlcnNpdHkgQ0ExJTAjBgkqhkiG9w0B\n"
+				+ "CQEWFmNlcnQtYXV0aEBjb2x1bWJpYS5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0A\n"
+				+ "MIGJAoGBANiod6flzM72CbsK/3gzHzcdjpoozRDD/wgq31jEeDdfKY+ljAwxaZS9\n"
+				+ "mt7S1g7lL+55fx7FjfJxvJRXvS9UbDU46PDDyJloWYobg84bK5ZcV5UnIPZmGHW/\n"
+				+ "/xVDUtIGhc4T+Xm5p4F+4AcgewF2s4TbKWxfC98FJfepc31KjkGbAgMBAAEwDQYJ\n"
+				+ "KoZIhvcNAQEEBQADgYEAI/e6xC+osVM4eMkSUUWgihuocQlRL9ixTlGqW9fvNlI1\n"
+				+ "q58fELU5bcFko7d02S9Egac/9ckkt/sbHMv9zQhfnvpol8BN+LivGu+09IiOW4yq\n"
+				+ "c9xT58Pv9gwZ/Ei5VS+FXvzHIr91yWIlwLsnKfgYDrmQowG5FkHSG1ZotUdl7Oo=\n"
+				+ "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[15] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIICnjCCAgcCAQMwDQYJKoZIhvcNAQEEBQAwgaAxCzAJBgNVBAYTAklUMR4wHAYD\n"
+				+ "VQQKExVQb2xpdGVjbmljbyBkaSBUb3Jpbm8xIzAhBgNVBAsTGklDRS1URUwgSXRh\n"
+				+ "bGlhbiBDQSBmb3IgV1dXMSAwHgYDVQQDExdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0\n"
+				+ "eTEqMCgGCSqGSIb3DQEJARYbd3d3LWNhLWl0QGljZS10ZWwucG9saXRvLml0MB4X\n"
+				+ "DTk2MTAwMjExNDQ0NFoXDTk3MTIwMTExNDQ0NFowgY0xCzAJBgNVBAYTAklUMQ8w\n"
+				+ "DQYDVQQHEwZUb3Jpbm8xHjAcBgNVBAoTFVBvbGl0ZWNuaWNvIGRpIFRvcmlubzEO\n"
+				+ "MAwGA1UECxMFQ2VTSVQxGTAXBgNVBAMTEHVsaXNzZS5wb2xpdG8uaXQxIjAgBgkq\n"
+				+ "hkiG9w0BCQEWE3dlYm1hc3RlckBwb2xpdG8uaXQwgZ8wDQYJKoZIhvcNAQEBBQAD\n"
+				+ "gY0AMIGJAoGBAMUq/FdrxbSfGtGZq/FTTgC1JqxO4iiHiyxtgRT1oEvJIUjajVRN\n"
+				+ "dtBVUhW6JmhHje/qnMop09XcF7b89a9ahtG9jM70S03biXVmg66pWOpy6P7znAQj\n"
+				+ "VFPoCRR7BqUiGq0419a101Acaqkxi/4DdqiTPee4H7mcDZYu+fDPNQaHAgMBAAEw\n"
+				+ "DQYJKoZIhvcNAQEEBQADgYEAt15bzk0XO+ZM+Q6275VTQIon6KQQHnv9NflIFOoW\n"
+				+ "fgGRmoyiJFrjU1sIS8ctF03DH2xR20CuKd98fBpKnoOLd7eTKAGzGFPml36TPVj+\n"
+				+ "YYWdrWqnIzQn6F0OKR/U3Y+ot5fUNuqN36Q1wsVvpPJlOMx8D8OQy8ainHgG3YYA\n"
+				+ "TJk=\n" + "-----END CERTIFICATE-----\n";
+
+		CERTIFICATES_ENCODED_X509[16] =
+		"-----BEGIN CERTIFICATE-----\n"
+				+ "MIIC1TCCAj6gAwIBAgIBBDANBgkqhkiG9w0BAQQFADBZMQswCQYDVQQGEwJVUzEf\n"
+				+ "MB0GA1UEChMWVW5pdmVyc2l0eSBvZiBDb2xvcmFkbzEWMBQGA1UECxMNU3lzdGVt\n"
+				+ "IE9mZmljZTERMA8GA1UEAxMIVU1TIENBLTEwHhcNOTgwNTExMjEwMjU0WhcNMDgw\n"
+				+ "NTEwMjEwMjU0WjBZMQswCQYDVQQGEwJVUzEfMB0GA1UEChMWVW5pdmVyc2l0eSBv\n"
+				+ "ZiBDb2xvcmFkbzEWMBQGA1UECxMNU3lzdGVtIE9mZmljZTERMA8GA1UEAxMIVU1T\n"
+				+ "IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALGf8Ny+kHlXqLTi3uIf\n"
+				+ "mkxxwDJd14sOg+hv85pxsqzCRJEgOx5YDUt05hJ7N0s4rJ/gNUcJaKR6ul+qLGbW\n"
+				+ "+Zb4S1YFbnKaO16zggvgckwpLGYRBbmee9+E47W8VEOZWrJXUkpJ/ZV8GAnesrvn\n"
+				+ "XTEKfm7bX9s6R7FQfDoHNnQfAgMBAAGjgawwgakwEQYJYIZIAYb4QgEBBAQDAgD2\n"
+				+ "MB8GA1UdIwQYMBaAFOqlID9Er6dI09n9Lvnby+FISi7oMFQGCWCGSAGG+EIBDQRH\n"
+				+ "FkVFeHRlbmRlZCBDQSBDZXJ0aWZpY2F0ZSBmcm9tIDI0IE1vbnRocyB0byAxMjAg\n"
+				+ "TW9udGhzLiAgRFRHID0gMDUxMTE5OTgwHQYDVR0OBBYEFOqlID9Er6dI09n9Lvnb\n"
+				+ "y+FISi7oMA0GCSqGSIb3DQEBBAUAA4GBAFNFo27JeeIgsMqS7Na//6gJQRilxwVS\n"
+				+ "Bfx6J43YX47EgNDLn4J7B9Tst+2bDZDAk1lZyu4y2WCLrnfg/e6B1KYBhCt/Srsc\n"
+				+ "r+WomFcw19k1jBtBaYxVwh/9N4ppZGdKILACciXbxfoLbbNgSDx5+KbE2c2m9is7\n"
+				+ "MIZgRexTvnJa\n" + "-----END CERTIFICATE-----\n";
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CRLEntryTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CRLEntryTest.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CRLEntryTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CRLEntryTest.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,73 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.api.java.security.cert;
+
+import java.io.InputStream;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Iterator;
+import java.util.Vector;
+
+import tests.support.resource.Support_Resources;
+
+public class X509CRLEntryTest extends junit.framework.TestCase {
+
+	private X509Certificate pemCert = null;
+
+	protected void setUp() {
+		try {
+			InputStream is = Support_Resources
+					.getStream("hyts_certificate_PEM.txt");
+			if (is != null) {
+				CertificateFactory certFact = CertificateFactory
+						.getInstance("X509");
+				pemCert = (X509Certificate) certFact.generateCertificate(is);
+			} else {
+				fail("Problem occurred opening hyts_certificate_PEM.txt");
+			}
+		} catch (CertificateException e) {
+			fail("Unexpected CertificateException : " + e);
+		}
+	}
+
+	protected void tearDown() {
+	}
+
+	/**
+	 * @tests java.security.cert.X509CRLEntry#getExtensionValue(java.lang.String)
+	 */
+	public void test_getExtensionValueLjava_lang_String() {
+		if (pemCert != null) {
+			Vector extensionOids = new Vector();
+			extensionOids.addAll(pemCert.getCriticalExtensionOIDs());
+			extensionOids.addAll(pemCert.getNonCriticalExtensionOIDs());
+			Iterator i = extensionOids.iterator();
+			while (i.hasNext()) {
+				String oid = (String) i.next();
+				byte[] value = pemCert.getExtensionValue(oid);
+				if (value != null && value.length > 0) {
+					// check that it is an encoded as a OCTET STRING
+					assertTrue("The extension value for the oid " + oid
+							+ " was not encoded as an OCTET STRING",
+							value[0] == 0x04);
+				}
+			}// end while
+		} else {
+			fail("Unable to obtain X509Certificate");
+		}
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CRLTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CRLTest.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CRLTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CRLTest.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,73 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.api.java.security.cert;
+
+import java.io.InputStream;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Iterator;
+import java.util.Vector;
+
+import tests.support.resource.Support_Resources;
+
+public class X509CRLTest extends junit.framework.TestCase {
+
+	private X509Certificate pemCert = null;
+
+	protected void setUp() {
+		try {
+			InputStream is = Support_Resources
+					.getStream("hyts_certificate_PEM.txt");
+			if (is != null) {
+				CertificateFactory certFact = CertificateFactory
+						.getInstance("X509");
+				pemCert = (X509Certificate) certFact.generateCertificate(is);
+			} else {
+				fail("Problem occurred opening hyts_certificate_PEM.txt");
+			}
+		} catch (CertificateException e) {
+			fail("Unexpected CertificateException : " + e);
+		}
+	}
+
+	protected void tearDown() {
+	}
+
+	/**
+	 * @tests java.security.cert.X509CRL#getExtensionValue(java.lang.String)
+	 */
+	public void test_getExtensionValueLjava_lang_String() {
+		if (pemCert != null) {
+			Vector extensionOids = new Vector();
+			extensionOids.addAll(pemCert.getCriticalExtensionOIDs());
+			extensionOids.addAll(pemCert.getNonCriticalExtensionOIDs());
+			Iterator i = extensionOids.iterator();
+			while (i.hasNext()) {
+				String oid = (String) i.next();
+				byte[] value = pemCert.getExtensionValue(oid);
+				if (value != null && value.length > 0) {
+					// check that it is an encoded as a OCTET STRING
+					assertTrue("The extension value for the oid " + oid
+							+ " was not encoded as an OCTET STRING",
+							value[0] == 0x04);
+				}
+			}// end while
+		} else {
+			fail("Unable to obtain X509Certificate");
+		}
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CertificateTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CertificateTest.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CertificateTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/cert/X509CertificateTest.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,72 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.api.java.security.cert;
+
+import java.io.InputStream;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Iterator;
+import java.util.Vector;
+
+import tests.support.resource.Support_Resources;
+
+public class X509CertificateTest extends junit.framework.TestCase {
+	private X509Certificate pemCert = null;
+
+	protected void setUp() {
+		try {
+			InputStream is = Support_Resources
+					.getStream("hyts_certificate_PEM.txt");
+			if (is != null) {
+				CertificateFactory certFact = CertificateFactory
+						.getInstance("X509");
+				pemCert = (X509Certificate) certFact.generateCertificate(is);
+			} else {
+				fail("Problem occurred opening hyts_certificate_PEM.txt");
+			}
+		} catch (CertificateException e) {
+			fail("Unexpected CertificateException : " + e);
+		}
+	}
+
+	protected void tearDown() {
+	}
+
+	/**
+	 * @tests java.security.cert.X509Certificate#getExtensionValue(java.lang.String)
+	 */
+	public void test_getExtensionValueLjava_lang_String() {
+		if (pemCert != null) {
+			Vector extensionOids = new Vector();
+			extensionOids.addAll(pemCert.getCriticalExtensionOIDs());
+			extensionOids.addAll(pemCert.getNonCriticalExtensionOIDs());
+			Iterator i = extensionOids.iterator();
+			while (i.hasNext()) {
+				String oid = (String) i.next();
+				byte[] value = pemCert.getExtensionValue(oid);
+				if (value != null && value.length > 0) {
+					// check that it is an encoded as a OCTET STRING
+					assertTrue("The extension value for the oid " + oid
+							+ " was not encoded as an OCTET STRING",
+							value[0] == 0x04);
+				}
+			}
+		} else {
+			fail("Unable to obtain X509Certificate");
+		}
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/spec/EncodedKeySpecTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/spec/EncodedKeySpecTest.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/spec/EncodedKeySpecTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/tests/api/java/security/spec/EncodedKeySpecTest.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,180 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.api.java.security.spec;
+
+import java.security.Key;
+import java.security.KeyFactory;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.Provider;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.interfaces.DSAPrivateKey;
+import java.security.interfaces.DSAPublicKey;
+import java.security.interfaces.RSAPrivateCrtKey;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import junit.framework.TestCase;
+
+public class EncodedKeySpecTest extends TestCase {
+
+	private static final String KEYFACTORY_ID = "KeyFactory.";
+
+	/**
+	 * @tests java.security.spec.EncodedKeySpec#getEncoded()
+	 */
+	public void test_getEncoded() {
+		
+		fail("Takes ages. Problem with SecureRandom and stub math ?");
+		
+		Provider[] providers = Security.getProviders();
+		if (providers == null) {
+			fail("No providers found");
+		}
+
+		boolean atLeastOneProviderFound = false;
+		
+		// Loop through each of the providers that support KeyFactory algorithms
+		for (int j = 0; j < providers.length; j++) {
+			String providerName = providers[j].getName();
+			String[] keyfactAlgs = getKeyFactoryAlgorithms(providerName);
+			
+			// Loop through each of the KeyFactory algorithms supported by 
+			// the current provider
+			for (int i = 0; i < keyfactAlgs.length; i++) {
+				// If we reach here then at least one of the installed providers
+				// must support one of the KeyFactory algorithms
+				atLeastOneProviderFound = true;
+				try {
+					KeyFactory fact = KeyFactory.getInstance(keyfactAlgs[i],
+							providerName);
+					KeyPairGenerator keyGen = KeyPairGenerator
+							.getInstance(keyfactAlgs[i]);
+					// We don't use getInstance
+					SecureRandom random = new SecureRandom();
+					keyGen.initialize(1024, random);
+					KeyPair keys = keyGen.generateKeyPair();
+
+					// check public key encoding
+					byte[] encoded = keys.getPublic().getEncoded();
+					Key key = fact.generatePublic(new X509EncodedKeySpec(
+							encoded));
+					assertTrue(
+							"public key encodings were different for algorithm "
+									+ keyfactAlgs[i], isEqual(key, keys
+									.getPublic()));
+
+					// check private key encoding
+					encoded = keys.getPrivate().getEncoded();
+					key = fact
+							.generatePrivate(new PKCS8EncodedKeySpec(encoded));
+					assertTrue(
+							"private key encodings were different for algorithm "
+									+ keyfactAlgs[i], isEqual(key, keys
+									.getPrivate()));
+				} catch (NoSuchAlgorithmException e) {
+					fail("getInstance did not find expected algorithm "
+							+ keyfactAlgs[i]);
+				} catch (NoSuchProviderException e) {
+					fail("getInstance did not find provider " + providerName);
+				} catch (InvalidKeySpecException e) {
+					fail("invalid key spec for algorithm " + keyfactAlgs[i]);
+				}
+			}// end for
+		}// end for each provider supporting KeyFactory algorithms
+		
+		if (!atLeastOneProviderFound) {
+			fail("No providers supported KeyFactory algorithms");
+		}
+	}
+
+	/*
+	 * Returns the key algorithms that the given provider supports.
+	 */
+	private String[] getKeyFactoryAlgorithms(String providerName) {
+		Vector algs = new Vector();
+
+		Provider provider = Security.getProvider(providerName);
+		if (provider == null)
+			return new String[0];
+		Enumeration e = provider.keys();
+		while (e.hasMoreElements()) {
+			String algorithm = (String) e.nextElement();
+			if (algorithm.startsWith(KEYFACTORY_ID)) {
+				algs.addElement(algorithm.substring(KEYFACTORY_ID.length()));
+			}
+		}
+		return (String[]) algs.toArray(new String[algs.size()]);
+	}
+
+	protected void setUp() {
+	}
+	
+	protected void tearDown() {
+	}
+
+	private boolean isEqual(Key key1, Key key2) {
+		if (key1 instanceof RSAPublicKey && key2 instanceof RSAPublicKey) {
+			RSAPublicKey rsa1 = ((RSAPublicKey) key1);
+			RSAPublicKey rsa2 = ((RSAPublicKey) key2);
+			return rsa1.getModulus().equals(rsa2.getModulus())
+					&& rsa1.getPublicExponent()
+							.equals(rsa2.getPublicExponent());
+		} else if (key1 instanceof RSAPrivateCrtKey
+				&& key2 instanceof RSAPrivateCrtKey) {
+			RSAPrivateCrtKey rsa1 = ((RSAPrivateCrtKey) key1);
+			RSAPrivateCrtKey rsa2 = ((RSAPrivateCrtKey) key2);
+			return rsa1.getModulus().equals(rsa2.getModulus())
+					&& rsa1.getPublicExponent()
+							.equals(rsa2.getPublicExponent())
+					&& rsa1.getPrivateExponent().equals(
+							rsa2.getPrivateExponent())
+					&& rsa1.getPrimeP().equals(rsa2.getPrimeP())
+					&& rsa1.getPrimeQ().equals(rsa2.getPrimeQ())
+					&& rsa1.getPrimeExponentP()
+							.equals(rsa2.getPrimeExponentP())
+					&& rsa1.getPrimeExponentQ()
+							.equals(rsa2.getPrimeExponentQ())
+					&& rsa1.getCrtCoefficient()
+							.equals(rsa2.getCrtCoefficient());
+		} else if (key1 instanceof DSAPublicKey && key2 instanceof DSAPublicKey) {
+			DSAPublicKey dsa1 = ((DSAPublicKey) key1);
+			DSAPublicKey dsa2 = ((DSAPublicKey) key2);
+			return dsa1.getY().equals(dsa2.getY())
+					&& dsa1.getParams().getG().equals(dsa2.getParams().getG())
+					&& dsa1.getParams().getP().equals(dsa2.getParams().getP())
+					&& dsa1.getParams().getQ().equals(dsa2.getParams().getQ());
+
+		} else if (key1 instanceof DSAPrivateKey
+				&& key2 instanceof DSAPrivateKey) {
+			DSAPrivateKey dsa1 = ((DSAPrivateKey) key1);
+			DSAPrivateKey dsa2 = ((DSAPrivateKey) key2);
+			return dsa1.getX().equals(dsa2.getX())
+					&& dsa1.getParams().getG().equals(dsa2.getParams().getG())
+					&& dsa1.getParams().getP().equals(dsa2.getParams().getP())
+					&& dsa1.getParams().getQ().equals(dsa2.getParams().getQ());
+		} else {
+			return false;
+		}
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/keystore.bks
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/keystore.bks?rev=392891&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/keystore.bks
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/mypermissionBKS.jar
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/mypermissionBKS.jar?rev=392891&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/mypermissionBKS.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/signedBKS.jar
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/signedBKS.jar?rev=392891&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/PermissionCollection/signedBKS.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_badpem.cer
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_badpem.cer?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_badpem.cer (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_badpem.cer Sun Apr  9 22:38:31 2006
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFATCCA+mg^wIBAgIBADANBgkqhkiG9w0BAQQFADB/MQswCQYDVQQGEwJkZTEg
+MB4GA1UEChMXSW5zZWN1cmVUZXN0Q2VydGlmaWNhdGUxJzAlBgNVBAMTHkZvciBU
+ZXN0cyBPbmx5IG5leHQgZ2VuZXJhdGlvbjElMCMGCSqGSIb3DQEJARYWaW5zZWN1
+cmVAdGVzdC5pbnNlY3VyZTAeFw0wMjA2MjcxMjE2MzJaFw0xMjA2MjQxMjE2MzJa
+MH8xCzAJBgNVBAYTAmRlMSAwHgYDVQQKExdJbnNlY3VyZVRlc3RDZXJ0aWZpY2F0
+ZTEnMCUGA1UEAxMeRm9yIFRlc3RzIE9ubHkgbmV4dCBnZW5lcmF0aW9uMSUwIwYJ
+KoZIhvcNAQkBFhZpbnNlY3VyZUB0ZXN0Lmluc2VjdXJlMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEApU/ZjFU69b1kOa7R14gUA+fK4W2fiG5Rl7l1Y9Oa
+ykDRQXOXzb2Jtqru0R8wdYHpKDDfJMnf0NkNbsMT9/EPztuEXhxgRM/V1+GxlZqR
+w3B7vDg41wjBuq8/9xOfd8WqdeXID5/JSo/z0Q2v0ifBgCP60DbCFtPneIdElGSY
+tCpNd2qG06CNJz5gvaHDIpQbjgQ2KiGSJStH+cYlwf24JdZgslXqo6JVg3/7SMHq
+mY2A/MIFZRvUEwataZxtmOkba2AhwFesKq1V4DeIvH7VD29Ub0dB4O9r7LHTjxzG
+j4nRrkNi6L4R4HN8q4CtxbJNaoMvFAuMKTIdiBDjEB5G7QIDAQABo4IBhjCCAYIw
+DwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAeYwHQYDVR0OBBYEFI8IT5xTwVzI
+5gzXEy7LUjwjlgIUMIGrBgNVHSMEgaMwgaCAFI8IT5xTwVzI5gzXEy7LUjwjlgIU
+oYGEpIGBMH8xCzAJBgNVBAYTAmRlMSAwHgYDVQQKExdJbnNlY3VyZVRlc3RDZXJ0
+aWZpY2F0ZTEnMCUGA1UEAxMeRm9yIFRlc3RzIE9ubHkgbmV4dCBnZW5lcmF0aW9u
+MSUwIwYJKoZIhvcNAQkBFhZpbnNlY3VyZUB0ZXN0Lmluc2VjdXJlggEAMCEGA1Ud
+EQQaMBiBFmluc2VjdXJlQHRlc3QuaW5zZWN1cmUwIQYDVR0SBBowGIEWaW5zZWN1
+cmVAdGVzdC5pbnNlY3VyZTARBglghkgBhvhCAQEEBAMCAAcwPAYJYIZIAYb4QgEN
+BC8WLVRoaXMgY2VydGlmaWNhdGUgd2FzIGlzc3VlZCBmb3IgdGVzdGluZyBvbmx5
+ITANBgkqhkiG9w0BAQQFAAOCAQEAKG4CjdQ60pskcVVS9batPkOr3HR+20jgxtaW
+Cul+QmepJCZTj2XjmspLlw00ZVcjxTuxsBVKQoSPA0V7xrNU6GVYQtfnYWoQ1Lw+
+c2+J6XZ5iV58uyz4IJVgdq+kyXjopMiJV/cHqDX5fPeLT35L3UNZy8TdhHW+tj7X
+sZelbK6kig9mzOBV2g0Pa86DwctHxL/eRDqX0+Mkvy9YAsBVhHDhVRWBpVMmQFMd
+NbEiGRB0FEKTM+ztlb0QyBrhrjHI9a+P2Q5iap7HuiUrD7BRQ8YWEOUWI8jEdRaI
+kC/K0U+WTB6e32XidjR7GCqFULLCE45of5JWJ/eV9gL5znhbEg==
+-----END CERTIFICATE-----
+
+

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_certificate_PEM.txt
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_certificate_PEM.txt?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_certificate_PEM.txt (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_certificate_PEM.txt Sun Apr  9 22:38:31 2006
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICpjCCAmSgAwIBAgIBKjALBgcqhkjOOAQDBQAwFDESMBAGA1UEAxMJbW9zdEJvZ3Vz
+MB4XDTAyMDkxMjA1MTQxNFoXDTEyMDkwOTA1MTQxNFowFDESMBAGA1UEAxMJbW9zdEJv
+Z3VzMIIBtjCCASsGByqGSM44BAEwggEeAoGBAJ1FcaWl9WQueeB6znF2UwCLpUUWd4Bx
+sUQMa3gKlac9Aa8CzWZQfv/GHzVByCoqZDgsNlYtdvYtDHyyh6aXwSL3ffFPawdOzSBz
+NsbyLP7DBECvhXp1sYy9LbotnI6J2hIGZxg6D0LY87AZTGWtlxZwiZ4fjYpWeWcNLhC9
+LyZ1AhUAyimlZ8Iyr4ePL8bxaDbrCixlDb8CgYA0xqckl79n0IaYtcbN7SqNA/kUkjVG
+9LjLpUMOTBiOPMWjKbgiZ1jnmINgFy9ZZEvq/F1hjqdE2hAI2arBczmZXD9L2p5LX7sJ
+f+Dqf5jpzwhLFMdFJoANylHCGsUW13rEP+Rr5RYsl4N6WreaKipZIofpZEk8Alqj3qxc
+OWPXmgOBhAACgYAeDfo0hMcW4uUpBRfbhq4CAxDQQeanE6K1bdF9+CqQhkFRPj0Mdso5
+T06WxfqdoMCruHR6BaRprX5TDuxv/EGkK3FgxTxjBOTuCD4+8+pYiycrWjrDFS4rpx5P
+c5wKq2E4AnJ15j7QI6vE0GMDrP5GbDe6+UrGYkvaIfJ9afefvKNHMEUwEgYDVR0TAQH/
+BAgwBgEB/wIBAjAPBgNVHQ8BAf8EBQMDB/4AMB4GA1UdDgQXBBVhbiBvY3RldC1zdHJp
+bmcgdmFsdWUwCwYHKoZIzjgEAwUAAy8AMCwCFDvuHX267Kg6zbIUOeIFsWDFWQnzAhRM
+Nlv0ZVWhYxlyK4iVS2WCw2SV6A==
+-----END CERTIFICATE-----

Added: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_ks.bks
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_ks.bks?rev=392891&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/resources/hyts_ks.bks
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_DummyPKCS12Keystore.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_DummyPKCS12Keystore.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_DummyPKCS12Keystore.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_DummyPKCS12Keystore.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,211 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.support;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.Key;
+import java.security.KeyStoreException;
+import java.security.KeyStoreSpi;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.util.Date;
+import java.util.Enumeration;
+
+/**
+ * Empty implementation used to enable unit tests to run.
+ */
+public class Support_DummyPKCS12Keystore extends KeyStoreSpi {
+
+	/**
+	 * 
+	 */
+	public Support_DummyPKCS12Keystore() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineGetKey(java.lang.String, char[])
+	 */
+	public Key engineGetKey(String arg0, char[] arg1)
+			throws NoSuchAlgorithmException, UnrecoverableKeyException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineGetCertificateChain(java.lang.String)
+	 */
+	public Certificate[] engineGetCertificateChain(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineGetCertificate(java.lang.String)
+	 */
+	public Certificate engineGetCertificate(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineGetCreationDate(java.lang.String)
+	 */
+	public Date engineGetCreationDate(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineSetKeyEntry(java.lang.String,
+	 *      java.security.Key, char[], java.security.cert.Certificate[])
+	 */
+	public void engineSetKeyEntry(String arg0, Key arg1, char[] arg2,
+			Certificate[] arg3) throws KeyStoreException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineSetKeyEntry(java.lang.String,
+	 *      byte[], java.security.cert.Certificate[])
+	 */
+	public void engineSetKeyEntry(String arg0, byte[] arg1, Certificate[] arg2)
+			throws KeyStoreException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineSetCertificateEntry(java.lang.String,
+	 *      java.security.cert.Certificate)
+	 */
+	public void engineSetCertificateEntry(String arg0, Certificate arg1)
+			throws KeyStoreException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineDeleteEntry(java.lang.String)
+	 */
+	public void engineDeleteEntry(String arg0) throws KeyStoreException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineAliases()
+	 */
+	public Enumeration engineAliases() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineContainsAlias(java.lang.String)
+	 */
+	public boolean engineContainsAlias(String arg0) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineSize()
+	 */
+	public int engineSize() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineIsKeyEntry(java.lang.String)
+	 */
+	public boolean engineIsKeyEntry(String arg0) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineIsCertificateEntry(java.lang.String)
+	 */
+	public boolean engineIsCertificateEntry(String arg0) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineGetCertificateAlias(java.security.cert.Certificate)
+	 */
+	public String engineGetCertificateAlias(Certificate arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineStore(java.io.OutputStream, char[])
+	 */
+	public void engineStore(OutputStream arg0, char[] arg1) throws IOException,
+			NoSuchAlgorithmException, CertificateException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.security.KeyStoreSpi#engineLoad(java.io.InputStream, char[])
+	 */
+	public void engineLoad(InputStream arg0, char[] arg1) throws IOException,
+			NoSuchAlgorithmException, CertificateException {
+		// TODO Auto-generated method stub
+	}
+}

Added: incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_GetLocal.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_GetLocal.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_GetLocal.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_GetLocal.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,96 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.support;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.JarURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Hashtable;
+
+import tests.support.resource.Support_Resources;
+
+public class Support_GetLocal {
+
+	static Hashtable cache = new Hashtable(20);
+
+	public static File getLocalFile(String url) throws IOException,
+			MalformedURLException {
+		url = Support_Resources.RESOURCE_PACKAGE + url;
+		File temp = (File) cache.get(url);
+		if (temp == null) {
+			InputStream in = Support_GetLocal.class.getResourceAsStream(url);
+			temp = File.createTempFile("hyts_local", ".tmp", null);
+			temp.deleteOnExit();
+			FileOutputStream out = new FileOutputStream(temp);
+			int result;
+			byte[] buf = new byte[4096];
+			while ((result = in.read(buf)) != -1)
+				out.write(buf, 0, result);
+			in.close();
+			out.close();
+			cache.put(url, temp);
+		}
+		return temp;
+	}
+
+	public static File getExternalLocalFile(String url) throws IOException,
+			MalformedURLException {
+		File temp = (File) cache.get(url);
+		if (temp == null) {
+			InputStream in = new URL(url).openStream();
+			temp = File.createTempFile("hyts_local", ".tmp", null);
+			temp.deleteOnExit();
+			FileOutputStream out = new FileOutputStream(temp);
+			int result;
+			byte[] buf = new byte[4096];
+			while ((result = in.read(buf)) != -1)
+				out.write(buf, 0, result);
+			in.close();
+			out.close();
+			cache.put(url, temp);
+		}
+		return temp;
+	}
+
+	static ByteArrayInputStream getStream(String url) throws IOException,
+			MalformedURLException {
+		InputStream in = new URL(url).openStream();
+		ByteArrayOutputStream out = new ByteArrayOutputStream(256);
+		int result;
+		byte[] buf = new byte[256];
+		while ((result = in.read(buf)) != -1)
+			out.write(buf, 0, result);
+		return new ByteArrayInputStream(out.toByteArray());
+	}
+
+	public static File createTempFile(String suffix) throws IOException {
+		return File.createTempFile("hyts_", suffix, null);
+	}
+
+	public static JarURLConnection getJarURLConnection() throws IOException {
+		JarURLConnection con1 = null;
+		File file = getLocalFile("hyts_att.jar");
+		URL fUrl1 = new URL("jar:file:" + file.getPath() + "!/");
+		con1 = (JarURLConnection) fUrl1.openConnection();
+		return con1;
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_GetResource.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_GetResource.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_GetResource.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_GetResource.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,23 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.support;
+
+public class Support_GetResource {
+
+	public static String getResourceURL(String resource) {
+		return "http://" + Support_Configuration.TestResources + resource;
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_PermissionCollection.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_PermissionCollection.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_PermissionCollection.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_PermissionCollection.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,53 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.support;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.BasicPermission;
+import java.security.PermissionCollection;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+
+public class Support_PermissionCollection {
+
+	public static void main(String[] args) throws Exception {
+		System.setSecurityManager(new SecurityManager());
+		java.net.URL[] urls = new java.net.URL[1];
+		Class c = null;
+		java.net.URLClassLoader ucl = null;
+		try {
+			URL url = new URL(args[0]);
+			urls[0] = url;
+			ucl = URLClassLoader.newInstance(urls, null);
+			c = Class.forName("coucou.FileAccess", true, ucl);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		ProtectionDomain pd = c.getProtectionDomain();
+		PermissionCollection coll = Policy.getPolicy().getPermissions(pd);
+		Class myPermission = Class.forName("mypackage.MyPermission");
+		BasicPermission myperm = (BasicPermission) myPermission.newInstance();
+		System.out.println(coll.implies(new java.io.FilePermission("test1.txt",
+				"write"))
+				+ ","
+				+ coll.implies(myperm)
+				+ ","
+				+ coll
+						.implies(new java.io.FilePermission("test2.txt",
+								"write")) + ",");
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderJCE.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderJCE.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderJCE.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderJCE.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,86 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.support;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.Provider;
+
+/**
+ * This class implements a dummy security provider
+ */
+public class Support_ProviderJCE extends Provider {
+	// Provider name
+	private static final String NAME = "ProviderJCE";
+
+	// Version of the services
+	private static final double VERSION = 1.0;
+
+	private static final String INFO = NAME
+			+ " DSA key, parameter generation and signing; SHA-1 digest";
+
+	/**
+	 * Constructs a new instance of the dummy provider.
+	 */
+	public Support_ProviderJCE() {
+		super(NAME, VERSION, INFO);
+		registerServices();
+	}
+
+	/**
+	 * Register the services the receiver provides.
+	 */
+	private void registerServices() {
+		AccessController.doPrivileged(new PrivilegedAction() {
+			public Object run() {
+				// Digest engine
+				put("MessageDigest.SHA",
+						"made.up.provider.name.MessageDigestSHA");
+				put("MessageDigest.MD5",
+						"made.up.provider.name.MessageDigestMD5");
+
+				// Algorithm parameter generator
+				put("AlgorithmParameterGenerator.DSA",
+						"made.up.provider.name.AlgorithmParameterGeneratorDSA");
+
+				// Algorithm parameters
+				put("AlgorithmParameters.DSA",
+						"made.up.provider.name.AlgorithmParametersDSA");
+
+				// Key pair generator
+				put("KeyPairGenerator.DSA",
+						"made.up.provider.name.KeyPairGeneratorDSA");
+
+				// Key factory
+				put("KeyFactory.DSA", "made.up.provider.name.KeyFactoryDSA");
+				put("KeyFactory.RSA", "made.up.provider.name.KeyFactoryRSA");
+
+				// Signature algorithm
+				put("Signature.SHA1withDSA",
+						"made.up.provider.name.SignatureDSA");
+
+				// KeyStore
+				put("KeyStore.PKCS#12/Netscape",
+						"made.up.provider.name.KeyStore");
+
+				// Certificate
+				put("CertificateFactory.X509",
+						"made.up.provider.name.CertificateFactoryX509");
+				return null;
+			}
+		});
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderRSA.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderRSA.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderRSA.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderRSA.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,92 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.support;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.Provider;
+
+/**
+ * This class implements a dummy provider.
+ */
+public class Support_ProviderRSA extends Provider {
+	// Provider name 
+	private static final String NAME = "ProviderRSA";
+
+	// Version of the services provided
+	private static final double VERSION = 1.0;
+
+	private static final String INFO = NAME
+			+ " DSA key, parameter generation and signing; SHA-1 digest"; 
+
+	/**
+	 * Constructs a new instance of the dummy provider.
+	 */
+	public Support_ProviderRSA() {
+		super(NAME, VERSION, INFO);
+		registerServices();
+	}
+
+	/**
+	 * Register the services the receiver provides.
+	 */
+	private void registerServices() {
+		AccessController.doPrivileged(new PrivilegedAction() {
+			public Object run() {
+				// Digest engine
+				put("MessageDigest.SHA",
+						"made.up.provider.name.MessageDigestSHA");
+				put("MessageDigest.MD5",
+						"made.up.provider.name.MessageDigestMD5");
+
+				// Secure Random
+				put("SecureRandom.SHA1PRNG",
+						"made.up.provider.name.SecureRandomImpl");
+
+				// Algorithm parameter generator
+				put("AlgorithmParameterGenerator.DSA",
+						"made.up.provider.name.AlgorithmParameterGeneratorDSA");
+
+				// Algorithm parameters
+				put("AlgorithmParameters.DSA",
+						"made.up.provider.name.AlgorithmParametersDSA");
+
+				// Key pair generator
+				put("KeyPairGenerator.DSA",
+						"made.up.provider.name.KeyPairGeneratorDSA");
+
+				// Key factory
+				put("KeyFactory.DSA",
+						"made.up.provider.name.KeyFactoryDSA");
+				put("KeyFactory.RSA",
+						"made.up.provider.name.KeyFactoryRSA");
+
+				// Signature algorithm
+				put("Signature.SHA1withDSA",
+						"made.up.provider.name.SignatureDSA");
+
+				// KeyStore
+				put("KeyStore.PKCS#12/Netscape",
+						"made.up.provider.name.KeyStore");
+
+				// Certificate
+				put("CertificateFactory.X509",
+						"made.up.provider.name.CertificateFactoryX509");
+				return null;
+			}
+		});
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderTrust.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderTrust.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderTrust.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_ProviderTrust.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,89 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.support;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.Provider;
+
+/**
+ * This class implements a dummy provider.
+ * 
+ */
+public class Support_ProviderTrust extends Provider {
+	// Provider name
+	private static final String NAME = "ProviderTrust";
+
+	// Version of the services
+	private static final double VERSION = 1.0;
+
+	private static final String INFO = NAME
+			+ " DSA key, parameter generation and signing; SHA-1 digest; SHA1PRNG SecureRandom";
+
+	/**
+	 * Constructs a new instance of the dummy provider.
+	 * 
+	 */
+	public Support_ProviderTrust() {
+		super(NAME, VERSION, INFO);
+		registerServices();
+	}
+
+	/**
+	 * Register the services the receiver provides.
+	 */
+	private void registerServices() {
+		AccessController.doPrivileged(new PrivilegedAction() {
+			public Object run() {
+				// Digest engine
+				put("MessageDigest.SHA",
+						"made.up.provider.name.MessageDigestSHA");
+				put("MessageDigest.MD5",
+						"made.up.provider.name.MessageDigestMD5");
+
+				// Algorithm parameter generator
+				put("AlgorithmParameterGenerator.DSA",
+						"made.up.provider.name.AlgorithmParameterGeneratorDSA");
+
+				// Algorithm parameters
+				put("AlgorithmParameters.DSA",
+						"made.up.provider.name.AlgorithmParametersDSA");
+
+				// Key pair generator
+				put("KeyPairGenerator.DSA",
+						"made.up.provider.name.KeyPairGeneratorDSA");
+
+				// Key factory
+				put("KeyFactory.DSA", "made.up.provider.name.KeyFactoryDSA");
+				put("KeyFactory.RSA", "made.up.provider.name.KeyFactoryRSA");
+
+				// Signature algorithm
+				put("Signature.SHA1withDSA",
+						"made.up.provider.name.SignatureDSA");
+
+				// KeyStore
+				put("KeyStore.PKCS#12/Netscape",
+						"made.up.provider.name.KeyStore");
+
+				// Certificate
+				put("CertificateFactory.X509",
+						"made.up.provider.name.CertificateFactoryX509");
+
+				return null;
+			}
+		});
+	}
+}
\ No newline at end of file

Added: incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_TestProvider.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_TestProvider.java?rev=392891&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_TestProvider.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/support/src/test/java/tests/support/Support_TestProvider.java Sun Apr  9 22:38:31 2006
@@ -0,0 +1,121 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.support;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.Provider;
+
+/**
+ * This class implements a dummy provider.
+ */
+public class Support_TestProvider extends Provider {
+	// Provider name
+	private static final String NAME = "TestProvider";
+
+	// Version of the services provided
+	private static final double VERSION = 1.0;
+
+	private static final String INFO = NAME
+			+ " DSA key, parameter generation and signing; SHA-1 digest; "
+			+ "SHA1PRNG SecureRandom; PKCS#12/Netscape KeyStore";
+
+	/**
+	 * Constructs a new instance of the dummy provider.
+	 */
+	public Support_TestProvider() {
+		super(NAME, VERSION, INFO);
+		registerServices();
+	}
+
+	/**
+	 * Register the services the receiver provides.
+	 */
+	private void registerServices() {
+		AccessController.doPrivileged(new PrivilegedAction() {
+			public Object run() {
+				// Digest engine
+				put("MessageDigest.SHA",
+						"made.up.provider.name.MessageDigestSHA");
+				put("MessageDigest.MD2",
+						"made.up.provider.name.MessageDigestMD2");
+				// aliases
+				put("Alg.Alias.MessageDigest.SHA1", "SHA");
+				put("Alg.Alias.MessageDigest.SHA-1", "SHA");
+				put("Alg.Alias.MessageDigest.OID.1.3.14.3.2.26", "SHA");
+				put("Alg.Alias.MessageDigest.1.3.14.3.2.26", "SHA");
+
+				// Algorithm parameter generator
+				put("AlgorithmParameterGenerator.DSA",
+						"made.up.provider.name.AlgorithmParameterGeneratorDSA");
+
+				// Algorithm parameters
+				put("AlgorithmParameters.DSA",
+						"made.up.provider.name.AlgorithmParametersDSA");
+				// aliases
+				put("Alg.Alias.AlgorithmParameters.1.2.840.10040.4.1", "DSA");
+				put("Alg.Alias.AlgorithmParameters.1.3.14.3.2.12", "DSA");
+
+				// Key pair generator
+				put("KeyPairGenerator.DSA",
+						"made.up.provider.name.KeyPairGeneratorDSA");
+				// aliases
+				put("Alg.Alias.KeyPairGenerator.OID.1.2.840.10040.4.1", "DSA");
+				put("Alg.Alias.KeyPairGenerator.1.2.840.10040.4.1", "DSA");
+				put("Alg.Alias.KeyPairGenerator.1.3.14.3.2.12", "DSA");
+
+				// Key factory
+				put("KeyFactory.DSA", "made.up.provider.name.KeyFactoryDSA");
+				put("KeyFactory.RSA", "made.up.provider.name.KeyFactoryRSA");
+				// aliases
+				put("Alg.Alias.KeyFactory.1.2.840.10040.4.1", "DSA");
+				put("Alg.Alias.KeyFactory.1.3.14.3.2.12", "DSA");
+
+				// Signature algorithm
+				put("Signature.SHA1withDSA",
+						"made.up.provider.name.SignatureDSA");
+
+				// aliases
+				put("Alg.Alias.Signature.DSA", "SHA1withDSA");
+				put("Alg.Alias.Signature.DSS", "SHA1withDSA");
+				put("Alg.Alias.Signature.SHA/DSA", "SHA1withDSA");
+				put("Alg.Alias.Signature.SHA1/DSA", "SHA1withDSA");
+				put("Alg.Alias.Signature.SHA-1/DSA", "SHA1withDSA");
+				put("Alg.Alias.Signature.SHAwithDSA", "SHA1withDSA");
+				put("Alg.Alias.Signature.DSAwithSHA1", "SHA1withDSA");
+				put("Alg.Alias.Signature.DSAWithSHA1", "SHA1withDSA");
+				put("Alg.Alias.Signature.SHA-1withDSA", "SHA1withDSA");
+				put("Alg.Alias.Signature.OID.1.2.840.10040.4.3", "SHA1withDSA");
+				put("Alg.Alias.Signature.1.2.840.10040.4.3", "SHA1withDSA");
+				put("Alg.Alias.Signature.1.3.14.3.2.13", "SHA1withDSA");
+				put("Alg.Alias.Signature.1.3.14.3.2.27", "SHA1withDSA");
+				put("Alg.Alias.Signature.OID.1.3.14.3.2.13", "SHA1withDSA");
+				put("Alg.Alias.Signature.OID.1.3.14.3.2.27", "SHA1withDSA");
+
+				put("KeyStore.PKCS#12/Netscape",
+						"tests.support.Support_DummyPKCS12Keystore");
+
+				// Certificate
+				put("CertificateFactory.X509",
+						"made.up.provider.name.CertificateFactoryX509");
+				// aliases
+				put("Alg.Alias.CertificateFactory.X.509", "X509");
+
+				return null;
+			}
+		});
+	}
+}
\ No newline at end of file