aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/security/cert/Certificate.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/security/cert/Certificate.java')
-rw-r--r--libjava/java/security/cert/Certificate.java237
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() );
+ }
+ }
+ }
+
+}