| /* Copyright (C) 2000 Free Software Foundation |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| package java.security; |
| |
| /** |
| * @author Tom Tromey <tromey@cygnus.com> |
| * @date February 11, 2000. |
| */ |
| |
| /** |
| * Written using on-line Java Platform 1.1 API Specification. |
| * Status: Believed complete and correct to 1.1 spec. |
| * It is known not to comply with the 1.2 spec. |
| */ |
| |
| public abstract class Signature |
| { |
| protected Signature (String name) |
| { |
| state = UNINITIALIZED; |
| this.name = name; |
| } |
| |
| public static Signature getInstance (String algorithm) |
| throws NoSuchAlgorithmException |
| { |
| String name = "Signature." + algorithm; |
| Provider[] provs = Security.getProviders (); |
| for (int i = 0; i < provs.length; ++i) |
| { |
| String val = provs[i].getProperty (name); |
| if (val != null) |
| { |
| try |
| { |
| return (Signature) Class.forName(val).newInstance (); |
| } |
| catch (Throwable _) |
| { |
| // We just ignore failures. |
| } |
| } |
| } |
| |
| throw new NoSuchAlgorithmException (algorithm); |
| } |
| |
| public static Signature getInstance (String algorithm, String provider) |
| throws NoSuchAlgorithmException, NoSuchProviderException |
| { |
| String name = "Signature." + algorithm; |
| Provider p = Security.getProvider (provider); |
| if (p == null) |
| throw new NoSuchProviderException (provider); |
| String val = p.getProperty (name); |
| if (val != null) |
| { |
| try |
| { |
| return (Signature) Class.forName(val).newInstance (); |
| } |
| catch (Throwable _) |
| { |
| // Nothing. |
| } |
| } |
| |
| throw new NoSuchAlgorithmException (algorithm); |
| } |
| |
| public final void initVerify (PublicKey publicKey) |
| throws InvalidKeyException |
| { |
| engineInitVerify (publicKey); |
| } |
| |
| public final void initSign (PrivateKey privateKey) |
| throws InvalidKeyException |
| { |
| engineInitSign (privateKey); |
| } |
| |
| public final byte[] sign () |
| throws SignatureException |
| { |
| return engineSign (); |
| } |
| |
| public final boolean verify (byte[] signature) |
| throws SignatureException |
| { |
| return engineVerify (signature); |
| } |
| |
| public final void update (byte b) |
| throws SignatureException |
| { |
| engineUpdate (b); |
| } |
| |
| public final void update (byte[] data) |
| throws SignatureException |
| { |
| engineUpdate (data, 0, data.length); |
| } |
| |
| public final void update (byte[] data, int off, int len) |
| throws SignatureException |
| { |
| engineUpdate (data, off, len); |
| } |
| |
| public final String getAlgorithm () |
| { |
| return name; |
| } |
| |
| public String toString () |
| { |
| // There is no spec for this. FIXME: this is a bad choice. |
| return name + "; state = " + state; |
| } |
| |
| public final void setParameter (String param, Object value) |
| throws InvalidParameterException |
| { |
| engineSetParameter (param, value); |
| } |
| |
| public final Object getParameter (String param) |
| throws InvalidParameterException |
| { |
| return engineGetParameter (param); |
| } |
| |
| protected abstract void engineInitVerify (PublicKey publicKey) |
| throws InvalidKeyException; |
| protected abstract void engineInitSign (PrivateKey privateKey) |
| throws InvalidKeyException; |
| protected abstract void engineUpdate (byte b) |
| throws SignatureException; |
| protected abstract void engineUpdate (byte[] b, int off, int len) |
| throws SignatureException; |
| protected abstract byte[] engineSign () |
| throws SignatureException; |
| protected abstract boolean engineVerify (byte[] sigBytes) |
| throws SignatureException; |
| protected abstract void engineSetParameter (String param, Object value) |
| throws InvalidParameterException; |
| protected abstract Object engineGetParameter (String param) |
| throws InvalidParameterException; |
| |
| public Object clone() throws CloneNotSupportedException |
| { |
| return super.clone (); |
| } |
| |
| protected static final int UNINITIALIZED = 0; |
| protected static final int SIGN = 2; |
| protected static final int VERIFY = 3; |
| |
| // Current state. |
| protected int state; |
| |
| // Name of this object. |
| private String name; |
| } |