You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by hi...@apache.org on 2006/08/25 16:00:08 UTC

svn commit: r436802 - /incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/

Author: hindessm
Date: Fri Aug 25 07:00:07 2006
New Revision: 436802

URL: http://svn.apache.org/viewvc?rev=436802&view=rev
Log:
Added code from "[#HARMONY-1282] JarSigner - first code.  Files with stubs".

Added:
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/ArgParser.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/FileNameGenerator.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSParameters.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSSigner.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSVerifier.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JarSignerException.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/Main.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/TimeStampGenerator.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/UserInteractor.java   (with props)

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/ArgParser.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/ArgParser.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/ArgParser.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/ArgParser.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,322 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.Provider;
+import java.security.Security;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+
+/**
+ * The class to parse the program arguments. 
+ */
+public class ArgParser {
+    // TODO
+    // options names to compare to //
+    final static String sVerify = "-verify";
+
+    final static String sKeyStore = "-keystore";
+    
+    final static String sStoreType = "-storetype";
+    
+    final static String sStorePass = "-storepass";
+    
+    final static String sKeyPass = "-keypass";
+    
+    final static String sSigFile = "-sigfile";
+    
+    final static String sSignedJAR = "-signedjar";
+    
+    final static String sCerts = "-certs";
+    
+    final static String sVerbose = "-verbose";
+    
+    final static String sInternalSF = "-internalsf";
+    
+    final static String sSectionsOnly = "-sectionsonly";
+    
+    final static String sProvider = "-provider";
+    
+    final static String sProviderName = "-providername";
+
+    final static String sCertProvider = "-certprovider";
+    
+    final static String sCertProviderName = "-certprovidername";
+
+    final static String sSigProvider = "-sigprovider";
+    
+    final static String sSigProviderName = "-sigprovidername";
+
+    final static String sKSProvider = "-ksprovider";
+    
+    final static String sKSProviderName = "-ksprovidername";
+    
+    final static String sTSA = "-tsa";
+    
+    final static String sTSAcert = "-tsacert";
+    
+    final static String sAltSigner = "-altsigner";
+    
+    final static String sAltSignerPath = "-altsignerpath";
+    
+    /**
+     * @param args
+     * @param param
+     * @return new instance of JSParameters if param is null or updated param
+     *         object if it is non-null. Returns null if args is null or
+     *         zero-sized, an unknown option is found or an expected option
+     *         value is not given or not of an expected type. If null is
+     *         returned, the param object contents is not defined.
+     * @throws JarSignerException  
+     * @throws IOException 
+     * @throws NoSuchAlgorithmException 
+     * @throws UnrecoverableKeyException 
+     * @throws KeyStoreException 
+     * @throws NoSuchProviderException 
+     * @throws CertificateException 
+     */
+    static JSParameters parseArgs(String[] args, JSParameters param)
+            throws JarSignerException, KeyStoreException,
+            UnrecoverableKeyException, NoSuchAlgorithmException, IOException,
+            CertificateException, NoSuchProviderException {
+        if (args == null){
+            return null;
+        }
+        if (args.length == 0){
+            return null;
+        }
+        if (param == null){
+            param = new JSParameters();
+        } else {
+            // clean param
+            param.setDefault();
+        }
+        
+        try {
+            for (int i = 0; i < args.length; i++) {
+                if (args[i].equalsIgnoreCase(sVerify)) {
+                    param.setVerify(true);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sKeyStore)) {
+                    param.setStoreURI(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sStoreType)) {
+                    param.setStoreType(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sStorePass)) {
+                    param.setStorePass(args[++i].toCharArray());
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sKeyPass)) {
+                    param.setKeyPass(args[++i].toCharArray());
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sSigFile)) {
+                    param.setSigFileName(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sSignedJAR)) {
+                    param.setSignedJARName(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sCerts)) {
+                    param.setCerts(true);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sVerbose)) {
+                    param.setVerbose(true);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sInternalSF)) {
+                    param.setInternalSF(true);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sSectionsOnly)) {
+                    param.setSectionsOnly(true);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sProvider)) {
+                    param.setProvider(args[++i]);
+                    addProvider(args[i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sProviderName)) {
+                    param.setProviderName(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sCertProvider)) {
+                    param.setCertProvider(args[++i]);
+                    addProvider(args[i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sCertProviderName)) {
+                    param.setCertProviderName(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sSigProvider)) {
+                    param.setSigProvider(args[++i]);
+                    addProvider(args[i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sSigProviderName)) {
+                    param.setSigProviderName(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sKSProvider)) {
+                    param.setKsProvider(args[++i]);
+                    addProvider(args[i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sKSProviderName)) {
+                    param.setKsProviderName(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sTSA)) {
+                    try {
+                        // TODO: URI scheme
+                        param.setTsaURI(new URI(args[++i]));
+                    } catch (URISyntaxException e) {
+                        throw new JarSignerException("Argument " + args[i]
+                                + " is not a path or URL");
+                    }
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sTSAcert)) {
+                    param.setTsaCertAlias(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sAltSigner)) {
+                    param.setAltSigner(args[++i]);
+                    continue;
+                }
+                if (args[i].equalsIgnoreCase(sAltSignerPath)) {
+                    param.setAltSignerPath(args[++i]);
+                    continue;
+                }
+                
+                if ((param.isVerify() && i == args.length - 1)
+                        || (!param.isVerify() && i == args.length - 2)) {
+                    try {
+                        // TODO: URI scheme
+                        param.setJarURI(new URI(args[i]));
+                    } catch (URISyntaxException e) {
+                        throw new JarSignerException("Argument " + args[i]
+                                + " is not a path or URL");
+                    }
+                    continue;
+                }
+                if (!param.isVerify() && i == args.length - 1){
+                    param.setAlias(args[i]);
+                    continue;
+                }
+                
+                System.out.println("Illegal option: " + args[i]);
+                return null;
+            }
+        } catch(ArrayIndexOutOfBoundsException e){
+            // ignore the last option if its value is not provided
+        }
+        
+        // set specific provider names the same as the main provider name
+        String providerName = param.getProviderName();
+        if (providerName != null){
+            if (param.getCertProviderName() == null){
+                param.setCertProviderName(providerName);
+            }
+            if (param.getSigProviderName() == null){
+                param.setSigProviderName(providerName);
+            }
+            if (param.getKsProviderName() == null){
+                param.setKsProviderName(providerName);
+            }
+        }
+        
+        // if the store password is not given, prompt for it
+        if (param.getStorePass() == null) {
+            param.setStorePass(UserInteractor
+                    .getDataFromUser("Enter keystore password:  "));
+        }
+        
+        if (param.getAlias() == null){
+            // TODO
+        }
+        // if key password is not given, try to inplace it with store password
+        if (param.getKeyPass() == null){
+            param.setKeyPass(tryStorePassAsKeyPass(param.getKeyStore(), param
+                    .getAlias(), param.getStorePass()));
+        }
+        
+        return param;
+    }
+    
+    
+    // Method tries to get the key, associated with alias, using the storePass.
+    // If it can be recovered using the password, storePass is returned,
+    // otherwise - the password is prompted for. Another attempt to recover the
+    // key with entered password. If it is ok, it is returned, otherwise
+    // UnrecoverableKeyException is thrown.
+    private static char[] tryStorePassAsKeyPass(KeyStore keyStore,
+            String alias, char[] storePass) throws KeyStoreException,
+            IOException, UnrecoverableKeyException, NoSuchAlgorithmException {
+        try {
+            // try to get a key with keystore password
+            // if succeed set key password same as that for keystore
+            keyStore.getKey(alias, storePass);
+
+            // will not come here if exception is thrown
+            return storePass;
+        } catch (UnrecoverableKeyException e) {
+            // if key password is not equal to store password, ask for it.
+            char[] keyPass = UserInteractor
+                    .getDataFromUser("Enter key password for <" + alias + ">: ");
+            // if the new password is incorrect an exception will be thrown
+            try {
+                keyStore.getKey(alias, keyPass);
+            } catch (NoSuchAlgorithmException nsae) {
+                throw new NoSuchAlgorithmException(
+                        "Cannot find the algorithm to recover the key. ", e);
+            }
+            return keyPass;
+        } catch (NoSuchAlgorithmException e) {
+            throw new NoSuchAlgorithmException(
+                    "Cannot find the algorithm to recover the key. ", e);
+        }
+    }
+    
+    // method for adding providers to java.security.Security
+    static int addProvider(String provider) throws JarSignerException {
+        try {
+            return Security.addProvider(Class.forName(provider).asSubclass(
+                    Provider.class).newInstance());
+        } catch (Exception e) {
+            throw new JarSignerException("Failed to load the provider "
+                    + provider, e);
+        }
+    }
+
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/ArgParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/FileNameGenerator.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/FileNameGenerator.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/FileNameGenerator.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/FileNameGenerator.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+import java.util.Arrays;
+
+/**
+ * File to build the base file names for .SF and .DSA files.
+ */
+public class FileNameGenerator {
+    private static final int fileNameLength = 8;
+    
+    /**
+     * Generates the file name for .SF and .DSA files using
+     * param.getSigFileName() or alias given on the command line.
+     * If the alias 
+     * 
+     * @param param
+     * @return
+     */
+    static String generateFileName(JSParameters param){
+        if (param.getSigFileName() != null){
+            return convertString(param.getSigFileName().toUpperCase());
+        }
+        String alias = param.getAlias(); 
+        if (alias == null){
+            throw new NullPointerException("Alias is null.");
+        }
+        int length = alias.length();
+        if (length > fileNameLength){
+            alias = alias.substring(0, 7);
+            length = alias.length();
+        } 
+        
+        alias = convertString(alias);
+        if (length == fileNameLength){
+            return alias.toUpperCase();
+        } else {
+            char[] remainder = new char[fileNameLength - length];
+            Arrays.fill(remainder, '_');
+            return alias + new String(remainder);
+        }
+    }
+    
+    // Finds disallowed letters in input String and converts
+    // them to underscores ("_"). Allowed characters are letters, digits,
+    // hyphens and underscores. If no changes are made the input string is
+    // returned.
+    private static String convertString(String input){
+        char [] chars = input.toCharArray();
+        boolean isChanged = false; 
+        for (int i = 0; i < chars.length; i++){
+            char current = chars[i];
+            if ((current >= 'A' && current<= 'Z') || 
+                    (current >= 'a' && current <= 'z') ||
+                    (current >= '0' && current <= '9') ||
+                    current == '-' || current == '_'){
+                continue;
+            }
+            
+            isChanged = true;
+            chars[i] = '_';
+        }
+        if (isChanged){
+            return new String(chars);
+        } else {
+            return input;
+        }
+    }
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/FileNameGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSParameters.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSParameters.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSParameters.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSParameters.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,529 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+import java.io.File;
+import java.net.URI;
+import java.security.KeyStore;
+
+/**
+ * The class encapsulates paramaters for jarsigner most of which are ususally
+ * given in command line.
+ */
+public class JSParameters {
+    /**
+     * Default location of the keystore. Used when the value is not supplied by
+     * the user.
+     */
+    public static final String defaultKeystorePath = System
+            .getProperty("user.home")
+            + File.separator + ".keystore";
+    // the keystore to work with
+    private KeyStore keyStore;
+    
+    // JAR file URL 
+    private URI jarURI;
+
+    // alias to access an entry in keystore
+    private String alias;
+
+    // should the jar be verified (if it is false, JAR is to be signed)
+    private boolean isVerify;
+    
+    // URL of the keystore
+    private String storeURI;
+
+    // type of the store. Default type is set in java.security file.
+    private String storeType = KeyStore.getDefaultType();
+
+    // password to access the store
+    private char[] storePass;
+
+    // password to access the key entry
+    private char[] keyPass;
+
+    // file name to be used when generating .SF and .DSA files
+    private String sigFileName;
+    
+    // file name to be used for signed JAR
+    private String signedJARName;
+    
+    // if used with -verify and -verbose options, makes jarsigner print
+    // certificate info
+    private boolean isCerts;
+    
+    // should the program be "verbose" or not
+    private boolean isVerbose;
+    
+    // should the .DSA file contain .SF file in it or not
+    private boolean isInternalSF;
+    
+    // if set to true, .SF file will not contain hash of the whole manifest file
+    private boolean isSectionsOnly;
+    
+    // class name of the provider to use if specific provider is not given
+    private String provider;
+    
+    // name of the provider to use if specific provider is not given
+    private String providerName;
+
+    // class name of the provider to work with certificates  
+    private String certProvider;
+
+    // name of the provider to work with certificates  
+    private String certProviderName;
+
+    // class name of the provider to work with signatures
+    private String sigProvider;
+
+    // name of the provider to work with signatures
+    private String sigProviderName;
+
+    // class name of the provider to work with keystore
+    private String ksProvider;
+
+    // name of the provider to work with keystore
+    private String ksProviderName;
+
+    // timestamp authority URL
+    private URI tsaURI;
+    
+    // the alias identifiing the TSA's certificate
+    private String tsaCertAlias;
+
+    // alternative signer class name
+    private String altSigner;
+    
+    // classpath to alternative signer package 
+    private String altSignerPath; 
+    
+    // topic to print help on
+    private String helpTopic;
+
+    
+    // set the fields of the JSParameters object to default values
+    void setDefault(){
+        keyStore = null;
+        jarURI = null;        
+        alias = null;
+        storeURI = null;        
+        storeType = KeyStore.getDefaultType();
+        storePass = null;        
+        keyPass = null;
+        sigFileName = null;        
+        signedJARName = null;
+        isVerify = false;
+        isCerts = false;
+        isVerbose = false;
+        isInternalSF = false;
+        isSectionsOnly = false;
+        provider = null;        
+        providerName = null;
+        certProvider = null;        
+        certProviderName = null;        
+        sigProvider = null;
+        sigProviderName = null;        
+        ksProvider = null;        
+        ksProviderName = null;
+        tsaURI = null;        
+        tsaCertAlias = null;        
+        altSigner = null;        
+        altSignerPath = null;
+        helpTopic = null;        
+    }
+    
+    // Getters and setters down here
+    /**
+     * @param alias
+     */
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    /**
+     * @param altSigner
+     */
+    public void setAltSigner(String altSigner) {
+        this.altSigner = altSigner;
+    }
+
+    /**
+     * @param altSignerPath
+     */
+    public void setAltSignerPath(String altSignerPath) {
+        this.altSignerPath = altSignerPath;
+    }
+
+    /**
+     * @param certProvider
+     */
+    public void setCertProvider(String certProvider) {
+        this.certProvider = certProvider;
+    }
+
+    /**
+     * @param certProviderName
+     */
+    public void setCertProviderName(String certProviderName) {
+        this.certProviderName = certProviderName;
+    }
+
+    /**
+     * @param helpTopic
+     */
+    public void setHelpTopic(String helpTopic) {
+        this.helpTopic = helpTopic;
+    }
+
+    /**
+     * @param isCerts
+     */
+    public void setCerts(boolean isCerts) {
+        this.isCerts = isCerts;
+    }
+
+    /**
+     * @param isInternalSF
+     */
+    public void setInternalSF(boolean isInternalSF) {
+        this.isInternalSF = isInternalSF;
+    }
+
+    /**
+     * @param isSectionsOnly
+     */
+    public void setSectionsOnly(boolean isSectionsOnly) {
+        this.isSectionsOnly = isSectionsOnly;
+    }
+
+    /**
+     * @param isVerbose
+     */
+    public void setVerbose(boolean isVerbose) {
+        this.isVerbose = isVerbose;
+    }
+
+    /**
+     * @param isVerify
+     */
+    public void setVerify(boolean isVerify) {
+        this.isVerify = isVerify;
+    }
+
+    /**
+     * @param jarURI
+     */
+    public void setJarURI(URI jarURI) {
+        this.jarURI = jarURI;
+    }
+
+    /**
+     * @param keyPass
+     */
+    public void setKeyPass(char[] keyPass) {
+        this.keyPass = keyPass;
+    }
+
+    /**
+     * @param keyStore
+     */
+    void setKeyStore(KeyStore keyStore) {
+        this.keyStore = keyStore;
+    }
+
+    /**
+     * @param ksProvider
+     */
+    public void setKsProvider(String ksProvider) {
+        this.ksProvider = ksProvider;
+    }
+
+    /**
+     * @param ksProviderName
+     */
+    public void setKsProviderName(String ksProviderName) {
+        this.ksProviderName = ksProviderName;
+    }
+
+    /**
+     * @param provider
+     */
+    public void setProvider(String provider) {
+        this.provider = provider;
+    }
+
+    /**
+     * @param providerName
+     */
+    public void setProviderName(String providerName) {
+        this.providerName = providerName;
+    }
+
+    /**
+     * @param sigFileName
+     */
+    public void setSigFileName(String sigFileName) {
+        this.sigFileName = sigFileName;
+    }
+
+    /**
+     * @param signedJARName
+     */
+    public void setSignedJARName(String signedJARName) {
+        this.signedJARName = signedJARName;
+    }
+
+    /**
+     * @param sigProvider
+     */
+    public void setSigProvider(String sigProvider) {
+        this.sigProvider = sigProvider;
+    }
+
+    /**
+     * @param sigProviderName
+     */
+    public void setSigProviderName(String sigProviderName) {
+        this.sigProviderName = sigProviderName;
+    }
+
+    /**
+     * @param storePass
+     */
+    public void setStorePass(char[] storePass) {
+        this.storePass = storePass;
+    }
+
+    /**
+     * @param storeType
+     */
+    public void setStoreType(String storeType) {
+        this.storeType = storeType;
+    }
+
+    /**
+     * @param storeURI
+     */
+    public void setStoreURI(String storeURI) {
+        this.storeURI = storeURI;
+    }
+
+    /**
+     * @param tsaCertAlias
+     */
+    public void setTsaCertAlias(String tsaCertAlias) {
+        this.tsaCertAlias = tsaCertAlias;
+    }
+
+    /**
+     * @param tsaURI
+     */
+    public void setTsaURI(URI tsaURI) {
+        this.tsaURI = tsaURI;
+    }
+
+    /**
+     * @return
+     */
+    String getAlias() {
+        return alias;
+    }
+
+    /**
+     * @return
+     */
+    String getAltSigner() {
+        return altSigner;
+    }
+
+    /**
+     * @return
+     */
+    String getAltSignerPath() {
+        return altSignerPath;
+    }
+
+    /**
+     * @return
+     */
+    String getCertProvider() {
+        return certProvider;
+    }
+
+    /**
+     * @return
+     */
+    String getCertProviderName() {
+        return certProviderName;
+    }
+
+    /**
+     * @return
+     */
+    String getHelpTopic() {
+        return helpTopic;
+    }
+
+    /**
+     * @return
+     */
+    boolean isCerts() {
+        return isCerts;
+    }
+
+    /**
+     * @return
+     */
+    boolean isInternalSF() {
+        return isInternalSF;
+    }
+
+    /**
+     * @return
+     */
+    boolean isSectionsOnly() {
+        return isSectionsOnly;
+    }
+
+    /**
+     * @return
+     */
+    boolean isVerbose() {
+        return isVerbose;
+    }
+
+    /**
+     * @return
+     */
+    boolean isVerify() {
+        return isVerify;
+    }
+
+    /**
+     * @return
+     */
+    URI getJarURI() {
+        return jarURI;
+    }
+
+    /**
+     * @return
+     */
+    char[] getKeyPass() {
+        return keyPass;
+    }
+
+    /**
+     * @return
+     */
+    KeyStore getKeyStore(){ 
+        // FIXME: use KeyStoreLoaderSaver
+        return keyStore;
+    }
+
+    /**
+     * @return
+     */
+    String getKsProvider() {
+        return ksProvider;
+    }
+
+    /**
+     * @return
+     */
+    String getKsProviderName() {
+        return ksProviderName;
+    }
+
+    /**
+     * @return
+     */
+    String getProvider() {
+        return provider;
+    }
+
+    /**
+     * @return
+     */
+    String getProviderName() {
+        return providerName;
+    }
+
+    /**
+     * @return
+     */
+    String getSigFileName() {
+        return sigFileName;
+    }
+
+    /**
+     * @return
+     */
+    String getSignedJARName() {
+        return signedJARName;
+    }
+
+    /**
+     * @return
+     */
+    String getSigProvider() {
+        return sigProvider;
+    }
+
+    /**
+     * @return
+     */
+    String getSigProviderName() {
+        return sigProviderName;
+    }
+
+    /**
+     * @return
+     */
+    char[] getStorePass() {
+        return storePass;
+    }
+
+    /**
+     * @return
+     */
+    String getStoreType() {
+        return storeType;
+    }
+
+    /**
+     * @return
+     */
+    String getStoreURI() {
+        return storeURI;
+    }
+
+    /**
+     * @return
+     */
+    String getTsaCertAlias() {
+        return tsaCertAlias;
+    }
+
+    /**
+     * @return
+     */
+    URI getTsaURI() {
+        return tsaURI;
+    }
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSParameters.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSSigner.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSSigner.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSSigner.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSSigner.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+/**
+ * Class to sign JAR files.
+ */
+public class JSSigner {
+    // TODO
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSSigner.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSVerifier.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSVerifier.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSVerifier.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSVerifier.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+/**
+ * Class to verify JAR files.
+ */
+public class JSVerifier {
+    // TODO
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JSVerifier.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JarSignerException.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JarSignerException.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JarSignerException.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JarSignerException.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+/**
+ * Class representing the exceptions specific for jarsigner. 
+ */
+public class JarSignerException extends Exception {
+    /**
+     * serial version UID.
+     */
+    private static final long serialVersionUID = 5012429301200382392L;
+
+    /**
+     * Default constructor.
+     */
+    public JarSignerException() {
+        super();
+    }
+
+    /**
+     * @param msg -
+     *            exception message to print
+     */
+    public JarSignerException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * @param msg -
+     *            exception message to print
+     * @param cause -
+     *            throwable that caused this exception to be thrown
+     */
+    public JarSignerException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
+
+    /**
+     * @param cause -
+     *            throwable that caused this exception to be thrown
+     */
+    public JarSignerException(Throwable cause) {
+        super(cause);
+    }
+
+
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/JarSignerException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/Main.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/Main.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/Main.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/Main.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+
+/**
+ * The main class that bundles command line parsing, interaction with the user,
+ * exception handling and JAR signing and verification work.
+ */
+public class Main {
+    /**
+     * Does the actual work on JAR signing and verification, based on the
+     * parameter param. If something goes wrong an exception is thrown.
+     * 
+     * @param param
+     * @throws Exception
+     */
+    static void doWork(JSParameters param) throws Exception {
+        // TODO
+    }
+    
+    /**
+     * The main method to run from another program.
+     * 
+     * @param args -
+     *            command line with options.
+     */
+    public static void run(String[] args) throws Exception {
+        // TODO
+    }
+
+    
+    /**
+     * The main method to run from command line.
+     * 
+     * @param args -
+     *            command line with options.
+     */
+    public static void main(String[] args) {
+        try {
+            run(args);
+        } catch (Exception e) {
+            // System.out.println("JarSigner error: " + e);
+            e.printStackTrace();
+        }
+    }
+
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/Main.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/TimeStampGenerator.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/TimeStampGenerator.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/TimeStampGenerator.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/TimeStampGenerator.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+/**
+ * Class to generate time stamps. 
+ */
+public class TimeStampGenerator {
+    // TODO
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/TimeStampGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/UserInteractor.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/UserInteractor.java?rev=436802&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/UserInteractor.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/UserInteractor.java Fri Aug 25 07:00:07 2006
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2006 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 org.apache.harmony.tools.jarsigner;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+/**
+ * Class to interact with user - ask for confirmations, and necessary parameters
+ * which haven't been set in the command line.
+ */
+public class UserInteractor {
+    // used to get additional data prompted
+    private static InputStreamReader in = new InputStreamReader(System.in);
+
+    // buffer for the data read
+    private static char[] readData = new char[256];
+
+    // number of symbols read
+    private static int charsRead;
+
+    // length of the "\r\n" which is added to the end of the line,
+    // when ENTER is pressed.
+    private static int newLineLength = 2;
+
+    // Prints prompt and waits the user to enter the needed data,
+    // tha data is returned.
+    static char [] getDataFromUser(String prompt) throws IOException{
+        System.out.print(prompt);
+        charsRead = in.read(readData);
+        char[] password = new char[charsRead - newLineLength];
+        System.arraycopy(readData, 0, password, 0, charsRead - newLineLength);
+        return password;
+    }
+}
+

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/tools/src/main/java/org/apache/harmony/tools/jarsigner/UserInteractor.java
------------------------------------------------------------------------------
    svn:eol-style = native