# messages.properties -- English language messages and message formats
# Copyright (C) 2006  Free Software Foundation, Inc.
#
# This file is part of GNU Classpath.
#
# GNU Classpath is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Classpath is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Classpath; see the file COPYING.  If not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA.
#
# Linking this library statically or dynamically with other modules is
# making a combined work based on this library.  Thus, the terms and
# conditions of the GNU General Public License cover the whole
# combination.
#
# As a special exception, the copyright holders of this library give you
# permission to link this library with independent modules to produce an
# executable, regardless of the license terms of these independent
# modules, and to copy and distribute the resulting executable under
# terms of your choice, provided that you also meet, for each linked
# independent module, the terms and conditions of the license of that
# module.  An independent module is a module which is not derived from
# or based on this library.  If you modify this library, you may extend
# this exception to your version of the library, but you are not
# obligated to do so.  If you do not wish to do so, delete this
# exception statement from your version.
#
# for gnu.classpath.tools.jarsigner package
#

Main.7=jarsigner: 
Main.9=jarsigner error: 
Main.70=JAR file [{0}] is NOT a file object
Main.72=JAR file [{0}] is NOT readable
#Main.85=Option '-keystore' is not defined or is an empty string, and 'user.home' is unknown
Main.85=Unable to locate a valid key store
Main.92=Enter key store password: 
Main.6=Designated alias [{0}] MUST be known to the key store in use
Main.2=\
Usage:  jarsigner [OPTION]... FILE ALIAS\n\
\ \ \ \ \ \ \ \ jarsigner -verify [OPTION]... FILE\n\
Java ARchive (JAR) file signing and verification tool.\n\
\n\
FILE is the .JAR file to sign or to verify.\n\
\n\
ALIAS must be a known Alias of a Key Entry in the designated key store.  The \
private key material associated with this Alias is used for signing FILE.  if \
ALIAS is required, but was omitted, "mykey" will be used instead.
Main.1=Please report bugs at http://www.gnu.org/software/classpath/bugs.html
Main.0=Signing options
Main.95=Designated alias [{0}] MUST be an Alias of a Key Entry
Main.97=Enter key password for <{0}>: 
Main.99=Key associated with [{0}] MUST be a private key
Main.101=Location of the key store to use.  The default value is a file-based \
scheme whose path is the file named ".keystore" in your home directory.\n\
If URL is malformed, the tool will use URL as a file-name of a key store; \
i.e. as if the protocol was "file:".
Main.102=URL
Main.104=Type of the key store to use.  If omitted, the default value is that \
of the property "keystore.type" in the security properties file.
Main.105=STORE_TYPE
Main.107=Password to unlock the key store.  If omitted, you will be prompted \
to provide a password.
Main.108=PASSWORD
Main.110=Password to unlock the Key Entry associated with ALIAS.  If omitted, \
the tool will use the same password protecting the key store.  If this fails, \
you will be prompted to provide a password.
Main.111=PASSWORD
Main.113=A literal to construct file names for both the .SF and .DSA signature \
files --which will be placed in the META-INF directory of the signed JAR.  \
Permissible characters are in the range [a-zA-Z0-9_-].\n\
If omitted, the first 8 characters of ALIAS will be used.  Characters outside \
that range will be replaced by underscores.
Main.114=NAME
Main.116=Name of the signed JAR file.  If omitted, the signed JAR will be \
named the same as FILE; i.e. the input file will be replaced with its signed \
copy.
Main.117=FILE
Main.118=Verification options
Main.120=Verify an already signed FILE.
Main.122=Use with -verbose to see more detailed information about the \
certificates of ALIAS.
Main.123=Common options
Main.125=Output more verbose messages during processing.
Main.127=Include --otherwise do not-- the .SF file in the .DSA generated file.
Main.129=Include in the .SF generated file --otherwise do not-- a header \
containing a hash of the whole manifest file.
Main.131=Fully qualified class name of a Security Provider to add to the JVM \
in-use.
Main.132=PROVIDER_CLASS_NAME
Main.133=Missing FILE argument.

JarSigner.1=\ \ signing: 
JarSigner.2=\ updating: 
JarSigner.8=\ \ \ adding: 
JarSigner.14=Jar signed.

JarVerifier.2=Jar is not signed --no signature files found.
JarVerifier.3=Jar verification failed.
JarVerifier.4=Jar partially verified --{0,numer} of {1,number} signers.
JarVerifier.7=Jar verified --{0,number} signer(s).
JarVerifier.13=Signature Block missing for {0}
JarVerifier.14=At least one SignerInfo element MUST be present in a Signature \
Block (.DSA file)
JarVerifier.16=Missing EncryptedDigest in Signature Block (.DSA file) first \
SignerInfo element

SFHelper.1=Helper is NOT finished
SFHelper.4=.SF file has NOT been generated
SFHelper.6=Unknown or unsupported private key algorithm
SFHelper.9=Helper is NOT ready
SFHelper.0=Warning: The certificate issued by {0}, for {1}, has expired as of {3,date,full} - {3,time,full}.
SFHelper.10=Helper is NOT started
SFHelper.11=Warning: The certificate issued by {0}, for {1}, is only valid after {3,date,full} - {3,time,full}.
SFHelper.14=[unknown]
SFHelper.17=[unnamed]
