Home | History | Annotate | Download | only in cert
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package javax.security.cert;
     19 
     20 import java.security.InvalidKeyException;
     21 import java.security.NoSuchAlgorithmException;
     22 import java.security.NoSuchProviderException;
     23 import java.security.PublicKey;
     24 import java.security.SignatureException;
     25 import java.util.Arrays;
     26 
     27 /**
     28  * Abstract class to represent identity certificates. It represents a way to
     29  * verify the binding of a Principal and its public key. Examples are X.509,
     30  * PGP, and SDSI.
     31  * <p>
     32  * Note: This package is provided only for compatibility reasons.
     33  * It contains a simplified version of the java.security.cert package that was
     34  * previously used by JSSE (Java SSL package). All applications that do not have
     35  * to be compatible with older versions of JSSE (that is before Java SDK 1.5)
     36  * should only use java.security.cert.
     37  */
     38 public abstract class Certificate {
     39 
     40     /**
     41      * Creates a new {@code Certificate}.
     42      */
     43     public Certificate() {}
     44 
     45     /**
     46      * Compares the argument to this Certificate. If both have the same bytes
     47      * they are assumed to be equal.
     48      *
     49      * @param obj
     50      *            the {@code Certificate} to compare with this object
     51      * @return <code>true</code> if {@code obj} is the same as this
     52      *         {@code Certificate}, <code>false</code> otherwise
     53      * @see #hashCode
     54      */
     55     public boolean equals(Object obj) {
     56         if (obj == this) {
     57             return true;
     58         }
     59         if (!(obj instanceof Certificate)) {
     60             return false;
     61         }
     62         Certificate object = (Certificate) obj;
     63         try {
     64             return Arrays.equals(getEncoded(), object.getEncoded());
     65         } catch (CertificateEncodingException e) {
     66             return false;
     67         }
     68     }
     69 
     70     /**
     71      * Returns an integer hash code for the receiver. Any two objects which
     72      * return <code>true</code> when passed to <code>equals</code> must answer
     73      * the same value for this method.
     74      *
     75      * @return the receiver's hash
     76      * @see #equals
     77      */
     78     public int hashCode() {
     79         int res = 0;
     80         try {
     81             byte[] array = getEncoded();
     82             for (int i=0; i<array.length; i++) {
     83                 res += array[i];
     84             }
     85         } catch (CertificateEncodingException e) {
     86         }
     87         return res;
     88     }
     89 
     90     /**
     91      * Returns the encoded representation for this certificate.
     92      *
     93      * @return the encoded representation for this certificate.
     94      * @throws CertificateEncodingException
     95      *             if encoding fails.
     96      */
     97     public abstract byte[] getEncoded()
     98             throws CertificateEncodingException;
     99 
    100     /**
    101      * Verifies that this certificate was signed with the given public key.
    102      *
    103      * @param key
    104      *            public key for which verification should be performed.
    105      * @throws CertificateException
    106      *             if encoding errors are detected
    107      * @throws NoSuchAlgorithmException
    108      *             if an unsupported algorithm is detected
    109      * @throws InvalidKeyException
    110      *             if an invalid key is detected
    111      * @throws NoSuchProviderException
    112      *             if there is no default provider
    113      * @throws SignatureException
    114      *             if signature errors are detected
    115      */
    116     public abstract void verify(PublicKey key)
    117             throws CertificateException, NoSuchAlgorithmException,
    118                    InvalidKeyException, NoSuchProviderException,
    119                    SignatureException;
    120 
    121     /**
    122      * Verifies that this certificate was signed with the given public key. Uses
    123      * the signature algorithm given by the provider.
    124      *
    125      * @param key
    126      *            public key for which verification should be performed.
    127      * @param sigProvider
    128      *            the name of the signature provider.
    129      * @exception CertificateException
    130      *                if encoding errors are detected
    131      * @exception NoSuchAlgorithmException
    132      *                if an unsupported algorithm is detected
    133      * @exception InvalidKeyException
    134      *                if an invalid key is detected
    135      * @exception NoSuchProviderException
    136      *                if the specified provider does not exists.
    137      * @exception SignatureException
    138      *                if signature errors are detected
    139      */
    140     public abstract void verify(PublicKey key, String sigProvider)
    141             throws CertificateException, NoSuchAlgorithmException,
    142                    InvalidKeyException, NoSuchProviderException,
    143                    SignatureException;
    144 
    145     /**
    146      * Returns a string containing a concise, human-readable description of the
    147      * receiver.
    148      *
    149      * @return a printable representation for the receiver.
    150      */
    151     public abstract String toString();
    152 
    153     /**
    154      * Returns the public key corresponding to this certificate.
    155      *
    156      * @return the public key corresponding to this certificate.
    157      */
    158     public abstract PublicKey getPublicKey();
    159 }
    160 
    161