diff options
Diffstat (limited to 'libjava/java/security/cert/Certificate.java')
-rw-r--r-- | libjava/java/security/cert/Certificate.java | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/libjava/java/security/cert/Certificate.java b/libjava/java/security/cert/Certificate.java new file mode 100644 index 0000000..2fb2a20 --- /dev/null +++ b/libjava/java/security/cert/Certificate.java @@ -0,0 +1,237 @@ +/* Certificate.java --- Certificate class + Copyright (C) 1999 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. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ + + +package java.security.cert; +import java.security.PublicKey; +import java.security.NoSuchAlgorithmException; +import java.security.InvalidKeyException; +import java.security.NoSuchProviderException; +import java.security.SignatureException; +import java.io.ObjectInputStream; +import java.io.ByteArrayInputStream; +import java.io.ObjectStreamException; + +/** + The Certificate class is an abstract class used to manage + identity certificates. An identity certificate is a + combination of a principal and a public key which is + certified by another principal. This is the puprose of + Certificate Authorities (CA). + + This class is used to manage different types of certificates + but have important common puposes. Different types of + certificates like X.509 and OpenPGP share general certificate + functions (like encoding and verifying) and information like + public keys. + + X.509, OpenPGP, and SDSI can be implemented by subclassing this + class even though they differ in storage methods and information + stored. + + @since JDK 1.2 + + @author Mark Benvenuto +*/ +public abstract class Certificate +{ + + private String type; + /** + Constructs a new certificate of the specified type. An example + is "X.509". + + @param type a valid standard name for a certificate. + */ + protected Certificate(String type) + { + this.type = type; + } + + /** + Returns the Certificate type. + + @return a string representing the Certificate type + */ + public final String getType() + { + return type; + } + + /** + Compares this Certificate to other. It checks if the + object if instanceOf Certificate and then checks if + the encoded form matches. + + @param other An Object to test for equality + + @return true if equal, false otherwise + */ + public boolean equals(Object other) + { + if( other instanceof Certificate ) { + try { + Certificate x = (Certificate) other; + if( getEncoded().length != x.getEncoded().length ) + return false; + + byte b1[] = getEncoded(); + byte b2[] = x.getEncoded(); + + for( int i = 0; i < b1.length; i++ ) + if( b1[i] != b2[i] ) + return false; + + } catch( CertificateEncodingException cee ) { + return false; + } + return true; + } + return false; + } + + /** + Returns a hash code for this Certificate in its encoded + form. + + @return A hash code of this class + */ + public int hashCode() + { + return super.hashCode(); + } + + /** + Gets the DER ASN.1 encoded format for this Certificate. + It assumes each certificate has only one encoding format. + Ex: X.509 is encoded as ASN.1 DER + + @return byte array containg encoded form + + @throws CertificateEncodingException if an error occurs + */ + public abstract byte[] getEncoded() throws CertificateEncodingException; + + /** + Verifies that this Certificate was properly signed with the + PublicKey that corresponds to its private key. + + @param key PublicKey to verify with + + @throws CertificateException encoding error + @throws NoSuchAlgorithmException unsupported algorithm + @throws InvalidKeyException incorrect key + @throws NoSuchProviderException no provider + @throws SignatureException signature error + */ + public abstract void verify(PublicKey key) + throws CertificateException, + NoSuchAlgorithmException, + InvalidKeyException, + NoSuchProviderException, + SignatureException; + + /** + Verifies that this Certificate was properly signed with the + PublicKey that corresponds to its private key and uses + the signature engine provided by the provider. + + @param key PublicKey to verify with + @param sigProvider Provider to use for signature algorithm + + @throws CertificateException encoding error + @throws NoSuchAlgorithmException unsupported algorithm + @throws InvalidKeyException incorrect key + @throws NoSuchProviderException incorrect provider + @throws SignatureException signature error + */ + public abstract void verify(PublicKey key, + String sigProvider) + throws CertificateException, + NoSuchAlgorithmException, + InvalidKeyException, + NoSuchProviderException, + SignatureException; + + /** + Returns a string representing the Certificate. + + @return a string representing the Certificate. + */ + public abstract String toString(); + + + /** + Returns the public key stored in the Certificate. + + @return The public key + */ + public abstract PublicKey getPublicKey(); + + + /* INNER CLASS */ + /** + Certificate.CertificateRep is an inner class used to provide an alternate + storage mechanism for serialized Certificates. + */ + protected static class CertificateRep implements java.io.Serializable + { + private String type; + private byte[] data; + + /** + Create an alternate Certificate class to store a serialized Certificate + + @param type the name of certificate type + @param data the certificate data + */ + protected CertificateRep(String type, + byte[] data) + { + this.type = type; + this.data = data; + } + + /** + Return the stored Certificate + + @return the stored certificate + + @throws ObjectStreamException if certificate cannot be resolved + */ + protected Object readResolve() + throws ObjectStreamException + { + try { + return new ObjectInputStream( new ByteArrayInputStream( data ) ).readObject(); + } catch ( Exception e ) { + e.printStackTrace(); + throw new RuntimeException ( e.toString() ); + } + } + } + +} |