/* SignatureSpi.java --- Signature Service Provider Interface Copyright (C) 1999, 2003, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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. */ package java.security; import java.security.spec.AlgorithmParameterSpec; /** *
This class defines the Service Provider Interface (SPI) for the * {@link Signature} class, which is used to provide the functionality of a * digital signature algorithm. Digital signatures are used for authentication * and integrity assurance of digital data.
* *All the abstract methods in this class must be implemented by each
* cryptographic service provider who wishes to supply the implementation of a
* particular signature algorithm.
*
* @author Mark Benvenuto Initializes this signature object with the specified private key and
* source of randomness for signing operations. This concrete method has been added to this previously-defined abstract
* class. (For backwards compatibility, it cannot be abstract.) Finishes this signature operation and stores the resulting signature
* bytes in the provided buffer The signature implementation is reset to its initial state (the state it
* was in after a call to one of the Verifies the passed-in Note: Subclasses should overwrite the default implementation. This method is overridden by providers to return the parameters used
* with this signature engine, or The returned parameters may be the same that were used to initialize
* this signature engine, or may contain a combination of default and randomly
* generated parameter values used by the underlying signature implementation
* if this signature engine requires algorithm parameters but was not
* initialized with any.outbuf
, starting at offset
*
. The format of the signature depends on the underlying signature
* scheme.engineInitSign()
methods)
* and can be reused to generate further signatures with the same private key.
* This method should be abstract, but we leave it concrete for binary
* compatibility. Knowledgeable providers should override this method.outbuf
.
* @throws SignatureException if an error occurs or len is less than the
* actual signature length.
* @since 1.2
*/
protected int engineSign(byte[] outbuf, int offset, int len)
throws SignatureException
{
byte tmp[] = engineSign();
if (tmp.length > len)
throw new SignatureException("Invalid Length");
System.arraycopy(outbuf, offset, tmp, 0, tmp.length);
return tmp.length;
}
/**
* Verifies the passed-in signature.
*
* @param sigBytes the signature bytes to be verified.
* @return true
if the signature was verified, false
* if not.
* @throws SignatureException if the engine is not initialized properly, or
* the passed-in signature is improperly encoded or of the wrong type, etc.
*/
protected abstract boolean engineVerify(byte[] sigBytes)
throws SignatureException;
/**
* signature
in the specified array of
* bytes, starting at the specified offset
.true
if the signature was verified, false
* if not.
* @throws SignatureException if the engine is not initialized properly, or
* the passed-in signature
is improperly encoded or of the wrong
* type, etc.
*/
protected boolean engineVerify(byte[] sigBytes, int offset, int length)
throws SignatureException
{
byte[] tmp = new byte[length];
System.arraycopy(sigBytes, offset, tmp, 0, length);
return engineVerify(tmp);
}
/**
* Sets the specified algorithm parameter to the specified value. This method
* supplies a general-purpose mechanism through which it is possible to set
* the various parameters of this object. A parameter may be any settable
* parameter for the algorithm, such as a parameter size, or a source of
* random bits for signature generation (if appropriate), or an indication of
* whether or not to perform a specific but optional computation. A uniform
* algorithm-specific naming scheme for each parameter is desirable but left
* unspecified at this time.
*
* @param param the string identifier of the parameter.
* @param value the parameter value.
* @throws InvalidParameterException if param
is an invalid
* parameter for this signature algorithm engine, the parameter is already set
* and cannot be set again, a security exception occurs, and so on.
* @deprecated Replaced by engineSetParameter(AlgorithmParameterSpec).
*/
protected abstract void engineSetParameter(String param, Object value)
throws InvalidParameterException;
/**
* This method is overridden by providers to initialize this signature engine
* with the specified parameter set.
*
* @param params the parameters.
* @throws UnsupportedOperationException if this method is not overridden by
* a provider.
* @throws InvalidAlgorithmParameterException if this method is overridden by
* a provider and the the given parameters are inappropriate for this
* signature engine.
*/
protected void engineSetParameter(AlgorithmParameterSpec params)
throws InvalidAlgorithmParameterException
{
throw new UnsupportedOperationException();
}
/**
* null
if this signature engine
* does not use any parameters.null
* if this signature engine does not use any parameters.
* @throws UnsupportedOperationException if this method is not overridden by
* a provider.
*/
protected AlgorithmParameters engineGetParameters()
{
throw new UnsupportedOperationException();
}
/**
* Gets the value of the specified algorithm parameter. This method supplies
* a general-purpose mechanism through which it is possible to get the various
* parameters of this object. A parameter may be any settable parameter for
* the algorithm, such as a parameter size, or a source of random bits for
* signature generation (if appropriate), or an indication of whether or not
* to perform a specific but optional computation. A uniform algorithm-specific
* naming scheme for each parameter is desirable but left unspecified at this
* time.
*
* @param param the string name of the parameter.
* @return the object that represents the parameter value, or null
* if there is none.
* @throws InvalidParameterException if param is an invalid
* parameter for this engine, or another exception occurs while trying to get
* this parameter.
* @deprecated
*/
protected abstract Object engineGetParameter(String param)
throws InvalidParameterException;
/**
* Returns a clone if the implementation is cloneable.
*
* @return a clone if the implementation is cloneable.
* @throws CloneNotSupportedException if this is called on an implementation
* that does not support {@link Cloneable}.
* @see Cloneable
*/
public Object clone() throws CloneNotSupportedException
{
throw new CloneNotSupportedException();
}
}