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 /**
     19 * @author Alexander Y. Kleymenov
     20 * @version $Revision$
     21 */
     22 
     23 package org.apache.harmony.security.provider.cert;
     24 
     25 import java.math.BigInteger;
     26 import java.security.cert.CRLException;
     27 import java.security.cert.X509CRLEntry;
     28 import java.util.Date;
     29 import java.util.Set;
     30 import javax.security.auth.x500.X500Principal;
     31 import org.apache.harmony.security.x509.Extension;
     32 import org.apache.harmony.security.x509.Extensions;
     33 import org.apache.harmony.security.x509.TBSCertList;
     34 
     35 /**
     36  * Implementation of X509CRLEntry. It wraps the instance
     37  * of org.apache.harmony.security.x509.TBSCertList.RevokedCertificate
     38  * obtained during the decoding of TBSCertList substructure
     39  * of the CertificateList structure which is an X.509 form of CRL.
     40  * (see RFC 3280 at http://www.ietf.org/rfc/rfc3280.txt)
     41  * Normally the instances of this class are constructed by involving
     42  * X509CRLImpl object.
     43  * @see org.apache.harmony.security.x509.TBSCertList
     44  * @see org.apache.harmony.security.provider.cert.X509CRLImpl
     45  * @see java.security.cert.X509CRLEntry
     46  */
     47 public class X509CRLEntryImpl extends X509CRLEntry {
     48 
     49     // the crl entry object to be wrapped in X509CRLEntry
     50     private final TBSCertList.RevokedCertificate rcert;
     51     // the extensions of the entry
     52     private final Extensions extensions;
     53     // issuer of the revoked certificate described by this crl entry
     54     private final X500Principal issuer;
     55 
     56     // encoded form of this revoked certificate entry
     57     private byte[] encoding;
     58 
     59     /**
     60      * Creates an instance on the base of existing
     61      * <code>TBSCertList.RevokedCertificate</code> object and
     62      * information about the issuer of revoked certificate.
     63      * If specified issuer is null, it is supposed that issuer
     64      * of the revoked certificate is the same as for involving CRL.
     65      */
     66     public X509CRLEntryImpl(TBSCertList.RevokedCertificate rcert,
     67             X500Principal issuer) {
     68         this.rcert = rcert;
     69         this.extensions = rcert.getCrlEntryExtensions();
     70         this.issuer = issuer;
     71     }
     72 
     73     // ---------------------------------------------------------------------
     74     // ------ java.security.cert.X509CRLEntry method implementations -------
     75     // ---------------------------------------------------------------------
     76 
     77     /**
     78      * @see java.security.cert.X509CRLEntry#getEncoded()
     79      * method documentation for more info
     80      */
     81     public byte[] getEncoded() throws CRLException {
     82         if (encoding == null) {
     83             encoding = rcert.getEncoded();
     84         }
     85         byte[] result = new byte[encoding.length];
     86         System.arraycopy(encoding, 0, result, 0, encoding.length);
     87         return result;
     88     }
     89 
     90     /**
     91      * @see java.security.cert.X509CRLEntry#getSerialNumber()
     92      * method documentation for more info
     93      */
     94     public BigInteger getSerialNumber() {
     95         return rcert.getUserCertificate();
     96     }
     97 
     98     /**
     99      * @see java.security.cert.X509CRLEntry#getCertificateIssuer()
    100      * method documentation for more info
    101      */
    102     public X500Principal getCertificateIssuer() {
    103         return issuer;
    104     }
    105 
    106     /**
    107      * @see java.security.cert.X509CRLEntry#getRevocationDate()
    108      * method documentation for more info
    109      */
    110     public Date getRevocationDate() {
    111         return rcert.getRevocationDate();
    112     }
    113 
    114     /**
    115      * @see java.security.cert.X509CRLEntry#hasExtensions()
    116      * method documentation for more info
    117      */
    118     public boolean hasExtensions() {
    119         return (extensions != null) && (extensions.size() != 0);
    120     }
    121 
    122     /**
    123      * @see java.security.cert.X509CRLEntry#toString()
    124      * method documentation for more info
    125      */
    126     public String toString() {
    127         return "X509CRLEntryImpl: "+rcert.toString();
    128     }
    129 
    130     // ---------------------------------------------------------------------
    131     // ------ java.security.cert.X509Extension method implementations ------
    132     // ---------------------------------------------------------------------
    133 
    134     /**
    135      * @see java.security.cert.X509Extension#getNonCriticalExtensionOIDs()
    136      * method documentation for more info
    137      */
    138     public Set getNonCriticalExtensionOIDs() {
    139         if (extensions == null) {
    140             return null;
    141         }
    142         return extensions.getNonCriticalExtensions();
    143     }
    144 
    145     /**
    146      * @see java.security.cert.X509Extension#getCriticalExtensionOIDs()
    147      * method documentation for more info
    148      */
    149     public Set getCriticalExtensionOIDs() {
    150         if (extensions == null) {
    151             return null;
    152         }
    153         return extensions.getCriticalExtensions();
    154     }
    155 
    156     /**
    157      * @see java.security.cert.X509Extension#getExtensionValue(String)
    158      * method documentation for more info
    159      */
    160     public byte[] getExtensionValue(String oid) {
    161         if (extensions == null) {
    162             return null;
    163         }
    164         Extension ext = extensions.getExtensionByOID(oid);
    165         return (ext == null) ? null : ext.getRawExtnValue();
    166     }
    167 
    168     /**
    169      * @see java.security.cert.X509Extension#hasUnsupportedCriticalExtension()
    170      * method documentation for more info
    171      */
    172     public boolean hasUnsupportedCriticalExtension() {
    173         if (extensions == null) {
    174             return false;
    175         }
    176         return extensions.hasUnsupportedCritical();
    177     }
    178 }
    179 
    180