SignatureSpi.java revision 1104
2N/A * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 2N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 2N/A * This code is free software; you can redistribute it and/or modify it 2N/A * under the terms of the GNU General Public License version 2 only, as 2N/A * published by the Free Software Foundation. Sun designates this 2N/A * particular file as subject to the "Classpath" exception as provided 2N/A * by Sun in the LICENSE file that accompanied this code. 2N/A * This code is distributed in the hope that it will be useful, but WITHOUT 2N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 2N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 2N/A * version 2 for more details (a copy is included in the LICENSE file that 2N/A * accompanied this code). 2N/A * You should have received a copy of the GNU General Public License version 2N/A * 2 along with this work; if not, write to the Free Software Foundation, 2N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2N/A * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 2N/A * CA 95054 USA or visit www.sun.com if you need additional information or 2N/A * have any questions. 2N/A * This class defines the <i>Service Provider Interface</i> (<b>SPI</b>) 2N/A * for the <code>Signature</code> 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. * <p> 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 Benjamin Renaud * Application-specified source of randomness. * Initializes this signature object with the specified * public key for verification operations. * @param publicKey the public key of the identity whose signature is * @exception InvalidKeyException if the key is improperly * encoded, parameters are missing, and so on. * Initializes this signature object with the specified * private key for signing operations. * @param privateKey the private key of the identity whose signature * @exception InvalidKeyException if the key is improperly * encoded, parameters are missing, and so on. * Initializes this signature object with the specified * private key and source of randomness for signing operations. * <p>This concrete method has been added to this previously-defined * abstract class. (For backwards compatibility, it cannot be abstract.) * @param privateKey the private key of the identity whose signature * @param random the source of randomness * @exception InvalidKeyException if the key is improperly * encoded, parameters are missing, and so on. * Updates the data to be signed or verified * using the specified byte. * @param b the byte to use for the update. * @exception SignatureException if the engine is not initialized * Updates the data to be signed or verified, using the * specified array of bytes, starting at the specified offset. * @param b the array of bytes * @param off the offset to start from in the array of bytes * @param len the number of bytes to use, starting at offset * @exception SignatureException if the engine is not initialized * Updates the data to be signed or verified using the specified * ByteBuffer. Processes the <code>data.remaining()</code> bytes * starting at at <code>data.position()</code>. * Upon return, the buffer's position will be equal to its limit; * its limit will not have changed. * @param input the ByteBuffer // is specified to only occur when the engine is not initialized * Returns the signature bytes of all the data * The format of the signature depends on the underlying * @return the signature bytes of the signing operation's result. * @exception SignatureException if the engine is not * initialized properly or if this signature algorithm is unable to * process the input data provided. * Finishes this signature operation and stores the resulting signature * bytes in the provided buffer <code>outbuf</code>, starting at * The format of the signature depends on the underlying * <p>The signature implementation is reset to its initial state * (the state it was in after a call to one of the * <code>engineInitSign</code> methods) * and can be reused to generate further signatures with the same private * This method should be abstract, but we leave it concrete for * binary compatibility. Knowledgeable providers should override this * @param outbuf buffer for the signature result. * @param offset offset into <code>outbuf</code> where the signature is * @param len number of bytes within <code>outbuf</code> allotted for the * Both this default implementation and the SUN provider do not * return partial digests. If the value of this parameter is less * than the actual signature length, this method will throw a * This parameter is ignored if its value is greater than or equal to * the actual signature length. * @return the number of bytes placed into <code>outbuf</code> * @exception SignatureException if the engine is not * initialized properly, if this signature algorithm is unable to * process the input data provided, or if <code>len</code> is less * than the actual signature length. (
"partial signatures not returned");
(
"insufficient space in the output buffer to store the " * Verifies the passed-in signature. * @param sigBytes the signature bytes to be verified. * @return true if the signature was verified, false if not. * @exception SignatureException if the engine is not * initialized properly, the passed-in signature is improperly * encoded or of the wrong type, if this signature algorithm is unable to * process the input data provided, etc. * Verifies the passed-in signature in the specified array * of bytes, starting at the specified offset. * <p> Note: Subclasses should overwrite the default implementation. * @param sigBytes the signature bytes to be verified. * @param offset the offset to start from in the array of bytes. * @param length the number of bytes to use, starting at offset. * @return true if the signature was verified, false if not. * @exception SignatureException if the engine is not * initialized properly, the passed-in signature is improperly * encoded or of the wrong type, if this signature algorithm is unable to * process the input data provided, etc. * 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 * @param param the string identifier of the parameter. * @param value the parameter value. * @exception InvalidParameterException if <code>param</code> 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 {@link * #engineSetParameter(java.security.spec.AlgorithmParameterSpec) * <p>This method is overridden by providers to initialize * this signature engine with the specified parameter set. * @param params the parameters * @exception UnsupportedOperationException if this method is not * overridden by a provider * @exception InvalidAlgorithmParameterException if this method is * overridden by a provider and the given parameters * are inappropriate for this signature engine * <p>This method is overridden by providers to return the * parameters used with this signature engine, or null * if this signature engine does not use any parameters. * <p>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. * @return the parameters used with this signature engine, or null if this * signature engine does not use any parameters * @exception UnsupportedOperationException if this method is * not overridden by a provider * 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 * @param param the string name of the parameter. * @return the object that represents the parameter value, or null if * @exception InvalidParameterException if <code>param</code> is an * invalid parameter for this engine, or another exception occurs while * trying to get this parameter. * Returns a clone if the implementation is cloneable. * @return a clone if the implementation is cloneable. * @exception CloneNotSupportedException if this is called * on an implementation that does not support <code>Cloneable</code>.