mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			398 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			398 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Java
		
	
	
	
/* X509CRL.java --- X.509 Certificate Revocation List
 | 
						|
   Copyright (C) 1999, 2004  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., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
 | 
						|
package java.security.cert;
 | 
						|
 | 
						|
import java.math.BigInteger;
 | 
						|
import java.security.InvalidKeyException;
 | 
						|
import java.security.NoSuchAlgorithmException;
 | 
						|
import java.security.NoSuchProviderException;
 | 
						|
import java.security.Principal;
 | 
						|
import java.security.PublicKey;
 | 
						|
import java.security.SignatureException;
 | 
						|
import java.util.Date;
 | 
						|
import java.util.Set;
 | 
						|
 | 
						|
import javax.security.auth.x500.X500Principal;
 | 
						|
 | 
						|
/**
 | 
						|
   The X509CRL class is the abstract class used to manage
 | 
						|
   X.509 Certificate Revocation Lists. The CRL is a list of
 | 
						|
   time stamped entries which indicate which lists have been
 | 
						|
   revoked. The list is signed by a Certificate Authority (CA)
 | 
						|
   and made publically available in a repository.
 | 
						|
 | 
						|
   Each revoked certificate in the CRL is identified by its
 | 
						|
   certificate serial number. When a piece of code uses a
 | 
						|
   certificate, the certificates validity is checked by
 | 
						|
   validating its signature and determing that it is not
 | 
						|
   only a recently acquired CRL. The recently aquired CRL
 | 
						|
   is depends on the local policy in affect. The CA issues
 | 
						|
   a new CRL periodically and entries are removed as the
 | 
						|
   certificate expiration date is reached
 | 
						|
 | 
						|
 | 
						|
   A description of the X.509 v2 CRL follows below from rfc2459.
 | 
						|
 | 
						|
   "The X.509 v2 CRL syntax is as follows.  For signature calculation,
 | 
						|
   the data that is to be signed is ASN.1 DER encoded.  ASN.1 DER
 | 
						|
   encoding is a tag, length, value encoding system for each element.
 | 
						|
 | 
						|
           CertificateList  ::=  SEQUENCE  {
 | 
						|
                tbsCertList          TBSCertList,
 | 
						|
                signatureAlgorithm   AlgorithmIdentifier,
 | 
						|
                signatureValue       BIT STRING  }
 | 
						|
 | 
						|
           TBSCertList  ::=  SEQUENCE  {
 | 
						|
                version                 Version OPTIONAL,
 | 
						|
                                     -- if present, shall be v2
 | 
						|
                signature               AlgorithmIdentifier,
 | 
						|
                issuer                  Name,
 | 
						|
                thisUpdate              Time,
 | 
						|
                nextUpdate              Time OPTIONAL,
 | 
						|
                revokedCertificates     SEQUENCE OF SEQUENCE  {
 | 
						|
                     userCertificate         CertificateSerialNumber,
 | 
						|
                     revocationDate          Time,
 | 
						|
                     crlEntryExtensions      Extensions OPTIONAL
 | 
						|
                                                   -- if present, shall be v2
 | 
						|
                                          }  OPTIONAL,
 | 
						|
                crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
 | 
						|
                                                   -- if present, shall be v2
 | 
						|
                                          }"
 | 
						|
 | 
						|
        @author Mark Benvenuto
 | 
						|
 | 
						|
        @since 1.2
 | 
						|
*/
 | 
						|
public abstract class X509CRL extends CRL implements X509Extension
 | 
						|
{
 | 
						|
 | 
						|
  /**
 | 
						|
     Constructs a new X509CRL.
 | 
						|
  */
 | 
						|
  protected X509CRL()
 | 
						|
  {
 | 
						|
    super("X.509");
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
     Compares this X509CRL to other. It checks if the
 | 
						|
     object if instanceOf X509CRL 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 X509CRL ) {
 | 
						|
      try {
 | 
						|
        X509CRL x = (X509CRL) 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( CRLException crle ) {
 | 
						|
        return false;
 | 
						|
      }
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns a hash code for this X509CRL 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 X.509 CRL.
 | 
						|
 | 
						|
     @return byte array containg encoded form
 | 
						|
 | 
						|
     @throws CRLException if an error occurs
 | 
						|
  */
 | 
						|
  public abstract byte[] getEncoded() throws CRLException;
 | 
						|
 | 
						|
  /**
 | 
						|
     Verifies that this CRL was properly signed with the
 | 
						|
     PublicKey that corresponds to its private key.
 | 
						|
 | 
						|
     @param key PublicKey to verify with
 | 
						|
 | 
						|
     @throws CRLException 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 CRLException,
 | 
						|
    NoSuchAlgorithmException,
 | 
						|
    InvalidKeyException,
 | 
						|
    NoSuchProviderException,
 | 
						|
    SignatureException;
 | 
						|
 | 
						|
  /**
 | 
						|
     Verifies that this CRL 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 CRLException 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 CRLException,
 | 
						|
    NoSuchAlgorithmException,
 | 
						|
    InvalidKeyException,
 | 
						|
    NoSuchProviderException,
 | 
						|
    SignatureException;
 | 
						|
 | 
						|
  /**
 | 
						|
     Gets the version of this CRL.
 | 
						|
 | 
						|
     The ASN.1 encoding is:
 | 
						|
 | 
						|
     version                 Version OPTIONAL,
 | 
						|
     -- if present, shall be v2
 | 
						|
 | 
						|
     Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
 | 
						|
 | 
						|
     Consult rfc2459 for more information.
 | 
						|
 | 
						|
     @return the version number, Ex: 1 or 2
 | 
						|
  */
 | 
						|
  public abstract int getVersion();
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns the issuer (issuer distinguished name) of the CRL.
 | 
						|
     The issuer is the entity who signed and issued the
 | 
						|
     Certificate Revocation List.
 | 
						|
 | 
						|
     The ASN.1 DER encoding is:
 | 
						|
 | 
						|
     issuer                  Name,
 | 
						|
 | 
						|
     Name ::= CHOICE {
 | 
						|
     RDNSequence }
 | 
						|
 | 
						|
     RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
 | 
						|
 | 
						|
     RelativeDistinguishedName ::=
 | 
						|
     SET OF AttributeTypeAndValue
 | 
						|
 | 
						|
     AttributeTypeAndValue ::= SEQUENCE {
 | 
						|
     type     AttributeType,
 | 
						|
     value    AttributeValue }
 | 
						|
 | 
						|
     AttributeType ::= OBJECT IDENTIFIER
 | 
						|
 | 
						|
     AttributeValue ::= ANY DEFINED BY AttributeType
 | 
						|
 | 
						|
     DirectoryString ::= CHOICE {
 | 
						|
     teletexString           TeletexString (SIZE (1..MAX)),
 | 
						|
     printableString         PrintableString (SIZE (1..MAX)),
 | 
						|
     universalString         UniversalString (SIZE (1..MAX)),
 | 
						|
     utf8String              UTF8String (SIZE (1.. MAX)),
 | 
						|
     bmpString               BMPString (SIZE (1..MAX)) }
 | 
						|
 | 
						|
     Consult rfc2459 for more information.
 | 
						|
 | 
						|
     @return the issuer in the Principal class
 | 
						|
  */
 | 
						|
  public abstract Principal getIssuerDN();
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns the thisUpdate date of the CRL.
 | 
						|
 | 
						|
     The ASN.1 DER encoding is:
 | 
						|
 | 
						|
     thisUpdate              Time,
 | 
						|
 | 
						|
     Time ::= CHOICE {
 | 
						|
     utcTime        UTCTime,
 | 
						|
     generalTime    GeneralizedTime }
 | 
						|
 | 
						|
     Consult rfc2459 for more information.
 | 
						|
 | 
						|
     @return the thisUpdate date
 | 
						|
  */
 | 
						|
  public abstract Date getThisUpdate();
 | 
						|
 | 
						|
  /*
 | 
						|
    Gets the nextUpdate field
 | 
						|
 | 
						|
    The ASN.1 DER encoding is:
 | 
						|
 | 
						|
    nextUpdate              Time OPTIONAL,
 | 
						|
 | 
						|
    Time ::= CHOICE {
 | 
						|
    utcTime        UTCTime,
 | 
						|
    generalTime    GeneralizedTime }
 | 
						|
 | 
						|
    Consult rfc2459 for more information.
 | 
						|
 | 
						|
    @return the nextUpdate date
 | 
						|
  */
 | 
						|
  public abstract Date getNextUpdate();
 | 
						|
 | 
						|
  /**
 | 
						|
     Gets the requeste dX509Entry for the specified
 | 
						|
     certificate serial number.
 | 
						|
 | 
						|
     @return a X509CRLEntry representing the X.509 CRL entry
 | 
						|
  */
 | 
						|
  public abstract X509CRLEntry getRevokedCertificate(BigInteger serialNumber);
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns a Set of revoked certificates.
 | 
						|
 | 
						|
     @return a set of revoked certificates.
 | 
						|
  */
 | 
						|
  public abstract Set<? extends X509CRLEntry> getRevokedCertificates();
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns the DER ASN.1 encoded tbsCertList which is
 | 
						|
     the basic information of the list and associated certificates
 | 
						|
     in the encoded state. See top for more information.
 | 
						|
 | 
						|
     The ASN.1 DER encoding is:
 | 
						|
 | 
						|
     tbsCertList          TBSCertList,
 | 
						|
 | 
						|
     Consult rfc2459 for more information.
 | 
						|
 | 
						|
     @return byte array representing tbsCertList
 | 
						|
  */
 | 
						|
  public abstract byte[] getTBSCertList() throws CRLException;
 | 
						|
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns the signature for the CRL.
 | 
						|
 | 
						|
     The ASN.1 DER encoding is:
 | 
						|
 | 
						|
     signatureValue       BIT STRING
 | 
						|
 | 
						|
     Consult rfc2459 for more information.
 | 
						|
  */
 | 
						|
  public abstract byte[] getSignature();
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns the signature algorithm used to sign the CRL.
 | 
						|
     An examples is "SHA-1/DSA".
 | 
						|
 | 
						|
     The ASN.1 DER encoding is:
 | 
						|
 | 
						|
     signatureAlgorithm   AlgorithmIdentifier,
 | 
						|
 | 
						|
     AlgorithmIdentifier  ::=  SEQUENCE  {
 | 
						|
     algorithm               OBJECT IDENTIFIER,
 | 
						|
     parameters              ANY DEFINED BY algorithm OPTIONAL  }
 | 
						|
 | 
						|
     Consult rfc2459 for more information.
 | 
						|
 | 
						|
     The algorithm name is determined from the OID.
 | 
						|
 | 
						|
     @return a string with the signature algorithm name
 | 
						|
  */
 | 
						|
  public abstract String getSigAlgName();
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns the OID for the signature algorithm used.
 | 
						|
     Example "1.2.840.10040.4.3" is return for SHA-1 with DSA.\
 | 
						|
 | 
						|
     The ASN.1 DER encoding for the example is:
 | 
						|
 | 
						|
     id-dsa-with-sha1 ID  ::=  {
 | 
						|
     iso(1) member-body(2) us(840) x9-57 (10040)
 | 
						|
     x9cm(4) 3 }
 | 
						|
 | 
						|
     Consult rfc2459 for more information.
 | 
						|
 | 
						|
     @return a string containing the OID.
 | 
						|
  */
 | 
						|
  public abstract String getSigAlgOID();
 | 
						|
 | 
						|
  /**
 | 
						|
     Returns the AlgorithmParameters in the encoded form
 | 
						|
     for the signature algorithm used.
 | 
						|
 | 
						|
     If access to the parameters is need, create an
 | 
						|
     instance of AlgorithmParameters.
 | 
						|
 | 
						|
     @return byte array containing algorithm parameters, null
 | 
						|
     if no parameters are present in CRL
 | 
						|
  */
 | 
						|
  public abstract byte[] getSigAlgParams();
 | 
						|
 | 
						|
  // 1.4 instance methods.
 | 
						|
  // ------------------------------------------------------------------------
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the X.500 distinguished name of this CRL's issuer.
 | 
						|
   *
 | 
						|
   * @return The issuer's X.500 distinguished name.
 | 
						|
   * @since JDK 1.4
 | 
						|
   */
 | 
						|
  public X500Principal getIssuerX500Principal()
 | 
						|
  {
 | 
						|
    throw new UnsupportedOperationException();
 | 
						|
  }
 | 
						|
}
 |