summaryrefslogtreecommitdiff
path: root/java/security/SignatureSpi.java
diff options
context:
space:
mode:
authorAaron M. Renn <arenn@urbanophile.com>1999-07-18 21:39:52 +0000
committerAaron M. Renn <arenn@urbanophile.com>1999-07-18 21:39:52 +0000
commit9c401cddf07afe7340148ba626a7a7a5dbb0cf74 (patch)
treea22eaa5802e621bb2d8b7c6ffeffe890d18017ac /java/security/SignatureSpi.java
parent11a56217114c8a391aa3d8bd274df8553d03633f (diff)
downloadclasspath-9c401cddf07afe7340148ba626a7a7a5dbb0cf74.tar.gz
Initial checking of Mark Benvenuto's security code
Diffstat (limited to 'java/security/SignatureSpi.java')
-rw-r--r--java/security/SignatureSpi.java240
1 files changed, 240 insertions, 0 deletions
diff --git a/java/security/SignatureSpi.java b/java/security/SignatureSpi.java
new file mode 100644
index 000000000..db7ecc98f
--- /dev/null
+++ b/java/security/SignatureSpi.java
@@ -0,0 +1,240 @@
+/* SignatureSpi.java --- Signature Service Provider Interface
+
+ Copyright (c) 1999 by Free Software Foundation, Inc.
+ Written by Mark Benvenuto <ivymccough@worldnet.att.net>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation, version 2. (see COPYING.LIB)
+
+ This program 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 this program; if not, write to the Free Software Foundation
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. */
+
+package java.security;
+import java.security.spec.AlgorithmParameterSpec;
+
+/**
+ SignatureSpi defines the Service Provider Interface (SPI)
+ for the Signature class. The signature class provides an
+ interface to a digital signature algorithm. Digital signatures
+ are used for authentication and integrity of data.
+
+ @author Mark Benvenuto <ivymccough@worldnet.att.net>
+
+ @since JDK 1.2
+*/
+public abstract class SignatureSpi
+{
+
+/**
+ Source of randomness
+*/
+protected SecureRandom appRandom;
+
+/**
+ Creates a new instance of SignatureSpi.
+*/
+public SignatureSpi()
+{
+ appRandom = null;
+}
+
+/**
+ Initializes this class with the public key for
+ verification purposes.
+
+ @param publicKey the public key to verify with
+
+ @throws InvalidKeyException invalid key
+*/
+protected abstract void engineInitVerify(PublicKey publicKey)
+ throws InvalidKeyException;
+
+/**
+ Initializes this class with the private key for
+ signing purposes.
+
+ @param privateKey the private key to sign with
+
+ @throws InvalidKeyException invalid key
+*/
+protected abstract void engineInitSign(PrivateKey privateKey)
+ throws InvalidKeyException;
+
+/**
+ Initializes this class with the private key and source
+ of randomness for signing purposes.
+
+ This cannot be abstract backward compatibility reasons
+
+ @param privateKey the private key to sign with
+ @param random Source of randomness
+
+ @throws InvalidKeyException invalid key
+
+ @since JDK 1.2
+*/
+protected void engineInitSign(PrivateKey privateKey, SecureRandom random)
+ throws InvalidKeyException
+{
+ appRandom = random;
+ engineInitSign( privateKey );
+}
+
+/**
+ Updates the data to be signed or verified with the specified
+ byte.
+
+ @param b byte to update with
+
+ @throws SignatureException Engine not properly initialized
+*/
+protected abstract void engineUpdate(byte b)
+ throws SignatureException;
+
+/**
+ Updates the data to be signed or verified with the specified
+ bytes.
+
+ @param b array of bytes
+ @param off the offset to start at in the array
+ @param len the length of the bytes to use in the array
+
+ @throws SignatureException engine not properly initialized
+*/
+protected abstract void engineUpdate(byte[] b, int off, int len)
+ throws SignatureException;
+
+/**
+ Returns the signature bytes of all the data fed to this class.
+ The format of the output depends on the underlying signature
+ algorithm.
+
+ @return the signature
+
+ @throws SignatureException engine not properly initialized
+*/
+protected abstract byte[] engineSign() throws SignatureException;
+
+/**
+ Generates signature bytes of all the data fed to this class
+ and outputs it to the passed array. The format of the
+ output depends on the underlying signature algorithm.
+
+ This cannot be abstract backward compatibility reasons.
+ After calling this method, the signature is reset to its
+ initial state and can be used to generate additional
+ signatures.
+
+ @param outbuff array of bytes
+ @param offset the offset to start at in the array
+ @param len the length of the bytes to put into the array.
+ Neither this method or the GNU provider will
+ return partial digests. If len is less than the
+ signature length, this method will throw
+ SignatureException. If it is greater than or equal
+ then it is ignored.
+
+ @return number of bytes in outbuf
+
+ @throws SignatureException engine not properly initialized
+
+ @since JDK 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 signature.
+
+ @param sigBytes the signature bytes to verify
+
+ @return true if verified, false otherwise
+
+ @throws SignatureException engine not properly initialized
+ or wrong signature
+*/
+protected abstract boolean engineVerify(byte[] sigBytes)
+ throws SignatureException;
+
+/**
+ Sets the specified algorithm parameter to the specified value.
+
+ @param param parameter name
+ @param value parameter value
+
+ @throws InvalidParameterException invalid parameter, parameter
+ already set and cannot set again, a security exception,
+ etc.
+
+ @deprecated use the other setParameter
+*/
+protected abstract void engineSetParameter(String param, Object value)
+ throws InvalidParameterException;
+
+/**
+ Sets the signature engine with the specified
+ AlgorithmParameterSpec;
+
+ This cannot be abstract backward compatibility reasons
+ By default this always throws UnsupportedOperationException
+ if not overridden;
+
+ @param params the parameters
+
+ @throws InvalidParameterException invalid parameter, parameter
+ already set and cannot set again, a security exception,
+ etc.
+*/
+protected void engineSetParameter(AlgorithmParameterSpec params)
+ throws InvalidAlgorithmParameterException
+{
+ throw new UnsupportedOperationException();
+}
+
+/**
+ Gets the value for the specified algorithm parameter.
+
+ @param param parameter name
+
+ @return parameter value
+
+ @throws InvalidParameterException invalid parameter
+
+ @deprecated use the other getParameter
+*/
+protected abstract Object engineGetParameter(String param)
+ throws InvalidParameterException;
+
+/**
+ Returns a clone if cloneable.
+
+ @return a clone if cloneable.
+
+ @throws CloneNotSupportedException if the implementation does
+ not support cloning
+*/
+public Object clone()
+ throws CloneNotSupportedException
+{
+ throw new CloneNotSupportedException();
+}
+
+}
+