From 862c1cec5f4d80e7ddfc7542713febac44ddf181 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Fri, 25 Jun 2010 10:16:01 +0000
Subject: [PATCH] Fix source code indentation, ready for subsequent changes.

---
 opends/src/server/org/opends/server/util/Platform.java |  967 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 544 insertions(+), 423 deletions(-)

diff --git a/opends/src/server/org/opends/server/util/Platform.java b/opends/src/server/org/opends/server/util/Platform.java
index 160b613..8e5ce38 100644
--- a/opends/src/server/org/opends/server/util/Platform.java
+++ b/opends/src/server/org/opends/server/util/Platform.java
@@ -28,6 +28,7 @@
 package org.opends.server.util;
 
 
+
 import java.security.KeyStoreException;
 import java.security.KeyStore;
 import java.security.PrivateKey;
@@ -42,468 +43,588 @@
 import org.opends.messages.Message;
 import static org.opends.messages.UtilityMessages.*;
 
+
+
 /**
- * Provides a wrapper class that collects all of the JVM vendor
- * and JDK version specific code in a single place.
- *
+ * Provides a wrapper class that collects all of the JVM vendor and JDK version
+ * specific code in a single place.
  */
-public final class Platform {
+public final class Platform
+{
 
-   //Prefix that determines which security package to use.
-    private static String pkgPrefix;
+  // Prefix that determines which security package to use.
+  private static String pkgPrefix;
 
-    //The two security package prefixes (IBM and SUN).
-    private static final String IBM_SEC = "com.ibm.security";
-    private static final String SUN_SEC = "sun.security";
+  // The two security package prefixes (IBM and SUN).
+  private static final String IBM_SEC = "com.ibm.security";
+  private static final String SUN_SEC = "sun.security";
 
-    private static final PlatformIMPL IMPL;
+  private static final PlatformIMPL IMPL;
 
-    static {
-     String vendor = System.getProperty("java.vendor");
-     String ver = System.getProperty("java.version");
+  static
+  {
+    String vendor = System.getProperty("java.vendor");
+    String ver = System.getProperty("java.version");
 
-      if(vendor.startsWith("IBM"))
+    if (vendor.startsWith("IBM"))
+    {
+      pkgPrefix = IBM_SEC;
+      if (ver.startsWith("1.5"))
       {
-        pkgPrefix = IBM_SEC;
-        if(ver.startsWith("1.5"))
-        {
-          IMPL = new IBM5PlatformIMPL();
-        }
-        else
-        {
-          IMPL = new DefaultPlatformIMPL();
-        }
+        IMPL = new IBM5PlatformIMPL();
       }
       else
       {
-        pkgPrefix = SUN_SEC;
-        if(ver.startsWith("1.5"))
+        IMPL = new DefaultPlatformIMPL();
+      }
+    }
+    else
+    {
+      pkgPrefix = SUN_SEC;
+      if (ver.startsWith("1.5"))
+      {
+        IMPL = new Sun5PlatformIMPL();
+      }
+      else
+      {
+        IMPL = new DefaultPlatformIMPL();
+      }
+    }
+  }
+
+
+
+  /**
+   * Platform base class. Performs all of the certificate management functions.
+   */
+  private abstract static class PlatformIMPL
+  {
+
+    // Key size, key algorithm and signature algorithms used.
+    private static final int KEY_SIZE = 1024;
+    private static final String KEY_ALGORITHM = "rsa";
+    private static final String SIG_ALGORITHM = "SHA1WithRSA";
+
+    // Time values used in validity calculations.
+    private static final int SEC_IN_DAY = 24 * 60 * 60;
+
+    // Methods pulled from the classes.
+    private static final String GENERATE_METHOD = "generate";
+    private static final String GET_PRIVATE_KEY_METHOD = "getPrivateKey";
+    private static final String GET_SELFSIGNED_CERT_METHOD =
+      "getSelfCertificate";
+
+    // Classes needed to manage certificates.
+    private static Class<?> certKeyGenClass, X500NameClass;
+
+    // Constructors for each of the above classes.
+    private static Constructor<?> certKeyGenCons, X500NameCons;
+
+    static
+    {
+      String x509pkg = pkgPrefix + ".x509";
+      String certAndKeyGen = x509pkg + ".CertAndKeyGen";
+      String X500Name = x509pkg + ".X500Name";
+      try
+      {
+        certKeyGenClass = Class.forName(certAndKeyGen);
+        X500NameClass = Class.forName(X500Name);
+        certKeyGenCons = certKeyGenClass.getConstructor(String.class,
+            String.class);
+        X500NameCons = X500NameClass.getConstructor(String.class);
+      }
+      catch (ClassNotFoundException e)
+      {
+        Message msg = ERR_CERTMGR_CLASS_NOT_FOUND.get(e.getMessage());
+        throw new ExceptionInInitializerError(msg.toString());
+      }
+      catch (SecurityException e)
+      {
+        Message msg = ERR_CERTMGR_SECURITY.get(e.getMessage());
+        throw new ExceptionInInitializerError(msg.toString());
+      }
+      catch (NoSuchMethodException e)
+      {
+        Message msg = ERR_CERTMGR_NO_METHOD.get(e.getMessage());
+        throw new ExceptionInInitializerError(msg.toString());
+      }
+    }
+
+
+
+    protected PlatformIMPL()
+    {
+    }
+
+
+
+    /**
+     * Delete the specified alias from the specified keystore.
+     *
+     * @param ks
+     *          The keystore to delete the alias from.
+     * @param ksPath
+     *          The path to the keystore.
+     * @param alias
+     *          The alias to use in the request generation.
+     * @param pwd
+     *          The keystore password to use.
+     * @throws KeyStoreException
+     *           If an error occurred deleting the alias.
+     */
+    public final void deleteAlias(KeyStore ks, String ksPath, String alias,
+        char[] pwd) throws KeyStoreException
+    {
+      try
+      {
+        if (ks == null)
         {
-         IMPL = new Sun5PlatformIMPL();
+          Message msg = ERR_CERTMGR_KEYSTORE_NONEXISTANT.get();
+          throw new KeyStoreException(msg.toString());
         }
+        ks.deleteEntry(alias);
+        FileOutputStream fs = new FileOutputStream(ksPath);
+        ks.store(fs, pwd);
+        fs.close();
+      }
+      catch (Exception e)
+      {
+        Message msg = ERR_CERTMGR_DELETE_ALIAS.get(alias, e.getMessage());
+        throw new KeyStoreException(msg.toString());
+      }
+    }
+
+
+
+    /**
+     * Add the certificate in the specified path to the specified keystore,
+     * creating the keystore using the specified type and path if it the
+     * keystore doesn't exist.
+     *
+     * @param ks
+     *          The keystore to add the certificate to, may be null if it
+     *          doesn't exist.
+     * @param ksType
+     *          The type to use if the keystore is created.
+     * @param ksPath
+     *          The path to the keystore if it is created.
+     * @param alias
+     *          The alias to store the certificate under.
+     * @param pwd
+     *          The password to use in saving the certificate.
+     * @param certPath
+     *          The path to the file containing the certificate.
+     * @throws KeyStoreException
+     *           If an error occurred adding the certificate to the keystore.
+     */
+    public final void addCertificate(KeyStore ks, String ksType, String ksPath,
+        String alias, char[] pwd, String certPath) throws KeyStoreException
+    {
+      try
+      {
+        CertificateFactory cf = CertificateFactory.getInstance("X509");
+        InputStream inStream = new FileInputStream(certPath);
+        if (ks == null)
+        {
+          ks = KeyStore.getInstance(ksType);
+          ks.load(null, pwd);
+        }
+        // Do not support certificate replies.
+        if (ks.entryInstanceOf(alias, KeyStore.PrivateKeyEntry.class))
+        {
+          Message msg = ERR_CERTMGR_CERT_REPLIES_INVALID.get(alias);
+          throw new KeyStoreException(msg.toString());
+        }
+        else if (!ks.containsAlias(alias)
+            || ks
+                .entryInstanceOf(alias, KeyStore.TrustedCertificateEntry.class))
+          trustedCert(alias, cf, ks, inStream);
         else
         {
-          IMPL = new DefaultPlatformIMPL();
+          Message msg = ERR_CERTMGR_ALIAS_INVALID.get(alias);
+          throw new KeyStoreException(msg.toString());
         }
+        FileOutputStream fileOutStream = new FileOutputStream(ksPath);
+        ks.store(fileOutStream, pwd);
+        fileOutStream.close();
+        inStream.close();
+      }
+      catch (Exception e)
+      {
+        Message msg = ERR_CERTMGR_ADD_CERT.get(alias, e.getMessage());
+        throw new KeyStoreException(msg.toString());
       }
     }
 
-   /**
-    * Platform base class. Performs all of the certificate management functions.
-    */
-    private abstract static class PlatformIMPL {
-
-        //Key size, key algorithm and signature algorithms used.
-        private static final  int KEY_SIZE = 1024;
-        private static final String KEY_ALGORITHM = "rsa";
-        private static final String SIG_ALGORITHM = "SHA1WithRSA";
-
-        //Time values used in validity calculations.
-        private static final int SEC_IN_DAY = 24 * 60 * 60;
-
-        //Methods pulled from the classes.
-        private static final String GENERATE_METHOD = "generate";
-        private static final String GET_PRIVATE_KEY_METHOD = "getPrivateKey";
-        private static final String GET_SELFSIGNED_CERT_METHOD =
-                                                          "getSelfCertificate";
-
-        //Classes needed to manage certificates.
-        private static Class<?> certKeyGenClass, X500NameClass;
-
-        //Constructors for each of the above classes.
-        private static Constructor<?> certKeyGenCons, X500NameCons;
-
-        static {
-          String x509pkg = pkgPrefix + ".x509";
-          String certAndKeyGen=  x509pkg + ".CertAndKeyGen";
-          String X500Name =  x509pkg + ".X500Name";
-          try {
-            certKeyGenClass = Class.forName(certAndKeyGen);
-            X500NameClass = Class.forName(X500Name);
-            certKeyGenCons =
-                    certKeyGenClass.getConstructor(String.class, String.class);
-            X500NameCons = X500NameClass.getConstructor(String.class);
-          } catch (ClassNotFoundException e) {
-            Message msg = ERR_CERTMGR_CLASS_NOT_FOUND.get(e.getMessage());
-            throw new ExceptionInInitializerError(msg.toString());
-          } catch (SecurityException e) {
-            Message msg = ERR_CERTMGR_SECURITY.get(e.getMessage());
-            throw new ExceptionInInitializerError(msg.toString());
-          } catch (NoSuchMethodException e) {
-            Message msg = ERR_CERTMGR_NO_METHOD.get(e.getMessage());
-            throw new ExceptionInInitializerError(msg.toString());
-          }
-        }
-
-
-        protected PlatformIMPL() {}
-
-
-        /**
-         * Delete the specified alias from the specified keystore.
-         *
-         * @param ks The keystore to delete the alias from.
-         * @param ksPath The path to the keystore.
-         * @param alias The alias to use in the request generation.
-         * @param pwd The keystore password to use.
-         *
-         * @throws KeyStoreException If an error occurred deleting the alias.
-         */
-        public final void deleteAlias(KeyStore ks, String ksPath,
-            String alias, char[] pwd) throws KeyStoreException {
-              try {
-                  if(ks == null) {
-                      Message msg = ERR_CERTMGR_KEYSTORE_NONEXISTANT.get();
-                      throw new KeyStoreException(msg.toString());
-                  }
-                  ks.deleteEntry(alias);
-                  FileOutputStream fs = new FileOutputStream(ksPath);
-                  ks.store(fs, pwd);
-                  fs.close();
-              } catch (Exception e) {
-                  Message msg =
-                      ERR_CERTMGR_DELETE_ALIAS.get(alias,e.getMessage());
-                  throw new KeyStoreException(msg.toString());
-              }
-        }
-
-
-        /**
-         * Add the certificate in the specified path to the specified keystore,
-         * creating the keystore using the specified type and path if it the
-         * keystore doesn't exist.
-         *
-         * @param ks The keystore to add the certificate to, may be null if it
-         *           doesn't exist.
-         * @param ksType The type to use if the keystore is created.
-         * @param ksPath The path to the keystore if it is created.
-         * @param alias The alias to store the certificate under.
-         * @param pwd The password to use in saving the certificate.
-         * @param certPath The path to the file containing the certificate.
-         * @throws KeyStoreException If an error occurred adding the
-         *                           certificate to the keystore.
-         */
-        public final void addCertificate(KeyStore ks, String ksType,
-            String ksPath, String alias, char[] pwd, String certPath)
-        throws KeyStoreException {
-          try {
-            CertificateFactory cf = CertificateFactory.getInstance("X509");
-            InputStream inStream = new FileInputStream(certPath);
-            if(ks == null) {
-              ks = KeyStore.getInstance(ksType);
-              ks.load(null, pwd);
-            }
-            //Do not support certificate replies.
-            if (ks.entryInstanceOf(alias ,KeyStore.PrivateKeyEntry.class)) {
-              Message msg = ERR_CERTMGR_CERT_REPLIES_INVALID.get(alias);
-              throw new KeyStoreException(msg.toString());
-            } else if(!ks.containsAlias(alias) ||
-                ks.entryInstanceOf(alias,
-                    KeyStore.TrustedCertificateEntry.class))
-              trustedCert(alias, cf, ks, inStream);
-            else {
-              Message msg = ERR_CERTMGR_ALIAS_INVALID.get(alias);
-              throw new KeyStoreException(msg.toString());
-            }
-            FileOutputStream fileOutStream = new FileOutputStream(ksPath);
-            ks.store(fileOutStream, pwd);
-            fileOutStream.close();
-            inStream.close();
-          } catch (Exception e) {
-            Message msg =
-              ERR_CERTMGR_ADD_CERT.get(alias, e.getMessage());
-            throw new KeyStoreException(msg.toString());
-          }
-        }
-
-
-        /**
-         * Generate a self-signed certificate using the specified alias, dn
-         * string and validity period. If the keystore does not exist, create it
-         * using the specified type and path.
-         *
-         * @param ks The keystore to save the certificate in. May be null if it
-         *           does not exist.
-         * @param ksType The keystore type to use if the keystore is created.
-         * @param ksPath The path to the keystore if the keystore is created.
-         * @param alias The alias to store the certificate under.
-         * @param pwd The password to us in saving the certificate.
-         * @param dn The dn string used as the certificate subject.
-         * @param validity The validity of the certificate in days.
-         * @return The keystore that the self-signed certificate was stored in.
-         *
-         * @throws KeyStoreException If the self-signed certificate cannot be
-         *                           generated.
-         */
-        public final
-        KeyStore generateSelfSignedCertificate(KeyStore ks, String ksType,
-            String ksPath, String alias, char[] pwd, String dn, int validity)
-        throws KeyStoreException {
-          try {
-            if(ks == null) {
-              ks = KeyStore.getInstance(ksType);
-              ks.load(null, pwd);
-            } else if(ks.containsAlias(alias)) {
-              Message msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
-              throw new KeyStoreException(msg.toString());
-            }
-            Object keypair =
-              certKeyGenCons.newInstance(KEY_ALGORITHM, SIG_ALGORITHM);
-            Object subject = X500NameCons.newInstance(dn);
-            Method certAndKeyGenGenerate =
-              certKeyGenClass.getMethod(GENERATE_METHOD, int.class);
-            certAndKeyGenGenerate.invoke(keypair, KEY_SIZE);
-            Method certAndKeyGetPrivateKey =
-              certKeyGenClass.getMethod(GET_PRIVATE_KEY_METHOD);
-            PrivateKey privatevKey =
-              (PrivateKey) certAndKeyGetPrivateKey.invoke(keypair);
-            Certificate[] certificateChain = new Certificate[1];
-            Method getSelfCertificate =
-              certKeyGenClass.getMethod(GET_SELFSIGNED_CERT_METHOD,
-                                        X500NameClass,long.class);
-            int days = validity * SEC_IN_DAY;
-            certificateChain[0] =
-              (Certificate) getSelfCertificate.invoke(keypair, subject, days);
-            ks.setKeyEntry(alias, privatevKey, pwd, certificateChain);
-            FileOutputStream fileOutStream = new FileOutputStream(ksPath);
-            ks.store(fileOutStream, pwd);
-            fileOutStream.close();
-          } catch (Exception e) {
-            Message msg =
-                   ERR_CERTMGR_GEN_SELF_SIGNED_CERT.get(alias, e.getMessage());
-            throw new KeyStoreException(msg.toString());
-          }
-          return ks;
-        }
-
-
-        /**
-         * Generate a x509 certificate from the input stream. Verification is
-         * done only if it is self-signed.
-         *
-         * @param alias The alias to save the certificate under.
-         * @param cf The x509 certificate factory.
-         * @param ks The keystore to add the certificate in.
-         * @param in The input stream to read the certificate from.
-         * @throws KeyStoreException If the alias exists already in the
-         *         keystore, if the self-signed certificate didn't verify, or
-         *         the certificate could not be stored.
-         */
-        private void trustedCert(String alias, CertificateFactory cf,
-             KeyStore ks, InputStream in) throws KeyStoreException {
-          try {
-            if (ks.containsAlias(alias)) {
-              Message msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
-              throw new KeyStoreException(msg.toString());
-            }
-            X509Certificate cert = (X509Certificate) cf.generateCertificate(in);
-            if (isSelfSigned(cert))
-              cert.verify(cert.getPublicKey());
-            ks.setCertificateEntry(alias, cert);
-          } catch (Exception e) {
-            Message msg =
-              ERR_CERTMGR_TRUSTED_CERT.get(alias,e.getMessage());
-            throw new KeyStoreException(msg.toString());
-          }
-        }
-
-
-        /**
-         * Check that the issuer and subject DNs match.
-         *
-         * @param cert The certificate to examine.
-         * @return {@code true} if the certificate is self-signed.
-         */
-        private boolean isSelfSigned(X509Certificate cert) {
-          return cert.getSubjectDN().equals(cert.getIssuerDN());
-        }
-
-        /**
-         * Normalize the data in the specified buffer.
-         *
-         * @param buffer The buffer to normalize.
-         */
-         public abstract void normalize(StringBuilder buffer);
-    }
-
-    //Prevent instantiation.
-    private Platform() {}
-
-    /**
-     * Add the certificate in the specified path to the provided keystore;
-     * creating the keystore with the provided type and path if it doesn't
-     * exist.
-     *
-     * @param ks The keystore to add the certificate to, may be null if it
-     *           doesn't exist.
-     * @param ksType The type to use if the keystore is created.
-     * @param ksPath The path to the keystore if it is created.
-     * @param alias The alias to store the certificate under.
-     * @param pwd The password to use in saving the certificate.
-     * @param certPath The path to the file containing the certificate.
-     *
-     * @throws KeyStoreException If an error occurred adding the
-     *                           certificate to the keystore.
-     */
-    public static void addCertificate(KeyStore ks, String ksType, String ksPath,
-        String alias, char[] pwd, String certPath) throws KeyStoreException {
-        IMPL.addCertificate(ks,ksType, ksPath, alias, pwd, certPath);
-    }
 
 
     /**
-     * Delete the specified alias from the provided keystore.
+     * Generate a self-signed certificate using the specified alias, dn string
+     * and validity period. If the keystore does not exist, create it using the
+     * specified type and path.
      *
-     * @param ks The keystore to delete the alias from.
-     * @param ksPath The path to the keystore.
-     * @param alias The alias to use in the request generation.
-     * @param pwd The keystore password to use.
-     *
-     * @throws KeyStoreException If an error occurred deleting the alias.
+     * @param ks
+     *          The keystore to save the certificate in. May be null if it does
+     *          not exist.
+     * @param ksType
+     *          The keystore type to use if the keystore is created.
+     * @param ksPath
+     *          The path to the keystore if the keystore is created.
+     * @param alias
+     *          The alias to store the certificate under.
+     * @param pwd
+     *          The password to us in saving the certificate.
+     * @param dn
+     *          The dn string used as the certificate subject.
+     * @param validity
+     *          The validity of the certificate in days.
+     * @return The keystore that the self-signed certificate was stored in.
+     * @throws KeyStoreException
+     *           If the self-signed certificate cannot be generated.
      */
-    public static void deleteAlias(KeyStore ks, String ksPath, String alias,
-        char[] pwd) throws KeyStoreException {
-        IMPL.deleteAlias(ks, ksPath, alias, pwd);
-    }
-
-
-    /**
-     * Generate a self-signed certificate using the specified alias, dn
-     * string and validity period. If the keystore does not exist, it will be
-     * created using the specified keystore type and path.
-     *
-     * @param ks The keystore to save the certificate in. May be null if it
-     *           does not exist.
-     * @param ksType The keystore type to use if the keystore is created.
-     * @param ksPath The path to the keystore if the keystore is created.
-     * @param alias The alias to store the certificate under.
-     * @param pwd The password to us in saving the certificate.
-     * @param dn The dn string used as the certificate subject.
-     * @param validity The validity of the certificate in days.
-     *
-     * @throws KeyStoreException If the self-signed certificate cannot be
-     *                           generated.
-     */
-    public static void generateSelfSignedCertificate(KeyStore ks, String ksType,
-        String ksPath, String alias, char[] pwd, String dn, int validity)
-    throws KeyStoreException {
-        IMPL.generateSelfSignedCertificate(ks, ksType, ksPath, alias, pwd, dn,
-                                      validity);
+    public final KeyStore generateSelfSignedCertificate(KeyStore ks,
+        String ksType, String ksPath, String alias, char[] pwd, String dn,
+        int validity) throws KeyStoreException
+    {
+      try
+      {
+        if (ks == null)
+        {
+          ks = KeyStore.getInstance(ksType);
+          ks.load(null, pwd);
+        }
+        else if (ks.containsAlias(alias))
+        {
+          Message msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
+          throw new KeyStoreException(msg.toString());
+        }
+        Object keypair = certKeyGenCons.newInstance(KEY_ALGORITHM,
+            SIG_ALGORITHM);
+        Object subject = X500NameCons.newInstance(dn);
+        Method certAndKeyGenGenerate = certKeyGenClass.getMethod(
+            GENERATE_METHOD, int.class);
+        certAndKeyGenGenerate.invoke(keypair, KEY_SIZE);
+        Method certAndKeyGetPrivateKey = certKeyGenClass
+            .getMethod(GET_PRIVATE_KEY_METHOD);
+        PrivateKey privatevKey = (PrivateKey) certAndKeyGetPrivateKey
+            .invoke(keypair);
+        Certificate[] certificateChain = new Certificate[1];
+        Method getSelfCertificate = certKeyGenClass.getMethod(
+            GET_SELFSIGNED_CERT_METHOD, X500NameClass, long.class);
+        int days = validity * SEC_IN_DAY;
+        certificateChain[0] = (Certificate) getSelfCertificate.invoke(keypair,
+            subject, days);
+        ks.setKeyEntry(alias, privatevKey, pwd, certificateChain);
+        FileOutputStream fileOutStream = new FileOutputStream(ksPath);
+        ks.store(fileOutStream, pwd);
+        fileOutStream.close();
+      }
+      catch (Exception e)
+      {
+        Message msg = ERR_CERTMGR_GEN_SELF_SIGNED_CERT.get(alias, e
+            .getMessage());
+        throw new KeyStoreException(msg.toString());
+      }
+      return ks;
     }
 
 
 
     /**
-     * Sun 5 JDK platform class.
+     * Generate a x509 certificate from the input stream. Verification is done
+     * only if it is self-signed.
+     *
+     * @param alias
+     *          The alias to save the certificate under.
+     * @param cf
+     *          The x509 certificate factory.
+     * @param ks
+     *          The keystore to add the certificate in.
+     * @param in
+     *          The input stream to read the certificate from.
+     * @throws KeyStoreException
+     *           If the alias exists already in the keystore, if the self-signed
+     *           certificate didn't verify, or the certificate could not be
+     *           stored.
      */
-    private static class Sun5PlatformIMPL extends PlatformIMPL {
-       //normalize method.
-      private static final Method NORMALIZE;
-      //Normalized form method.
-      private static final Object FORM_NFKC;
-
-      static {
-        Method normalize = null;
-        Object formNFKC = null;
-        try {
-          Class<?> normalizer = Class.forName("sun.text.Normalizer");
-          formNFKC = normalizer.getField("DECOMP_COMPAT").get(null);
-          Class<?> normalizerForm = Class.forName("sun.text.Normalizer$Mode");
-          normalize = normalizer.getMethod("normalize", String.class,
-                 normalizerForm, Integer.TYPE);
+    private void trustedCert(String alias, CertificateFactory cf, KeyStore ks,
+        InputStream in) throws KeyStoreException
+    {
+      try
+      {
+        if (ks.containsAlias(alias))
+        {
+          Message msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
+          throw new KeyStoreException(msg.toString());
         }
-        catch (Exception ex) {
+        X509Certificate cert = (X509Certificate) cf.generateCertificate(in);
+        if (isSelfSigned(cert)) cert.verify(cert.getPublicKey());
+        ks.setCertificateEntry(alias, cert);
+      }
+      catch (Exception e)
+      {
+        Message msg = ERR_CERTMGR_TRUSTED_CERT.get(alias, e.getMessage());
+        throw new KeyStoreException(msg.toString());
+      }
+    }
+
+
+
+    /**
+     * Check that the issuer and subject DNs match.
+     *
+     * @param cert
+     *          The certificate to examine.
+     * @return {@code true} if the certificate is self-signed.
+     */
+    private boolean isSelfSigned(X509Certificate cert)
+    {
+      return cert.getSubjectDN().equals(cert.getIssuerDN());
+    }
+
+
+
+    /**
+     * Normalize the data in the specified buffer.
+     *
+     * @param buffer
+     *          The buffer to normalize.
+     */
+    public abstract void normalize(StringBuilder buffer);
+  }
+
+
+
+  // Prevent instantiation.
+  private Platform()
+  {
+  }
+
+
+
+  /**
+   * Add the certificate in the specified path to the provided keystore;
+   * creating the keystore with the provided type and path if it doesn't exist.
+   *
+   * @param ks
+   *          The keystore to add the certificate to, may be null if it doesn't
+   *          exist.
+   * @param ksType
+   *          The type to use if the keystore is created.
+   * @param ksPath
+   *          The path to the keystore if it is created.
+   * @param alias
+   *          The alias to store the certificate under.
+   * @param pwd
+   *          The password to use in saving the certificate.
+   * @param certPath
+   *          The path to the file containing the certificate.
+   * @throws KeyStoreException
+   *           If an error occurred adding the certificate to the keystore.
+   */
+  public static void addCertificate(KeyStore ks, String ksType, String ksPath,
+      String alias, char[] pwd, String certPath) throws KeyStoreException
+  {
+    IMPL.addCertificate(ks, ksType, ksPath, alias, pwd, certPath);
+  }
+
+
+
+  /**
+   * Delete the specified alias from the provided keystore.
+   *
+   * @param ks
+   *          The keystore to delete the alias from.
+   * @param ksPath
+   *          The path to the keystore.
+   * @param alias
+   *          The alias to use in the request generation.
+   * @param pwd
+   *          The keystore password to use.
+   * @throws KeyStoreException
+   *           If an error occurred deleting the alias.
+   */
+  public static void deleteAlias(KeyStore ks, String ksPath, String alias,
+      char[] pwd) throws KeyStoreException
+  {
+    IMPL.deleteAlias(ks, ksPath, alias, pwd);
+  }
+
+
+
+  /**
+   * Generate a self-signed certificate using the specified alias, dn string and
+   * validity period. If the keystore does not exist, it will be created using
+   * the specified keystore type and path.
+   *
+   * @param ks
+   *          The keystore to save the certificate in. May be null if it does
+   *          not exist.
+   * @param ksType
+   *          The keystore type to use if the keystore is created.
+   * @param ksPath
+   *          The path to the keystore if the keystore is created.
+   * @param alias
+   *          The alias to store the certificate under.
+   * @param pwd
+   *          The password to us in saving the certificate.
+   * @param dn
+   *          The dn string used as the certificate subject.
+   * @param validity
+   *          The validity of the certificate in days.
+   * @throws KeyStoreException
+   *           If the self-signed certificate cannot be generated.
+   */
+  public static void generateSelfSignedCertificate(KeyStore ks, String ksType,
+      String ksPath, String alias, char[] pwd, String dn, int validity)
+      throws KeyStoreException
+  {
+    IMPL.generateSelfSignedCertificate(ks, ksType, ksPath, alias, pwd, dn,
+        validity);
+  }
+
+
+
+  /**
+   * Sun 5 JDK platform class.
+   */
+  private static class Sun5PlatformIMPL extends PlatformIMPL
+  {
+    // normalize method.
+    private static final Method NORMALIZE;
+    // Normalized form method.
+    private static final Object FORM_NFKC;
+
+    static
+    {
+      Method normalize = null;
+      Object formNFKC = null;
+      try
+      {
+        Class<?> normalizer = Class.forName("sun.text.Normalizer");
+        formNFKC = normalizer.getField("DECOMP_COMPAT").get(null);
+        Class<?> normalizerForm = Class.forName("sun.text.Normalizer$Mode");
+        normalize = normalizer.getMethod("normalize", String.class,
+            normalizerForm, Integer.TYPE);
+      }
+      catch (Exception ex)
+      {
         // Do not use Normalizer. The values are already set to null.
-        }
+      }
       NORMALIZE = normalize;
       FORM_NFKC = formNFKC;
-     }
+    }
 
 
-      @Override
-      public void normalize(StringBuilder buffer) {
-        try {
-          String normal =
-               (String) NORMALIZE.invoke(null, buffer.toString(), FORM_NFKC,0);
-          buffer.replace(0,buffer.length(),normal);
-        }
-        catch(Exception ex) {
-          //Don't do anything. buffer should be used.
-        }
-      }
-   }
-
-    /**
-     * Default platform class.
-     */
-     private static class DefaultPlatformIMPL extends PlatformIMPL {
-       //normalize method.
-      private static final Method NORMALIZE;
-      //Normalized form method.
-      private static final Object FORM_NFKC;
-
-      static {
-
-        Method normalize = null;
-        Object formNFKC = null;
-        try {
-          Class<?> normalizer = Class.forName("java.text.Normalizer");
-          Class<?> normalizerForm = Class.forName("java.text.Normalizer$Form");
-          normalize = normalizer.getMethod("normalize", CharSequence.class,
-                normalizerForm);
-          formNFKC = normalizerForm.getField("NFKD").get(null);
-        }
-        catch (Exception ex) {
-        // Do not use Normalizer. The values are already set to null.
-        }
-        NORMALIZE = normalize;
-        FORM_NFKC = formNFKC;
-     }
-
-
-      @Override
-      public void normalize(StringBuilder buffer) {
-        try {
-          String normal = (String) NORMALIZE.invoke(null, buffer, FORM_NFKC);
-          buffer.replace(0,buffer.length(),normal);
-        }
-        catch(Exception ex) {
-          //Don't do anything. buffer should be used.
-        }
-      }
-   }
-
-   /**
-    * IBM JDK 5 platform class.
-    */
-   private static class IBM5PlatformIMPL extends PlatformIMPL {
 
     @Override
-    public void normalize(StringBuilder buffer) {
-      //No implementation.
+    public void normalize(StringBuilder buffer)
+    {
+      try
+      {
+        String normal = (String) NORMALIZE.invoke(null, buffer.toString(),
+            FORM_NFKC, 0);
+        buffer.replace(0, buffer.length(), normal);
+      }
+      catch (Exception ex)
+      {
+        // Don't do anything. buffer should be used.
+      }
     }
-   }
+  }
 
-   /**
-    * Normalize the specified buffer.
-    *
-    * @param buffer The buffer to normalize.
-    */
-   public static void normalize(StringBuilder buffer) {
-     IMPL.normalize(buffer);
-   }
 
-   /**
-    * Test if a platform java vendor property starts with the specified
-    * vendor string.
-    *
-    * @param vendor The vendor to check for.
-    * @return {@code true} if the java vendor starts with the specified vendor
-    *         string.
-    */
-   public static boolean isVendor(String vendor) {
-     String javaVendor = System.getProperty("java.vendor");
-     return javaVendor.startsWith(vendor);
-   }
+
+  /**
+   * Default platform class.
+   */
+  private static class DefaultPlatformIMPL extends PlatformIMPL
+  {
+    // normalize method.
+    private static final Method NORMALIZE;
+    // Normalized form method.
+    private static final Object FORM_NFKC;
+
+    static
+    {
+
+      Method normalize = null;
+      Object formNFKC = null;
+      try
+      {
+        Class<?> normalizer = Class.forName("java.text.Normalizer");
+        Class<?> normalizerForm = Class.forName("java.text.Normalizer$Form");
+        normalize = normalizer.getMethod("normalize", CharSequence.class,
+            normalizerForm);
+        formNFKC = normalizerForm.getField("NFKD").get(null);
+      }
+      catch (Exception ex)
+      {
+        // Do not use Normalizer. The values are already set to null.
+      }
+      NORMALIZE = normalize;
+      FORM_NFKC = formNFKC;
+    }
+
+
+
+    @Override
+    public void normalize(StringBuilder buffer)
+    {
+      try
+      {
+        String normal = (String) NORMALIZE.invoke(null, buffer, FORM_NFKC);
+        buffer.replace(0, buffer.length(), normal);
+      }
+      catch (Exception ex)
+      {
+        // Don't do anything. buffer should be used.
+      }
+    }
+  }
+
+
+
+  /**
+   * IBM JDK 5 platform class.
+   */
+  private static class IBM5PlatformIMPL extends PlatformIMPL
+  {
+
+    @Override
+    public void normalize(StringBuilder buffer)
+    {
+      // No implementation.
+    }
+  }
+
+
+
+  /**
+   * Normalize the specified buffer.
+   *
+   * @param buffer
+   *          The buffer to normalize.
+   */
+  public static void normalize(StringBuilder buffer)
+  {
+    IMPL.normalize(buffer);
+  }
+
+
+
+  /**
+   * Test if a platform java vendor property starts with the specified vendor
+   * string.
+   *
+   * @param vendor
+   *          The vendor to check for.
+   * @return {@code true} if the java vendor starts with the specified vendor
+   *         string.
+   */
+  public static boolean isVendor(String vendor)
+  {
+    String javaVendor = System.getProperty("java.vendor");
+    return javaVendor.startsWith(vendor);
+  }
 }
-

--
Gitblit v1.10.0