x509certinfo.java
来自「This is a resource based on j2me embedde」· Java 代码 · 共 1,006 行 · 第 1/3 页
JAVA
1,006 行
/* * @(#)X509CertInfo.java 1.30 06/10/10 * * Copyright 1990-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program 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 version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. * */package sun.security.x509;import java.io.IOException;import java.io.OutputStream;import java.io.InputStream;import java.security.cert.*;import java.util.Collection;import java.util.Enumeration;import java.util.Hashtable;import sun.security.util.*;import sun.misc.HexDumpEncoder;/** * The X509CertInfo class represents X.509 certificate information. * * <P>X.509 certificates have several base data elements, including:<UL> * * <LI>The <em>Subject Name</em>, an X.500 Distinguished Name for * the entity (subject) for which the certificate was issued. * * <LI>The <em>Subject Public Key</em>, the public key of the subject. * This is one of the most important parts of the certificate. * * <LI>The <em>Validity Period</em>, a time period (e.g. six months) * within which the certificate is valid (unless revoked). * * <LI>The <em>Issuer Name</em>, an X.500 Distinguished Name for the * Certificate Authority (CA) which issued the certificate. * * <LI>A <em>Serial Number</em> assigned by the CA, for use in * certificate revocation and other applications. * * @author Amit Kapoor * @author Hemma Prafullchandra * @version 1.23 * @see CertAttrSet * @see X509CertImpl */public class X509CertInfo implements CertAttrSet { /** * Identifier for this attribute, to be used with the * get, set, delete methods of Certificate, x509 type. */ public static final String IDENT = "x509.info"; // Certificate attribute names public static final String NAME = "info"; public static final String VERSION = CertificateVersion.NAME; public static final String SERIAL_NUMBER = CertificateSerialNumber.NAME; public static final String ALGORITHM_ID = CertificateAlgorithmId.NAME; public static final String ISSUER = CertificateIssuerName.NAME; public static final String VALIDITY = CertificateValidity.NAME; public static final String SUBJECT = CertificateSubjectName.NAME; public static final String KEY = CertificateX509Key.NAME; public static final String ISSUER_ID = CertificateIssuerUniqueIdentity.NAME; public static final String SUBJECT_ID = CertificateSubjectUniqueIdentity.NAME; public static final String EXTENSIONS = CertificateExtensions.NAME; // X509.v1 data protected CertificateVersion version = new CertificateVersion(); protected CertificateSerialNumber serialNum = null; protected CertificateAlgorithmId algId = null; protected CertificateIssuerName issuer = null; protected CertificateValidity interval = null; protected CertificateSubjectName subject = null; protected CertificateX509Key pubKey = null; // X509.v2 & v3 extensions protected CertificateIssuerUniqueIdentity issuerUniqueId = null; protected CertificateSubjectUniqueIdentity subjectUniqueId = null; // X509.v3 extensions protected CertificateExtensions extensions = null; // Attribute numbers for internal manipulation private static final int ATTR_VERSION = 1; private static final int ATTR_SERIAL = 2; private static final int ATTR_ALGORITHM = 3; private static final int ATTR_ISSUER = 4; private static final int ATTR_VALIDITY = 5; private static final int ATTR_SUBJECT = 6; private static final int ATTR_KEY = 7; private static final int ATTR_ISSUER_ID = 8; private static final int ATTR_SUBJECT_ID = 9; private static final int ATTR_EXTENSIONS = 10; // DER encoded CertificateInfo data private byte[] rawCertInfo = null; // The certificate attribute name to integer mapping stored here private static final Hashtable map = new Hashtable(); static { map.put(VERSION, new Integer(ATTR_VERSION)); map.put(SERIAL_NUMBER, new Integer(ATTR_SERIAL)); map.put(ALGORITHM_ID, new Integer(ATTR_ALGORITHM)); map.put(ISSUER, new Integer(ATTR_ISSUER)); map.put(VALIDITY, new Integer(ATTR_VALIDITY)); map.put(SUBJECT, new Integer(ATTR_SUBJECT)); map.put(KEY, new Integer(ATTR_KEY)); map.put(ISSUER_ID, new Integer(ATTR_ISSUER_ID)); map.put(SUBJECT_ID, new Integer(ATTR_SUBJECT_ID)); map.put(EXTENSIONS, new Integer(ATTR_EXTENSIONS)); } /** * Construct an uninitialized X509CertInfo on which <a href="#decode"> * decode</a> must later be called (or which may be deserialized). */ public X509CertInfo() { } /** * Unmarshals a certificate from its encoded form, parsing the * encoded bytes. This form of constructor is used by agents which * need to examine and use certificate contents. That is, this is * one of the more commonly used constructors. Note that the buffer * must include only a certificate, and no "garbage" may be left at * the end. If you need to ignore data at the end of a certificate, * use another constructor. * * @param cert the encoded bytes, with no trailing data. * @exception CertificateParsingException on parsing errors. */ public X509CertInfo(byte[] cert) throws CertificateParsingException { try { DerValue in = new DerValue(cert); parse(in); } catch (IOException e) { CertificateParsingException parseException = new CertificateParsingException(e.toString()); parseException.initCause(e); throw parseException; } } /** * Unmarshal a certificate from its encoded form, parsing a DER value. * This form of constructor is used by agents which need to examine * and use certificate contents. * * @param derVal the der value containing the encoded cert. * @exception CertificateParsingException on parsing errors. */ public X509CertInfo(DerValue derVal) throws CertificateParsingException { try { parse(derVal); } catch (IOException e) { CertificateParsingException parseException = new CertificateParsingException(e.toString()); parseException.initCause(e); throw parseException; } } /** * Decode an X.509 certificate from an input stream. * * @param in an input stream holding at least one certificate * @exception CertificateParsingException on decoding errors. * @exception IOException on other errors. */ public void decode(InputStream in) throws CertificateParsingException, IOException { DerValue val = new DerValue(in); parse(val); } /** * Appends the certificate to an output stream. * * @param out an output stream to which the certificate is appended. * @exception CertificateException on encoding errors. * @exception IOException on other errors. */ public void encode(OutputStream out) throws CertificateException, IOException { if (rawCertInfo == null) { DerOutputStream tmp = new DerOutputStream(); emit(tmp); rawCertInfo = tmp.toByteArray(); } out.write((byte[])rawCertInfo.clone()); } /** * Return an enumeration of names of attributes existing within this * attribute. */ public Enumeration getElements() { AttributeNameEnumeration elements = new AttributeNameEnumeration(); elements.addElement(VERSION); elements.addElement(SERIAL_NUMBER); elements.addElement(ALGORITHM_ID); elements.addElement(ISSUER); elements.addElement(VALIDITY); elements.addElement(SUBJECT); elements.addElement(KEY); elements.addElement(ISSUER_ID); elements.addElement(SUBJECT_ID); elements.addElement(EXTENSIONS); return(elements.elements()); } /** * Return the name of this attribute. */ public String getName() { return(NAME); } /** * Returns the encoded certificate info. * * @exception CertificateEncodingException on encoding information errors. */ public byte[] getEncodedInfo() throws CertificateEncodingException { try { if (rawCertInfo == null) { DerOutputStream tmp = new DerOutputStream(); emit(tmp); rawCertInfo = tmp.toByteArray(); } return (byte[])rawCertInfo.clone(); } catch (IOException e) { throw new CertificateEncodingException(e.toString()); } catch (CertificateException e) { throw new CertificateEncodingException(e.toString()); } } /** * Compares two X509CertInfo objects. This is false if the * certificates are not both X.509 certs, otherwise it * compares them as binary data. * * @param other the object being compared with this one * @return true iff the certificates are equivalent */ public boolean equals(Object other) { if (other instanceof X509CertInfo) { return equals((X509CertInfo) other); } else { return false; } } /** * Compares two certificates, returning false if any data * differs between the two. * * @param other the object being compared with this one * @return true iff the certificates are equivalent */ public boolean equals(X509CertInfo other) { if (this == other) { return(true); } else if (rawCertInfo == null || other.rawCertInfo == null) { return(false); } else if (rawCertInfo.length != other.rawCertInfo.length) { return(false); } for (int i = 0; i < rawCertInfo.length; i++) { if (rawCertInfo[i] != other.rawCertInfo[i]) { return(false); } } return(true); } /** * Calculates a hash code value for the object. Objects * which are equal will also have the same hashcode. */ public int hashCode() { int retval = 0; for (int i = 1; i < rawCertInfo.length; i++) { retval += rawCertInfo[i] * i; } return(retval); } /** * Returns a printable representation of the certificate. */ public String toString() { if (subject == null || pubKey == null || interval == null || issuer == null || algId == null || serialNum == null) { throw new NullPointerException("X.509 cert is incomplete"); } StringBuffer sb = new StringBuffer(); sb.append("[\n"); sb.append(" " + version.toString() + "\n"); sb.append(" Subject: " + subject.toString() + "\n"); sb.append(" Signature Algorithm: " + algId.toString() + "\n"); sb.append(" Key: " + pubKey.toString() + "\n"); sb.append(" " + interval.toString() + "\n"); sb.append(" Issuer: " + issuer.toString() + "\n"); sb.append(" " + serialNum.toString() + "\n"); // optional v2, v3 extras if (issuerUniqueId != null) { sb.append(" Issuer Id:\n" + issuerUniqueId.toString() + "\n");
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?