001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /**
019: * @author Alexander Y. Kleymenov
020: * @version $Revision$
021: */package java.security.cert;
022:
023: import java.io.ByteArrayInputStream;
024: import java.math.BigInteger;
025: import java.security.InvalidKeyException;
026: import java.security.NoSuchAlgorithmException;
027: import java.security.NoSuchProviderException;
028: import java.security.Principal;
029: import java.security.PublicKey;
030: import java.security.SignatureException;
031: import java.security.cert.CRL;
032: import java.security.cert.CRLException;
033: import java.security.cert.X509CRLEntry;
034: import java.security.cert.X509Extension;
035: import java.util.Arrays;
036: import java.util.Date;
037: import java.util.Set;
038: import javax.security.auth.x500.X500Principal;
039:
040: import org.apache.harmony.security.internal.nls.Messages;
041:
042: /**
043: * @com.intel.drl.spec_ref
044: */
045: public abstract class X509CRL extends CRL implements X509Extension {
046:
047: /**
048: * @com.intel.drl.spec_ref
049: */
050: protected X509CRL() {
051: super ("X.509"); //$NON-NLS-1$
052: }
053:
054: /**
055: * @com.intel.drl.spec_ref
056: */
057: public boolean equals(Object other) {
058: if (other == this ) {
059: return true;
060: }
061: if (!(other instanceof X509CRL)) {
062: return false;
063: }
064: X509CRL obj = (X509CRL) other;
065: try {
066: return Arrays.equals(getEncoded(), obj.getEncoded());
067: } catch (CRLException e) {
068: return false;
069: }
070: }
071:
072: /**
073: * @com.intel.drl.spec_ref
074: */
075: public int hashCode() {
076: try {
077: int res = 0;
078: byte[] array = getEncoded();
079: for (int i = 0; i < array.length; i++) {
080: res += array[i] & 0xFF;
081: }
082: return res;
083: } catch (CRLException e) {
084: return 0;
085: }
086: }
087:
088: /**
089: * @com.intel.drl.spec_ref
090: */
091: public abstract byte[] getEncoded() throws CRLException;
092:
093: /**
094: * @com.intel.drl.spec_ref
095: */
096: public abstract void verify(PublicKey key) throws CRLException,
097: NoSuchAlgorithmException, InvalidKeyException,
098: NoSuchProviderException, SignatureException;
099:
100: /**
101: * @com.intel.drl.spec_ref
102: */
103: public abstract void verify(PublicKey key, String sigProvider)
104: throws CRLException, NoSuchAlgorithmException,
105: InvalidKeyException, NoSuchProviderException,
106: SignatureException;
107:
108: /**
109: * @com.intel.drl.spec_ref
110: */
111: public abstract int getVersion();
112:
113: /**
114: * @com.intel.drl.spec_ref
115: */
116: public abstract Principal getIssuerDN();
117:
118: /**
119: * @com.intel.drl.spec_ref
120: */
121: public X500Principal getIssuerX500Principal() {
122: try {
123: // TODO if there is no X.509 certificate provider installed
124: // should we try to access Harmony X509CRLImpl via classForName?
125: CertificateFactory factory = CertificateFactory
126: .getInstance("X.509"); //$NON-NLS-1$
127:
128: X509CRL crl = (X509CRL) factory
129: .generateCRL(new ByteArrayInputStream(getEncoded()));
130:
131: return crl.getIssuerX500Principal();
132:
133: } catch (Exception e) {
134: throw new RuntimeException(Messages
135: .getString("security.59"), e); //$NON-NLS-1$
136: }
137: }
138:
139: /**
140: * @com.intel.drl.spec_ref
141: */
142: public abstract Date getThisUpdate();
143:
144: /**
145: * @com.intel.drl.spec_ref
146: */
147: public abstract Date getNextUpdate();
148:
149: /**
150: * @com.intel.drl.spec_ref
151: */
152: public abstract X509CRLEntry getRevokedCertificate(
153: BigInteger serialNumber);
154:
155: /**
156: * @com.intel.drl.spec_ref
157: */
158: public X509CRLEntry getRevokedCertificate(
159: X509Certificate certificate) {
160: if (certificate == null) {
161: throw new NullPointerException();
162: }
163: return getRevokedCertificate(certificate.getSerialNumber());
164: }
165:
166: /**
167: * @com.intel.drl.spec_ref
168: */
169: public abstract Set<? extends X509CRLEntry> getRevokedCertificates();
170:
171: /**
172: * @com.intel.drl.spec_ref
173: */
174: public abstract byte[] getTBSCertList() throws CRLException;
175:
176: /**
177: * @com.intel.drl.spec_ref
178: */
179: public abstract byte[] getSignature();
180:
181: /**
182: * @com.intel.drl.spec_ref
183: */
184: public abstract String getSigAlgName();
185:
186: /**
187: * @com.intel.drl.spec_ref
188: */
189: public abstract String getSigAlgOID();
190:
191: /**
192: * @com.intel.drl.spec_ref
193: */
194: public abstract byte[] getSigAlgParams();
195: }
|